我想在网关中实现Hystrix(如zuul)。网关将发现服务A、B或C,假设服务A具有10个实例和10个Api。我的问题是。
命令键决策的最佳实践是什么?服务名称+实例IP+Api名称
这似乎获得了最好的细节级别,因为不同的api,不同的实例失败不会循环破坏另一个,但它可能会占用大量的命令密钥。
这是一个例子。假设我与服务A交谈,有5个服务A的实例,我与具有负载均衡器的服务A谈话,ip如下
- 192.168.1.1
- 192.168.1.2
- 192.168.1.3
- 192.168.1.4
- 192.168.1.5
服务A有4个api,如
- createOrder
- deleteOrder
- updateOrder
- getOrder
现在有许多选项可供选择的命令键使用。
- 服务级别,如serviceA
- 实例级别,如192.168.1.1
- 实例+api级别,如192.168.1.1_getOrder
对于第一个选项,只有一个hystrix命令,它占用更少的cpu或内存,但如果一个api失败,则所有api都是循环中断。
您的HystrixCommandKey
标识一个封装aService.anOperation()
的HystrixCommand
。因此,可以使用复合密钥Service+Command来命名HystrixCommandKey
(但运行服务或IP地址的实例不是)。如果未提供显式名称,则使用HystrixCommand
的类名作为默认的HystrixCommandKey
。
然后,Hystrix Dashboard聚合来自服务集群中运行的每个实例的每个HystrixCommandKey
(Service+Command)的度量。
在您的示例中,它将是serviceA_createOrder
。