1.1 微服务架构概述

1.1.1 应用架构的发展

应用是可独立运行的程序代码,提供相对完善的业务功能。目前软件架构有三种架构类型,分别是业务架构、应用架构、技术架构。它们之间的关系是业务架构决定应用架构,技术架构支撑应用架构。架构的发展历程是从单体架构、分布式架构、SOA架构再到微服务架构,如图1-1所示。

图1-1 架构发展历程

1.单体应用架构

单体架构在Java领域可以理解为一个Java Web应用程序,包含表现层、业务层、数据访问层。从Controller到Service再到Dao层,“一杆子捅到底”,没有任何应用拆分,开发完毕之后变成一个超级大型的War部署。简单的单体架构水平分层逻辑如图1-2所示。

图1-2 单体架构水平分层逻辑

单体架构的优点:

❑ 易于开发:开发人员使用当前开发工具在短时间内就可以开发出单体应用。

❑ 易于测试:因为不需要依赖其他接口,测试可以节约很多时间。

❑ 易于部署:你只需要将目录部署在运行环境中即可。

单体架构的缺点:

❑ 灵活度不够:如果程序有任何修改,修改的不只是一个点,而是自上而下地去修改,测试时必须等到整个程序部署完后才能看出效果。在开发过程可能需要等待其他开发人员开发完成后才能完成部署,降低了团队的灵活性。

❑ 降低系统的性能:原本可以直接访问数据库但是现在多了一层。即使只包含一个功能点,也需要在各个层写上代码。

❑ 系统启动慢:一个进程包含了所有业务逻辑,涉及的启动模块过多,导致系统的启动时间延长。

❑ 系统扩展性比较差:增加新东西的时候不能针对单个点增加,要全局性地增加。牵一发而动全身。

2.分布式架构

什么是传统的分布式架构?简单来说,按照业务垂直切分,每个应用都是单体架构,通过API互相调用,如图1-3所示。

图1-3 分布式架构

3.面向服务的SOA架构

面向服务的架构是一种软件体系结构,其应用程序的不同组件通过网络上的通信协议向其他组件提供服务或消费服务,所以也是一种分布式架构。简单来说,SOA是不同业务建立不同的服务,服务之间的数据交互粗粒度可以通过服务接口分级,这样松散耦合提高服务的可重用性,也让业务逻辑变得可组合,并且每个服务可以根据使用情况做出合理的分布式部署,从而让服务变得规范,高性能,高可用。

SOA架构中有两个主要角色:服务提供者(Provider)和服务消费者(Consumer)。阿里开源的Dubbo是SOA的典型实现。

SOA架构的优点:

❑ 把模块拆分,使用接口通信,降低模块之间的耦合度。

❑ 把项目拆分成若干个子项目,不同的团队负责不同的子项目。

❑ 增加功能时只需要增加一个子项目,调用其他系统的接口即可。

❑ 可以灵活地进行分布式部署。

SOA架构的缺点:系统之间的交互需要使用远程通信,接口开发增加工作量。

1.1.2 微服务架构

微服务架构在某种程度上是SOA架构继续发展的下一步。微服务的概念最早源于Martin Fowler的一篇文章《Microservices》。总体来说,微服务是一种架构风格,对于一个大型复杂的业务系统,它的业务功能可以拆分为多个相互独立的微服务,各个微服务之间是松耦合的,通过各种远程协议进行同步/异步通信,各微服务均可以被独立部署、扩/缩容以及升/降级。这里对微服务技术选型做了对比,如表1-1所示。

表1-1 微服务架构技术选型对比

1.1.3 微服务解决方案

现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性。同时支持微服务的技术栈也是多种多样的。下面介绍两种实现微服务的解决方案。

1.基于Spring Cloud的微服务解决方案

Spring Cloud的技术选型是中立的,因此可以随需更换搭配使用,基于Spring Cloud的微服务落地解决方案可以分为三种,如表1-2所示。

表1-2 基于Spring Cloud的三种方案

2.基于Dubbo实现微服务解决方案

2012年,阿里巴巴在GitHub上开源了基于Java的分布式服务治理框架Dubbo,但是Dubbo未来的定位并不是要成为一个微服务的全面解决方案,而是专注于RPC领域,成为微服务生态体系中的一个重要组件。至于微服务化衍生出的服务治理需求,Dubbo正在积极适配开源解决方案,并且已经启动独立的开源项目予以支持,比如最近宣布的开源的Nacos。Nacos的定位是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台。因此基于Dubbo的微服务解决方案是:Dubbo+Nacos+其他。