网易云Service Mesh的产品架构与实现163yun.com 网易云Service Mesh的产品架构与实现 刘超 网易研究院云计算技术部首席架构师www.163yun.com 关于我 • 刘超 • 网易云 解决方案总架构师 • 10余年云计算领域研发及架构经验,先后在EMC,CCTV证券资 讯频道,HP,华为,网易从事云计算和大数据架构工作 • 毕业于上海交通大学。 • 曾出版《Lucene应用开发揭秘》 • 多 com/pulse/astonishingly-underappreciated-azure-service-fabric-ben-spencer/ Kaola163yun.com 开发独立: 代码耦合度比较高,修改代码通常会对多个模块产生影响,操控难度大,风险高 上线独立: 单次上线需求列表多,上线时间长,影响面大 简化扩容: 由于业务多,每一次扩容需要增加的配置比较杂。一些不起眼的小业务虽然不是扩容的主要目0 码力 | 35 页 | 6.33 MB | 6 月前3
Service Mesh 发展趋势(续) 蚂蚁金服 | 骑士到中盘路向何方?Proxy无需和Adapter耦合 • 读取配置 -> 连接k8s/Galley • Adapter的运行时资源开销 • 不受Adapter增减/更新/升级影响 • 保持Proxy代码简单 • 保持Proxy代码简单 • 数据平面可替换原则 Kubernete s API Server Adapters ConfigurationsOut-of-process Adapter 7/39 的延迟和SPOF(单点故障)特性,导致直接在Envoy中实现 (Envoy SDS) • 复杂性 • Mixer使用一组称为模板的核心抽象,来描述传递给适配器的数据。 这些包括“metrics”,“logentry”,“tracepan”等。这些抽 象与后端想要消费的数据不匹配,导致运维需要编写一些手动配置, 以便在规范的 Istio 样式和后端特定的样式之间进行映射。原本期望 这种映射可以在适配器中实现很大程度上的自动化,但是最终还是 Proxy无需和Adapter耦合 • 读取配置 -> 连接k8s/Galley • Adapter的运行时资源开销 • 不受Adapter增减/更新/升级影响 • 保持Proxy代码简单 • 保持Proxy代码简单 • 数据平面可替换原则 • 集中式服务: • 提高基础设施后端的可用性 • 为前提条件检查结果提供集群级别的全局2级缓存 • 灵活的适配器模型,使其以下操作变得简 单:0 码力 | 43 页 | 2.90 MB | 6 月前3
Service Mesh 微服务架构设计漫谈服务架构的演进史 2 微服务架构设计的现状 3 Service Mesh微服务设计 4 Service Mesh的框架介绍适应变化的微服务是什么样 微服务架构由一组小型的、独立自治的服务组成, 并且实现了业务中单个的完整业务功能。 • 服务和服务之间是独立的、低耦合的; • 每个服务都尽量小,小到一个小团队能够很好的维护它; • 服务可独立部署,每次部署不会影响其他服务; • 每个服务都各 autonomous services 微服务和SOA之间各项对比目前常见的微服务架构设计是什么样微服务架构的实现:目前主流的是Spring Cloud框架目前微服务存在的问题 Ø 业务关注太多技术 Ø 基础框架升级困难 Ø 异构系统接入困难 Ø 服务治理难度巨大不要让今天的代码成为明天的历史包袱 追求极致的思考1 漫谈服务架构的演进史 2 微服务架构设计的现状 3 Service Mesh微服务设计 Mesh的框架介绍微服务设计的最佳实践 数据独立存储 保持代码高内聚 低耦合的服务 容器化发布 服务是无状态的微服务如何切分 DDD限界上下文 低耦合的服务设计方法论:DDD战略建模4步搞定微服务的划分保持代码高内聚的方法论:DDD战术建模Service Mesh将会是微服务设计的更好方式Service Mesh的核心价值 实现 业务逻辑 和 非业务逻辑 的分离 Ø 为下沉到基础设施提供可能0 码力 | 36 页 | 26.53 MB | 6 月前3
Service Mesh的实践分享Registry Service Config Center 服务发现 服务注册 服务元数据下发 OSP client 服务路由 网络传输 服务元数据上报缺点 • 语言单一 • 升级困难 • 复杂代码嵌入对客户端进程影响大服务化体系2.0 - Service Mesh雏形 • 物理机、sidecar • Local & Remote,主与备 • 轻量级客户端、本地调用 • Local Proxy负责服务治理与 Daemonset • 每台宿主机一台Proxy • Proxy地址文件 • Mount到所有pod • 客户端容器监听文件,根据地 址文件找Proxy • 切换地址到remote proxy,轻 易实现优雅退出和滚动升级 • 增强隔离性 • Local Proxy被pod共享 • 自保护,对来源方限流和流量 转移 • 资源适配 • 根据宿主机的硬件配置定制不 同资源配置的Daemonset • 服务端agent成为必选项会增加运维压力 • OSP server默认没有agent,web server只带一个 服务注册agent • 服务端的一些治理、trace、鉴权功能通过代码插 件的方式实现 • 治理效果考虑 • 服务端嵌入治理功能可以让治理效果更好,如提 供主动GC、线程池隔离等 • 因为是内部项目,优雅性和治理效果之间,选择 了后者 App Local Proxy0 码力 | 30 页 | 4.80 MB | 6 月前3
SOFAMOSN持续演进路径及实践分享SOFAMOSN • C实现,支持多语言扩展 • 基于Nginx扩展 • 开发不活跃 • 老牌代理系统,业界广 泛使用,服务各类场景 • C++实现 • CNCF第三个毕业项目, ISTIO原生数据平面 • 开发活跃,最新版为1.9.0 • Google, Lyft主导,业界 众多公司使用中,重点搭 载ISTIO使用,服务各类 场景 • Rust实现 • CNCF项目,最早的 CNCF项目,最早的 Service Mesh数据平面 • 开发活跃,最新版为 18.9.1 • Golang实现 • 新生项目,初期旨在搭建 RPC亲和,高度可扩展性 的Golang转发系统 • 开发活跃,最新版为0.4.0 • 蚂蚁+UC主导,重点搭载 SOFAMesh使用,目标服 务通用场景,金融场景SOFAMOSNSOFAMOSN内部模块设计SOFAMOSN数据流SOFAMOSN数据流持续演进路径 log Ø IO、协议、前后端核心 metrics技术案例 – 协议自动识别 TLS链接 核心实现思路: Ø TLS通过ALPN来识别。 Ø TLS不带ALPN或者明文,通过预读首部字段识别。 ALPN扩展 预读字段 是 否 获取ALPN协商 所得协议 有 无 遍历所有协议 实现,执行 ProtocolMatch 返回AGAIN 匹配成功,获 取对应协议 无法识别协议,0 码力 | 29 页 | 7.03 MB | 6 月前3
蚂蚁金服Service Mesh渐进式迁移方案@UC 基础研发部1 Service Mesh演进路线 1 2 实现平滑迁移的关键 3 DNS寻址方案的演进 4 5 总结 DNS寻址方案的后续规划ü 对未来长期目标的认可 • Service Mesh(带控制平面,如Istio) • Kubernetes • 微服务 ü 现实中有很多挑战 • 还有很多应用没有实现微服务化 • 还有很多应用没有运行在kubernetes之上 • (完善后的)Istio, 和社区方案统一 第二步:引入 Sidecar,对接 周边生态 特殊:已经在路 线4上演进的应用, 快速会师到路线11 Service Mesh演进路线 2 2 实现平滑迁移的关键 3 4 5 总结 DNS寻址方案的演进 DNS寻址方案的后续规划保证迁移前后服务间网络互通 Service A Service B Service C SOFA Registry 传统 侵入式 客户端 客户端应该尽可能的轻薄通用: 实现简单,方便跨语言,减少升级可能 最简单,最通用,支持最广 泛的寻址方式方式是什么? 基于服务 发现的寻 址方式ü DNS寻址 • 支持度最好,使用最普遍 • 所有编程语言/平台都支持的 ü 产品的长期方向 • SOFAMesh和SOFAMosn中已经基于x-protocol实现了DNS通用寻址方式 • 为了兼容RPC应用和k8s0 码力 | 40 页 | 11.13 MB | 6 月前3
Service Mesh Meetup #3 深圳站review ,批准合并之后, feature/new_branch 会合并到 develop; • 5. 部署负责人将 develop 分支代码部署到测试环境,然后再通知 QA 测试;(脚本或者人工)有什么问题? • 效率低 • 没有代码检查; • 没有自动化测试(包括单元测试); • 沟通成本高 • 开发需要通知负责人、测试、产品等;(而且是每次构建/部署 都需要) • 依赖多较好的开发流程(流程化、自动化) feature 的开发; • 3. 开发完成后,提交 merge request(MR)请求合并到 develop 分支; • 4. MR 触发 Jenkins,Jenkins/Drone 触发 Sonar 代码质量检测系统; • 5. Sonar 将 report 和 issue 以 comments 的方式写到 Gitlab MR 中; • 6. Developer 对 MR 进行反复修复直至通过 Sonar Gitlab-CI(plugins/drone-gitlab-ci) • Drone(plugins/drone-downstream) • 支持自定义插件(你可以自己实现自己所需的插件) • 本机测试 .drone.yml : drone execAPI 支持我是作者名称.drone.yml代码质量检测 SonarQube 参考资料:https://github.com/developer-learning/night-reading-0 码力 | 45 页 | 18.62 MB | 6 月前3
Service Mesh是下一代SDN吗:从通信角度看Service Mesh的发展without the application needing to be aware. 服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着 复杂的服务拓 扑,服务网格负责在这些拓扑中实现请求的可靠传递。 在实践中,服务网格通常实 现为一组轻量级网络代理,它们与应用程 序一起部署,但对应用程序透明。什么是Service Mesh?- by Istio 服务发现 负载均衡 流量控制 是服务间的连通问题Service Mesh是下一代的SDN吗? 通信网络 l 互不兼容的专有设备 l 基于IP的通信缺乏质量保证 l 低效的业务部署和配置 ... 微服务系统 l 互不兼容的代码库 l 不可靠的远程方法调用 l 低效的服务运维 ... 通信网络和微服务系统面临类似的问题:Service Mesh是下一代的SDN吗? Network Layer Look at Solution 协议? Ø 南向接口 • 面向流量和路由配置 • xDS v2将统一数据面标准? • xDS接口包含有较多实现相关内容:Listener, Filter, 能否可以成为一个通用的接口协议? 是否会出现Envoy之外的大量数据面实现? • 建议:对xDS接口进行改进,去掉实现相关内容 Ø Service Mesh的发展 • 控制面对数据面软硬件的统一控制能力? • 通过控制面API接入各种丰富的应用场景0 码力 | 27 页 | 11.99 MB | 6 月前3
Service Mesh的延伸 — 论道Database MeshAvailable - 基本可用 Soft state -软状态 Eventual consistency - 最终一致性分布式事务:分类 XA 最大努力送达 Saga TCC 业务改造 无 无 实现补偿接口 实现TCC接口 回滚 支持 不支持 支持 支持 一致性 强一致 最终一致 最终一致 最终一致 隔离性 原生支持 不支持 不支持 Try接口支持 并发性能 严重衰退 无影响 无影响 略微衰退 记录锁 • 影子表弹性伸缩:数据迁移 迁移监听 在线双写 离线迁移 数据源切换 冗余数据清 理治理监控 配置动态化 负载均衡 熔断 & 禁用 安全 & 权限 & 脱敏 APM现有实现方案对比 客户端 • 支持任意数据库 • 数据库连接数占用高 • 仅支持单一开发语言 • 性能损耗低 • 无中心化 代理端 • 仅支持单一数据库 • 数据库连接数占用低 • 支持任意开发语言 无中心化 是 否 是 静态入口 无 有 无 Sidecar的优势Database Mesh架构图Sharding-Sphere 核心功能 数据分片 分布式事务 数据库治理 弹性伸缩 管控界面 实现方案 Sharding-JDBC Sharding-Proxy Sharding-Sidecar Sharding -Sphere 云原生 无中心 零侵入Sharding-Sphere:数据分0 码力 | 35 页 | 4.56 MB | 6 月前3
Service Mesh结合容器云平台的思考和实践业务服务 配置中心 启动获取 Monitor Turbine K8S流量 SC流量 同集群调用微服务 Spring Cloud管理平台基于Kubernetes的Spring Cloud实现 Devops: Experience Auto Scaling & Self Healing Resilience & Fault Tolerance Distributed Tracing oy出错时pilot-agent负责重启envoy,或者envoy配置变更后 reload envoy。 而envoy负责接受所有发往该pod的网络流量,分发所有从pod中发出的网络流量。 根据代码中的sidecar-injector-configmap.yaml(用来配置如何自动化地inject istio sidecar), inject过程中,除了proxy镜像作为sidecar之外,每 DefaultProxyConfig函数,值是/usr/local/bin/envoy。 2. envoy的启动参数形式为下面的startupArgs,包含一个-c指定的配置文件,还有一些命令行参数。除了下面 代码片段中展示的这些参数,还可以根据agent启动参数,再加上--concurrency, --service-zone等参数。 而上面的-c指定的envoy配置文件有几种生成的方式: 1.运 行 pilot-agent0 码力 | 28 页 | 3.09 MB | 6 月前3
共 23 条
- 1
- 2
- 3













