新型内容流服务架构方式

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
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

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-26 13:25
浙ICP备14020137号-1 $Carte des visiteurs$