溢米教育推荐平台的效率与稳定性建设 | SOFAStack 用户说

推荐系统详解(十)常见模块 巧妇难为无米之炊:数据采集关键要素 推荐系统离不开数据,数据就是推荐系统的粮食,要有数据就得收集数据。在自己产品中收集数据,主要还是来自日志。 日志和数据 数据驱动这个概念也是最近几年才开始流行起来的,在古典互联网时代,设计和开发产品完全侧重于功能易用和设计精巧上,并且整体驱动力受限于产品负责人的个人眼光,这属于是一种感性的把握,也因此对积累数据这件事就不是很重视。在我经手的产品中,就有产品... 阅读详情

640?wx_fmt=jpeg

本文来自 SOFAArk 用户—溢米教育投稿,分享其内部使用 SOFAArk 组件后极大提高内部推荐系统的开发效率和稳定性的案例。感谢溢米教育对 SOFAStack 的支持smiley_66.png,同时也欢迎更多用户投稿 Join us。

SOFAArk 是一款基于 Java 实现的轻量级类隔离容器,主要提供类隔离和应用(模块)合并部署能力,由蚂蚁金服开源贡献。

| 写在前面

个性化推荐, 相信大家都不陌生,简单来说就是根据每个人的偏好经过模型计算推荐出适合的东西,这些东西可以是视频、商品、文章、电影等。经过互联网这几年的发展,个性化推荐已经无处不在,不管是电商、教育、游戏、金融行业,推荐系统对业务的提升都有着非常重要的帮助。溢米教育作为一家互联网教育平台,近几年推荐业务发展非常迅速,技术团队也在持续的进行能力提升。业务快速增长的同时,亟需一个高效率、高稳定的推荐系统来支持推荐场景。

本文是根据我们内部推荐平台效率与稳定性建设的实际经验整理,介绍了溢米教育推荐系统的改造优化。在整个过程中我们基于公司架构做了分析,确认了技术选型和改造方案,最终选择基于 SOFAStack 社区开源的 SOFAArk 组件开发框架,极大的提升了我们推荐系统的开发效率和稳定性。希望能给有同样困扰的技术团队参考。

| 背景

一次完整的个性化推荐,通常包括召回、过滤、排序等步骤。虽然步骤不多,但是涉及到的逻辑是非常多的,包括 abtest、用户画像、物品画像、离线数据、在线数据、模型系统、字段补全等等。个性化推荐极为依赖场景定制化,不同的场景对应不同的处理逻辑。

我们可以想象,把这一堆处理逻辑都放在一个系统里面,应用会变得十分臃肿和复杂,随着业务系统不断的迭代更新,逐渐会变得难以维护,开发效率和系统稳定性都会面临不小的挑战。不幸的是,随着溢米业务快速发展,内部的推荐平台已经变得 “过劳肥”。不管是迭代效率、性能、稳定性都遇到了瓶颈,比如:

1. 发布耗时:算法团队一个人跟进一条业务线,导致业务迭代频繁、应用发布非常频繁,由于系统本身复杂性,这么一个庞然大物发布一次非常慢,降低了工程师效率;

2. 系统臃肿:所有模块统一维护,包含了存储、算法、业务等,几乎每次迭代都是只增不减,降低了系统可维护性;

3. 覆盖风险:多个团队共同维护一份代码,分支上容易存在冲突,合并代码存在覆盖风险,降低了团队合作效率;

4. 版本不一致:不同业务团队使用的 jar 包版本不一致,每次升级一个 jar 包都会引起很多问题,导致各个团队在开发期间都要花费不少精力解决依赖冲突。

基于上述背景,溢米推荐平台不得不进行应用瘦身和系统改造,从而提升平台的开发效率和稳定性。然而在实际的改造过程中,我们不难发现这两者其实是互相冲突的。为了提高稳定性,我们肯定要做到流程上的把控,比如测试、灰度、发布等流程的规范,这势必会影响业务迭代效率;反过来如果要提升效率,那么在流程上肯定会有一定的舍弃,随之而来的是稳定性的潜在风险。 但是人总是需要梦想驱动的,每个工程师都希望能用一种架构或者方案,同时解决很多通用的问题,节约成本,提升效率, 让设计人员能够不至于疲于奔命, 解放生产力来完成更多有创新有挑战的工作。

