如何优雅地步入微服务2.0时代? 网易数帆轻舟云原生 网易轻舟技术专家,翁扬慧 自我介绍 来自网易杭州研究院,技术专家 轻舟微服务NSF产品的研发负责人 网易数帆轻舟云原生 多年微服务架构设计与项目开发经验,对SpringCloud,Dubbo、gRPC、Istio、Envoy等技术有过深入学习。目前主要负责网易轻舟微服务的核心方案设计以及业务落地推进工作; 开源爱好者,Istio社区成员,热衷于开源技术的分享和交流。 目录 01 背景篇(Situation): 为什么服务网格是微服务的2.0时代? 02 决策篇(Decision): 网易数帆轻舟云原生 如何决策业务团队是否应该使用服务网格? 03 方案篇(Solution): 如何优雅地从微服务框架迁移至服务网格? 04 展望篇(Destination): 微服务2.0时代,服务网格下一步怎么走? 网易数帆轻舟云原生 Situation 为什么服务网格是微服务的2.0时代? 微服务概念最早被提出 Dubbo 2011年10月 NETFLIXOSS 网易数帆轻舟云原生 2012年3月 Docker 2013年3月 SpringBoot 2013年9月 Kubernetes 2014年6月 gRPC 2015年 SpringCloud 2016年 2011201220132014201520162017201820192020 以框架为主的微服务1.0时代 LinkerdIsito ConsulConnectSMIOSMSOFAMOSN 服务网格微服务2.0时代 框架的适用范围有限 一般只提供特定语言的SDK,例如SpringCloud和早期版本的Dubbo,都只是局限于Java开发语言 框架的升级成本高 01 02 04 当框架需要升级版本时,需要业务方配合修改应用依赖,涉及打包、发布、测试,成本过高。业务方往往比较排斥,对于线上业务,更是阻力重重。 网易数帆轻舟云原生 框架对业务的侵入性大 除了添加相关的包依赖之外,还需要在业务代码里插入各种治理逻辑代码,并且工作在业务运行时。 03 引入框架带来的负担重 框架往往包含了不同功能的组件,引入依赖后会导致业务应用体积大、构建慢、占用资源多等问题。 框架提供的治理能力有限 05 不同的服务治理框架都有各自的局限性,涉及到特定的服务治理功能例如故障注入、灰度发布、安全通信等也有所欠缺。 06 框架与云原生架构演进的冲突 云原生架构大势所趋,将业务迁移至K8S之后,注册中心该如何选择成了最先需要考虑的问题。 网易数帆轻舟云原生 异构语言统一服务治理体系 解耦应用业务和服务治理能力 云原生应用 应用程序对代理无感知 服务网格是用于处理服务间通信的基础设施层,负责为构建复杂的云原生应用传递可靠的网络请求。 提供安全、快速、可靠的服务间通讯 提供丰富的服务治理能力 轻量级网络流量代理 服务网格通常实现为一组和应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。 有Google、IBM等大厂背书 可扩展性、可升级性、易维护性 故障和资源的隔离性 治理、监控、安全一体化 网易数帆轻舟云原生 Decision 如何决策业务团队是否应该使用服务网格? 01 业务问题是否只能用服务网格解决? 现有业务系统是否已经服务化拆分,目前面临的问题是否只能依靠服务网格来解决,明确服务网格的技术引入究竟是真正的“痛点”还是“痒点”。 02 业务架构是否已经满足网格的条件? 网易数帆轻舟云原生 就目前而言,服务网格Istio仍比较依赖K8S,业务至少需要先迁移到Docker容器平台。如果业务是SpringCloud架构,迁移会相对比较顺畅,但如果是Dubbo,目前社区支持尚不完善,可能需要自定义开发适配。 03 团队是否能驾驭得了服务网格? 使用服务网格需要对云原生技术(如Kubernetes,Docker等)有深入的了解,想要在生产环境上使用还需要对Istio和Envoy的原理比较清楚,并且能够熟练进行故障诊断和原因定位。 04 是否已经有/能开发配套的基础设施? 服务网格解耦了开发和运维,这就意味着所有的运维操作是独立于业务开发流程的。业务团队是否有配套的基础设施平台比如CICD、统一的治理平台等。 成本 网易数帆轻舟云原生 单体应用 微服务 容器化 容器编排 服务网格 微服务技术选型成本业务服务化拆分成本分布式服务治理成本拆分增加的资源成本 …… 业务容器化改造成本容器化后的运维成本容器引入的安全成本容器引入的监控成本 …… K8S的团队学习成本K8S的部署运维成本CI/CD平台建设成本监控、日志建设成本 …… 服务网格学习成本服务网格改造成本业务平滑迁移成本服务网格运维成本 …… 网易数帆轻舟云原生 随着业务规模上升,正处于业务容器化上云及混合云架构转型中,需要更全面的服务治理能力 更强大的流量管理:动态路由、版本分流、灰度发布 更丰富的治理特性:限流、熔断、故障注入 更完整的协议治理:HTTP、中间件Redis/MQ等 更灵活的环境治理:流量染色&流量穿梭 更解耦的治理平台:业务与服务治理解耦,独立平台 现有业务技术栈较多,SDK维护成本高、升级阻力大,需要更统一的服务治理平台来支撑不同的业务 更全面的协议支持:Dubbo、gRPC、Thrift等协议的支持 更精细的服务治理:支持Dubbo、Thrift的精细化治理 更丰富的治理特性:动态降级、多场景限流、接口鉴权 更易用的治理平台:提供人性化的服务治理平台 更可控的运维能力:Sidecar热升级、流量动态拦截 网易数帆轻舟云原生 Solution 如何优雅地从微服务框架迁移至服务网格? 优雅让业务团队以最少的成本、最低的风险、最好的体验从微服务框架平滑迁移至服务网格 网易数帆轻舟云原生 演进方案设计网格能力增强业务平滑迁移平台体系建设 在正式接入网格之前,熟悉业务团队现有技术体系、整体系统架构,明确真实用户诉求,评估是否需要定制化改造,制定整体的技术演进方案 如果业务团队有定制需求,例如要求支持Dubbo、Thrift协议等,需要结合社区发展趋势,对控制面(Istio)或数据面(Envoy)进行增强改造 结合业务现状,制定整体的迁移方案及实施计划,评估好迁移过程中的风险,做好测试环境验证,通过灰度引流等方式逐步将业务平滑迁移至网格 完成存量业务的迁移后,关注业务团队的网格使用成本,通过建设服务治理平台,完善运维体系,帮助用户通过服务网格为业务创造更多的价值 支持框架 gRPC Dubbo Spring*(SpringCloud/SpringBoot/SpringMVC) 可观测性 轻舟微服务框架功能架构总览 服务拓扑 流量管理 负载均衡 参数分流 服务路由 服务注册发现 方法级监控 应用级监控 流量染色 认证鉴权 请求容错 熔断降级 动态限流 网易数帆轻舟云原生 服务治理 API网关 API网关 链路追踪 应用诊断 应用日志采集 认证管理 治理规则管理 服务配置管理 服务实例管理 管理功能 应用性能监控平台 (APM) 分布式事务 (GTXS) 容器管理平台 (NCS) 持续集成平台 (CICD) 测试平台 (易测) 中间件 (PAAS) NSF微服务架构1.0 注册中心 Eureka 内部调用(东西向流量)外部调用(南北向流量)实线:数据面通信 虚线:控制面通信 Eureka 配置管理服务 应用监控服务 配置管理服务应用监控服务 用户微服务 (消费方) 服务注册 Zookeeper Zookeeper HTTP通信 用户微服务 (提供方) 服务注册 HTTP通信 控制中心 Consul Consul 网易数帆轻舟云原生 控制中心 (NSFServer) 应用诊断服务 应用认证服务 应用认证服务应用诊断服务 NSFAgent 内部服务访问 NSFAgent HTTP通信 gRPC连接 控制面组件 知识库服务 知识库服务微服务控制面 访问外部服务 API网关 API网关 数据面组件 前端控制台 外部服务 外部服务访问内部服务 内部调用(东西向流量)外部调用(南北向流量)实线:数据面通信 虚线:控制面通信 注册中心 Eureka Zookeeper Consul Consul K8SRegistry Consul Zookeeper Eureka NSF微服务架构2.0 配置管理服务 配置管理服务 k8SAPIServer APIPlane 应用诊断服务 应用监控服务 应用认证服务 应用监控服务应用认证服务应用诊断服务 Sidecar(Envoy) 内部服务访问 gRPC连接 用户微服务 (提供方) 用户微服务 (消费方) Sidecar(Envoy) 对接 注册中心 监听CRD配置 控制中心 网易数帆轻舟云原生 istiod OpenAPI 知识库服务 知识库服务微服务控制面 访问外部服务 API 网关数据面 控制中心 控制中心 API网关 (NSFServer) 控制面 外部服务 外部服务访问内部服务 前端控制台 最初的目的是为了解决SpringCloud依赖组件体积太大的问题 NSFAgent模块化划分设计 Agent通信 服务配置模块 熔断降级 HTTP适配器 注册发现 Core Meta AOP RPC Traffic Premain+ModuleLoader 服务路由 Dubbo适配器 方法级限流 应用诊断模块 Agent配置 负载均衡 gRPC适配器 方法级监控 日志采集模块 参数分流 链路追踪模块 服务容错 网易数帆轻舟云原生 不便于交付、分发/构建效率低/影响应用启动读取/内存额外消耗 All-In-OneJar依赖 全部依赖包体积>80MB 颜色说明 :启动器 必需模块 用户可拆卸 自识别加载 启动Agent体积<300KB 微服务框架 服务网格 面向应用内的服务治理 流量管理 面向应用间的服务治理 …… 访问鉴权 链路追踪 细粒度监控 负载均衡 通信加密 调用监控 应用诊断 智能路由 故障注入 请求容错 配置中心 服务注册发现 接口限流* 熔断降级 …… 流量染色 日志采集 细粒度限流 微服务框架服务治理能力 网易数帆轻舟云原生 “鱼”和“熊掌”不可兼得? Agent+Sidecar= 服务网格服务治理能力 微服务框架 融合(过渡)期 服务网格 RPC Sidecar (Envoy) Meta Core Boot Agent Boot Agent Sidecar(Envoy) Traffic Meta Core 网易数帆轻舟云原生 RPC Boot Agent 单独Agent模式: 第一次分离 火箭助推器分离过程 Agent负责应用内服务治理Agent和Sidecar并存模式: Agent负责应用内细粒度服务治理(方法级) 第二次分离 Sidecar负责应用间粗粒度服务治理(接口级)单独Sidecar模式: Agent可自主脱离,或新业务直接不使用Agent EurekaRegistry Agent注册K8S注册 NSF控制面 ... NSFServer 拉取eureka服务 K8SServiceRegistry 网格控制面 ... istiod 拉取k8s服务 pod 旧遗留业务 Agent注册 服务双注册融合形态业务(双模) SVCD NSFAgent pod 新开发业务 Sidecar SVCE pod K8S注册 Sidecar SVCF 网易数帆轻舟云原生 pod SVCA SVCB SVCC 内部调用 NSFAgent NSFAgent NSFAgent Sidecar 内部 调用 Sidecar 内部调用 pod IngressGateway 用户访问流量 云外(旧业务集群) APIGateway K