在这里,我画了一个服务发现过程。 enter image description here
在此过程中: 1.通过HaProxy或LVS的客户端连接服务。 2. HaProxy或LVS将客户端请求传递给代理节点。 3.代理节点使用etcd查询服务地址。 4. etcd返回服务地址。 5.代理将服务调用路由到正确的节点。
实际上,吞吐量的瓶颈是过程画面中的步骤1.2-步骤1.3和步骤2.2-步骤2.3。
由于来自etcd的查询不是一项快速的操作,因此etcd群集(基于筏)的性能甚至低于单个节点。
实际上,在大多数情况下,服务节点更新是一个低频事件,但是获取服务节点信息是一个高频事件。
我应该如何改进流程? 在代理中缓存服务节点信息,并且代理订阅从etcd更新的相关服务信息? (但是,如果这样做,则更新服务节点信息和通知代理之间会有间隙。)