簡體   English   中英

Python + uwsgi - 多處理和共享應用程序狀態

[英]Python + uwsgi - multiprocessing and shared app state

我們有一個燒瓶應用程序在uwsgi后面運行4個進程。 它是一個API,它提供來自我們兩個ElasticSearch集群之一的數據。

在應用程序引導程序中,每個進程從外部數據庫中提取配置,以檢查哪個ES群集處於活動狀態並連接到它。

Evey現在然后發出POST請求(來自aws SNS服務),它通知所有客戶端切換ES集群。 這觸發了與bootstrap相同的功能 - 從DB重新連接到活動ES群集的pull配置。

它可以作為單個進程運行良好,但是當我們有多個進程只運行時,其中一個進程將更新(獲取POST請求的進程)...其他進程仍然連接到非活動集群。

在每個請求上拉取配置以確保我們使用的ES群集處於活動狀態將會變慢。 我想在本地安裝redis並將active_es_cluster存儲在那里......還有其他想法嗎?

我認為你可以走兩條路線。

  1. 讓端點“/ set_es_cluster”被您的SNS POST請求命中。 然后,此端點設置密鑰“active_es_cluster”,您的其他進程會在每個ES請求中讀取該密鑰。 這樣做的缺點是,在每個ES請求中,您需要首先執行redis查找。

  2. 有一個單獨的進程,專門獲取POST請求(我假設群集不經常更改)。 此過程的目的是接收post請求,並讓uWSGI正常地重新啟動其他燒瓶進程。

第二種選擇的優點:

  • 不必在每次請求時都使用redis
  • 讓uWSGI為您處理重啟(它做得很好)
  • 您已經在運行時設置了配置,因此它應該“適用於”您現有的應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM