构建大规模微服务架构应用

七牛云富媒体处理平台应用
面向大规模的服务架构
构建自动化交付流程
重新定义大规模应用设计

展开查看详情

1.构建大规模微服务架构应用 何李石 @ikbear 七牛云首席布道师

2. 构建大规模微服务架构应用 何李石 About 《Go 语言程序设计》联合译者 5 年云服务,负责七牛对外技术布道 七牛云:数据存储、处理,直播云, 容器云,大数据,机器学习云

3. 构建大规模微服务架构应用 何李石 App: 七牛云富媒体处理平台应用 Infra: 面向大规模的服务架构 Microservices CI & CD & Ops: 构建自动化交付流程 微服务架构:重新定义大规模应用设计

4. 构建大规模微服务架构应用 何李石 复杂世界的数据处理需求 ■ 多终端设备(硬件) ■ 多 OS 平台(软件) ■ 多尺寸观看、播放 ■ 多网络适配

5. 构建大规模微服务架构应用 何李石 基于云端的数据处理 图片、音视频鉴黄 电信 联通 终端上传 图片处理 文档转换 移动 七牛云存储 七牛云处理 七牛云分发 静态文件 语音处理 视频转码 海外 自定义数据处理 UFOP 教育网 其他 云主机 or 云引擎 or 自建服务器

6. 构建大规模微服务架构应用 何李石 图片缩放裁剪

7. 构建大规模微服务架构应用 何李石 音视频自适应播放

8. 构建大规模微服务架构应用 何李石 基本架构 ■ API Gateway: 访问控制 ■ Load Balance ■ Image/Video Service 混合部署 ■ 客户自定义 Service 部署

9. 构建大规模微服务架构应用 何李石 App: 七牛云富媒体处理平台应用 Infra: 面向大规模的服务架构 Microservices CI & CD & Ops: 构建自动化交付流程 微服务架构:重新定义大规模应用设计

10. 构建大规模微服务架构应用 何李石 大规模服务架构挑战 ■ 大规模:处理海量请求(300亿/天) ■ 动态伸缩:突发请求、业务增长(早、中、晚高峰) ■ 团队、技术架构异构(Go / Python / Java) ■ ……

11. 构建大规模微服务架构应用 何李石 微服务化尝试 ■ 服务构建:基于最佳实践的微服务框架 ■ 服务治理:注册与发现 ■ 分布式系统设计:基于 Event Sourcing 的设计模式

12. 构建大规模微服务架构应用 何李石 服务构建:Kite Micro-service Framework

13. 构建大规模微服务架构应用 何李石 多实例部署的问题 动态伸缩 10.0.0.1:8755 IP 动态分配 服务实例 A 10.0.0.2:8755 请求哪个? 客户端 服务实例 B 10.0.0.3:8755 服务实例 C 如何做好 负载均衡?

14. 构建大规模微服务架构应用 何李石 服务注册与发现

15. 构建大规模微服务架构应用 何李石 服务注册

16. 构建大规模微服务架构应用 何李石 服务发现

17. 构建大规模微服务架构应用 何李石 客户端查询模式 10.0.0.1:8755 动态伸缩 IP 动态分配 服务实例 A 10.0.0.2:8755 查询 请求服务实例 客户端 模块 服务实例 B 10.0.0.3:8755 服务实例 C 注册 中心

18. 构建大规模微服务架构应用 何李石 客户端查询模式 优点: ‣ 「注册中心」在服务之外维护,使用简单,对已有的微服务架构侵入小; ‣ 客户端直接请求后端实例,查询完成后请求链路不需要经过其它中间环节; 缺点: ‣ 客户端和「注册中心」绑定; ‣ 客户端的实现取决于具体语言或者框架,每个客户端都得自己去实现;

19. 构建大规模微服务架构应用 何李石 服务端查询模式 10.0.0.1:8755 动态伸缩 IP 动态分配 服务实例 A 10.0.0.2:8755 客户端 请求服务实例 客户端 路由 服务实例 B 10.0.0.3:8755 服务实例 C 注册 中心

20. 构建大规模微服务架构应用 何李石 服务端查询模式 优点: ‣ 客户端不需要做额外的变更; ‣ 有些云服务公司已经提供类似产品可以满足需求了,可以直接接入; 缺点: ‣ 除非是托管在云服务提供商那里,否则还需要额外的服务端来部署「路由 」或者「负载均衡器」部分,这也就意味着需要保证这个部分的可靠性和 可用性,需要额外的系统设计和运维工作; ‣ 客户端请求多了一个路由代理的步骤,增加系统总体耗时;

21. 构建大规模微服务架构应用 何李石 开源工具 ■ etcd: 服务发现、全局分布式 key-value 存储; ■ consul: 服务发现、全局分布式 key-value 存储; ■ zookeeper: 服务发现、全局分布式 key-value 存储;

22. 构建大规模微服务架构应用 何李石 分布式系统设计

23. 构建大规模微服务架构应用 何李石 分布式数据库:基于日志的最终一致性

24. 构建大规模微服务架构应用 何李石 以日志为中心的基础架构 Graph DB Key-Value 搜索 OLDP 存储 查询层 查询层 监控 流处理 和报表 日志 流程 Source: LinkedIn Engineering Blog: The Log: What every software engineer should know about real-time data's unifying abstraction Hadoop 存储

25. 构建大规模微服务架构应用 何李石 以 Log 为中心的分布式数据存储 ■ 通过顺序化节点的并发更新来处理数据一致性(最终和实时一致); ■ 为系统提供节点间的数据复制机制; ■ 为数据的写提供「commit」语义; ■ 为外部系统提供数据订阅服务; ■ 为其它副本提供数据恢复的参考依据; ■ 在节点之间提供数据读写平衡;

26. 构建大规模微服务架构应用 何李石 “Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.” – Conway's Law

27. 构建大规模微服务架构应用 何李石 “一个组织的结构 是该组织设计系统时沟通结构的映射。”

28. 构建大规模微服务架构应用 何李石 软件即沟通 ■ API as a Service: 基于 API 的沟通; ■ 数据一致性:基于业务需求的沟通;

29. 构建大规模微服务架构应用 何李石 基于 Event Sourcing 的设计模式 AccountCreated OwnerChanged WithdrawalPerformed Id: 123 AccountId: 123 AccountId: 123 Owner: Lishi He Owner: Ikbear Amount: 100¥ Event Log