uWSGI + Flask + MongoDB遇到的那些坑

來源:互聯網
上載者:User

1.MongoDB引入讀寫分離之後,重啟服務時間變長,可以看到如下列印:
your mercy for graceful operations on workers is 60 seconds
搜尋相關資料發現可以通過設定最大逾時時間來降低服務重啟時間,uWSGI預設重新載入逾時時間是60s,可以通過設定worker-reload-mercy來改變,我們先來看看uWSGI官方文檔描述:
reload-mercy
argument: required_argument

parser: uwsgi_opt_set_int

help: set the maximum time (in seconds) we wait for workers and other processes to die during reload/shutdown

worker-reload-mercy
argument: required_argument

parser: uwsgi_opt_set_int

help: set the maximum time (in seconds) a worker can take to reload/shutdown (default is 60)
reload-mercy是控制整個uWSGI執行個體的逾時
worker-reload-mercy是控制單個worker的逾時
因此把uWSGI啟動的設定檔加上:
worker-reload-mercy = 1
雖然服務重啟時間變短了,但是發現部署服務的時候,有些worker會無法啟動,或者隨著時間推移worker無法重啟,進程都死掉。後來通過分析uWSGI配置參數,找到lazy-apps這個參數,看看官方文檔描述:
lazy-apps

argument: no_argument

parser: uwsgi_opt_true

help: load apps in each worker instead of the master
載入apps的時候都是各個worker自己負責載入,而不是通過master fork出來,添加此參數之後,服務重啟時間變長的問題也沒有了,服務可以很快進行重啟,各個worker也不會出現死掉的情況。到目前為止也沒搞清楚具體為什麼,有清楚的同學告知一聲。

2.MongoDB複製集串連的時候官方文檔描述只需要填寫一個MongoDB執行個體地址即可,但實測發現這種方式存在一個問題,如果填寫的MongoDB執行個體不可用,此時重啟服務,服務就無法串連到MongoDB複製叢集,因此,建議串連複製叢集的時候,多寫幾個MongoDB執行個體地址,盡量寫全,這樣即使有執行個體不可用了,也可以通過其它執行個體拿到整個叢集的資訊

註明:MongoDB Client用的是pymongo2.7版本

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.