1.1. Nacos2.x通信机制是什么?GRPC与HTTP1.1比较,有哪些优势
GRPC
通信方式:
gRPC:gRPC是一种远程过程调用(RPC)框架,基于HTTP/2协议,它支持双向流式通信,适用于多个请求和响应的交互。gRPC通常用于构建分布式系统中的服务之间的通信。
HTTP:HTTP通常是基于请求-响应模型的,客户端发送请求,服务器回复响应。虽然HTTP/2引入了多路复用,但它的主要使用场景仍然是Web浏览器和服务器之间的通信
数据序列化:
gRPC:使用 Protocol Buffers 进行数据序列化,这是一种高效的二进制序列化格式,较小的数据传输大小,更快的序列化和反序列化速度。
HTTP:通常使用 JSON 或 XML 进行数据序列化,这些文本格式相对较大,并且解析速度较慢。
语言支持:
gRPC:提供多种语言的客户端和服务器库,包括但不限于 C++, Java, Python, Go, C#, Node.js 等。
HTTP:HTTP 是一种通用协议,几乎支持所有编程语言。
适用场景:
gRPC:通常适用于微服务架构,特别是需要高性能和低延迟的场景,如实时通信、游戏服务器等。
HTTP:适用于各种类型的应用程序,包括 Web 应用、RESTful API、单页应用等。
1.2. Nacos2.X作为注册中心架构流程
1、建立连接注册服务
2、获取服务列表
客户端怎样知道服务上线线?
3、服务上下线后Nacos注册中心通过长连接通知服务上下线
Nacos注册中心怎样知道服务下线?
4、服务端:
开启定时任务3s一次,超过20s没有给服务端发心跳的客户端,服务端会发请求探活,如果失败则剔除服务,如果成功则更新时间
5、客户端:
客户端检测5s空闲连接(即没有发送请求也没有接收请求),则发送请求到服务端进行服务端健康检查,如果正常则更新时间后返回,如果不正常则重试其他服务
6、定时任务拉取配置,每60s拉取一次(保险机制)
7、集群同步
1.3. Nacos1.x注册中心架构流程
1、服务启动的时候,通过api发起服务注册,来告诉nacos,我可以提供服务了
2、服务消费者在启动的时候会拉取 自已要用的服务的列表。
(这只是启动的时候拉取,那平常有上下线服务怎么办呢?定时拉取)
3、消费者会每10秒进行拉取一下数据。拉取我可以调用的服务。
(如果我们只用定时任务拉取配置,那注册服务会有一定的滞后性,那怎么让它具有实时性呢?下面udp协议)
4、Nacos服务检测到有异常(服务上下线)就会发送UDP协议给客户端进行更新
(为什么是udp写协议?
因为udp协议相对于tcp协议来说,他并不是可靠的协议,但他的优点就是他非常快,他耗时比较短,不需要跟自己目标服务器建立长连接,在服务注册这种场景,我们服务消费者要比服务提供者要多很多,所以每一次 服务的更新,nacos需要和成千上万的消费者,去建立tcp的话,他的性能一定是受不了的,所以他会选择一个udp协议进行通知,那有的同学会问了,udp他不可靠,他通知失败了怎么办? 大家可以看一下第三部,我们消费者每10秒还会拉取一下服务数据信息
上面说是检测到异常,那Nacos怎样判断异常的呢? 心跳,
)
5、客户端会每5秒定时发送心跳到服务端,来维持他的一个健康的检查,
6、Nacos定时任务检测:通过每5秒检查一下心跳信息来判断是否超时,就是用当前时间减去上次一心跳的时间,如果超过15秒则将节点设置为非健康状态并进行广播,如果超过30秒则将节点进行移除,说明节点不可用。
7、集群数据同步任务使用协议:Distro(AP) , Raft(CP)
发表评论