为什么用SpringCloud搭建微服务
什么是微服务
既然SpringCloud是专门用于开发“微服务”的,那么首先我们来了解一下,什么是“微服务”?
微服务(microservice) 一词最早由Martin Fowler与James Lewis于2014年共同提出来的,它是一种新的软件架构风格,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是送耦合的,通过RPC或者是Rest协议来进行通信,可以按照业务领域来划分成独立的单元,比如一个电商系统可以分割成会员、订单、商品等不同的小型服务,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。
什么是SpringCloud
SpringCloud是由著名的spring团队基于Java语言设计的用于开发微服务应用的一系列组件集合,它依赖springboot,拥有非常多的组件,涉及到了微服务的方方面面。SpringCloud诞生的时间并不长,正式推出第一版的时间是2015年,距今也就三年多一点的时间,但SpringCloud已经足够强大,知名度也越来越高,随着Netflix等社区的大力推动下越来越完善,将来很大可能会成为微服务的开发标准。
为什么要用SpringCloud来开发微服务项目
按照Martin Fowler 给出的定义:微服务中的“服务”是一个独立运行的单元组件,每个单元组件运行在独立的进程中,组件与组件之间通常使用HTTP 这种轻量级的通信机制进行通信。基于这样的说法,微服务应该具有以下的特点:
体积较大,代码较多的大型应用划分成多个服务组件,单个服务代码量小,易于维护;
每个服务能独立部署,也就意味着服务有自己的基础组件,比如数据库,缓存等;
服务之间松耦合,用http或者rpc协议等通信方式进行通信,且具有容错能力;
单个服务能够集群部署;
整个微服务系统有链路追踪的能力,万一其中一个服务挂了影响其他服务可以通过链路查找;
整个微服务系统有一整套安全机制,包括安全校验等;
从这几点可以看出,微服务系统的技术要求是很高的,可以这么说,在SpringCloud推出之前,市面上是没有一套完整的技术框架能满足微服务开发的要求的 (强如阿里官方推出的dubbo,也存在着很多技术实现上的缺陷),那么SpringCloud为什么这么受大家青睐呢?原因是因为SpringCloud提供了一系列组件,这些组件几乎可以满足微服务开发需求中的所有技术要求,只需要技术人员按照自己的业务需要来搭建即可。
SpringCloud的常用组件
服务注册和发现组件:Eureka。利用Eureka组件可以很轻松实现服务的注册和消费,一般是搭建一个eureka的注册中心,可以让其他服务在上面注册,并以此作为通信中介来管理微服务之间的联系。
服务的负载均衡:Ribbon。通过和Eureka、Zuul等组件进行搭配,很容易对服务做负载均衡,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡算法,选择一个服务提供者的实例,向该实例消费。
服务的熔断器:Hystrix。在微服务实际项目中,服务之间的调用错综复杂,可能一个服务因为某种原因不可用,然后第二个调用它的服务就处于阻塞状态,然后调用第二个服务的其他服务也不可用,以此类推,会给项目运行带来很严重的后果,基于此种情况,Hystrix继承了分布式系统的熔断器机制,作用就是当用户请求一个服务的失败次数超过一定的阈值后,熔断器会自动启动,停止所有的服务,同时,Hystrix还提供了服务降级功能以及熔断器的健康监测。
路由网关组件:Zuul。内部的API的接口通过Zuul暴露给外界使用,内部的服务调用不直接提供API接口,这样做的好处是可以隐藏内部服务,直接通过网关层来做控制调用哪个服务实例。同时,网关层也可以做一些安全验证,防止非法的请求操作API接口,安全而且容易维护。
服务配置中心:Spring Cloud Config。多个微服务有各自的配置文件,随着服务的增加,配置文件的数量也在不断增多,这时候需要有一个配置中心来统一管理,启动服务实例后直接访问配置中心即可。Spring Cloud Config 包括Server端和Client 端, Server 端读取本地仓库或者远程仓库的配置文件,所有的Client 向Server 读取配置信息,从而达到配置文件统一管理的目的。
链路追踪:Spring Cloud Sleuth。微服务系统中各个服务的调用关系错综复杂,所以微服务系统必须有追踪链路的功能,通过Sleuth可以实时跟进用户的请求有哪些服务参与,出了问题能够马上定位。
安全模块组件:Spring Cloud Security。是对Spring Security 的封装,通常配合0Auth2使用来保护微服务系统的安全。
SpringCloud还有很多功能强大的组件,几乎可以说解决了人们对微服务系统的所有需求,所以,SpringCloud的火爆也就不难理解了。