北京道达天际科技有限公司 北京 100089
在互联网初期,业务比较单一,一个小型的应用服务就可满足用户需求,典型代表就是一个应用、一个数据库、一个Web容器,弹体架构的应用服务就可以正常运行[1]。
在单体架构发展一段时间之后,系统为了应对更大的数据量,就会进行不同的层级划分,每个层级有对应的职责,UI 层负责和用户进行交互、业务逻辑层负责具体的业务功能、数据库层负责和上层进行数据交换和存储。
随着系统的进一步扩大,系统之间的调用关系呈指数上升,服务的SOA化应运而生,SOA代表面向服务的架构,将应用程序按照不同的职责划分为不同的模块,不同的模块直接通过特定的协议和接口进行交互。
随着不断地对系统进行优化,服务个体的独立性越来越强,业务拆分的粒度越来越细,业务系统需要彻底进行组件化和服务化,此时就需要一种更适合的架构来支撑整个系统的运行,微服务架构由之而来,其实微服务架构是SOA架构思想的一种扩展[2]。
目前,国内使用 Spring Cloud 技术的公司并不多见,不是因为 Spring Cloud 不好,主要原因有以下几点:
(1)Spring Cloud 中文文档较少,对于在使用过程中出现的问题,没有太多的解决方案获取路径。
(2)国内的互联网公司以及互联网技术日新月异,针对很多系统而言,国内的很多互联网公司发布的开源架构也可满足需求,且相关文档较为丰富,出现问题时的解决方案较多。
(3)大型公司基本都有自己的分布式解决方案,而中小型公司的系统体量以及业务场景不需要微服务即可满足,所以这些中小型公司就没有采用Spring Cloud的必要性。
Spring cloud基于Spring Boot提供了一套微服解决方案,为开发人员提供了快速构建分布式系统的工具,并利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,可做到一键启动和部署。具体优点如下:
(1)提供良好的开箱即用经验的典型用例和可扩展性机制覆盖。
(2)服务拆分粒度更细,对于资源的重复利用以及开发的效率有很大提升。
(3)可以更精准的制定优化服务方案,系统的可维护性较高[3]。
(4)微服务架构采用去中心化思想,服务之间采用Restful等轻量级通讯,比ESB更轻量。
(5)适于互联网时代,产品迭代周期更短。
但是Spring Cloud除了以上优势外,还有许多劣势,详细如下:
(1)微服务过多,治理成本高,系统维护的成本较高。
(2)分布式系统开发的成本高对研发团队的压力大。
Spring Cloud包含了许多子项目,这些子项目中的众多的组件帮助使用者方便地完成服务注册和发现、服务调用方式、断路器、负载均衡、服务路由和过滤、分布式配置、集群选主,分布式消息等功能,主要功能详细介绍如下:
Eureka意为古希腊语:发现。Eureka由Eureka Server和Eureka Client组成,Eureka Server 是服务的注册中心,用于管理注册服务的列表。
Netflix Ribbon是负责进行客户端负载均衡的组件;一般与Rest Template结合,在访问Eureka Client提供的服务时进行负载均衡处理。也就是说,Ribbon用于服务调用者向被调用者进行服务调用,并且如果服务者有多个节点时,会进行客户端的负载均衡处理[4];
Netf lix Feign与Ribbon功能类似,用于调用方与被调用方的服务调用,同时进行客户端负载均衡的处理;不过它能提供类似本地调用的方式调用远程的Eureka Client提供的服务;它实际上是在Ribbon基础上进行了进一步的封装来提高调用服务的简便性。
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,能够保证在一个依赖出现问题的情况下,不会导致整体服务失败,避免级联故障,以提供分布式系统的弹性。
Netfix Zuul是让所有的外部调用都要先经过一个总的入口,这个总的入口就相当于一道墙,把外部与内部的所有服务接口隔开,所有外部调用都要先经过这个总入口,由这个总的入口来决定,要调用哪个服务。
Spring Cloud Config是一个基于http协议的远程配置实现方式。通过统一的配置管理服务器进行配置管理,客户端通过https协议主动地拉取服务的配置信息,完成配置获取。
Spring Cloud Bus通过轻量消息代理连接各个分布的节点。用于广播状态的变化或其他消息指令。其中一个核心思想是通过分布式的启动器对spring boot应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式是用AMQP消息代理作为通道。
Spring Cloud Security是Spring提供的一个安全框架,提供认证和授权功能,最主要的是它提供了简单的使用方式,同时又有很高的灵活性[5]。
通过以上对Spring Cloud的描述可以看出,虽然Spring Cloud有许多缺点,但就总体而言,Spring Cloud的优势大于劣势,目前Spring Cloud分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,将各个服务进行解耦,很好地解决了系统臃肿、高可用等问题,为用户带来了更好的使用体验,此外还提供了一系列分布式系统快速构建的工具极大地简化了研发人员的开发工作。