[英]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存儲在那里......還有其他想法嗎?
我認為你可以走兩條路線。
讓端點“/ set_es_cluster”被您的SNS POST請求命中。 然后,此端點設置密鑰“active_es_cluster”,您的其他進程會在每個ES請求中讀取該密鑰。 這樣做的缺點是,在每個ES請求中,您需要首先執行redis查找。
有一個單獨的進程,專門獲取POST請求(我假設群集不經常更改)。 此過程的目的是接收post請求,並讓uWSGI正常地重新啟動其他燒瓶進程。
第二種選擇的優點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.