| 调研

效率和稳定性并非一定是二选一,在进行推荐平台升级改造之前,我们梳理了溢米内部影响业务效率和系统稳定性的主要因素。


开发效率系统稳定
影响因素业务复杂度+开发复杂度业务变更:代码变更+数据变更
业务迭代流程+开发流程非业务变更:配置变更+代码变更
业务变更+服务变更上线流量变化
稳定性流程硬件故障

关于开发效率,从上面可以看出来除了开发部分是依赖平台所能提供的便利和开发者个人技术能力之外,其余大部分都是流程上的把控。这些流程上的把控一是为了保障业务迭代的正确性,二是为了提升业务迭代带来的线上服务稳定性,但是简单的流程不足以把控住这些点,而过度复杂的流程会很大程度上影响业务迭代效率,所以我们需要思考并且寻求一种平衡,比如如何降低业务开发复杂度?如何提升平台提供的便利?如何在不影响稳定性的情况下简化业务迭代和维护流程?

关于稳定性,我列举几个在溢米内部遇到的几个类似案例:

  • 推荐服务性能优化上线,功能性测试没有问题,但是没有经过压测导致高峰期服务能力下降,最终导致整个服务不可用,而上游由于没有做好服务治理也受影响变成了服务不可用;

  • 推荐服务所依赖的某个数据源或者 RPC 响应从 10ms 突然增长到 100ms,从而导致推荐服务主要线程池耗尽,最终导致服务不可用;

  • 上游压测或者流量推广或者爬虫导致流量激增,但是推荐服务没有做好限流导致服务被打垮而不可用;

  • 推荐系统依赖业务系统提供的 RPC 服务进行过滤,由于此 RPC 服务变更导致响应变慢,而推荐服务没有区分强弱依赖导致整体服务超时;

  • 某个业务由于排期时间紧张,测试周期太短,上线后导致其它业务异常。

结合这些案例和上文总结的系统稳定性影响因素,可以发现除了硬件故障是不可控之外,其余几点基本都是因为变更而引起的。那么如何不受变更影响而提升稳定性呢?上面我们介绍过最主要也是最有效的是变更流程控制,通过测试、灰度、发布流程规范,其余也可以通过技术手段来控制,比如性能优化、服务治理、业务隔离、强弱依赖区分、多机房容灾、扩容等等。

针对以上开发效率和稳定性分析,最开始确定如下了改造目标:

  • 场景模块化

  • 系统瘦身,拆分模块,提高系统可维护性

  • 模块复用,提升开发效率

  • 模块开发时隔离

  • 各模块单独迭代开发,解决之前统一迭代开发的代码冲突问题

  • 各模块单独测试,提升测试效率

  • 模块运行时隔离

  • 模块运行时类隔离,解决模块间包冲突问题

  • 模块间有明确的服务边界,一定程度的故障隔离

  • 模块动态可插拔

  • 动态升级,秒级发布回滚

| 改造

为了满足改造目标,我们初步确认了三个选择:

1)采用自定义 SPI 的 ServiceLoader 动态加载实现;

2)采用自定义 Classloader 实现;

3)寻求开源软件支持。

基于资源成本、时间成本的考虑,我们选择了寻求开源支持,蚂蚁金服开源其分布式架构吸引了我们的关注,经过技术判断,我们最终决定使用 SOFAStack 社区开源的 SOFAArk 组件开发框架。

SOFAArk 定义了一套相对简单的类加载模型、特殊的打包格式、统一的编程界面、事件机制、易扩展的插件机制等,从而提供了一套较为规范化的插件化、组件化的开发方案。更多内容可以参考官方文档:

  • SOFA JVM 服务:

    https://www.sofastack.tech/sofa-boot/docs/sofa-ark-ark-jvm

  • SOFAArk 官方文档:

    https://www.sofastack.tech/sofa-boot/docs/sofa-ark-readme

  • SOFAArk 源码:

    https://github.com/sofastack/sofa-ark

通过 SOFAArk+SOFABoot 的组合,我们将应用进行拆分,分为宿主应用+数据模块+业务模块:

  • 主应用: 负责整个容器的状态保持;

  • 数据模块: 负责数据通信,包括 Redis,DB,RPC 等基础服务;

  • 业务模块: 只需要负责调用数据模块进行业务实现,最终数据通过主应用进行与外部交互。

