2014-12-01 80 views
0

首先我不確定這個問題的標題,所以請糾正我,如果不是,謝謝。請求數據設計模式

關於:

我有一個基於PHP的兩個項目:第一個項目(客戶端)通過誰捲曲連接到第二(API)。在API項目中完成了一些在CLIENT上執行的計算髮送數據。

問題:

如果API項目將有任何問題,停機或只是減慢客戶端必須等待,直到API返回的結果,所以它會減慢了。項目正在密集發展中,因此計算量也會增加,所以延遲也會增加

問:

我怎樣才能避免上述問題,完全API必須不影響客戶端的性能。也許有任何設計模式或東西? 我已閱讀關於ASYNCH PHP,緩存模式,但仍未找到解決方案。如果有任何解決方案(模式),那麼在實踐中舉例就會很棒!

P.S.請求不會減慢,從而減慢計算速度。我同意首先他們應該被優化。 P.P.S.總請求超過每分鐘60(>〜60 /分鐘)。

回答

1

有兩種方式,這兩種工作,但有不同的優點和缺點...

  1. 異步處理,這意味着客戶端不等待每一個呼叫,直到它返回(其響應返回)但是依賴於回調或類似機制來處理響應。例如,通常在使用javascript和ajax進行遠程調用的Web客戶端中執行此操作。使客戶端更加流暢,但顯然涉及更高的代碼和UI複雜度。

  2. 基於隊列的處理,這意味着客戶端根本不會直接執行任何此類潛在的阻止請求,而只是在某些排隊機制內創建作業。那些工作可以由一些調度員逐個處理,調度員也必須處理響應。如果涉及到API的負載峯值和停機的擴展和穩健性,這種功能非常強大,但是實施要昂貴得多。此外,整體任務必須承認響應時間根本無法保證,通常響應時間將比第一種方法更長,因此無法以交互方式顯示。

+0

謝謝你的詳細解答!我認爲可以在那裏實現!起初,異步選項只是發送請求,如果存在緩存TTL過期並且不等待響應,並且隊列機制接受請求只是排隊操作並在完成時發送響應。 – deividaspetraitis 2014-12-02 10:06:14

+0

小心:TTL在典型的API調用中不可能真正發生。而且緩存也無法處理異步處理。異步意味着你發出請求,但處理響應是在後臺完成(通常通過回調)。一個排隊系統會發出「發送響應」,它會處理響應並採取所有涉及的操作。 – arkascha 2014-12-02 14:23:06