微服务架构组件主要是:服务的发现、注册、路由、熔断、降级、分布式配置等,下面我分别详解@mikechen
1.注册中心
注册系统中所有服务的地方,所有的服务都会注册在这里,如下图所示:
关系调用说明:
- 服务生产者启动时,向服务注册中心注册自己提供的服务;
- 服务消费者启动时,在服务注册中心订阅自己所需要的服务;
- 消费者从提供者中调用服务;
2.服务注册
首先服务注册与发现是来自于微服务架构的产物。
服务注册指的是将自身服务信息注册到注册中心,服务信息包括:服务所在主机IP、服务的端口号Port、暴露服务协议等信息。
如下图所示:
Service B 把自己注册到注册中心,这就叫 服务注册。
当下用于服务注册的工具非常多ZooKeeper,Consul,Etcd, 还有Netflix家的Eureka 等等。
不论使用那种工具,服务注册一定是要确保高可用的,否则重则的是所有的服务都没法调用,轻则新的服务不能上线。
3.服务发现
服务发现即通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。
如下图所示:
ServiceA去注册中心获取服务实例的信息,这就是服务发现。
4.负载均衡
当多个服务提供者时,可以根据负载均衡算法,比如:如简单轮询、随机连接等,自动地选择需要调用的服务地址。
例如:Spring Cloud 微服务架构中的Ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,在客户端就进行负载均衡算法分配。
如下图所示:
总共有七种负载均衡策略可供选择,可以根据自己的业务场景进行选择:
- 轮询RoundRobinRule:这也是Ribbon默认的策略;
- 随机RandomRule;
- 响应时间权重ResponseTimeWeightedRule:为每个服务设置权重,响应时间越短,权重越大;
- 最少并发数策略BestAvailableRule;
- 重试策略RetryRule;
- 可用性敏感策略AvailabilityFilteringRule;
- 区域性敏感策略ZoneAvoidanceRule;
5.服务熔断
服务熔断其实可以理解为类似于电表的保险丝,一旦某个时刻电压过载,那么保险丝就熔断了。
服务熔断的实现,大体流程如下图所示:
对于熔断机制的实现,设计了三种状态:
1.熔断关闭状态(Closed)
服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制。
2.熔断开启状态(Open)
在固定时间窗口内,比如:默认10秒,接口调用出错比率达到一个阈值,会进入熔断开启状态,进入熔断状态后,后续对该服务接口的调用不再经过网络。
3.半熔断状态(Half-Open)
在进入熔断开启状态一段时间之后,比如:Hystrix默认5秒,熔断器会进入半熔断状态。
6.服务网关
服务网关也称为API网关,是服务调用的唯一入口。
例如,在微服务架构中,Zuul是Spring Cloud中的微服务网关,是为微服务架构中的服务提供了统一的访问入口。
Gateway服务网关主要功能,如下图所示:
例如包含上图中的Gateway功能:
- 服务路由;
- 安全认证;
- 流量控制;
- 日志监控;
- 熔断保护等功能。
7.服务跟踪
随着微服务架构的流行,服务按照不同的维度进行拆分,在复杂的微服务架构系统中,会形成一个复杂的分布式服务调用链路,如下图所示:
面对复杂的调用链路就带来一系列问题:
- 如何快速发现问题?
- 如何判断故障影响范围?
- 如何梳理服务依赖以及依赖的合理性?
- 如何分析链路性能问题以及实时容量规划?
而链路追踪的出现正是为了解决这种问题,它可以在复杂的服务调用中定位问题。
例如:Spring Cloud Sleuth链路追踪 是 Spring Cloud的链路追踪组件,实现了分布式跟踪解决方案。
8.分布式配置中心
将本地化的配置信息,比如:properties、yml等配置信息,注册到配置中心,实现程序包在开发、测试、生产环境的无差别性方便程序迁移。
微服务架构组件总结
最后再通过一个图总结下:
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》