一、微服务拆分背景
云并非把原先在物理服务器上跑的东西放到虚拟机里跑,真正的云化不仅是基础设施和平台的事情,应用也要做出改变,改变传统的做法,实现云化的应用——应用的架构、应用的开发方式、应用部署和维护技术都要做出改变,真正的发挥云的弹性、动态调度、自动伸缩……一些传统IT所不具备的能力。这里说的“云化的应用”也就是“云原生应用”。为了更好的适应云上的开发和交付,需要涉及一些技术,如容器技术和微服务架构等。
传统应用开发时,将众多模块统一构建成一个单一庞大的部署包,导致更新时会将系统的所有服务都中断。而在微服务的场景中,所有功能都是由一个或多个服务提供,当某个服务需要更新和维护时,只需要升级影响该业务的服务,不需要中断其他服务,这样其他服务可以正常对外提供服务。而且,微服务之间相对独立,可以有各自的开发周期,相互之间不会有很强的捆绑关系,有助于加快系统整体迭代更新的效率,更加明确各自的权责关系。
微服务的核心理念就是将庞大的单体架构拆分成多个相对较小的单体应用,这些单体应用可以独立进行开发、测试和部署,通过对这些单体应用进行编排和组合最终提供完整的服务,从而提高应用开发和交付的效率。
二、微服务设计方案
基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们提供一套服务快速开发、部署、运维管理、持续开发持续集成持续部署的流程。平台提供基础设施、中间件、数据服务、云服务器等资源,开发人员只需要开发业务代码并提交到平台代码库,做一些必要的配置,系统会自动构建、部署,实现应用的敏捷开发、快速迭代。
1.微服务逻辑架构
接下来介绍微服务架构以及需要那些框架或组件来支持微服务架构。为了直接明了的展示微服务架构的组成,未来的系统架构如下图所示:
2. 微服务实现方案
从上图可以看出,微服务访问大致路径为:外部请求 → 负载均衡 → 服务网关(GateWay)→ 微服务 → 数据服务/消息服务:
服务网关和微服务都会用到服务注册和发现来调用依赖的其他服务,各服务集群都能通过配置中心服务来获得配置信息。
实施微服务需要投入大量的技术力量来开发基础设施,从头开始对我们来说显然是不现实的。业界已经有非常优秀的开源框架供我们参考使用。目前业界比较成熟的微服务框架有Netflix、Spring Cloud和阿里的Dubbo等。Spring Cloud是基于Spring Boot的一整套实现微服务的框架,它提供了开发微服务所需的组件:
(1)当客户端请求服务时,应用网关将请求动态转发;
(2)负载均衡器会根据服务网关的配置实现负载均衡;
(3) 服务注册与发现获知请求的服务,在服务注册中心获得服务;
(4)微服务向客户端提供服务时,会读取在配置中心配置的统一配置;
(5)熔断器负责监控服务的熔断情况。
因此基于Spring Cloud的分布式应用系统框架是实现微服务架构的最佳解决方案。