新型内容流服务架构方式
如果无法正常显示,请先停止浏览器的去广告插件。
1. 新型内容流服务架构方式
范怀宇@轻芒
2.
3. 范怀宇
2009年清华大学毕业,加入网易有道
2011年加入豌豆荚,负责技术研发
2016年底作为联合创始人创办轻芒
4. 面向读者
面向内容创作者
轻芒杂志
轻性小程序+
5.
6. 提纲
◆轻芒内容服务的设计目标
◆基于 Scala+Akka模型来构建内容服务
◆新架构帶来的挑战和应对
7. 设计目标
8. ◆每天数十万的新内容被检索
◆需要计算数十万的应用、兴趣内容流
◆需要为上千万的用户计算内容流
◆为数万个小程序提供内容支撑
9. ◆成熟的技术方案倾向于平衡
◆在性能、稳定性、可扩展性、硏发效率,可维护性等诸
多方面相对平衡
◆最小的人力投入,保持最大的弹性
◆硏发效率:统一编程模型,减少中间件的种类,和熟悉
的技术栈兼客
弹性:降低代码规模,在用户规模变化下开发模式相对
稳定
◆性能和稳定性:可以妥协单杋性能和稳定性,可以通过
扩容来临时解决问题
10. 基于 Scala+Akka的服务设计
11. Scala
◆JWM万言
◆可以无缝和Java生态相融合
◆混合了面向对象和函数式编程的特征
◆比之Java更为灵活,简练
◆过于灵活,学习曲线比较陡峭
◆常用在数据分析和处理领域
◆被 Spark,Kaka,等大型开源项目所使用
被 Twitter, Linkin等公司广泛应用
12. Akka
◆Akka是围绕消息机制来构建的分布式开发框架
◆对开发者屏蔽掉分布式的诸多细节
◆Akka是 Actor模型在JM上的实现
◆ Actor是分布式系统下的对象,异步通信、全局寻址
◆可以部署成一个去中心的集群
◆同构的部署策略更利于压榨单杋性能
◆改变了传统 Web server的编程模型
◆以及,改变了服务部署的方式
13. 面回对象的编程
◆对象是对实体的抽象
◆将数据和操作封装在一起
◆让对象之间的关系清晰而明确
◆面向对象在分布式系统下碰到的问题
◆数据同步
◆寻址机制是单机化的
◆同步的操作无法充分利用系统资源
14. 统一的开发模型
定义系统中的 Actor
◆Acor是分布式下的对象
◆理解业务,对实体进行抽象,规划好 Actor在分布式系统下的地址
◆初始化Acor中的数据
◆初始化时把所需数据加载到內存
◆后续操作基本在內存中,数据+操作一体化
◆处理消息
基于消息驱动的异步模型
15. 轻芒爬虫服务的实现
16.
17. ◆从流式的架构,变成了对象式的架构
◆调度模块,解析模块,索引模块
◆站点、列表、链接,很容易进行追踪和维护
◆解除了外部依赖
没有中间的消息系统、存储服务之类的
◆可轻松的咩杋部署,也可以部署成集群
18. 轻芒内容流服务的实现
19.
20. ◆统一了用户 Feeds流的实现
◆推拉一体
◆核心用户的 Feeds会自然的停留在内存中提升效能
◆天生具有实时计算的能力
◆初始化是从数据库中加载数据
◆实时监听用户行为数据
◆由于大量关联 actor位于肉存中,实时计算速度较快
21. 优点
◆编程模式统
◆对 actor的设计和抽象是核心
◆在分布式下的部署和开发变得简单
◆Akka承包了很多细节
◆全异步更易于分布式
◆机器会被充分利用
◆缓存和计算一体,会充分利用内存和CPU
22. 新架构的挑战和应对
23. Acor的冷启动
◆冷启动的时长,影响整个系统的响应时长
◆ Actor的调用关系可能很繁杂,需要做好自己
◆降低 Actor的抖动,把重要的 Actor留在内存中
◆根据业务特征来调整存活相关的参数
◆扩大集群规模
◆通过临时缓存来降低再次启动的耗时
◆个人 Feeds会在退出的时候记住没有消费完的內容
◆在下次启动的时候优先使用,异步初始化
◆建立有效的性能监控
◆记录各个步骤的日志,汇总到阿里日志服务进行分析
24. 系统资源的调度
◆分治经营
◆每个 Actor控制存活时长、占用資源
◆集中调度
收集系统中全部 Actor的数量和资源消耙情况
◆根据时间、资源等对 Actor进行调度
◆动态平衡还是很困难
◆比较容易导致雪崩
◆高质量的实现和监控每个 Actor是关键
25. 部署的挑战
◆大集群ws微服务
◆Akka本身就包括了集群的解决方案
◆引入微服务会在开发模式上导致一定的不统
◆包含全部业务的集群会在运维上带来挑战
◆基于PanB的发布和容灾方案
◆做到任何一个 Actor都可以无损的重启才可以实现更轻松的
发布
26. Aka集群的挑战
◆更频篆的序列化开销
◆屏蔽了部署细节,会有更多的数据会被序列化
◆单机性能的降低可以通过集群化来解决
◆无中心集群的稳定性
◆心朓检测需要容忍度,在容忍度下服务可能不可用
◆各种阈值的配置需要仔细担控,不然会引起抖动
27. 总结
28. ◆基于 Actor的编程模型在很多场景下可以统一开发模型
◆降低理解和设计的复杂度
◆长期看,简化开发带来的价值是更大的
◆有效减少了中间件的使用,降低为运维复杂度
◆但需要更熟稔Aka集群的运维
◆新的开发模式,需要新的思维
◆对业务的抽象比存储的设计更重要
◆优化局部可以带来整体的优化
◆围绕新的模式来设计日志和监控机制
29. 加入我们
hello@qingmangme
30.
31.
32. Q&A