640?wx_fmt=png

我们建立了一套模块化开发、测试、发布流程,能够在业务中台上面进行模块开发,并且制定一套模块拆分、开发标准:

  • 越底层的模块,应该越稳定,越具有高度复用性;

  • 不要让稳定模块依赖不稳定模块,减少依赖;

  • 提升模块的复用度、自完备性;

  • 业务模块之间尽量不要耦合。

数据模块改造前,由于每个业务团队使用的方式不一致,算法团队使用的存储又非常复杂,数据量又非常的庞大,经常会遇到扩容、缩容、数据迁移等各式各样的问题,这对算法开发、运维都带来了极大的困扰。但是经过模块化改造之后,我们可以对所有的数据层出口都进行收拢,所有的底层存储都由数据模块控制,不管是升级、扩缩容、迁移,只需要对数据模块进行升级发布,业务模块完全不需要做任何事情,这对算法开发人员来说肯定是节约了很大的成本、解放了大部分的资源,而且统一在数据模块进行稳定性维护也相对简单。

| 未来规划

模块化、平台化、自动化的好处显而易见,大家都很清楚,场景标准化和可快速扩展性大大提升了业务迭代效率,新业务的接入成本也大大降低,在新场景上面可以低成本创新,从而满足高速发展的业务体系,但是有没有想过平台化带来的问题呢,我这边列举几个点:

  • 平台问题的放大;

  • 平台化之后大部分细节只有平台开发人员了解,一方面会导致人为因素问题扩大,其次也会对用户习惯带来挑战;

  • DevOps的落地问题。

所以综上可见改造不是一蹴而就的,未来我们会持续迭代,如运维平台化建设进行整个系统平台化落地,打造一套完整的推荐中台服务。

| 总结和致谢

目前大部分的推荐场景已经完成了模块化的拆分,已经稳定的在生产线上运行了几个月,在此感谢蚂蚁金服 SOFAStack 的开源贡献,同时也非常感谢 SOFAArk 开源维护者:善逝,在使用过程中,SOFAStack 团队提供了高效和专业的支持。

你也想使用么?SOFAArk:

https://github.com/sofastack/sofa-ark

640?wx_fmt=png

SpringBoot+Vue+Mysql社区医院信息平台(源码+文档) SpringBoot+Vue+Mysql学生宿舍信息管理系统 WEB端软件项目(源码+文档) 项目包含:①完整源码(后端+管理后台+用户前台);②数据库脚本文件;③万字论文文档;④开题报告;⑤答辩PPT;⑥项目运行视频教程。 项目架构: B/S 架构、MVC 分层设计 技术栈: Java、MySQL、SpringBoot、MyBatis-Plus、Token 权限校验、管理后台 Vue+ElementUI+ECharts、用户前台 Layui+jQuery、Maven 构建。 一、角色设计 学生用户: 注册登录、浏览宿舍信息、查询宿舍安排、在线报修、缴费查询、失物招领、桶装水预订、评论交流、收藏等。 商家用户: 注册登录、桶装水品牌与商品信息维护、预订订单查看与处理。 维修人员: 注册登录、查看待处理报修、接单维修、填写报修处理结果与进度反馈。 管理员: 学生管理、班级管理、宿舍信息管理、宿舍安排管理、报修处理管理、缴费信息管理、卫生检查与文明宿舍管理、失物招领管理、桶装水与商家管理、维修人员管理、公告资讯与轮播图管理等。 二、前台功能模块(学生端) 1. 首页展示:轮播图、宿舍公告、最新动态推荐、常用服务快速入口 2. 宿舍信息模块:宿舍列表、楼栋与房间条件筛选、宿舍详情查看、我的宿舍安排查询 3. 在线报修模块:在线提交宿舍设施报修申请、上传故障描述、查看报修进度与维修处理结果 4. 缴费模块:水电等缴费记录查询、缴费状态查看 5. 卫生检查与文明宿舍:宿舍卫生检查结果公示、文明宿舍展示 6. 失物招领模块:失物信息发布、招领信息发布、详情查看、评论互动 7. 桶装水预订:桶装水品牌与商品浏览、在线预订、我的预订记录查询 8. 假期留宿:假期留校申请提交、申请记录查询 9. 评论与收藏:信息评论、查看他人评论、评论回复互动、收藏感兴趣的内容 10. 个人中心... 立即下载

