微服务架构组件详解(8大核心组件)

微服务架构组件详解(8大核心组件)-mikechen

微服务架构组件主要是:服务的发现、注册、路由、熔断、降级、分布式配置等,下面我分别详解@mikechen

1.注册中心

注册系统中所有服务的地方,所有的服务都会注册在这里,如下图所示:

微服务架构组件详解(8大核心组件)-mikechen

关系调用说明:

  •  服务生产者启动时,向服务注册中心注册自己提供的服务;
  •  服务消费者启动时,在服务注册中心订阅自己所需要的服务;
  •  消费者从提供者中调用服务;

 

2.服务注册

首先服务注册与发现是来自于微服务架构的产物。

服务注册指的是将自身服务信息注册到注册中心,服务信息包括:服务所在主机IP、服务的端口号Port、暴露服务协议等信息。

如下图所示:

微服务架构组件详解(8大核心组件)-mikechen

Service B 把自己注册到注册中心,这就叫 服务注册。

当下用于服务注册的工具非常多ZooKeeperConsul,Etcd, 还有Netflix家的Eureka 等等。

不论使用那种工具,服务注册一定是要确保高可用的,否则重则的是所有的服务都没法调用,轻则新的服务不能上线。

 

3.服务发现

服务发现即通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。

如下图所示:

微服务架构组件详解(8大核心组件)-mikechen

ServiceA去注册中心获取服务实例的信息,这就是服务发现。

 

4.负载均衡

当多个服务提供者时,可以根据负载均衡算法,比如:如简单轮询、随机连接等,自动地选择需要调用的服务地址。

例如:Spring Cloud 微服务架构中的Ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,在客户端就进行负载均衡算法分配。

如下图所示:

微服务架构组件详解(8大核心组件)-mikechen

总共有七种负载均衡策略可供选择,可以根据自己的业务场景进行选择:

  1. 轮询RoundRobinRule:这也是Ribbon默认的策略
  2. 随机RandomRule;
  3. 响应时间权重ResponseTimeWeightedRule:为每个服务设置权重,响应时间越短,权重越大;
  4. 最少并发数策略BestAvailableRule;
  5. 重试策略RetryRule;
  6. 可用性敏感策略AvailabilityFilteringRule;
  7. 区域性敏感策略ZoneAvoidanceRule;

 

5.服务熔断

服务熔断其实可以理解为类似于电表的保险丝,一旦某个时刻电压过载,那么保险丝就熔断了。

服务熔断的实现,大体流程如下图所示:

微服务架构组件详解(8大核心组件)-mikechen

对于熔断机制的实现,设计了三种状态:

1.熔断关闭状态(Closed)

服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制。

2.熔断开启状态(Open)

在固定时间窗口内,比如:默认10秒,接口调用出错比率达到一个阈值,会进入熔断开启状态,进入熔断状态后,后续对该服务接口的调用不再经过网络。

3.半熔断状态(Half-Open)

在进入熔断开启状态一段时间之后,比如:Hystrix默认5秒,熔断器会进入半熔断状态。

 

6.服务网关

服务网关也称为API网关,是服务调用的唯一入口。

例如,在微服务架构中,ZuulSpring Cloud中的微服务网关,是为微服务架构中的服务提供了统一的访问入口。

微服务架构组件详解(8大核心组件)-mikechen

Gateway服务网关主要功能,如下图所示:

微服务架构组件详解(8大核心组件)-mikechen

例如包含上图中的Gateway功能:

  1. 服务路由;
  2. 安全认证;
  3. 流量控制;
  4. 日志监控;
  5. 熔断保护等功能。

 

7.服务跟踪

随着微服务架构的流行,服务按照不同的维度进行拆分,在复杂的微服务架构系统中,会形成一个复杂的分布式服务调用链路,如下图所示:

微服务架构组件详解(8大核心组件)-mikechen

面对复杂的调用链路就带来一系列问题:

  • 如何快速发现问题?
  • 如何判断故障影响范围?
  • 如何梳理服务依赖以及依赖的合理性?
  • 如何分析链路性能问题以及实时容量规划?

而链路追踪的出现正是为了解决这种问题,它可以在复杂的服务调用中定位问题。

例如:Spring Cloud Sleuth链路追踪 是 Spring Cloud的链路追踪组件,实现了分布式跟踪解决方案。

 

8.分布式配置中心

将本地化的配置信息,比如:properties、yml等配置信息,注册到配置中心,实现程序包在开发、测试、生产环境的无差别性方便程序迁移。

 

微服务架构组件总结

最后再通过一个图总结下:

微服务架构组件详解(8大核心组件)-mikechen

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法