我使用环哈希平衡器取得了一些进展
在特使代理服务器中(寻找“哈希”):
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 80
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
codec_type: http2
stat_prefix: ingress_http #just for statistics
route_config:
name: local_route
virtual_hosts:
- name: samplefront_virtualhost
domains:
- "*"
routes:
- match:
prefix: "/mycompany.sample.v1"
grpc: {}
route:
cluster: sampleserver
hash_policy:
header:
header_name: "x-session-hash"
- match:
prefix: "/bbva.sample.admin"
grpc: {}
route:
cluster: sampleadmin
http_filters:
- name: envoy.router
config: {}
clusters:
- name: sampleserver
connect_timeout: 0.25s
type: strict_dns
lb_policy: ring_hash
http2_protocol_options: {}
hosts:
- socket_address:
address: sampleserver
port_value: 80 #Connect to the Sidecard Envoy
- name: sampleadmin
connect_timeout: 0.25s
type: strict_dns
lb_policy: round_robin
http2_protocol_options: {}
hosts:
- socket_address:
address: sampleadmin
port_value: 80 #Connect to the Sidecard Envoy
admin:
access_log_path: "/dev/null"
address:
socket_address:
address: 0.0.0.0
port_value: 8001
在我的消费者中,我在之前创建了一个随机散列,BeginTransaction()
并确保它x-session-hash
每次都在标头中发送,直到Commit(txnId)
它有效,但有一些限制:
当我扩展服务,添加更多节点时,一些操作失败并出现错误upstream connect error or disconnect/reset before headers
。一个节点丢失时故障是绝对可以的,但是添加一个节点时就很难接受了!!!好消息是负载在这两种情况下都会重新平衡。
BeginTransaction
客户端必须在第一次调用(
我会继续调查。