数字化创新浪潮之下,微服务架构已经被越来越多的企业采用。本文通过网易云轻舟微服务核心研发人员的实践总结,解读如何建设微服务基础设施,以便更好地利用微服务技术来支撑业务实现跃进式的发展。在本篇中,网易云架构师、轻舟微服务技术负责人冯常健结合网易云实践总结了微服务的沿革、价值、落地挑战和解决思路,并分享了网易云打造轻舟微服务的核心经验,以及未来的技术路线。
网易云是如何做到的?冯常健表示,实施微服务涉及分布式架构的多种挑战,技术门槛高,众多开源组件可以满足企业建设微服务基础设施的基本需求,但开源组件学习成本高,配置复杂,且应用侵入性大,网易云以基于开源、无侵入、易用性为设计原则,基于多年技术积累,将复杂的微服务技术封装为通用平台,帮助业务团队快速、低成本地实现架构微服务化,并提供一整套工具链,包括服务治理、DevOps、AIOps、自动化测试等,保障微服务业务系统顺畅运行。
从2015年开始,伴随着Docker和Kubernetes的流行和项目需要,冯常健开始转向容器技术的应用研究,之前的自动化部署平台核心在于解决应用构建与部署问题,而在资源编排、服务编排、服务故障自愈等在DevOps实践中同样重要的问题则较少涉及,而容器技术可以补齐自动化部署平台缺少的这些能力,通过容器技术提供的弹性伸缩、服务编排、错误恢复等能力,结合IaaS提供的资源可编排能力,实现无服务器(Serverless)形态的容器平台。
容器技术的普及,推动了微服务架构在网易内部的广泛应用。爆发式增长的网易业务,遇到低耦合、易扩展的微服务,可谓干柴烈火,容器平台则是火上加油。微服务通过业务拆分、进程独立部署、轻量化的通信方式等手段解决了单体架构中存在的可用性、稳定性和扩展性差等难题,并使得团队有更多的技术栈可以尝试,减少团队沟通成本,提升开发效率,加快迭代速度。而容器的镜像和编排等能力,则成为了微服务细粒度分拆与优雅协作的神器。
在两年多的容器和微服务实践中,网易云验证了基于Kubernetes的容器平台在微服务架构的部署调度、集群容错、故障恢复等方面的彪悍实力,也发现了平台还有一些亟待优化的问题,比如服务注册发现、流量负载均衡、服务熔断降级、配置管理等,虽然Kubernetes对这些问题也有相应的解决方案,但在生产环境落地时,一些客户比较担心这些方案的性能、稳定性和可运维性。引入基于Spring Cloud的微服务治理框架,是否能更好地解决服务运行时治理等问题?
于是,冯常健和他的团队在2017年开始了轻舟微服务框架组件的研发,希望新的微服务框架可以和容器平台以及云计算部门研发的DevOps、APM、自动化测试等组件形成互补,形成端到端的轻舟微服务平台,更好地支持微服务落地。
在网易公司内部,轻舟微服务帮助完善了各个业务中台的建设,产品迭代最高提速100倍,人力运维成本节省80%,单节点20,000个服务实例同时在线及水平扩展的支持,让电商大促扩容更加顺畅。而对于企业客户,轻舟微服务也意味着数字化创新的核心平台之一,某客户直接采用轻舟微服务,大幅提升按需扩容响应速度,上线部署时间缩短80%,研发周期缩短40%,并省去交付沟通、协调等成本,成本节省折合货币效应超过千万元。如果自己研发这个平台,至少需要投入30人团队,耗费半年时间。但该公司认为,更重要的是基于轻舟微服务能够灵活地进行业务调整,此前需要半年才能上线新业务,现在只需要一个月。
当然,每一项挑战也都有不少开源解决方案。从实施微服务的技术团队角度来看,团队可能喜欢一开始就引进很多新技术,设计出一套能满足未来3到5年的架构出来,但从业务的角度来看,其实不是每一个阶段都有必要引入这些技术实现或解决方案,在人力有限的情况下,如果团队把太多精力倾斜在微服务架构建设方面,忽视了承载更多价值的业务研发,这就是本末倒置,最终可能会导致项目的失败。
冯常健解释说,业界常见的开源解决方案,比如对于Java技术栈,有Dubbo和Spring Cloud框架,都很强大,但它们的学习曲线比较陡峭,而负责每个微服务的往往是相对比较小的团队,如果其中大部分人再把时间都放在新技术、新框架的学习上,团队就没时间投入到业务开发。以Spring Cloud为例,如果每个团队上来都要学习几十个组件,而且学完了也不一定能用好它们,对开源组件掌控程度不够反而会给业务带来一些不稳定的因素,这对于企业而言也是很大的成本。所以,不能为了做微服务而做微服务,而是要根据业务匹配度来选择技术。
首先是基于开源技术栈,整个架构基于Spring Cloud,兼容Dubbo,以插件化的方式实现服务注册发现、服务治理、负载均衡、流量控制等。基于来源、兼容开源,可以最大程度地降低客户了解产品、使用产品的成本。
其次是无侵入性,实现了微服务治理框架和用户业务的松耦合,好处是用户只需要关注业务,服务治理框架的引入和升级不会带来业务改造的成本。插件化的方式,有利于实现这一点,并且对服务性能的影响可以忽略。
第三是易用性,实现图形化的统一控制中心,通过一个平台化界面涵盖完整的实时的服务治理能力,将用户从繁琐的配置中解放出来,允许用户通过图形化界面解决原本需要编写代码、编写配置才能解决的问题。
这些设计要求在技术实现上存在很大的技术挑战。例如无侵入性的实现,轻舟微服务主要采用Javaagent字节码增强技术,将服务治理逻辑以独立Jar包的方式提供加载。为支持更大的并发,轻舟微服务后端采用全分布式架构,能支持单节点20,000个服务实例同时在线,支持水平扩展,并提供99.99%以上的可用性。
目前,在微服务框架模块上,轻舟微服务已经实现了服务注册发现、负载均衡、集群容错、服务熔断降级、流量控制、动态配置管理、统一监控大盘等能力,覆盖了微服务的治理到问题的定位和排查。
性能优化对轻舟微服务框架而言也是重要的工作。例如,对Spring Cloud社区的服务发现组件Eureka做了源码级的定制和参数优化,实现了单节点10,000个服务实例的注册能力。同时,还引入异步化框架,比如Servlet 3.0、异步HttpClient、Disruptor等技术,使得轻舟微服务的请求转发能力达到单节点30,000以上TPS,并且延迟控制在5毫秒以内。
正是这些优化工作,让轻舟微服务能够承担重任,满足了网易内部和网易云客户的业务需求,实现了微服务的价值。
目前开源Service Mesh架构实现中,控制面有Google主导的Istio,数据面有Envoy、Linkerd等,都是已经或者即将进入CNCF(云原生计算基金会)的开源组件,轻舟微服务框架秉承基于开源、兼容开源的思想,通过集成开源技术能力去帮助用户更好落地微服务。
轻舟微服务目前在Service Mesh方向的工作有两方面,一方面是基于Envoy做优化和改进,提供高性能的微服务通信网络,形成自己的数据面组件,可无缝对接轻舟微服务控制平台。另一方面,Istio目前的发布版本是基于Kubernetes实现的,无法脱离Kubernetes容器平台运行,而轻舟微服务框架定位是底层基础设施平台无关的,它不关心服务是运行在容器里面,还是直接运行在虚拟机、物理机上。因此,轻舟微服务框架集成Istio会是一个工作重点。