談談後台服務的RPC和路由管理

2021-07-24 09:06:21 字數 2179 閱讀 9733

為什麼要用rpc和路由管理

rpc的概念其實出現已經很久了,記得筆者讀大學的時候,接觸到rpc的概念,總覺得不重要,多此一舉:

我掌握好socket通訊這個利器和tcp/ip協議族原理,什麼功能不能實現?

rpc就跟本地函式呼叫一樣寫**,確實開發效率比較高;我自己把socket相關函式好好封裝一下,讓**復用起來,開發效率也很高。

不懂或者不關注網路通訊底層原理,光會函式調來調去,這樣的程式設計師太沒有出息了!

後來,筆者開始帶團隊,親身經歷了一些團隊協作和it服務運營過程中的故事,才發現rpc非常關鍵。這裡分享我經歷過的很早以前的兩個故事。

故事一:有乙個基礎模組a,被非常多的其他模組遠端呼叫,模組a的門戶提供協議文件、api、呼叫示例**,每當有人來申請使用,模組a負責人就會給呼叫方一組介面機的ip,呼叫方可以給這些ip發網路請求。

重視可用性的有追求的呼叫方,通常在拿到ip後,會把ip寫在配置檔案裡,並且自己在**裡實現一定的容錯邏輯:如果某個ip請求連續失敗多少次,就一段時間內不要給它發請求了。這個容錯邏輯做好可不簡單,涉及到很多細節。

大多數的呼叫方,是把ip寫死在**裡,簡單的輪詢請求這些ip。

如果模組a的某台介面機宕機了,或者網路區域性故障導致某些介面機不可達,很多呼叫方就會跳起來:你們怎麼回事?你們的服務水平怎麼這麼差!

如果機房裁撤,一些機器ip要下架,模組a負責任會非常頭疼:

首先不知道有哪些人在請求這個ip。讀者說:傻啊,抓包看一下不就知道有哪些呼叫方了?但是要知道有的請求不是持續的,是不定期的訪問一下模組a。

模組a的負責人要大範圍的郵件通知呼叫方改路由(通常要改**編譯發布),過一段時間後,抓包看還有哪些呼叫方沒有改,再挨個敦促修改路由

有時候某個ip下架了,過了幾天,突然有個呼叫方跳起來:我們還在用呢!我們是寫死ip的,**找不到了,只能拿二進位制可執行檔案「硬」改

故事二: 乙個團隊裡,通常有很多技術能力、服務意識和責任心都非常強的同事,他們的工作產出質量非常高,每個遠端呼叫都有次數和成功率的上報(簡單的說就是上報到乙個監控系統,可以通過監控系統web介面檢視曲線圖),請求報文中的一些重要但不強校驗的字段也都認真填寫(例如染色標記),所以他們負責的模組,如果出現異常,很容易通過監控系統和日誌監控到,並能快速定位到問題。

但是,也有一些同事責任心和能力不那麼突出,重要的監控上報缺失、請求包裡一些重要的字段沒有填寫。有時候服務的故障有異常了很久,被使用者投訴才發現,事故報告裡總是會出現這樣的改進措施:增加對***的監控上報,增強服務運營意識。

類似的事故通常會反覆出現,管理幹部就會拉起一次運動式的梳理和整頓,但過一段時間,肯還會出現。

通過這兩個事故可見:如果沒有很好的實現rpc和路由管理,it系統服務質量會過度的依賴人的意識,而這個通常成本非常高、效果也不好。

毫秒引擎裡是怎麼做的?

首先,毫秒引擎將每個服務部署在哪些ip上這些資訊集中管理起來,即使是呼叫外部的非標準服務(我們叫異構服務),也需要將該外部服務的介面ip配置到毫秒引擎管理系統裡。這樣涉及到的ip資訊就不會散落在**和各種配置檔案裡了。

服務之間的呼叫,統一採用callmethod()函式的方式,避免**千奇百怪;按服務名字呼叫和介面名呼叫

rpc背後的路由演算法對於單機故障、網路區域性波動等異常,自動容錯。簡單的說,路由演算法按一定的規則輪轉的選擇被呼叫模組的介面機,並統計過去一段時間的呼叫成功率、時延資訊,根據這些資訊調整該介面機被選擇到的比例。如果某個介面機故障了,那麼就不會傳送請求給它,從而實現自動容錯。

毫秒引擎框架本身,在rpc執行的時候,就上報了很多基礎屬性和日誌,這樣保證了服務監控和告警等運營措施不依賴與人的意識。下圖是叫做get***list這樣乙個rpc呼叫的請求數和成功數,這些是不需要業務開發者工作就自動上報。

每個請求有唯一id來標識,通過該id,毫秒引擎可以在框圖中直觀的呈現該請求經過的模組、模組間的rpc名字等資訊,這個同樣不需要業務開發者的工作就自動實現:

結語

安卓前台服務和後台服務的區別

類別 區別 應用前台服務 會在通知一欄顯示 ongoing 的 notification,後台服務 預設的服務即為後台服務,即不會在通知一欄顯示 ongoing 的 notification。當服務被終止的時候,使用者是看不到效果的。某些不需要執行或終止提示的服務,如天氣更新,日期同步,郵件同步等。...

zabbix後台服務與前台服務的分離

zabbix安裝 將zabbixserver mysql端與php apache分離 在usr路徑下建立了software資料夾,放入net snmp msyql zabbix 三個tar檔案 1.安裝net snmp包 為zabbix提供snmp支援,建議直接安裝,不要指定路徑,好處在後面安裝za...

linux日常管理 rsync後台服務方式 1

rsync的另外一種方式,寫乙個配置檔案,放在etc下,通過乙個命令啟動他,它會監聽乙個埠,在客戶端和服務端進行通訊。遠端機器的配置檔案 ip是192.168.1.117 配置檔案的名字,寫成這個,會自動載入,不用指向。root wangshaojun vim etc rsyncd.conf por...