Python 的 asyncio 的高可用性
High availability for Python's asyncio
我正在尝试使用 Python 的 asyncio
模块创建一个异步应用程序。但是,我在文档中可以找到的所有实现都是基于单个事件循环的。
有没有什么方法可以启动多个事件循环 运行 同一个应用程序,这样我就可以实现高可用性和容错?换句话说,我想通过插入新节点来扩展我的应用程序,这些节点将在负载均衡器后面共享协程的执行。
我知道异步编程和线程安全之间存在固有问题,也许我的想法根本不可能。如果是这样,如何在异步架构上避免这种 SPOF?
处理这个问题的标准方法是启动多个服务器进程(每个进程都有自己的事件循环),前面有一个负载平衡器。每个这样的进程通常不能使用超过一个 CPU 个内核,因此您可能希望拥有与内核一样多的进程。
我以前做过。我什至编写了代码来监控我生成的进程。但事实证明 Python 和 asyncio 本身非常稳定,我从未见过导致整个事件循环停止的严重错误。所以我不建议仅仅为了高可用性而生成多个进程。
代码在这里,如果你有兴趣:https://github.com/l04m33/shinpachi
您可能需要查看 shinpachi/__init__.py
和 shinpachi/processes.py
。
我正在尝试使用 Python 的 asyncio
模块创建一个异步应用程序。但是,我在文档中可以找到的所有实现都是基于单个事件循环的。
有没有什么方法可以启动多个事件循环 运行 同一个应用程序,这样我就可以实现高可用性和容错?换句话说,我想通过插入新节点来扩展我的应用程序,这些节点将在负载均衡器后面共享协程的执行。
我知道异步编程和线程安全之间存在固有问题,也许我的想法根本不可能。如果是这样,如何在异步架构上避免这种 SPOF?
处理这个问题的标准方法是启动多个服务器进程(每个进程都有自己的事件循环),前面有一个负载平衡器。每个这样的进程通常不能使用超过一个 CPU 个内核,因此您可能希望拥有与内核一样多的进程。
我以前做过。我什至编写了代码来监控我生成的进程。但事实证明 Python 和 asyncio 本身非常稳定,我从未见过导致整个事件循环停止的严重错误。所以我不建议仅仅为了高可用性而生成多个进程。
代码在这里,如果你有兴趣:https://github.com/l04m33/shinpachi
您可能需要查看 shinpachi/__init__.py
和 shinpachi/processes.py
。