首页 » PHP教程 » 熔断器php技巧_3分钟简述熔断器运用方法

熔断器php技巧_3分钟简述熔断器运用方法

访客 2024-12-08 0

扫一扫用手机浏览

文章目录 [+]

动机:级联故障的问题

在进入熔断器模式之前,让我们来看看它到底要办理什么问题。

熔断器php技巧_3分钟简述熔断器运用方法

当做事 A 考试测验与做事 B 通信时,它会分配一个线程来进行该调用。
在进行调用的时候,有 2 种故障可能发生,以 user 调用 friends 做事为例。

熔断器php技巧_3分钟简述熔断器运用方法
(图片来自网络侵删)

''' user service ''' def get_user_info(user_id: str): try: friends_service.get_friends(user_id) except Exception as e: raise InternalServerError

即时故障:在即时故障中,会立即引发一个非常(如:连接谢绝),并开释做事 A 线程。

超时故障:如果 service_b 须要很长的韶光来相应,当收到做事 A 的新要求时,会有越来越多的线程在等待 service_b。
如果在等待超时的过程中发出了多个要求,这就会耗尽做事 A 的线程池,会使做事 A 瘫痪。

“您的代码不能永久等待一个不会返回的相应,迟早须要放弃等待,希望这不是一个设计方法。
”-Michael T. Nygard,Release It!

下面通过一个社交媒体运用的例子来更好的阐明这个问题。
我们有一个聚合器做事,这是客户端交互的内容,它聚合了一堆做事的结果,包括 User 做事。
User 做事调用 Photos 做事和 Friends 做事,而 Friends 做事又依赖 friends_db。

在这里,friends 做事试图向 friends_db 发出要求,但是,friends_db 并没有立即相应失落败,而是让 friends 做事的线程一贯在等待。
Friends 做事考试测验重试,从而利用更多线程。
随着它收到新要求,更多线程正在等待 friends_db 返回结果。

现在可以看到,Friends 做事现在如何成为 User 做事超时的来源。
User 用尽了它的线程池来等待来自 Friends 做事的要求,就像 Friends 做事是如何等待 friends_db 一样。
现在,我们可以看到 friends_db 中的故障是如何导致间接依赖于它的做事级联失落败的。

终极,聚合器做事也会由于相同的缘故原由而崩溃。
客户端调用了聚合做事,因此我们的系统实际也变得不可用。

我们看到架构的一个组件中的一个缺点是如何导致级联故障,而导致所有其他做事崩溃。

熔断器模式

熔断器常日以拦截器模式/任务链/过滤器的形式实现,它包含3个状态:

关闭:许可拦截器将所有要求通报给上游做事,并将上游做事的相应通报给调用方。

打开:不许可要求通报给上游,默认返回常日是缺点相应。

半开放式:某些要求被许可通报到上游,其他要求被终止并返回默认相应。

下图显示了处于三种状态的熔断器拦截器

让我们看一下熔断器的 Python 示例,可以利用以下方法创建自己的熔断器:

from circuitbreaker import CircuitBreakerclass MyCircuitBreaker(CircuitBreaker): FAILURE_THRESHOLD = 20 RECOVERY_TIMEOUT = 60 EXPECTED_EXCEPTION = RequestException@MyCircuitBreakerdef get_user_info(user_id): try: friends_service.get_friends(user_id) except Exception as e: raise InternalServerError

我们也可以利用 sidecar 模式。
通过这种方法,不必通过熔断器来修正做事,而是利用诸如 Envoy 之类的赞助工具来交付我们的运用序。
该做事的所有出站流量都是通过 envoy 进行代理。
Envoy 支持开箱即用的断路功能。
以下是 Envoy 的断路配置示例:

circuit_breakers: thresholds: - priority: DEFAULT max_connections: 1000 max_requests: 1000 - priority: HIGH max_connections: 2000 max_requests: 2000

最初发布于:

https : //iyer.ai/notes/index.php/2020/06/11/circuit-breakers-in-microservices/

感谢 Nishant M Gandhi 的见地。

参考资源:

http://martinfowler.com/bliki/CircuitBreaker.html

https://pypi.org/project/circuitbreaker/

Release it (Book) https://books.google.com/books/about/Release_It.html?id=Ug9QDwAAQBAJ&source=kp_book_description

Circuit breaking in Envoy: https://www.envoyproxy.io/learn/circuit-breaking

本文由高可用架构翻译,技能原创及架构实践文章,欢迎通过"大众号菜单「联系我们」进行投稿。

高可用架构

改变互联网的构建办法

标签:

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读0 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读0 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读0 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读0 评论0