融合Service Mesh,网易云打造企业级微服务解决方案

摘要

近日,第十届中国系统架构师大会(SACC 2018)在北京举行,本届大会主题为“十年架构,成长之路”,聚集了上千名CTO、研发总监、高级系统架构师、开发工程师和IT经理等技术人,共同展开IT技术领域的深度分享与问题探讨。网易云解决方案首席架构师刘超,网易云资深架构师朱剑峰分别分享了“Service Mesh与容器平台融合与解耦实践”和“企业级微服务在传统行业的深度体验”。

近日,第十届中国系统架构师大会 (SACC 2018) 在北京举行,本届大会主题为「十年架构,成长之路」,聚集了上千名 CTO、研发总监、高级系统架构师、开发工程师和 IT 经理等技术人,共同展开 IT 技术领域的深度分享与问题探讨。网易云解决方案首席架构师刘超,网易云资深架构师朱剑峰分别分享了「Service Mesh 与容器平台融合与解耦实践」和「企业级微服务在传统行业的深度体验」。

  刘超曾在多次分享中总结过微服务设计的十个要点,包括:API 网关,无状态化,数据库的横向扩展,缓存,服务拆分和服务发现,服务编排与弹性伸缩,统一配置中心,统一的日志中心,熔断、限流、降级,全方位的监控。在这些要点中,Kubernetes 和容器虽然解决了交付的问题,应用层之间的相互访问和治理并没有做好。业界比较常用的服务治理框架是 Dubbo 和 Spring Cloud,但 Dubbo 的问题在于缺少功能组件,需要做很多定制化开发;Spring Cloud 虽然组件丰富,但学习曲线较高。基于这些原因,网易云研发了「轻舟微服务」,结合微服务领域的开源技术和最新的 Service Mesh 的理念,同时做了很多的优化和定制,实现了一套无侵入式的、开箱即用的微服务解决方案。

  比如,Istio 是 Service Mesh 当前的主流实现,现阶段 Istio 和 Kubernetes 绑定比较紧,然而不是所有的应用都是部署在容器中的,因而微服务平台需要和容器平台解耦,解耦后的微服务平台也需要能够和容器平台进行联动。

  朱剑峰从传统行业的开发流程出发,梳理了轻舟微服务的整个架构。由 CI/CD 驱动,从代码仓库开始,代码检出、代码编译和集成测试,通过测试平台测试之后,进行镜像构建,自动部署到各个集群中,接下来就进入了微服务的运行时。在微服务运行时中,微服务框架是微服务治理的关键,配置了所有服务运行过程中的治理规则。业务的流量来自于 API 网关,认证、鉴权都需要通过 API 网关,底层是 APM 即链路调用的监控,Agent 上报自己的调用状态到 APM 的数据中心,APM 可以实时地拓扑感知,感知到应用性能,记录下每一个记录的请求,一方面方便在事前进行性能瓶颈的排查,确定扩容点;另一方面,在出现故障之后,可以快速在拓扑链路上定位出现问题的请求和组件。最核心的基础架构包含了 IaaS 平台和容器平台,它承载了微服务的整个运行时,能够实现平滑地扩缩容甚至扩容参数指标和 APM、大数据联动,进行智能扩缩容策略治理。

  刘超认为,在微服务框架的各个组件中,服务发现相对容易搞定,但难以替换,服务治理比较难搞定,但容易替换。所以在设计的过程中对服务发现和服务治理做了解耦。Dubbo 的微服务治理是基于服务的,是接口层面的,随着服务的增多,数据同步会非常耗时;SpringCloud 的服务注册是基于实例的,数据量会大大降低,但没办法实现相对细粒度的治理。网易云基于 Spring Cloud 实例级别的注册,注册之后会有一个写入了方法的配置文件,从而融合了实例级别和方法级别的优势。

  Kubernetes 自有的入口流量的治理并没有那么丰富,但业务方对治理的丰富程度非常高,网易云提供了独立的 API 网关组件去做这件事。据刘超介绍,一般的 API 网关都能实现灰度发布和 A/B 测试,轻舟微服务的 API 网关还能实现对预发布环境的治理。代码上线前在预发环境中跑一下真实的数据,轻舟的 API 网关提供流量镜像的功能,会将流量镜像 1% 到预发布环境,既满足了业务对预发布环境测试的目的,又不会影响真实的生产环境。

  在一个比较成熟的业务中,对路由方面的要求会比较多,比如电商业务中的支付接口并不是每个服务都能调用,轻舟微服务中为这种场景定制了黑白名单的功能,这样一方面只有某些服务可以调用支付,另一方面,只有某些网段发起的请求才可以访问支付,也确保了服务在黑客攻击下的安全性。

  测试环境的维护也是微服务拆分后值得重视的一个环节,在服务拆分之前,一个应用只有 10 个实例,测试的时候需要 10 个虚拟机就可以部署起来。服务拆分之后,每个服务都需要单独的部署,并且多是并行进行的,当迭代速度越来越快的时候,测试环境的数量会给底层环境带来很大的压力。轻舟微服务摒弃了这种仅在基础设施层面堆硬件的方式,建立了 master 的代码分支,对应着线上的代码分支,会起一套完整的测试环境,所有的服务都部署在其中,在应用更新时,只需更新测试环境中对应的分支即可。

  朱剑峰总结了轻舟微服务为企业解决的问题:首先,为应用减负,通过 Agent 和 Sidecar 技术,对应用做了无成本的增强;另一方面,对开发也减负了,开发可以不用关心大量配置和注册中心的问题;在版本控制方面,统一了组件版本配置,避免了很多隐性问题;兼容性方面,兼容 HTTP、RPC 调用,支持多语言;在服务治理方面,可以根据业务线场景选择,治理支持方法级别治理粒度;最后,充分优化了应用到 Agent 之间的路由时延,保证应用的高性能。


最新文章

极客公园

用极客视角,追踪你不可错过的科技圈.

极客之选

新鲜、有趣的硬件产品,第一时间为你呈现。

张鹏科技商业观察

聊科技,谈商业。