天天看點

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的資料一緻性

思路比結論更重要。

本文轉自“架構師之路”公衆号,58沈劍提供。

繼續閱讀