1、背景介绍
我目前练习的简单的项目,已经完成了使用Eureka作为服务注册中心的技术,搭建了一个以7001为端口的服务注册中心模块;一个以8001为端口的服务提供者模块(真正的后端业务逻辑代码,包含了数据库);一个以90为端口的服务消费者模块,这个模块中的方法,会通过发送HTTP请求的方式,调用以8001为端口的微服务模块的业务逻辑方法。
2、本篇博客的目的
在完成了最最最简单的一个微服务项目以后,我想简单的做一个总结,介绍一下Eureka的工作过程和接下来我们为什么要使用集群。
3、Eureka的工作过程与原理
由于我本人对Eureka的学习掌握还处于比较浅显的阶段,因此在这里我先推荐一篇博客,讲述的也是Eureka的工作原理,希望能够有所帮助:
https://blog.csdn.net/u014401141/article/details/105420076/
EurakaServer的两大功能分别是服务注册功能和服务发现功能。服务注册功能就是将服务的注册信息注册进服务注册中心;服务发现功能就是从注册中心上获取服务信息。这个功能在EurakaServer集群上体现的更好;它的内部有一张服务注册表,本质就是键值对,key对应服务名,也就是Application文件中,spring.application.name属性的值,value对应着调用地址;
就拿项目举例,简单说一下EurekaServer的工作过程:
1、首先要启动EurekaServer(也就是服务注册中心)。因为无论是服务提供者,还是服务消费者,甚至是后来的EurekaServer集群中的一个EurekaServer,它们都是EurekaClient,都需要注册到服务注册中心EurekaServer上去。
2、把所有的微服务模块,也就是EurekaClient,全部启动。这样启动以后,就会把自身的有关信息,比如服务名,注册到服务注册中心的服务注册表上去。
3、当第一次在浏览器键入一个地址以后,会先去EurekaServer获取实际的RPC远程调用地址,并且在本地缓存服务注册表(本地的缓存是默认每30秒更新的),然后在获得调用地址以后,底层利用HttpClient技术实现远程调用。
另外,EurekaServer还有自我保护机制(当大面积发生心跳失败的时候,启用自我保护机制,保证可用性),每隔一定时间间隔Client端发送心跳给Server端确保正常,Client不正常以后一定间隔内除名的功能。在这里我就不一 一的详细解释了,我上面的链接的博客里面讲的更详细。
4、为什么要使用集群?
在上面,我们提到了RPC(远程服务调用),RPC的核心就是高可用,这也是我们通常所要求的的,不能说我们动不动就遇到服务不可用,404的情况。
想象一下,如果服务注册中心只有一个的话,一旦遇到了什么意外情况,服务注册中心宕机了,那么虽然我们的EurekaClient端缓存的有服务注册表,但是我们现在的服务注册功能肯定是不能用了,这样就可以认为整个微服务的环境不能使用了。
所以我们要搭建EurekaServer的集群,这样就在一定程度上能够保证,当一个Server不能使用的时候,由于很多个Server之间是互相连接注册的,那么我们就可以使用别的Server,这就像是一个城市道路网一样。
同样的道理,我们也可以在EurekaClient端搭建集群,也用来防止出现有一个服务不可用的情况,就比如提供多个服务提供者的模块,它们提供的业务逻辑服务都是一样的,把它们连接起来,这样就可以实现一定程度上的可用性了。
多说一句,我们这样简单的实现了集群以后,后期还要使用到负载均衡和故障容错的问题。