今天跟大家分享一个关于微服务架构的服务治理的话题。很多朋友可能认为自己玩过微服务架构,然后可能听说过服务治理,但什么是服务治理呢?有哪些东西,服务治理应该怎么做?这可能会不知所措。那么今天就和大家聊一聊这种微服务架构下的服务治理。单体架构首先说到微服务架构,我们先说说平时大家是怎么玩微服务架构的。其实很简单。之前没有微服务的时候,可能是SpringBoot+SSM架构。只写一个新的系统就可以了。使用SpringBoot创建jar包,然后将jar包部署到线上。安装好系统后,只需使用java-jar命令启动JVM进程,运行我们的代码即可。在使用SpringBoot时,对外接收Http请求的web服务器是内嵌的Tomcat,即基于main方法启动SpringBoot后,里面嵌入了一个Tomcat,Tomcat会对外监听一个端口号,然后我们就为该端口号发起一个Http请求就可以了。如下图所示:微服务架构那么我们这个时候的系统本质上是一个单体系统,那么升级到微服务架构应该是什么样子呢?微服务是指将原来的一个单块系统拆分成很多服务,通过Nacos+Dubbo等服务注册中心和RPC框架调用服务。五年前,业界普遍使用的微服务基础框架是Dubbo+Zookeeper的组合,而三年前,基本过渡到SpringCloud技术栈作为微服务架构。一两年前,业界基本上已经逐渐过渡到SpringCloudAlibaba技术栈,也就是使用Nacos作为服务注册中心,使用Dubbo作为RPC框架,所以我们就以SpringCloudAlibaba的Nacos+Dubbo组合为例.在微服务的情况下,也就是说让每一个服务都注册到Nacos中,然后这个服务需要调用其他的服务,通过Nacos进行服务发现,然后通过Dubbo进行RPC调用。如下图所示:就像这张图,其实就是很多服务互相调用,可以大致理解为微服务架构,因为我们的单块系统被拆分成了很多服务。那么,我们如何对这种微服务架构进行服务治理呢?关于服务治理的注册、发现和负载均衡,首先要跟大家说的是,服务治理的第一件事其实就是服务注册和发现,所以,通过Nacos实现服务注册和发现,已经做好了第一件事的服务治理。好的,关于服务治理的第二件事是什么?其实就是负载均衡。负载均衡是什么意思?其实我们的每一个服务都可以部署多台机器,有多个服务实例。那么一个服务可以发现另一个服务实例的多台机器,应该调用哪一台呢?这时候就必须使用负载均衡算法,找到一台有该算法的机器,然后就可以为那台机器发起RPC调用。这个负载均衡的工作是Dubbo帮我们完成的。如下图所示:服务治理限流熔断接下来这个服务治理的第三件事就是限流熔断,分为两部分,因为限流是用来防止系统不堪重负的,熔断是用来防止系统被拖垮。先说限流,假设你的系统最多只能抵抗每秒1000个请求,此时结果是每秒2000个请求,会发生什么?当然会让你的系统不堪重负,所以这个时候我们要做一个限流,如果超过每秒1000个请求,后面的所有请求都会直接返回访问禁止。如下图所示:然后说熔断。熔断就是说,如果你调用一个系统,系统挂了,那么你每次调用都失败,失败,每次失败你都要阻塞一段时间。你把自己累坏了吗?所以这个时候,就必须使用断路器。如果你发现如果你在一段时间内不能频繁地给别人打电话,你就会在这个时候触发断路器。熔断后每次请求都会直接报错返回。如下图所示:那么谁来给你做限流和断路器呢?SpringCloudAlibaba中的Sentinel可以为你做这件事,所以他负责限流和熔断的工作。服务管理的下一个任务就是配置中心,也就是我们系统的配置,通常是放在src/main/rsource目录下的各种properties和xml文件中。但是如果想在系统部署完成后修改配置,只能在代码中修改配置,然后重新打包部署上线。这也太麻烦了吧?所以如果引入配置中心,系统的一些核心配置直接从配置中心动态加载,然后如果要修改配置,直接在配置中心修改即可。那么在线系统可以直接感知到最新的配置和使用,不需要每次修改配置都打包重新部署。配置中心的工作是Nacos帮我们完成的。如下图所示:服务治理的服务监控那么服务治理的最后一个环节就是服务监控。这个监控包括很多内容,比如监控部署在线上系统中的每台服务器的CPU、内存、磁盘、网络、IO等。以及监控线上系统的JVMGC,包括监控线上系统各个接口的QPS和延迟。同时也可以监控在线微服务系统各个服务之间的调用链路。这些事情通常是在Prometheus和Skywalking两个监控系统的配合下完成的。Skywalking通常可以跟踪我们的微服务调用链接,Prometheus可以监控我们在线系统的各个层级的服务器、JVM和接口。如下图所示:好了,今天给大家介绍的微服务治理的内容就到这里了。
