科技达人说@Service Mesh 实践之路,落地三年,两次架构升级,网易( 二 )


2016年 , 移动互联网发展火热 , 网易业务发展飞快 。 当时内部各事业部之间在服务化框架的应用方面差别非常大 , DubboRPC框架、SpringCloud微服务框架、自研微服务基础设施都有 , 较少考虑微服务架构支撑能力的复用问题 。
网易严选是2015年内部孵化、2016年对外发布的新业务 , 没有太多的历史负担 , 考虑到电商业务的复杂性 , 其在微服务架构选型方面进行了慎重的思考 。
是否基于RPC框架提供服务治理?根据历史经验 , 由于业务团队和基础架构团队的关注点和优先级不同 , 推动RPC框架升级效率非常低 , 业务团队担心服务稳定性受影响 , 基础架构团队担心架构演进效率太低 , 矛盾比较突出 。 如何支持多语言?微服务时代多语言是趋势也是优势 , 严选的核心业务是基于Java技术栈的 , 但是还是有大量前端业务和运营业务是基于Node.js , 另外还有不少业务是Python和C++技术栈的 。 基于开源项目还是自研?自研系统可掌控性较强 , 但是会面临重复造轮子和项目生命力的问题 , 基于开源定制是一条更好的落地路径 。2017年 , 网易落地ServiceMesh1.0
2017年 , 网易严选业务首先开始落地ServiceMesh1.0(代号:cNginx)架构 。 在选型方面 , 数据面采用了Nginx , 控制面及注册中心采用Consul , Nginx和ConsulAgent形成Sidecar 。 通过Nginx实现了负载均衡、环境路由、熔断降级和限流等服务东西向流量的管理 , 通过Consul实现了服务注册发现、配置同步、指令下发等控制面流量下发 。 服务对外调用的流量都通过本地部署的Nginx 。
科技达人说@Service Mesh 实践之路,落地三年,两次架构升级,网易
文章图片
举个例子 , 如果运维人员要对某服务进行流控设置 , 只需通过服务治理平台将流控参数下发到ConsulServer , ConsulServer通过一致性协议将配置同步到集群所有ConsulAgent , Nginx能Watch本地ConsulAgent , 生成Nginx流控配置 , 作用于服务间的东西向流量 。
Nginx+Consul提供的基础能力基本满足了业务和基础架构团队对服务治理的需求 。 ServiceMesh1.0最早是在网易邮箱、网易有钱和网易严选试点 , 随着严选业务的快速发展 , 2017年底 , 就基本在严选全面落地了 , 并发挥了重要作用 。
业务不改造即可接入服务治理能力 , 对齐了跨团队间对服务治理的理解 , 降低沟通协作成本 , 提升了业务团队生产力 。 解耦了基础架构和业务服务化架构 , 使得他们能够独立演进 。 业务团队聚焦业务开发 , 基础架构团队推动中间件和框架的升级可以做到业务无感知 。 原本需要三个月才能落地的SDK版本升级 , 现在只要两周就可以通过灰度发布完成全量更新 。 多语言技术栈统一治理 , 充分发挥多语言技术栈在微服务架构中的优势 。2019年 , 网易落地ServiceMesh2.0
ServiceMesh1.0的落地虽然带来一定的好处 , 但是随着严选规模的变大和业务的复杂度 , 业务方对于基础架构的诉求也发生了变化 , 他们需要更灵活的流量调度、更多功能的服务治理、更大范围的基础组件解耦、更敏捷的快速迭代 , 更弹性的IT资源…而这些 , 现有架构并不能满足 。
2019年初 , 伴随以Kubernetes、Envoy、Istio为代表的云原生技术体系成熟 , 网易开始推动ServiceMesh1.0向云原生ServiceMesh2.0架构(代号:轻舟微服务)升级 。 经过1年的升级改造 , 轻舟微服务已经在严选落地 。
ServiceMesh2.0与1.0有啥区别
与ServiceMesh1.0(cNginx)相比 , ServiceMesh2.0(轻舟)最大的不同在于全面拥抱云原生技术 。 底座采用Kubernetes , 通过容器化和混合云基础设施解决快速迭代和IT资源弹性的问题 。 同时对基础组件做了升级 , 数据面组件采用Envoy , 控制面组件采用Istio 。
科技达人说@Service Mesh 实践之路,落地三年,两次架构升级,网易


推荐阅读