由于公司目前采用spring-boot微服务架构,每个应用会存在多个实例来保证可用性。而应用与应用之间的调用采用nginx作为桥梁来保证负载均衡。下面将生产上遇到的坑与解决方案分享出来,与大家一起讨论学习。
1、nginx模块
在http的应用中使用了:
ngx_http_upstream_module:负载均衡模块
ngx_http_proxy_module:服务向下转发模块
2、需求及初始配置
由于我们是支付系统,基本不允许交易失败。而某个实例确实会出现超时、错误的情况,在这种情况下我们可以让交易请求向下个实例转发。
upstream backend {
//当某个实例HttpResponse返回内容为proxy_next_upstream的值(下面简称为value)100次后,便将该实例
//移除出列表5s,等待5s后继续向该实例发送请求,如果返回非value,则该实例重新加入轮训列表。
//(起初我认为是在5s内有100次返回为value才移除列表)