作者回复: 感谢认可,非常好的问题,从原理上简单分析来看,若3个节点增大到5个节点,写请求至少要同步到3个节点,性能会略微下降,读请求的性能,主要是线性读涉及到与Leader交互,若写请求QPS非常小,Leader还未出现瓶颈的情况下,我认为是可以适当提升线性读性能的。 我简单压测了以下,也验证结果符合预期。 下面是3个节点的压测数据(写QPS为10): Summary: Total: 2.7759 secs. Slowest: 0.2266 secs. Fastest: 0.0010 secs. Average: 0.0092 secs. Stddev: 0.0042 secs. Requests/sec: 108072.0685 下面是5个节点的测试结果,写QPS同样5. Summary: Total: 0.7235 secs. Slowest: 0.0530 secs. Fastest: 0.0009 secs. Average: 0.0070 secs. Stddev: 0.0048 secs. Requests/sec: 138215.9303 写QPS为5的情况下,非SSD磁盘集群,3个节点线性读性能为108072.0685/s, 5个节点线性读性能为138215.9303/s。
作者回复: 证书认证它不需要调用Authenticate接口,这个接口专门是用来校验用户名密码用的。token机制也是为了优化密码认证性能,避免频繁调用Authenticate接口而设计出来的,因此它也跟证书认证没有关系。 一般使用证书认证,都是长连接,在HTTPS连接建立时会有一定的开销,但是后续请求都不需要发起任何昂贵的认证操作,客户端证书的CN名字就是请求的用户名。 建议你详细看看05鉴权篇。
作者回复: cache是指应用层的,比如kubernetes中的informer机制,你可以参考下client-go的实现,https://github.com/kubernetes/client-go/tree/master/tools/cache,宕机、重启后需要重新发起读请求向etcd查询最新的数据来填充cache, 随后通过watch机制监听后续数据变化,有新的key-value变化就更新cache