移動端API架構 統一Proxy還是各自為政?

大熊先生|網際網路後端技術發表於2016-05-23

今天首先回答上一篇的問題:

為什麼APP通過運營商接入網路,連通率會那麼差?

1. 域名快取問題

運營商的localdns會快取域名的解析結果,不向權威DNS遞迴查詢解析

為什麼要這麼幹呢?

1)運營商之間的跨網流量結算費用比較貴(他們內部技術團隊的KPI),為了最大化的在本網消耗(內部結算好算),減少跨網結算,所以會把IP地址解析到自己的內容快取IP地址

2) 推送廣告,有利可圖。把內容快取替換為第三方聯盟廣告.

2. 解析轉發問題

部分小運營商圖省事,不進行域名的遞迴解析,而是把解析請求轉發到其他運營商的LocalDNS上,導致排程出現問題,跨網排程,最後影響的就是耗時,當耗時足夠大時,連通性就沒法保障了

3. LocalDNS遞迴出口NAT導致排程不準

LocalDNS遞迴出口NAT指的是運營商的LocalDNS按照標準的DNS協議進行遞迴,但是因為在網路上存在多出口且配置了目標路由NAT,結果導致LocalDNS最終進行遞迴解析的時候的出口IP就有概率不為本網的IP地址,跨網的影響如上

 

所以基於以上的原因,APP端對伺服器端API的連通性就會損失個5%左右.

解決方案請見上文<移動端API介面優化的術和結果>

 

今天來講另一個話題:

移動端API架構 是該統一Proxy還是各自為政?

我經歷過幾家公司,有把所有的service放到一個域名下的,也有按業務的不同來拆分為不同域名服務的

如:
api.baidu.com/msg
api.baidu.com/user
api.baidu.com/search
也有如:
msg.baidu.com
user.baidu.com
search.baidu.com

 

 對應內部的架構也會是兩個樣子

 

今天我們就來聊一下,僅僅從架構層面來說到底是有紅色Proxy部分好呢還是沒有好?

一般的初創公司,甚至到中型網際網路技術公司,很多人都在用分拆域名的方式來分拆業務,這樣做好處是什麼?

一般在一家創業公司驅使按域名分業務分拆後端API始於團隊和人員的發展,他們期望各業務負責人只需要關注自己的業務,業務間沒有關聯關係,即便在最終產品上各業務會有先後依賴關係,如訊息服務(msg service)依賴user service,也都是整體由客戶端來串邏輯,研發msg service的同學與user service的同學可以不用交流或者少交流,已到達各業務開發團隊齊頭並進的效果。出了問題呢,也能很快的定位是哪個api的service掛了,每個團隊維護好自己的服務, 幹好自己的事情. 

在這個階段的公司,這也是個不錯的方案能夠讓多個團隊齊頭並進.

但是對於大的網際網路公司,或者有技術追求的技術公司,這並不是最理想的方案,為什麼呢?

我們來看看按域名分拆業務帶來的問題:

1. 流量監控等方案需要在各個業務做

2. 安全性, 防攻擊等相關問題需要各個業務團隊完成

3. 不利於統一管理,需要給每個業務配備對應的運維人員(絕大部分這種架構的公司op也是這麼配備的)

4. 擴容 縮容 熔斷 等高可用相關的基礎方案難複用

 

這裡面最重要的是流量監控和容量規劃,在同一的proxy層做監控能夠讓人非常快速的知道系統故障時問題在哪,哪個服務的耗時增加了,哪個服務開始出現500了. 如終端報bug訊息出不來了,到底是msg service還是user service的問題,一目瞭然;同時統一的擴容 縮容以及服務降級的聯動,都好做了,運維工程師的幸福生活由此展開.

當然,這並不是唯一的方式,使用分拆域名然後把各個監控資料彙集到一塊也能做,但是成本變高了.

 

相關文章