微服务治理是针对微服务架构的服务进行管理与治理的方式,下面重点详解8种微服务治理方式@mikechen
1.服务注册与发现
服务注册是微服务架构中的一个重要概念,用于管理和发现微服务实例的位置和可用性。
如下图所示:
上图Dubbo在容器启动时,就会向服务注册中心注册自己的信息。
包括:服务名称、IP地址、端口号等,注册中心将这些信息存储在一个服务注册表中。
常见的服务注册包括:
- Zookeeper:Dubbo默认就是采用Zookeeper为注册中心。
- Eureka: Netflix开源的服务注册与发现组件,被广泛用于Spring Cloud中。
- Consul: 由HashiCorp开发的服务注册与发现工具,提供了一系列强大的特性。
- Etcd: CoreOS开源的分布式键值存储系统,也可以用于服务注册与发现。
2.服务发现
服务发现是微服务架构中的一个核心概念,用于解决在分布式环境下,服务如何找到其他服务以进行通信的问题。
比如:上面服务已经注册好了,剩下的就是服务发现对应的服务。
例如:一个微服务需要与某个服务进行通信时,它可以向服务注册中心查询特定服务的信息,获取可用的服务实例列表。
这就是所谓的服务发现,通过服务发现帮助维护服务的注册表,并允许其他服务动态地发现和与之通信。
3.负载均衡
客户端在得到服务实例列表后,通常会使用负载均衡机制来选择一个合适的实例来处理请求。
负载均衡的目的是在多个可用实例之间均匀分配请求,以避免某个实例过载而导致性能下降。
负载均衡算法,主要分为如下5类:
1)轮循
轮询就是将请求按顺序轮流分配到后台服务器上,均衡的对待每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
2.加权轮循
在轮询的基础上根据硬件配置不同,按权重分发到不同的服务器。
3.随机
随机:就是通过系统随机函数来选取其中一台进行访问。
4.最少连接
记录每个服务器正在处理的请求数,把新的请求分发到最少连接的服务器上,因为要维护内部状态不推荐。
4.熔断和降级
服务熔断和降级机制用于保护系统免受服务故障或性能下降的影响。
比如:分布式系统环境下,服务间类似依赖非常常见。
如下图所示:
如果各个服务正常运行,那大家齐乐融融,但是如果其中一个服务Service C崩坏掉会出现什么样的情况呢?
如下图所示:
如果服务Service C挂了,长期会把上游相关的B与A等服务也拖挂。
所以这个时候就需要相关的熔断机制了,类似日常生活中电流过大,保险丝就要熔断是一个道理。
通过使用Hystrix熔断的方式,可以保护核心业务不受影响。
5.安全认证与授权
微服务安全认证与授权是在微服务架构中,确保服务之间的通信和数据传输安全的重要方面。
认证
认证:是验证用户或服务的身份的过程。
在微服务架构中,服务之间的通信需要验证服务的身份,以确保请求来自合法的服务,并防止未经授权的服务访问敏感资源。
常见的认证机制包括:基于令牌的认证,例如:OAuth2和JWT和基于证书的认证。
授权
授权是确定用户或服务是否有权访问特定资源或执行特定操作的过程。
在微服务架构中,需要对每个服务的接口和资源进行访问控制,以防止未授权的访问。
常见的授权机制包括基于角色的访问控制(RBAC)和基于权限的访问控制(ABAC)。
6.监控追踪
监控和追踪机制用于实时监控系统的运行状态,并提供有关请求的详细信息,帮助开发者定位和解决问题。
比如,随着服务越来越多,就会出现服务爆炸声增长。
如下图所示:
如果出现了服务故障,请问你是如何从上图海量服务去定位问题,并解决问题的呢?
所以,这个时候就急需要链路追踪来解决。
比如:Spring Cloud Sleuth 是 Spring Cloud的链路追踪组件,实现了分布式跟踪解决方案。
7.配置管理
微服务的配置信息通常集中存储和管理,以便在运行时动态修改配置。
比如:Spring Cloud配置中心 Config是一个用于集中管理和配置微服务的配置中心。
如下图所示:
它提供了一个中心化的存储库,用于存储应用程序的配置,并允许应用程序动态地获取配置信息。
8.服务网关
微服务网关是微服务架构中的入口点,它处理所有外部请求并进行路由、过滤和认证授权等操作。
如下图所示:
上图的Spring Cloud的Zuul组件,它充当了整个系统的前门。
Zuul作为服务网关,负责对外部请求进行路由、认证和授权,并将请求转发到相应的微服务实例,就充当了大爷开门的作用。
总之,微服务治理是确保微服务架构正常运行的关键一环,通过有效的治理实践,可以提高微服务系统的可靠性、安全性和可维护性。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

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