它无需编程,这样就不需要每一种语言都有一套服务韧性的库。当然Service Mesh也有不同的实现,每一种实现在设置参数时都有它自己的语法格式,理想的情况是它们都遵守统一的接口,希望以后会是这样。
什么时候需要这些技术?
上面提到的技术都不错,但不论你是用程序还是用Service Mesh来实现,都有大量的工作要做,尤其是当服务众多,并且之间的调用关系复杂时。那么你是否应该让所有的服务都具有这些功能呢?我的建议是,在开始时只给最重要的服务增加这些功能,而其他服务可以先放一放。当在生产环境运行一段时间之后,就能发现那些是经常出问题的服务,再根据问题的性质来考虑是否增加这些功能。应用本文中的修饰模式的好处是,它增加和删除修饰功能都非常容易,并且不会影响业务逻辑。
结论:
服务韧性是微服务里非常重要的一项技术,它可以在服务环境不可靠的情况下仍能提供适当的服务,大大提高了服务的容错能力。它使用的技术包括服务超时 (Timeout),服务重试 (Retry),服务限流(Rate Limiting),熔断器 (Circuit Breaker),故障注入(Fault Injection)和舱壁隔离技术(Bulkhead)。你可以用代码也可以用Service Mesh来实现这些功能,Service Mesh是将来的方向。但实现它们需要大量的工作,因此需要考虑清楚到底哪些服务真正需要它们。
源码:
完整源码的github链接
索引:
[1]Go kit
http://gokit.io/examples/stringsvc.html
[2] Circuit Breaker Pattern
https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker
[3]gobreaker
https://github.com/sony/gobreaker
[4]Bulkhead pattern
https://docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead
[5]How it Works
https://github.com/Netflix/Hystrix/wiki/How-it-Works
[6]It takes more than a Circuit Breaker to create a resilient application
https://developers.redhat.com/blog/2017/05/16/it-takes-more-than-a-circuit-breaker-to-create-a-resilient-application/
[7]Netflix/concurrency-limits
https://github.com/Netflix/concurrency-limits
[8]Istio
https://istio.io/
[9]Linkerd
https://linkerd.io/
[10]下一代的微服务架构基础是ServiceMesh?
https://www.sohu.com/a/271138706_355140