一個功能帶來的高並發問題

來源:互聯網
上載者:User
有這樣一個需求。使用者想註冊網域名稱,但是呢,通常想的好的,都被人註冊了。
這時候,程式自動的產生一定數量的網域名稱,假設產生100個。然後在自動的查詢
這100個網域名稱是否被註冊,從產生開始,網域名稱就已經顯示給了使用者,然後
ajax來即時的更新每一個網域名稱是否被註冊的狀態。

這時候,一個使用者,就會帶來100個並發查詢,而且查網域名稱狀態,是需要串連whois伺服器,有一個網路傳輸的過程
也就是這100個ajax查後台,就會帶來100個php去發出whois的查詢,等待結果,分析結果,返回給ajax調用

一般情況下,有幾個使用者同時一查。php的處理進程 就被佔滿了。整個網站的其他需要php實現都要處於等待狀態了。。

這種情況下,要怎麼最佳化呢?

我想的方案是:
1,將查詢網域名稱狀態這事拿出去,放到另一個伺服器上做。
2,查詢網域名稱狀態不使用這種同步的方式,改用node.js這種非同步模型的實現來做。

回複內容:

有這樣一個需求。使用者想註冊網域名稱,但是呢,通常想的好的,都被人註冊了。
這時候,程式自動的產生一定數量的網域名稱,假設產生100個。然後在自動的查詢
這100個網域名稱是否被註冊,從產生開始,網域名稱就已經顯示給了使用者,然後
ajax來即時的更新每一個網域名稱是否被註冊的狀態。

這時候,一個使用者,就會帶來100個並發查詢,而且查網域名稱狀態,是需要串連whois伺服器,有一個網路傳輸的過程
也就是這100個ajax查後台,就會帶來100個php去發出whois的查詢,等待結果,分析結果,返回給ajax調用

一般情況下,有幾個使用者同時一查。php的處理進程 就被佔滿了。整個網站的其他需要php實現都要處於等待狀態了。。

這種情況下,要怎麼最佳化呢?

我想的方案是:
1,將查詢網域名稱狀態這事拿出去,放到另一個伺服器上做。
2,查詢網域名稱狀態不使用這種同步的方式,改用node.js這種非同步模型的實現來做。

nodejs暴力做是一種方法,另一種思路是做一個任務隊列,控制總的並發量,比如最高並發50,然後每個使用者查詢的時候就push100個任務進隊列,隊列太長的時候可以告訴使用者系統忙這樣

不過無論如何做,首先要做的是把100個ajax改成1個……

你可以最佳化一下,不用每個使用者都發送100個ajax請求,可以合并成一個ajax請求返回100個網域名稱的狀態。

php後端根據要查詢的100個網域名稱並發(批量)向whois伺服器請求資料,並發的擷取結果。
php並發(批量)http請求例子是這樣的

這樣能保證一個php進程並發的查詢網域名稱狀態,而不是一個一個阻塞的去查,非常高效。設定逾時時間,就不會導致進程因為網路io給阻塞佔滿了。

https://github.com/visionmedia/batch 根據你的實際情況調節下參數就行了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.