10.07 「轉」APP還在用域名連接後端?用IP提速N倍

無線時代,網絡穩定性差,應用流量敏感,APP與Server之間每次HTTP請求都需要進行DNS解析,有沒有可能直接使用IP來提速呢?

典型HTTP請求處理過程如何?

「轉」APP還在用域名連接後端?用IP提速N倍


第一步,客戶端訪問DNS服務器,由域名拿到Nginx的外網IP;

第二步,客戶端使用外網IP訪問Nginx;

第三步,Nginx將請求分發給實際處理HTTP請求的Web-server;

移動時代APP的訪問特點如何?

(1)網絡慢,DNS解析的時間不能忽略;

(2)一旦DNS被劫持,整個APP就掛了;

APP能夠把Web-server的ip-list內置,從而跳過DNS解析,跳過Nginx中轉,直接通過IP訪問後端的Web-server麼?

不行,Web-server的擴展性較差,增加IP時APP沒辦法得到通知。

畫外音:Nginx可以保證Web-server的高可用,去掉Nginx後,需要APP重試,或者Web-server做高可用。

如何進行優化呢?

「轉」APP還在用域名連接後端?用IP提速N倍


不要將ip-list內置在APP裡,而是通過HTPP請求來拉取:

(1)APP第一次訪問時,先拉取Web-server的ip-list保存到APP本地;

畫外音:使用域名拉取ip-list,只1次訪問。

(2)未來訪問時,客戶端直接使用ip-list中的IP來訪問server,不再需要DNS;

畫外音:使用IP訪問業務Web-server,所有業務請求。

跳過了Nginx,如何對Web-server怎麼做負載均衡呢?

APP隨機訪問ip-list中的IP。

跳過了Nginx,如何對Web-server做水平擴展呢?

直接在ip-list中增加IP即可。

新的問題又來了,在ip-list裡增加了IP,新的用戶能訪問到新的IP,舊的APP已經將ip-list拉取到APP本地了,此時

如何更新本地的ip-list呢?

版本號,是架構設計中,減少拉取流量的同時,又能保證數據隨時更新的好辦法:

(1)ip-list增加一個版本號,每次拉取ip-list時,同時拿到版本號;

(2)如果版本號與本地ip-list版本號一致,則直接使用本地ip-list;

畫外音:節省流量,不用每次拉取文件。

(3)版本號變化時,重新拉取ip-list保存到本地;

畫外音:保證數據能夠得到更新。

總結

無線時代,可使用“IP直通車”來加速APP訪問:

  • 不需要每次請求做DNS解析,節省時間,避免DNS劫持
  • 不需要每次請求做Nginx轉發,節省時間
  • 不需要每次拉取ip-list,節省流量
  • 通過ip-list可以對Web-server做水平擴展
  • 通過版本號可以保證ip-list的數據一致性


思路比結論更重要。


分享到:


相關文章: