背景
服務(wù)需要國際化資源,比如國內(nèi)叫“你好”,國外需要翻譯為“hello”
要求
靈活,可配置:
希望配置是熱更新的,即不能加一個(gè)文案,后端代碼資源文件就加幾行,再上線部署。
盡量減少服務(wù)本身的請(qǐng)求次數(shù),讓上游把i18n的配置拿走,異步更新,定時(shí)的像i18n請(qǐng)求最新的資源。
設(shè)計(jì)
導(dǎo)入模塊
導(dǎo)入模塊,比如excel,txt,csv等格式文件
metrics模塊
比如各種key被用到的次數(shù),監(jiān)控
數(shù)據(jù)結(jié)構(gòu)
appId,標(biāo)識(shí)業(yè)務(wù)方
key,比如“hello”
value,比如“hello”,“你好”
Locale,見下面定義,如“en-GB”等
備注:可以學(xué)習(xí)下Locale的定義
https://en.wikipedia.org/wiki/Locale_(computer_software)
Locale 是一套用于定義用戶希望在其用戶界面上看到的各種可以改變的選擇的參數(shù)集合。通常一個(gè)區(qū)域設(shè)置標(biāo)識(shí)符至少包括一個(gè)語言標(biāo)識(shí)符和一個(gè)區(qū)域標(biāo)識(shí)符。
- en-GB for English as spoken in the United Kingdom
- es-AR for Spanish as spoken in Argentina
存儲(chǔ)模塊
讀:db即可,redis都不用,服務(wù)啟動(dòng)加載全量資源文件,緩存到localCache用AppResource表示
寫:提供前端頁面以及對(duì)應(yīng)寫的rpc接口
上游交互接口
可以看出這個(gè)服務(wù)接口本身稍微占用點(diǎn)內(nèi)存,不耗費(fèi)CPU
舉例: 1024個(gè)key,1000個(gè)Locale,每個(gè)key,value平均占用10b,那也就是10Mb內(nèi)存
那么如果讓上游頻繁調(diào)用rpc接口來獲取這一套資源配置,rpc通信時(shí)間相對(duì)耗時(shí)較久,沒必要,不如讓上游也采取類似邏輯,即
上游client:
異步:定時(shí)如5分鐘調(diào)用rpc請(qǐng)求,緩存到本地資源緩存
同步:利用本地資源緩存服務(wù)
i18n server:
異步:定時(shí)如5分鐘去db拉數(shù)據(jù),緩存到本地資源緩存
同步:利用本地資源給上有服務(wù)
總結(jié)
了解下i18n服務(wù)背景以及針對(duì)性的提出相關(guān)模塊設(shè)計(jì)的思路