grpc 和 etcd
gRPC
选择 Http2.0
作为基础开源协议,是考虑到 Http 协议在互联网应用的广泛性。同时因为 Http2.0 支持的 Streaming 和 Duplexing 可以将请求和响应消息进行分片交叉传送,可以大幅提升传输效率,GRPC 特色的 Stream 消息正是使用了 Http2.0 的 Streaming 特性。
gRpc架构图:
grpc原理
-
gRPC消息由netty /http/2 协议负责接入,通过grpc 注册的Http2Framelister将解码后的Http header和Http body 发送到gRPC的NettyServerHandler ,实现netty http/2的消息接入
-
gRPC 的线程模型遵循 Netty 的线程分工原则,即:协议层消息的接收和编解码由 Netty 的 I/O(NioEventLoop) 线程负责;后续应用层的处理由应用线程负责,防止由于应用处理耗时而阻塞 Netty 的 I/O 线程 (因为分工原则,grpc 之间会做频繁的线程切换,如果在一次grpc调用过程中,做了多次I/O线程到应用线程之间的切换,会导致性能的下降 所以一些私有协议不太友好)
grpc模型
异步非阻塞的线程模型
服务端线程模型主要包括
- 服务端的写入,客户端的接入线程(HTTP/2 Acceptor)
- 网络I/O的读写线程
- 服务接口调用线程
客户端线程模型主要包含
- 客户端的链接 (HTTP/2 Connector)
- 网络I/O读写线程
- 接口调用线程
- 响应回调通知线程
Etcd是一种强一致性的分布式键值存储系统,它提供了一种可靠的方法来存储需要被分布式系统或机器集群访问的数据。它可以在网络分区期间优雅地处理leader选举,并且可以容忍机器故障,即使是leader节点。
etcd具备的功能
2.1 提供http api接口
使用标准的HTTP工具(如curl)读取和写入
2.2 键值队存储
将数据存储在分层组织的目录中,就像在标准文件系统中一样。
2.3 监控变化
观察特定键或目录的变化,并对值的变化作出反应。
还有常见的一些功能,比如SSL客户端认证证书
, 基准测试为每个实例1000次写操作/秒
,密钥过期的可选ttl
,Raft协议
等。
3. etcd被k8s使用
etcd是k8s集群管理状态的标配,它存储集群内所有与状态相关数据,比如服务发现与注册,共享配置等,它通过Raft一致性算法以保证强一致性。
分布式系统中的数据分为控制数据和应用数据,etcd处理的数据类型为控制数据,对于很少量的应用数据也可以进行处理。
目前etcd已经被CNCF(Cloud Native Computing Foundtion)收录。