相关推荐

YOLOv8作物病害检测实战源码

这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。

从一个例子开始体验轻量级类隔离容器 SOFAArk | SOFAChannel#11 直播整理

<SOFA:Channnel/>,有趣实用的分布式架构频道。本文根据 SOFAChannel#11 直播分享整理,主题:从一个例子开始体验轻量级类隔离容器 SOFAArk。回...

金融级分布式架构 2623

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

spring boot 打包_蚂蚁金服轻量级类隔离框架 Maven 打包插件解析 | SOFAArk 源码解析...

SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。本文为《剖析 | SOFAArk 源码》第二篇,本篇作者盲僧,来自 OYO。《剖析 | SOFAArk 源码》系列由 SOFA 团队和源码爱好者们出品,项目代号:,文末附...

weixin_39609622的博客 661

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

稳定性全系列(一)——如何做好系统稳定性建设

目录 一、背景介绍 二、故障源的分类 三、稳定性建设四要素 第一要素:人 第二要素:工具 第三要素:预案 第四要素:目标 四、稳定性建设四个方向 第一个方向:根基要抓牢(45%) 第二个方向:工作在日常(30%) 第三个方向:预案是关键(15%) 第四个方向:容量是核心(10%) 五、总结 一、背景介绍 在移动互联网时代,用户群的积累比之前更容易,但同样,也会因为糟糕...

大步流星的博客 1万+

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

蚂蚁金服 SOFAStack 荣获云计算开源产业大会尖峰开源技术创新奖

2019 年 7 月 3 日,在 2019 云计算开源产业大会上,蚂蚁金服自主研发的金融级分布式架构 SOFAStack(Scalable Open Financial ...

金融级分布式架构 281

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

SOFA Weekly | 每周精选【6/10 - 6/14】

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(Scalable Open Financial Architectur...

金融级分布式架构 380

科技中介服务机构如何构建标准化、模块化的智能服务工具?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区运营负责人如何利用数智工具提升园区企业的技术对接效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

PSIM-三相维也纳VIENNA整流器电压电流双闭环+中点电位平衡SVPWM控制仿真

内容概要:本文档详细介绍了一种基于PSIM软件实现的三相维也纳(VIENNA)整流器仿真模型,重点实现了电压电流双闭环控制与中点电位平衡的SVPWM调制策略。该仿真系统通过精确的控制算法有效提升了整流器的功率因数,降低了输入电流谐波含量,并解决了三电平拓扑中常见的直流侧中点电位偏移问题,具有较高的工程实用价值,适用于高效率、高功率密度的电力电子系统设计与科研验证。文档还整合了丰富的配套资源,涵盖多种电力电子变换器拓扑结构、先进控制算法及典型应用场景,形成了系统化的技术资料体系,有助于深入理解现代整流技术的核心原理与发展动态。; 适合人群:面向从事电力电子、电气工程、新能源变换系统等领域的科研人员、高校研究生以及具备一定仿真基础的工程技术人员。; 使用场景及目标:①深入研究三相VIENNA整流器的工作机理与控制特性;②掌握电压外环、电流内环双闭环控制结构的设计方法;③理解并实现SVPWM调制技术与中点电位平衡控制策略的协同作用;④开展相关控制算法的仿真验证、性能优化与实验对比,为高性能整流装置的研发提供理论支撑和技术原型。; 阅读建议:建议结合文中列出的其他仿真案例(如PWM整流器、LLC谐振变换器、DAB变换器等)进行横向对比学习,充分利用所提供的PSIM、MATLAB/Simulink等多平台仿真资源,重点关注控制逻辑与主电路的耦合关系,通过参数调试与波形分析深化对系统动态响应和稳态性能的理解,强化“理论—建模—仿真—优化”的闭环研究能力。

ICD10 openGauss版

ICD10 openGauss版

C51编程25-应用篇(单片机与电脑端实现wifi通讯)

单片机使用ESP-01S wifi模块与电脑端进行数据通讯。

qq_34343637的博客 1万+
上一篇: 当 Spring Cloud 遇上 SOFAStack | Meetup#2 回顾
下一篇: SOFA Weekly | 每周精选【6/10 - 6/14】
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值