Eru White Paper
Search…
Introduction
Brief
Projects
History
Benchmark
FAQ
Overview
Conception
Pod
Node
Application
Workload
Runtime
Resource
CPU
Scheduling
Networking
HA
Components
Specs
Quickstart
Installation
Get Started
Check Calico
Powered By
GitBook
HA
eru-core 提供了 Go SDK, 只要客户端使用 SDK 与 eru-core 通讯, 就能自动发现多实例的 eru-core, 并在部分 eru-core 实例宕的时候自动切换到其他实例.
它的实现分为服务端和客户端两部分.
服务端
eru-core 会不断把自己的 outbound IP 注册到 etcd 上, 其中 outbound IP 是通过
net.Dial("8.8.8.8")
后检查 src IP 获得的.
注册到 etcd 上到地址绑定了 lease, 如果没有及时被 keepalive 会被超时删除, 这就是 eru-core 的心跳机制, 如果节点宕, 或者进程崩溃, 进程阻塞, 那么在 keepalive interval 之后会被探测到, 并从可用 eru-core 实例池里剔除.
客户端
eru-core SDK 会注册 eru resolver, 该 resolver 会有个 goroutine watch eru-core API
WatchServiceStatus
, 从而获得最新到可用 core 实例地址. 一旦有变化(新增或者减少), 都会通过 gRPC Resolver 机制动态生效.
gRPC 提供了 LB per Call 的机制, 也就是说用户先后发送两个请求给 eru-core, 每次都会被 Round Robin 重新计算一次, 选择一个可用的链接发送请求, 这比 HTTP1.1 长链接高明不少.
此外 eru-core SDK 还定制了 Interceptor, 让各种 Stream 失败的时候能够重试, 从而新选择一个可用的连接.
Previous
Networking
Next
Components
Last modified
13d ago
Copy link
Outline
服务端
客户端