由于微服务给系统开发带来了一些问题和挑战,如服务调用的复杂性、分布式事务的处理、服务的动态管理等,为了更好地解决这些问题和挑战,各种微服务治理的组件应运而生,充当微服务架构的基石和支撑,常用组件如下表:
接下里,对微服务的各个组件和常见实现做一个简单通俗的解释:
1.注册中心:用于服务的注册与发现,管理微服务的地址信息,常见的实现包括:
(1)Spring Cloud Netflix: Eureka、Consul;
(2)Spring Cloud Alibaba: Nacos。
2.配置中心:用于集中管理微服务的配置信息,可以动态修改配置而不需要重启服务(配置中心不是必须项,但是一般标准的微服务架构都用用到),常见的实现包括:
(1)Spring Cloud Netflix: Spring Cloud Config;
(2)Spring Cloud Alibaba: Nacos Config。
3.远程调用:用于在不同的微服务之间进行通信和协作,常见的实现保包括:
(1)RESTfulAPl:如RestTemplate(用的比较少,因为需要指定具体的微服务名和IP端口)、Feign;
(2)RPC(远程过程调用):如Dubbo、gRPC。
4.API网关:作为微服务架构的入口,统一暴露服务,并提供路由、负载均衡、安全认证等功能。常见的实现包括:
(1)Spring Cloud Netflix:Zuul、Gateway;
(2)Spring Cloud Alibaba:Gateway、Apisix(用的比较少)等。
5.分布式事务:保证跨多个微服务的一致性和原子性操作(刚开始的微服务架构中,不一定要这用这个组件,因为分布式事务通常会多一个服务出来,会提升服务器成本,所以通常在保证业务不出错的情况下,也用不到分布式事务,它一般在一致性要求比较的高的架构中需要用到),常见的实现包括:
Spring Cloud Alibaba: Seata
6.熔断器:用于防止微服务之间的故障扩散,提高系统的容错能力(在高并发的项目中,某一个服务出来问题,如果不机制中断,比如A服务访问B服务,B服务访问C服务,如果C服务出问题,就可能导致所有的线程都堆积在B服务,有可能就会导致B服务不可用,从而导致怎么个系统都崩溃,也就是常说的服务雪崩),常见的实现包括:
(1)Spring Cloud Netflix:Hystrix;
(2)Spring Cloud Alibaba::Sentinel、Resilience4j(用的比较少)。
7.限流和降级:用于防止微服务过载,对请求进行限制和降级处理(一般也是高并发项目才会用到;降级就是比如A调用B,B调用C,当C不可用的时候,我们需要另一个方案防止系统出错;限流就是在高并发请求的情况下来限制洪峰流量,在服务器扛不住的情况下作为一种兜底手段),常见的实现包括:
(1)Spring Cloud Netflix: Hystrix;
(2)Spring Cloud Alibaba:Sentine。
8.分布式追踪和监控:用于跟踪和监控微服务的请求流程和性能指标(业务的请求可能涉及到很多服务组成的一条链路,此时需要定位到是哪个服务出现的错误,定位就非常难),常见的实现包括:
(1)Spring Cloud Netflix:Spring Cloud Sleuth + Zipkin;
(2)Spring Cloud Alibaba: SkyWalking、Sentinel Dashboard。