服务网关Netflix/zuul优化实践

这两天对微服务网关进行压力测试发现各种问题,并都一一解决,总结记录一下。

问题

  • SHORTCIRCUIT
  • could not acquire a semaphore for execution and no fallback available
  • timed-out and no fallback available

以上报错都可以通过调整zuul的参数进行解决。

解决方法

Hystrix隔离策略采用的SEMAPHORE的方式,还有一个是THREAD(一般对于公网服务使用)
具体可以了解一下zuul的两种隔离机制

1
2
3
4
5
6
7
8
9
10
zuul:
retryable: true
add-host-header: true
routes:
generalservice:
path: /g/**
sensitiveHeaders: "Access-Control-Allow-Origin,Access-Control-Allow-Credentials,Access-Control-Expose-Headers,Vary"
serviceId: xx
semaphore:
maxSemaphores: 5000 //设置相应的值
1
2
3
4
5
6
7
8
9
10
11
12
ribbon:
# ribbon重试超时时间
ConnectTimeout: 1000
# 建立连接后的超时时间
ReadTimeout: 5000
# 对所有操作请求都进行重试
OkToRetryOnAllOperations: true
# 切换实例的重试次数
MaxAutoRetriesNextServer: 1
# 对当前实例的重试次数
MaxAutoRetries: 0
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 13000 // > (ConnectTimeout + ReadTimeout) * MaxAutoRetriesNextServer

问题

  • Method queryTotal execution error

解决方法

这个问题解决方法见https://github.com/baomidou/mybatis-plus/issues/633

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器