社交APP開(kāi)發(fā)升級(jí)聊天功能數(shù)據(jù)庫(kù)架構(gòu)與定位解決方法
社交類APP開(kāi)發(fā)對(duì)于聊天功能升級(jí)分布式緩存使用了一致性hash算法后,緩存還會(huì)存在個(gè)問(wèn)題:社交App后臺(tái)對(duì)核心緩存的命中率要求極高,就算使用了一致性hash算法,當(dāng)其中一臺(tái)緩存服務(wù)器宕機(jī)后,也會(huì)造成緩存命中率的大幅下降。深圳APP開(kāi)發(fā)公司總結(jié)要解決上面的問(wèn)題需要引入主從緩存結(jié)構(gòu)的分布式緩存,如圖9-29所示。
社交APP開(kāi)發(fā)聊天功能升級(jí)解決方案示意圖9-29主從緩存結(jié)構(gòu)的分布式緩存
獲取數(shù)據(jù)的時(shí)候,先訪問(wèn)主緩存,當(dāng)主緩存獲取數(shù)據(jù)失敗(例如服務(wù)器宕機(jī)等原因)后,再訪問(wèn)從緩存。在兩層緩存結(jié)構(gòu)中數(shù)據(jù)以主緩存為主。當(dāng)更新數(shù)據(jù)的時(shí)候,先從主緩存獲取數(shù)據(jù).再對(duì)主緩存進(jìn)行一致性更新,更新成功后再更新從緩存,如果主緩存一致性更新多次都失敗,則把主緩存、從緩存的數(shù)據(jù)刪除,后續(xù)的請(qǐng)求穿透到數(shù)據(jù)庫(kù)獲取數(shù)據(jù)后回寫(xiě)到主、從緩存。
社交APP開(kāi)發(fā)升級(jí)聊天功能方法之防止緩存失效的措施
主、從緩存結(jié)構(gòu)中從緩存是作為主緩存的各份存儲(chǔ)。大部分的請(qǐng)求都落在主緩存,只有少部分的請(qǐng)求會(huì)落在從緩存,這造成了主從緩存數(shù)據(jù)的剔除、過(guò)期策略不一致。如果主緩存出了問(wèn)題,請(qǐng)求落在從緩存,但在從緩存上只有少部分?jǐn)?shù)據(jù)可供訪問(wèn),請(qǐng)求還是會(huì)穿透到數(shù)據(jù)庫(kù)因此從緩存作為防止單點(diǎn)失效的措施是無(wú)效的。
APP開(kāi)發(fā)公司平常解決這個(gè)問(wèn)題有下面兩個(gè)方案
·定期把主緩存的數(shù)據(jù)同步到從緩存,但同步的時(shí)候可能對(duì)正常的業(yè)務(wù)請(qǐng)求有影響。
·應(yīng)用層控制請(qǐng)求有定的概率落在從緩存,讓從緩存承擔(dān)部分請(qǐng)求.使從緩存中的數(shù)據(jù)不過(guò)冷。
解決方案如圖9-30所示
社交APP開(kāi)發(fā)之LBS App后臺(tái)架構(gòu)
移動(dòng)互聯(lián)網(wǎng)除了一直在線這個(gè)特點(diǎn)外,還有個(gè)重要特點(diǎn):手機(jī)可以定位用戶的位置。查找附近的人、餐館等服務(wù),以及大量的020應(yīng)用,都需要使LBS(Location Based Services)。APP開(kāi)發(fā)公司下面介紹LBS App后臺(tái)架構(gòu)中相關(guān)的知識(shí)。
APP開(kāi)發(fā)經(jīng)驗(yàn)之地理坐標(biāo)詳解
下面4種方法可以獲取用戶的地理坐標(biāo)
·GPS:精度面,初始化搜索衛(wèi)星的速度慢,耗電。
·基站:精度低,速度快,不同運(yùn)營(yíng)商的基站定位精度差別大。
·AGPS: GPS+基站的結(jié)合。
·Wi-Fi定位:通過(guò)服務(wù)商收集的Wi-Fi數(shù)據(jù)定位,但Wi-Fi的地理位置信息更新非常慢。
App端建議直接使用地圖SDK提供的獲取地理坐標(biāo)的方法來(lái)獲取地理坐標(biāo),其會(huì)綜合各種定位方式后選擇一個(gè)最優(yōu)的結(jié)果返回。
初次做LBS功能的研發(fā)人員需要注意坐標(biāo)的偏移問(wèn)題。App通過(guò)系統(tǒng)級(jí)的函數(shù)獲取的坐標(biāo),放到百度地圖或高德地圖上,總是會(huì)出現(xiàn)偏移。例如,當(dāng)時(shí)APP開(kāi)發(fā)公司程序員在南山科技園附近獲取的坐標(biāo),把坐標(biāo)放到百度地圖上卻顯示是深圳大學(xué),如圖9-31所示。
經(jīng)過(guò)查找資料,終于知道問(wèn)題所在.如下:
通過(guò)系統(tǒng)底層函數(shù)獲取的坐標(biāo)是國(guó)際坐標(biāo)系wGS_84lWorld GEodetic Svstem 1984),是為GPS全球定位系統(tǒng)的使用而建立的坐標(biāo)系統(tǒng)。
GCJ-02是由中國(guó)國(guó)家測(cè)繪局制訂的地理信息系統(tǒng)的坐標(biāo)系統(tǒng),其是對(duì)經(jīng)緯度數(shù)據(jù)(WGS-84)的加密算法,即加入隨機(jī)的偏差。對(duì)WGS-84獲取的坐標(biāo)進(jìn)行次加密偏移。國(guó)內(nèi)出版的各種地圖數(shù)據(jù)必須至少采用GCJ-02對(duì)地理位置進(jìn)行首次加密。假設(shè)GPS獲取的坐標(biāo)是(113. 37,
23. 04),這個(gè)坐標(biāo)在國(guó)內(nèi)的地圖上經(jīng)過(guò)偏移就可能變成(113. 39,23. 06)。而且這個(gè)偏移量沒(méi)有明確規(guī)定,這就造成了個(gè)現(xiàn)象,不同電子地圖服務(wù)提供商有不同的坐標(biāo)體系,例如,Google地圖、高德地圖是同套坐標(biāo)體系,百度地圖卻是另外一套坐標(biāo)體系。
解決這個(gè)問(wèn)題的方案:使用百度地圖SDK提供的獲取地理坐標(biāo)功能,其獲取的坐標(biāo)是已經(jīng)偏移過(guò)的,這個(gè)坐標(biāo)在百度地圖上能準(zhǔn)確顯示。好了,APP開(kāi)發(fā)公司本文對(duì)于社交APP聊天功能升級(jí)以及定位的解決方案就分享到這里。謝謝您的關(guān)注,我們會(huì)在下期文章中詳細(xì)與各位分享地理位置定位的解決方法。博納網(wǎng)絡(luò)編輯整理。