过去几年来,“微服务架构”方兴未艾,尽管这种架构风格没有确切的定义,但我们已经看到许多项目凭借此架构取得了积极的结构,因此对于许多开发者来说,微服务正成为构建企业应用程序的默认风格。可悲的是,没有太多的信息概述微服务的风格以及如何去做。而实际上,拥有一个合适的微服务开发平台将会非常有助于实现微服务架构,基于此,CSDN云计算特别策划了微服务平台盘点系列文章,欲以CSDN中立技术社区专业、客观的角度,探讨如何为为开发者选择合适的微服务开发平台,以帮助其企业实现微服务架构。为此,我们采访了数家提供微服务平台的云服务厂商,本期,我们的主角是网易云。
当前,在互联网领域,微服务架构是业务规模达到一定程度的团队的标配,这些团队配备完整微服务工具和平台,实现熔断、限流、降级等服务治理策略和包括CI/CD在内的DevOps自动化运维;在传统领域,服务化架构也是传统企业数字化转型的核心技术之一,比如物流、银行、证券、工业制造等行业的很多企业,都已经实施微服务化的改造,一些行业领头羊,甚至已经向互联网企业看齐,构建了自己的微服务平台。
企业对微服务平台的热衷,需要从微服务开发说起。微服务开发并不是一件简单的事情,很多企业在微服务开发时都面临着困难和挑战,这主要体现在技术和业务两个方面:
从技术方面看,微服务体系非常复杂,开发框架的建设,无论采用Spring Cloud、Dubbo还是自研RPC,抑或Service Mesh,门槛都非常高,比如采用Spring Cloud体系,需要微服务开发者掌握等Eureka(服务注册/发现)、Hystrix(熔断器、线程隔离)、Ribbon(负载均衡)、Zuul(API网关)、Config(配置中心)等组件,而且原生SpringCloud组件在某些场景下缺乏灵活性,甚至存在一些BUG,需要团队拥有很强的技术实力。由此,微服务架构也带来了人才缺口、人力成本上升的问题。
业务方面,业务边界的确定过程,即服务建模的过程,是服务拆分中最重要的工作,然而很多业务边界不那么直观,比如支付服务和结算服务都涉及账户余额数据。当然,边界能够梳理清楚,微服务对业务发展的促进作用也是巨大的。
实际上,微服务是核心的云原生技术,它的本质是通过分布式架构解决两大业务诉求:快速迭代和弹性伸缩,充分释放云基础设施的潜力,这决定了微服务是一个复杂的系统,引入微服务,除了服务注册/发现、负载均衡,企业还要解决分布式系统的集群容错、系统的可用性和可扩展性,服务数量多了之后的配置管理、部署调度,还有如何进行日志和监控的统一管理、如何进行服务调用跟踪等方面的挑战。针对每一项挑战,企业都需要引入大量的基础技术平台和框架组件来解决。
所以,如果没有一个平台支撑微服务开发,业务开发者势必深陷基础架构建设与优化的泥潭,而有了专业的平台,业务开发者就可以专注于价值更高的核心业务。
面对众多微服务平台,如何选择仍然是一个困难的事情,网易云架构师,轻舟微服务技术负责人冯常健认为评判一项技术产品的唯一标准是它的业务价值,微服务平台要实现加速数字化业务发展的价值,应当具备如下六个特征:
1. 业务无侵入:治理逻辑不侵入业务代码,让业务开发者无需关注和学习治理相关的技术,引入和升级服务治理框架不会带来业务改造的额外成本。
2.功能完备:不仅包括服务注册/发现、降级、限流、容错、负载均衡、分流等服务治理全家桶,还需要配备CI/CD、容器化、全链路监控、自动化测试等工具,覆盖微服务应用全生命周期。
3. 安全稳定:提供统一的认证、鉴权机制,同时保障业务系统稳定运行。
4. 易于接入:业务系统可以快速接入框架和平台,同时通过平台实时配置治理策略。
5. 跨平台性:支持跨不同的基础设施,跨不同平台和语言。
6. 生态亲和性:符合微服务技术和架构趋势,同时具备长远的扩展性。
网易云开发的微服务平台叫“轻舟微服务平台”,其中微服务框架组件(NSF)是它的核心。轻舟微服务框架的开发,是网易云调研业界存在的Spring Cloud、Dubbo、自研RPC和Service Mesh等方案之后做的决定。由于这四种方式各有优劣,并且学习成本和使用成本都很高,网易云希望打造一个更通用、侵入性更低、能力更全面的微服务框架,让业务系统开发者无需关注和学习治理相关技术、无需修改业务系统代码,就可以快速引入微服务架构。
这并不意味着从零开始造轮子。事实上,轻舟微服务框架基于Spring Cloud进行源码级的定制和优化,在首个稳定版本中,轻舟微服务框架解决了服务的治理、流控、监控、告警、动态配置、安全认证等问题,通过NSF Java Agent增强实现了治理逻辑不侵入业务代码,并全面兼容Spring Cloud、Dubbo等开源框架,确保用户原有微服务的快速接入。随后,团队又探索了对具有下一代微服务之称的Service Mesh的支持。
除了实现了治理无侵入,支持多种服务治理框架,网易云轻舟微服务平台还通过一个图形化的统一控制中心提供了完备的工具链,包括DevOps、容器、APM、API网关、接口测试等组件,覆盖开发、测试、构建、发布到上线运行、治理、运维以及故障排查,并在网易千万级DAU大规模业务的生产环境中经受住了考验。
不过,轻舟微服务平台的研发也并非一蹴而就,冯常健坦言,分布式系统本身就是一个复杂的课题,轻舟微服务平台的要求又是集完备性、实用性、易用性于一身,从产品设计、技术选型、定制开发到源码优化,每一步都有很多的困难,所幸网易云团队从十多年前的博客时代就开始面对用户量、访问量暴增和产品高速迭代的挑战,沉淀了一套工程化、服务化、自动化的工具集,也积累了丰富的云计算架构和分布式系统研发经验,以及源码分析能力,社区又有很多最佳实践考验参考,才得以顺利地完成这个项目。
即使拥有一个出色的微服务开发平台,如果不能很好的界定如何进行服务拆分以及对组织架构进行调整,微服务的实现仍然会困难重重。冯常健认为,服务拆分的基本原则是“高内聚、低耦合”,设计功能高度内聚的服务,每次修改只涉及较少的服务,可以达到快速发布和交付的目的。如果服务间耦合过紧,就会出现对一个服务的修改导致另一个服务被动也需要修改的问题,影响系统功能的交付。全新设计系统的拆分步骤是:数据库独立、代码独立、确定服务间通信方式、服务独立发布与部署;历史遗留系统的服务化改造需要重点关注系统架构的平滑过渡,步骤是:分析业务边界、冻结遗留服务、拆分新服务、订正数据、循环迭代。
对于复杂业务拆分,每个业务并不一定只能拆成一个组件,需要实际分析;业务过于庞大必须进行拆分,拆分出来的必须是相对独立和庞大的业务;如果业务较小但是比较多,类型相似,可以不用着急拆分。对于重耦合业务拆分,先在原有服务中独立功能模块,规范输入输出,形成服务内部的分离;再新建工程,只转流量,不做代码迁移,通过新建的工程对外提供服务,替代老的接口;然后将老工程的接口复制到新工程,在新工程的接口调用上,使用热开关进行容灾;最后优化新工程的逻辑,删除老工程的相关代码。
应用架构的演进也牵连着组织架构的变革。组织架构方面,对微服务至关重要的是组织DevOps化,环境交付、Dockerfile书写提前到开发环节,服务注册、发现、治理、配置等,下沉成为运维团队统一管理的基础设施。如下图为网易杭州研究院DevOps组织架构,数据中心由运维部门管理,上面是云平台组,基于OpenStack的云平台上,包括了PaaS、容器、微服务管理和治理等组件。业务部门的中间件组或者架构组和云平台组沟通密切,共同探讨如何以正确的姿势使用云平台组件;最上面是业务部门的前端组、业务开发组和中台开发组。当然,小团队自主决策也很重要。
谈到轻舟微服务平台的未来,冯常健表示,轻舟微服务平台的开发,是源自业务的驱动,轻舟微服务开发框架的最大愿景,就是让业务系统开发者无需关注和学习治理相关技术、无需修改业务系统代码就可以快速引入服务治理能力。微服务相关技术的未来发展,网易云目前主要关注两个方面:
第一是Service Mesh,它的主要作用就是将服务治理下沉到平台层,进行统一的治理。微服务框架的统一,涉及到多语言、和应用层绑定等问题,无论是Spring Cloud还是Dubbo,都很难完全平台化,所以需要Service Mesh;轻舟已经基于Envoy做优化和改进,提供高性能的微服务通信网络,形成自己的数据面组件,并无缝对接轻舟微服务控制平台。鉴于目前不同业务服务化改造进度不同,有些业务仍用传统虚拟机方式部署,有些业务选择了不同的服务化注册中心,为了让业务能更低成本地接入Service Mesh,轻舟对Istio和Envoy都进行了扩展,使其能支持非容器化环境和多注册中心,满足业务平滑迁移的需求。
第二是AIOps和智能调度,就是通过对于海量数据中心收集的监控数据和业务数据,实现业务的自动调度和参数调整。随着微服务化和容器化,服务的数量会十分的庞大,运维难度大幅度提高,基于AIOps和智能调度提高效率节约成本势在必然。
作为网易云重点打造的微服务平台,轻舟微服务平台有着鲜明的特点:
首先,基于开源、兼容开源:容器平台基于Kubernetes和Docker,服务治理兼容Spring Cloud、Dubbo和Service Mesh,监控追踪采用OpenTracing、Zipkin、Promethus和Jaeger。
其次,低成本、易接入:支持代码零改动接入微服务框架,提供非侵入式探针,支持应用拓扑可视化,支持统一的平台认证&权限管控。
第三,立体化监控:支持实时监控,精准掌控服务健康状况;支持服务拓扑,调用链跟踪可视化呈现;支持多维度关联分析,预防系统级故障。
最后,超大规模的管理能力:容器管理支持单集群3万节点、45万容器的规模,注册中心提供单节点10,000个服务实例的注册能力。
为了实现这些特点,轻舟做了很多深度定制和优化。例如无侵入性的实现,轻舟微服务主要采用Javaagent字节码增强技术,将服务治理逻辑以独立Jar包的方式提供加载。为支持更大的并发,轻舟微服务后端采用全分布式架构,能支持单节点20,000个服务实例同时在线,支持水平扩展,并提供99.99%以上的可用性。
这些特点,都使得轻舟微服务平台能够帮助企业开发团队能够以较小的投入和代价,敏捷迅速的实现微服务架构,真可谓“轻舟已过万重山!”