微服务是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间采用轻量级的通信机制互相沟通。
目前国内企业使用的微服务框架主要有:Spring Cloud、Dubbo、Spring Cloud Alibaba、ServiceMesh,下面分别详解@mikechen
Spring Cloud微服务框架
Spring Cloud微服务框架,主要包含如下组件:
1.Eureka注册中心
拆分成多个服务之后,需要管理多个服务,Eureka 作为 Spring Cloud 框架的注册中心,起到服务注册和服务发现的作用。
上图简要描述了Eureka的基本架构,由3个角色组成:
1)Service Provider: 暴露服务的服务提供方;
2)Service Consumer:调用远程服务的服务消费方;
3)EureKa Server: 服务注册中心和服务发现中心;
2.Zuul 服务网关
Zuul 是 Spring Cloud 子项目的核心组件之一,可以作为微服务架构中的 API 网关使用,支持动态路由与过滤功能。
Zuul就是微服务网关的一种实现,Zuul作用:类似我们小区的保安,用于保护基本的安全等的作用。
Zuul 本质上是一个Web servlet应用,为微服务架构中的服务提供了统一的访问入口,客户端通过 API 网关访问相关服务。
3.Hystrix断路器
Hystrix的主要作用就是:提供服务隔离、熔断、降级机制。
4.Ribbon负载均衡
Ribbon主要作用是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。
当多个服务提供者时,Ribbon 可以根据负载均衡的算法,比如:如简单轮询、随机连接等,自动地选择需要调用的服务地址。
5.Feign远程调用方式
Feign是Spring Cloud组件中的一个轻量级Restful的HTTP服务客户端,通过 接口 + 注解的方式发起 HTTP 请求调用。
Feign 主要是帮助我们方便进行Rest API服务间的调用,Feign最大的作用就是减少 HTTP 远程调用的复杂性。
Feign实现了像调用本地方法一样调用远程方法,无感知远程HTTP 请求,类似于Dubbo Consumer直接调用Provider的接口方法。
Dubbo微服务框架
Dubbo是一款Java RPC框架,致力于提供高性能的RPC远程服务调用方案。
Dubbo主要包含如下几个核心组件:
1)注册中心(registry)
生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。
2)消费者(consumer)
客户端,从注册中心获取到方法,可以调用生产者中的方法。
3)生产者(provider)
服务端,生产内容,生产前需要依赖容器(先启动容器)。
4)容器(container)
生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),
5)监控(Monitor)
统计服务的调用次数与时间等。
Dubbo只是实现了服务治理,而Spring Cloud项目分别覆盖了微服务架构下的众多部件,而服务治理只是其中的一个方面。
所以后期,Dubbo所属公司Alibaba就把Spring Cloud扩展了,包含了所有微服务架构的组件,升级为Spring Cloud Alibaba微服务框架,Dubbo就变成了其中的通信组件。
Spring Cloud Alibaba微服框架
Spring Cloud Alibaba是阿里研发的一套微服务架构的落地技术方案,可以很好的兼容SpringCloud,可以简要理解为Spring Cloud的升级版。
Spring Cloud Alibaba体系包含如下图所示:
1.Sentinel流量控制
Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。
Sentinel的核心功能,如下图所示:
2.Nacos服务配置
Nacos是SpringCloudAlibaba架构中最重要的组件,Nacos 主要解决服务发现、配置和管理微服务。
3.RocketMQ消息中间件
RocketMQ是一个纯java、分布式、队列模型的开源消息中间件。
4.Dubbo远程通信
Dubbo是一款Java RPC框架,致力于提供高性能的RPC远程服务调用方案。
Dubbo角色,主要包含如下几个核心组件:
1)注册中心(registry)
生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。
2)消费者(consumer)
客户端,从注册中心获取到方法,可以调用生产者中的方法。
3)生产者(provider)
服务端,生产内容,生产前需要依赖容器(先启动容器)。
4)容器(container)
生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),
5)监控(Monitor)
统计服务的调用次数与时间等。
5.Seata分布式事务
Seata是一款阿里开源的分布式事务解决方案,Seata致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
Seata事务管理中有三个重要的组件角色,如下图所示:
三个组件相互协作,TC 以 Server 形式独立部署,TM和RM集成在应用中启动。
1.TC (Transaction Coordinator) 事务协调者
TC:维护全局和分支事务的状态,协调全局事务提交或回滚。
2.TM (Transaction Manager) 事务管理器
TM:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
3.RM (Resource Manager) -资源管理器
RM:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Service Mesh微服务框架
目前下一代微服务架构就是服务网格Service Mesh,Service Mesh主流框架有Linkerd和Istio,其中Istio有大厂加持所以呼声更高。
Service Mesh,是一个形象化的词语表达:Service(服务)和Mesh(网格),它描述了服务间的依赖形态,就像下面这张网一样。
ServiceMesh一般的架构如下图所示:
Service Mesh架构图从上图可以看到,业务所有的流量都转发到Service Mesh的代理服务Sidecar中。
Sidecar也称为边车模式,因为类似连接到摩托车的边车,从而得名。
如下图所示:
在Sidecar模式中,“边车”与父应用程序(即业务服务)是两个独立的进程,“边车”附加到业务服务,并为应用提供支持功能,如微服务架构中的基本通信。
总体来说,Service Mesh帮助应用程序在复杂的软件架构和网络中建立稳定的通信机制。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》