2.2.1 服务化原则
在软件开发过程中,当代码数量与开发团队规模都扩张到一定程度后,就需要重构应用,通过模块化与组件化的手段分离关注点,降低应用的复杂度,提升软件的开发效率,降低维护成本。
如图2-2所示,随着业务的不断发展,单体应用能够承载的容量将逐渐到达上限,即使通过应用改造来突破垂直扩展(Scale Up)的瓶颈,并将其转化为支撑水平扩展(Scale Out)的能力,在全局并发访问的情况下,也依然会面临数据计算复杂度和存储容量的问题。因此,需要将单体应用进一步拆分,按业务边界重新划分成分布式应用,使应用与应用之间不再直接共享数据,而是通过约定好的契约进行通信,以提高扩展性。
图2-2 应用服务化扩展
服务化设计原则是指通过服务化架构拆分不同生命周期的业务单元,实现业务单元的独立迭代,从而加快整体的迭代速度,保证迭代的稳定性。同时,服务化架构采用的是面向接口编程方式,增加了软件的复用程度,增强了水平扩展的能力。服务化设计原则还强调在架构层面抽象化业务模块之间的关系,从而帮助业务模块实现基于服务流量(而非网络流量)的策略控制和治理,而无须关注这些服务是基于何种编程语言开发的。
有关服务化设计原则的实践在业界已有很多成功案例。其中影响最广、最为业界称道的是Netflix在生产系统上所进行的大规模微服务化实践。通过这次实践,Netflix在全球不仅承接了多达1.67亿订阅用户以及全球互联网带宽容量15%以上的流量,而且在开源领域贡献了Eureka、Zuul、Hystrix等出色的微服务组件。
不仅海外公司正在不断进行服务化实践,国内公司对服务化也有很高的认知。随着近几年互联网化的发展,无论是新锐互联网公司,还是传统大型企业,在服务化实践上都有很好的实践和成功案例。阿里巴巴的服务化实践发端于2008年的五彩石项目,历经10年的发展,稳定支撑历年大促活动。以2019年“双11”当天数据为例,阿里巴巴的分布式系统创单峰值为每秒54.4万笔,实时计算处理为每秒25.5亿笔。阿里巴巴在服务化领域的实践,已通过Apache Dubbo、Nacos、Sentinel、Seata、ChaosBlade等开源项目分享给业界,同时,这些组件与Spring Cloud的集成Spring Cloud Alibaba已成为Spring Cloud Netflix的继任者。
虽然随着云原生浪潮的兴起,服务化原则不断演进、落地于实际业务,但企业在实际落地过程中也会遇到不少的挑战。比如,与自建数据中心相比,公有云下的服务化可能存在巨大的资源池,使得机器错误率显著提高;按需付费增加了扩缩容的操作频度;新的环境要求应用启动更快、应用与应用之间无强依赖关系、应用能够在不同规格的节点之间随意调度等诸多需要考虑的实际问题。但可以预见的是,这些问题会随着云原生架构的不断演进而得到逐一解决。