作者:張澤華
臨川網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
來源:知乎
業(yè)務(wù)需要
1.為什么說是業(yè)務(wù)需要?
——先來了解下阿里在上線AliDNS之前已經(jīng)做了哪些事兒。
阿里的架構(gòu)變遷可以說是針對(duì)業(yè)務(wù)的一次完整進(jìn)化。從最初的單臺(tái)服務(wù)器跑起少量的業(yè)務(wù)開始,到今年571億的雙十一絕不是一蹴而就的。作為一家較大的電商網(wǎng)站在互聯(lián)網(wǎng)應(yīng)用系統(tǒng)中要面對(duì)極多問題:高并發(fā),高可用,安全環(huán)境較差,客戶分布廣泛,網(wǎng)絡(luò)環(huán)境較為復(fù)雜等等。
為滿足復(fù)雜的需求,網(wǎng)站的架構(gòu)逐漸從單機(jī)服務(wù)演進(jìn)到:前端是各地的CDN服務(wù)器集群,連接各反向代理服務(wù)器集群,連接負(fù)載均衡服務(wù)器集群,接下來將訪問請(qǐng)求轉(zhuǎn)到按照業(yè)務(wù)劃分的應(yīng)用服務(wù)器集群上,通過消息隊(duì)列集群傳到分布式服務(wù)集群上,然后通過緩存或一致性數(shù)據(jù)訪問模塊連接到數(shù)據(jù)源:分布式緩存、分布式數(shù)據(jù)庫、分布式文件集群,外加NoSQL和搜索引擎服務(wù)器等等。
img src="" data-rawwidth="1201" data-rawheight="750" class="origin_image zh-lightbox-thumb" width="1201" data-original=""/*/*大致就這么個(gè)意思,尤其突出了DNS的作用*/
架構(gòu)演進(jìn)到這里不難發(fā)現(xiàn)有兩個(gè)明顯的特點(diǎn):分層化和分布式。優(yōu)秀的工程師們將這種能夠應(yīng)對(duì)復(fù)雜業(yè)務(wù)邏輯和數(shù)據(jù)處理的海量數(shù)據(jù)和高并發(fā)的架構(gòu)進(jìn)一步設(shè)計(jì)為平臺(tái)化的方式,不僅能夠服務(wù)當(dāng)前企業(yè),還能夠?qū)①Y源作為一種產(chǎn)品出售,這樣讓各類小型網(wǎng)站享有架構(gòu)便利性的同時(shí)只要按需付費(fèi)即可。這樣,阿里云就誕生了,其實(shí)它是技術(shù)演進(jìn)過程中的一個(gè)必然產(chǎn)物,這也不難理解Google、Amazon、Alibaba等超大規(guī)?;ヂ?lián)網(wǎng)公司對(duì)外提供的云計(jì)算服務(wù)。
DNS服務(wù)是將阿里的域名解析成IP地址,不僅可以利用DNS實(shí)現(xiàn)DNS的負(fù)載均衡,并且在配置運(yùn)營商CDN機(jī)房時(shí)也是重要的一部分。DNS技術(shù)屬于前端架構(gòu)甚至更前的一部分,不難看出一個(gè)大型網(wǎng)站在提供好扎實(shí)的應(yīng)用層和數(shù)據(jù)層服務(wù)后亟待解決的是訪問的問題,訪問安全問題也是伴隨著要解決的問題之一。
所謂訪問的問題:
1.能夠保證客戶順利的連接上網(wǎng)站
2.能夠保證整個(gè)過程的安全
3.快
2.DNS服務(wù)了什么?
貼一下阿里DNS的自我介紹:阿里DNS
阿里公共DNS簡(jiǎn)介
阿里公共DNS是阿里巴巴集團(tuán)推出的DNS遞歸解析系統(tǒng),目標(biāo)是成為國內(nèi)互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的組成部分,面向互聯(lián)網(wǎng)用戶提供“快速”、“穩(wěn)定”、“智能”的免費(fèi)DNS遞歸解析服務(wù)。
一、DNS簡(jiǎn)介
DNS是互聯(lián)網(wǎng)上存儲(chǔ)域名與IP映射關(guān)系的一個(gè)分布式數(shù)據(jù)庫。使用DNS,用戶可以方便的用域名訪問互聯(lián)網(wǎng),而不用關(guān)心復(fù)雜難記的IP地址。通過域名獲取對(duì)應(yīng)IP地址的過程叫域名解析。
域名解析一個(gè)相對(duì)復(fù)雜的過程,需要多個(gè)環(huán)節(jié),遍歷多個(gè)DNS服務(wù)器,才能獲取域名的IP地址。解析過程見下圖:
二、用戶使用DNS面臨的問題
從域名解析過程可以看到,用戶打交道最多的就是Local DNS,它負(fù)責(zé)接收用戶的請(qǐng)求,代替用戶遍歷其他DNS服務(wù)器,獲得結(jié)果后返回客戶,并做一定時(shí)間的緩存,在下次請(qǐng)求時(shí)直接應(yīng)答。
大部分用戶使用的Local DNS是用戶在接入網(wǎng)絡(luò)時(shí)由ISP自動(dòng)分配的。存在幾方面問題:
三、阿里提供公共DNS服務(wù)的優(yōu)勢(shì)四、阿里公共DNS的特點(diǎn)
快速:
穩(wěn)定:
智能:
結(jié)束語
阿里公共DNS的目標(biāo)是成為國內(nèi)互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的組成部分,為國內(nèi)互聯(lián)網(wǎng)的健壯、穩(wěn)定、快速貢獻(xiàn)我們的力量。
結(jié)合阿里優(yōu)質(zhì)CDN資源和精準(zhǔn)的IP地址庫,讓用戶訪問到較近的網(wǎng)站。
異地多機(jī)房高可用架構(gòu)。
基于DPDK自主研發(fā)的高性能DNS系統(tǒng)。
Aliguard多種攻擊防御策略。
持久化保存熱點(diǎn)記錄,當(dāng)“根”或域名的權(quán)威DNS出現(xiàn)異常后,阿里公共DNS具備快速恢復(fù)正常訪問的能力。
通過BGP anycast技術(shù),讓用戶訪問到離自己較近的DNS集群。
主動(dòng)同步com/net域名、萬網(wǎng)注冊(cè)域名的變更,減小ttl時(shí)間的影響,快速訪問到正確的記錄。
主動(dòng)緩存熱點(diǎn)域名的,提高查詢CACHE命中率,減少遞歸過程,快速應(yīng)答。
阿里在全國有優(yōu)質(zhì)的機(jī)房、網(wǎng)絡(luò)、帶寬等互聯(lián)網(wǎng)基礎(chǔ)設(shè)施資源。
阿里建設(shè)和運(yùn)營著全國最大的CDN網(wǎng)絡(luò),對(duì)互聯(lián)網(wǎng)流量調(diào)度有豐富的經(jīng)驗(yàn)。
阿里旗下萬網(wǎng)是國內(nèi)最大的域名注冊(cè)商,管理著幾百萬域名。同時(shí)有豐富的DNS管理經(jīng)驗(yàn)。
阿里擁有大量優(yōu)秀的技術(shù)人才,有非常強(qiáng)的自主研發(fā)能力和運(yùn)維保障能力。
首次查詢或緩存過期后的查詢,需要遍歷多個(gè)互聯(lián)網(wǎng)上多個(gè)DNS才能得到結(jié)果,查詢時(shí)間較長,影響用戶的訪問速度。
域名解析的環(huán)節(jié)較多,其中任何一點(diǎn)出現(xiàn)問題,都可能會(huì)導(dǎo)致解析異常,進(jìn)而影響用戶對(duì)互聯(lián)網(wǎng)的訪問。
Local DNS會(huì)對(duì)獲取的結(jié)果做一定時(shí)間緩存,當(dāng)域名管理員對(duì)域名對(duì)應(yīng)的IP地址調(diào)整后,Local DNS不能馬上感知,還會(huì)用緩存中老的地址應(yīng)答,可能導(dǎo)致訪問出錯(cuò)。
當(dāng)前互聯(lián)網(wǎng)上CDN很多都是根據(jù)Local DNS的地址來調(diào)度。有些ISP的Local DNS并不直接去遞歸解析,而是轉(zhuǎn)發(fā)到其他Local DNS上,可能導(dǎo)致CDN調(diào)度不準(zhǔn)確,使用戶不能訪問到最快的站點(diǎn)。
ISP不是專業(yè)的DNS服務(wù)商,提供的Local DNS可能出現(xiàn)性能、穩(wěn)定性等方面的問題。另外,日益頻繁的DNS攻擊,也會(huì)導(dǎo)致Local DNS出現(xiàn)宕機(jī)、劫持等情況。這些都會(huì)影響客戶的上網(wǎng)體驗(yàn)。
部分ISP通過DNS劫持做廣告植入,給用戶帶來較差的體驗(yàn)。
簡(jiǎn)單翻譯一下就是:
1.我家DNS速度快。| 特別是保證秒殺反應(yīng)快
2.域名解析到我這里靠譜。| 特別雙十一不癱瘓
3.我的數(shù)據(jù)更新快。
4.根據(jù)我的GeoDNS能夠知道你到底是從哪里訪問的,給你一個(gè)最快的服務(wù)器服務(wù)。
5.我的DNS特別穩(wěn)定。
6.有些無良的DNS提供商會(huì)給你亂裝軟件,亂彈窗口,賣假藥什么的。
調(diào)侃一句:如果說下一步阿里要做什么,估計(jì)是要自己做Tier 1運(yùn)營商了。
------------------------------------------------插入點(diǎn)技術(shù)部分-----------------------------------------------------------
DNS迭代,遞歸查詢是啥?
出于資源消耗和響應(yīng)速度的綜合考慮,一般來說從主機(jī)到本地DNS服務(wù)器是遞歸查詢,從本地DNS到其他DNS服務(wù)器是迭代查詢。
詳細(xì)解釋:DNS 查詢的工作原理
BGP anycast是啥?
從域名可以解析出來很多個(gè)主機(jī)IP地址對(duì)應(yīng),那DNS服務(wù)器只有一個(gè)IP地址可不是只有一臺(tái)。為了讓一個(gè)IP地址對(duì)應(yīng)分布在各地的多臺(tái)DNS服務(wù)器,采用anycast(任播)將數(shù)據(jù)發(fā)送到一組目標(biāo)節(jié)點(diǎn)上,通過路由協(xié)議選擇"路由矢量最近點(diǎn)"提供“最快”的服務(wù)??梢詰?yīng)對(duì)DOS攻擊和網(wǎng)絡(luò)擁塞。
主動(dòng)同步萬網(wǎng)注冊(cè)域名是啥,其他能同步嗎?
萬網(wǎng)被阿里買下了,內(nèi)部數(shù)據(jù)同步下快還不行么。其他時(shí)限不一定,看同步間隔。
--------------------------------------------------------------------------------------------------------------------------------
業(yè)務(wù)拓展
從阿里云在阿里中的技術(shù)和商業(yè)定位中可以看出:
為了滿足自身電商等業(yè)務(wù)的正常運(yùn)行和服務(wù)
為了讓云計(jì)算資源作為服務(wù)型商品賣掉(剩余資源的充分利用,在固定投入不變的情況下的單位效率提升)
重點(diǎn)說第二點(diǎn),云計(jì)算資源的服務(wù)。
img src="" data-rawwidth="587" data-rawheight="418" class="origin_image zh-lightbox-thumb" width="587" data-original=""
一個(gè)典型云計(jì)算平臺(tái)具有的幾大功能阿里云都已具備(前些時(shí)間還有讓人眼前一亮的渲染云之類的服務(wù))。但在這個(gè)列表中唯獨(dú)陱的一部分就是關(guān)于域名注冊(cè)和解析相關(guān)的服務(wù),因?yàn)椴徽撌窃鯓蛹茉诰W(wǎng)絡(luò)上的服務(wù),最終讓用戶訪問時(shí)多半不會(huì)使用單純的IP地址的形式,而會(huì)是域名的轉(zhuǎn)義。于是乎,阿里拿下了萬網(wǎng)(中國萬網(wǎng)是中國域名注冊(cè)服務(wù)的先行者、中國虛擬主機(jī)服務(wù)的開創(chuàng)者、中國企業(yè)郵箱服務(wù)的領(lǐng)先者和中國網(wǎng)站建設(shè)服務(wù)的創(chuàng)新者?!菊园俣劝倏啤浚┨钛a(bǔ)了一些域名注冊(cè)解析相關(guān)的服務(wù)內(nèi)容。但萬網(wǎng)來做解析的實(shí)力和能力只是有限的,還遠(yuǎn)遠(yuǎn)不及真正網(wǎng)絡(luò)解析的要求。下面扯一點(diǎn)關(guān)于域名解析的過程:
一般來講,DNS解析是在BIND服務(wù)上演化而來,采用的是基于域的層級(jí)命名方案,這就意味著,域名解析的過程相當(dāng)于查詢了一個(gè)全球范圍的分布式數(shù)據(jù)庫系統(tǒng)。從上文的引文DNS 查詢的工作原理可以知道,有幾類域名服務(wù)器:根名稱服務(wù)器RD,頂級(jí)名稱服務(wù)器TLD,權(quán)威名稱服務(wù)器AD,本地名稱服務(wù)器LD。而阿里云收購的萬網(wǎng)的服務(wù)器算是AD服務(wù)器只能保證一定范圍內(nèi)的域名解析。尤其是聲明轉(zhuǎn)入到萬網(wǎng)解析范圍的域名還有阿里云自營的虛擬主機(jī)和VPS的地址解析。但阿里云想要的遠(yuǎn)不止這些:
前面也提到的快速安全的訪問在當(dāng)前中國幾大ISP的管控下談安全快速訪問就是扯淡。扯淡對(duì)普通百姓來說可能感覺就是右下角總是彈窗,或者說你家路由器不能用,或者說這個(gè)知名網(wǎng)站又打不開了,或者說“咦,電信那邊的網(wǎng)站怎么被屏蔽了?”大家互相扯皮和撕逼倒是正常的,但是人家阿里的生意還是要好好做的,不能在這歡樂的撕逼戰(zhàn)中成為炮灰,或者是在無限的彈窗中鏈接跳轉(zhuǎn)到的某某其他購物網(wǎng)站,馬總的想法是讓天底下沒有難做的生意,我阿的訪問要成問題我還讓我商家的生意怎么做?
另外作為一個(gè)需要VPS服務(wù)的程序猿,當(dāng)我開心的在萬網(wǎng)買了域名,備了案(假如我有一天會(huì)這么做了)發(fā)現(xiàn)在家苦等1天還沒生效的時(shí)候,你下次還敢買這里的域名,用這家的云計(jì)算服務(wù)么?其實(shí)人家阿里萬網(wǎng)挺無辜,在萬網(wǎng)的服務(wù)器上都是秒級(jí)的事兒,但是你懂得的原因就是沒有生效。這時(shí)候你是不是很期待阿里一統(tǒng)天下的ISP?什么?嫌貴,那你告訴我正在用的2MADSL每月150CNY是什么。。。
如果有幸你能知道有個(gè)東西叫DNSSEC,那么恭喜,你又發(fā)現(xiàn)一個(gè)重大安全隱患。簡(jiǎn)單來說這個(gè)東西就是一部分解決你的DNS查詢中的DNS的欺騙和緩存污染問題。除了DNSSEC區(qū)域簽名以外,云計(jì)算服務(wù)供應(yīng)商們還必須在客戶用于名稱解決方案的遞歸解析程序中打開DNSSEC驗(yàn)證。
img src="" data-rawwidth="612" data-rawheight="312" class="origin_image zh-lightbox-thumb" width="612" data-original=""
附上一份我國實(shí)施DNSSEC的文件網(wǎng)址:;sno=112
================================================================
====================修正后的答案======================================
請(qǐng)不要嘗試Baidu DNS. 親測(cè)安裝XX衛(wèi)士,XX廣告.不信自己去試。。/*別問我怎么知道的*/
PS.目前寬帶運(yùn)營商普遍采用“HTTP 劫持”而不只是“DNS 劫持”,所以即便換了 DNS 服務(wù)器,該彈廣告時(shí)還是會(huì)彈廣告,目前用戶除了向運(yùn)營商和工信部投訴之外似乎無解。
PSS.一篇來自烏云社區(qū)的帖子,看看就好:百度有錢聯(lián)盟利用IE漏洞推廣安裝軟件
================================================================
編輯于 2014-12-15
鄭叔叔
@張澤華
的答案很詳細(xì)!
尾部提到的HTTP劫持,我們網(wǎng)站的做法是啟用CSP,能起到一定作用。
編輯于 2015-02-20
知乎用戶
可惜,你們永遠(yuǎn)也不知道,有一個(gè)東西叫做 AIXYZ DNS 。誰用誰知道。
普通。就是學(xué)習(xí)數(shù)據(jù)庫的操作而已。讀取,編輯,刪除這三種操作邏輯。只要記憶力好,把那幾種命令語句背下來,基本的操作就沒問題。這對(duì)今后的其他課程尤其是編程是有幫助的,因?yàn)橛行┸浖?huì)設(shè)計(jì)到數(shù)據(jù)庫的讀寫操作。尤其是一些網(wǎng)站,肯定會(huì)連接數(shù)據(jù)庫。不會(huì)數(shù)據(jù)庫操作,就沒辦法制作動(dòng)態(tài)網(wǎng)站。
很多國產(chǎn)數(shù)據(jù)庫乘風(fēng)破浪
我們正處在一個(gè)數(shù)據(jù)庫技術(shù)大爆炸的時(shí)代。
這幾年,NoSQL數(shù)據(jù)庫、NewSQL數(shù)據(jù)庫、時(shí)序數(shù)據(jù)庫、圖數(shù)據(jù)庫、分布式數(shù)據(jù)庫、超融合數(shù)據(jù)庫等專業(yè)數(shù)據(jù)庫技術(shù)發(fā)展勢(shì)頭很猛,國產(chǎn)數(shù)據(jù)庫的表現(xiàn)也相當(dāng)亮眼。
過去十年,是互聯(lián)網(wǎng)發(fā)展的黃金十年。與此對(duì)應(yīng)的是業(yè)務(wù)系統(tǒng)訪問并發(fā)呈指數(shù)級(jí)上升,海量數(shù)據(jù)計(jì)算和分析需求越來越普遍,傳統(tǒng)單機(jī)系統(tǒng)在業(yè)務(wù)支撐、成本、開放性等方面均面臨巨大挑戰(zhàn),數(shù)據(jù)庫垂直擴(kuò)展模式難以維護(hù)等困境。
眼看著數(shù)據(jù)庫性能瓶頸快要扼住發(fā)展的喉嚨,擺在這些長久依賴Oracle、IBM等傳統(tǒng)數(shù)據(jù)庫的巨頭們面前的,只有兩條路:要么開啟無限加量的PLUS模式,即更換更多更強(qiáng)的服務(wù)器、硬盤、內(nèi)存、CPU等,要么自研能滿足業(yè)務(wù)發(fā)展需求的數(shù)據(jù)庫。
開拓者們的眼光一開始就聚焦在更長遠(yuǎn)的未來,他們發(fā)現(xiàn)即便是系統(tǒng)變成真正的“傻大粗”,也只是解了燃眉之急,不能從源頭解決問題。
再看一眼像Oracle、IBM等傳統(tǒng)數(shù)據(jù)庫高昂的拓容價(jià)格,像阿里這樣的富一代也吃不消哇!
那么,自研數(shù)據(jù)庫,走起!
2010年后,云計(jì)算和開源社區(qū)興起,國產(chǎn)數(shù)據(jù)庫開始了彎道超車。
2019年被認(rèn)為是國產(chǎn)數(shù)據(jù)庫的元年。
這一年,眾多國產(chǎn)數(shù)據(jù)庫產(chǎn)品闖入了我們的視線,熱度不斷攀升;這一年,OceanBase登頂TPCC,并于一年后再次刷新自己的記錄。
從刀耕火種到摘下Oracle在數(shù)據(jù)庫領(lǐng)域的皇冠,國產(chǎn)數(shù)據(jù)庫經(jīng)歷的是一段不被理解和不被看好的歲月。
在國外數(shù)據(jù)庫先驅(qū)長期占據(jù)市場(chǎng)優(yōu)勢(shì)的情況下,國產(chǎn)數(shù)據(jù)庫要想殺出重圍,一是要付出多倍努力,二是要拿出更強(qiáng)的產(chǎn)品才能在客戶面前更有底氣。
當(dāng)然,國產(chǎn)數(shù)據(jù)庫發(fā)展至今,已然是百花齊放。未來,國產(chǎn)數(shù)據(jù)庫的發(fā)展趨勢(shì)相對(duì)也比較明顯,即往云原生和分布式發(fā)展。
金融級(jí)分布式數(shù)據(jù)庫應(yīng)運(yùn)而生
數(shù)字時(shí)代,數(shù)據(jù)成為各家必爭(zhēng)之地。
在金融應(yīng)用場(chǎng)景下,國內(nèi)數(shù)據(jù)庫市場(chǎng)于近幾年開始發(fā)生變化。
隨著應(yīng)用層和業(yè)務(wù)層的壓力加大,金融機(jī)構(gòu)對(duì)分布式技術(shù)架構(gòu)轉(zhuǎn)型的需求應(yīng)運(yùn)而生。
作為軟件系統(tǒng)的三大底層技術(shù)(操作系統(tǒng)、中間件、數(shù)據(jù)庫)之一,數(shù)據(jù)庫成為系統(tǒng)往分布式架構(gòu)轉(zhuǎn)型的樞紐。
不過,在早年國外傳統(tǒng)數(shù)據(jù)庫廠商盤根錯(cuò)節(jié)的“蠶食”下,這個(gè)核心變得又硬又難啃!
面對(duì)如今市場(chǎng)的需求變化,傳統(tǒng)數(shù)據(jù)庫系統(tǒng)呈現(xiàn)出一個(gè)通?。河直恐赜仲F。
再是,隨著諸如2013年“棱鏡門”事件的爆發(fā),各界越來越重視數(shù)據(jù)安全和技術(shù)自主可控。
此外,金融機(jī)構(gòu)對(duì)快速、靈活、可伸縮性、創(chuàng)新、敏捷等開發(fā)能力需求大大提升,出于對(duì)長期IT建設(shè)的成本考慮,自主可控更是成為他們出于自身長遠(yuǎn)發(fā)展考量的剛需。
數(shù)字化時(shí)代,金融機(jī)構(gòu)的整體架構(gòu)正處于往分布式、云原生、微服務(wù)等方向發(fā)展的關(guān)鍵時(shí)刻,數(shù)據(jù)庫的選型便顯得至關(guān)重要。
根據(jù)中國人民銀行發(fā)布的《金融 科技 (FinTech)發(fā)展規(guī)劃(2019-2021年)》,我國將有計(jì)劃、分步驟地穩(wěn)妥推動(dòng)分布式數(shù)據(jù)庫產(chǎn)品先行先試,形成可借鑒、能推廣的典型案例和解決方案,為分布式數(shù)據(jù)庫在金融領(lǐng)域的全面應(yīng)用探明路徑,確保分布式數(shù)據(jù)庫在金融領(lǐng)域穩(wěn)妥應(yīng)用。
目前已有不少業(yè)界實(shí)踐證明了分布式數(shù)據(jù)庫應(yīng)用于金融場(chǎng)景的可靠性。同時(shí),金融級(jí)分布式數(shù)據(jù)庫云化已經(jīng)在路上。
肯定是Oracle,因?yàn)閺暮?jiǎn)單查詢性能角度來比較:Oracle MySQL NoSQL,NoSQL 產(chǎn)品不支持 Join,MySQL 的查詢優(yōu)化器由于所基于的統(tǒng)計(jì)信息相對(duì)少很多,當(dāng)Query 復(fù)雜度很高的時(shí)候容易出現(xiàn)執(zhí)行計(jì)劃不是最優(yōu)選擇的問題,而 Oracle 由于大量的統(tǒng)計(jì)信息支持,使得其查詢優(yōu)化器更為智能,對(duì)復(fù)雜查詢有更優(yōu)的表現(xiàn)。
本文由阿里閑魚技術(shù)團(tuán)隊(duì)逸昂分享,原題“消息鏈路優(yōu)化之弱感知鏈路優(yōu)化”,有修訂和改動(dòng),感謝作者的分享。
閑魚的IM消息系統(tǒng)作為買家與賣家的溝通工具,增進(jìn)理解、促進(jìn)信任,對(duì)閑魚的商品成交有重要的價(jià)值,是提升用戶體驗(yàn)最關(guān)鍵的環(huán)節(jié)。
然而,隨著業(yè)務(wù)體量的快速增長,當(dāng)前這套消息系統(tǒng)正面臨著諸多急待解決的問題。
以下幾個(gè)問題典型最為典型:
1) 在線消息的體驗(yàn)提升;
2) 離線推送的到達(dá)率;
3) 消息玩法與消息底層系統(tǒng)的耦合過強(qiáng)。
經(jīng)過評(píng)估,我們認(rèn)為現(xiàn)階段離線推送的到達(dá)率問題最為關(guān)鍵,對(duì)用戶體驗(yàn)影響較大。
本文將要分享的是閑魚IM消息在解決離線推送的到達(dá)率方面的技術(shù)實(shí)踐,內(nèi)容包括問題分析和技術(shù)優(yōu)化思路等 ,希望能帶給你啟發(fā)。
(本文已同步發(fā)布于: ?)
本文是系列文章的第6篇,總目錄如下:
《 阿里IM技術(shù)分享(一):企業(yè)級(jí)IM王者——釘釘在后端架構(gòu)上的過人之處 》
《 阿里IM技術(shù)分享(二):閑魚IM基于Flutter的移動(dòng)端跨端改造實(shí)踐 》
《 阿里IM技術(shù)分享(三):閑魚億級(jí)IM消息系統(tǒng)的架構(gòu)演進(jìn)之路 》
《 阿里IM技術(shù)分享(四):閑魚億級(jí)IM消息系統(tǒng)的可靠投遞優(yōu)化實(shí)踐 》
《 阿里IM技術(shù)分享(五):閑魚億級(jí)IM消息系統(tǒng)的及時(shí)性優(yōu)化實(shí)踐 》
《 阿里IM技術(shù)分享(六):閑魚億級(jí)IM消息系統(tǒng)的離線推送到達(dá)率優(yōu)化 》(* 本文)
從數(shù)據(jù)通信鏈接的技術(shù)角度,我們根據(jù)閑魚客戶端是否在線,將整體消息鏈路大致分為強(qiáng)感知鏈路和弱感知鏈路。
強(qiáng)感知鏈路由以下子系統(tǒng)或模塊:
1) 發(fā)送方客戶端;
2) idleapi-message(閑魚的消息網(wǎng)關(guān));
3) heracles(閑魚的消息底層服務(wù));
4) accs(阿里自研的長連接通道);
5) 接收方客戶端組成。
整條鏈路的核心指標(biāo)在于端到端延遲和消息到達(dá)率。
強(qiáng)感知鏈路中的雙方都是在線的,消息到達(dá)客戶端就可以保證接收方感知到。強(qiáng)感知鏈路的主要痛點(diǎn)在消息的端到端延遲。
弱感知鏈路與強(qiáng)感知鏈路的主要不同在于: 弱感知鏈路的接收方是離線的,需要依賴離線推送這樣的方式送達(dá)。
因此弱感知鏈路的用戶感知度不強(qiáng),其核心指標(biāo)在于消息的到達(dá)率,而非延遲。
所以當(dāng)前階段,優(yōu)化弱感知鏈路的重點(diǎn)也就是提升離線消息的到達(dá)率。換句話說, 提升離線消息到達(dá)率問題,也就是優(yōu)化弱感知鏈路本身 。
下圖一張整個(gè)IM消息系統(tǒng)的架構(gòu)圖,感受下整體鏈路:
如上圖所示,各主要組件和子系統(tǒng)分工如下:
1) HSF是一個(gè)遠(yuǎn)程服務(wù)框架,是dubbo的內(nèi)部版本;
2) tair是阿里自研的分布式緩存框架,支持 memcached、Redis、LevelDB 等不同存儲(chǔ)引擎;
3) agoo是阿里的離線推送中臺(tái),負(fù)責(zé)整合不同廠商的離線推送通道,向集團(tuán)用戶提供一個(gè)統(tǒng)一的離線推送服務(wù);
4) accs是阿里自研的長連接通道,為客戶端、服務(wù)端的實(shí)時(shí)雙向交互提供便利;
5) lindorm是阿里自研的NoSQL產(chǎn)品,與HBase有異曲同工之妙;
6) 域環(huán)是閑魚消息優(yōu)化性能的核心結(jié)構(gòu),用來存儲(chǔ)用戶最新的若干條消息。
強(qiáng)感知鏈路和弱感知鏈路在通道選擇上是不同的:
1) 強(qiáng)感知鏈路使用accs這個(gè)在線通道;
2) 弱感知鏈路使用agoo這個(gè)離線通道。
通俗了說,弱感知鏈路指的就是離線消息推送系統(tǒng)。
相比較于在線消息和端內(nèi)推送(也就是上面說的強(qiáng)感知鏈路),離線推送難以確保被用戶感知到。
典型的情況包括:
1) 未發(fā)送到用戶設(shè)備:即推送未送達(dá)用戶設(shè)備,這種情況可以從通道的返回分析;
2) 發(fā)送到用戶設(shè)備但沒有展示到系統(tǒng)通知欄:閑魚曾遇到通道返回成功,但是用戶未看到推送的案例;
3) 展示到通知欄,并被系統(tǒng)折疊:不同安卓廠商對(duì)推送的折疊策略不同,被折疊后,需用戶主動(dòng)展開才能看到內(nèi)容,觸達(dá)效果明顯變差;
4) 展示到通知欄,并被用戶忽略:離線推送的點(diǎn)擊率相比于在線推送更低。
針對(duì)“1)未發(fā)送到用戶設(shè)備”,原因有:
1) 離線通道的token失效;
2) 參數(shù)錯(cuò)誤;
3) 用戶關(guān)閉應(yīng)用通知;
4) 用戶已卸載等。
針對(duì)“3)展示到通知欄,并被系統(tǒng)折疊”,原因有:
1) 通知的點(diǎn)擊率;
2) 應(yīng)用在廠商處的權(quán)重;
3) 推送的數(shù)量等。
針對(duì)“4)展示到通知欄,并被用戶忽略”,原因有:
1) 用戶不愿意查看推送;
2) 用戶看到了推送,但是對(duì)內(nèi)容不感興趣;
3) 用戶在忙別的事,無暇處理。
總之: 以上這些離線消息推送場(chǎng)景,對(duì)于用戶來說感知度不高,我們也便稱之為弱感知鏈路。
我們的弱感知鏈路分為3部分,即:
1) 系統(tǒng);
2) 通道;
3) 用戶。
共包含了Hermes、agoo、廠商、設(shè)備、用戶、承接頁這幾個(gè)環(huán)節(jié)。具體如下圖所示。
從推送的產(chǎn)生到用戶最終進(jìn)入APP,共分為如下幾個(gè)步驟:
步驟1 :Hermes是閑魚的用戶觸達(dá)系統(tǒng),負(fù)責(zé)人群管理、內(nèi)容管理、時(shí)機(jī)把控,是整個(gè)弱感知鏈路的起點(diǎn)。;
步驟2 :agoo是阿里內(nèi)部承接離線推送的中臺(tái),是閑魚離線推送能力的基礎(chǔ);
步驟3 :agoo實(shí)現(xiàn)離線推送依靠的是廠商的推送通道(如:蘋果的 apns通道 、Google的fcm通道、及 國內(nèi)各廠商的自建通道 。;
步驟4 :通過廠商的通道,推送最終出現(xiàn)在用戶的設(shè)備上,這是用戶能感知到推送的前提條件;
步驟5 :如果用戶剛巧看到這條推送,推送的內(nèi)容也很有趣,在用戶的主動(dòng)點(diǎn)擊下會(huì)喚起APP,打開承接頁,進(jìn)而給用戶展示個(gè)性化的商品。
經(jīng)過以上5個(gè)步驟,至此弱感知鏈路就完成了使命。
弱感知鏈路的核心問題在于:
1) 推送的消息是否投遞給了用戶;
2) 已投遞到的消息用戶是否有感知。
這對(duì)應(yīng)推送的兩個(gè)階段:
1) 推送消息是否已到達(dá)設(shè)備;
2) 用戶是否查看推送并點(diǎn)擊。
其中: 到達(dá)設(shè)備這個(gè)階段是最基礎(chǔ)的,也是本次優(yōu)化的核心。
我們可以將每一步的消息處理量依次平鋪,展開為一張漏斗圖,從而直觀的查看鏈路的瓶頸。
漏斗圖斜率最大的地方是優(yōu)化的重點(diǎn),差異小的地方不需要優(yōu)化:
通過分析以上漏斗圖,弱感知鏈路的優(yōu)化重點(diǎn)在三個(gè)方面:
1) agoo受理率:是指我們發(fā)送推送請(qǐng)到的數(shù)量到可以通過agoo(阿里承接離線推送的中臺(tái))轉(zhuǎn)發(fā)到廠商通道的數(shù)量之間的漏斗;
2) 廠商受理率:是指agoo中臺(tái)受理的量到廠商返回成功的量之間的漏斗;
3) Push點(diǎn)擊率:也就通過以上通道最終已送到到用戶終端的消息,是否最終轉(zhuǎn)化為用戶的主動(dòng)“點(diǎn)擊”。
有了優(yōu)化方向,我們來看看優(yōu)化手段吧。
跟隨推送的視角,順著鏈路看一下我們是如何進(jìn)行優(yōu)化的。
用戶的推送,從 Hermes 站點(diǎn)搭乘“班車”,駛向下一站:? agoo 。
這是推送經(jīng)歷的第一站。到站一看,傻眼了,只有不到一半的推送到站下車了。這是咋回事嘞?
這就要先說說 agoo 了,調(diào)用 agoo 有兩種方式:
1) 指定設(shè)備和客戶端,agoo直接將推送投遞到相應(yīng)的設(shè)備;
2) 指定用戶和客戶端,agoo根據(jù)內(nèi)部的轉(zhuǎn)換表,找到用戶對(duì)應(yīng)的設(shè)備,再進(jìn)行投遞。
我們的系統(tǒng)不保存用戶的設(shè)備信息。因此,是按照用戶來調(diào)用agoo的。
同時(shí): 由于沒有用戶的設(shè)備信息,并不知道用戶是 iOS 客戶端還是 Android 客戶端。工程側(cè)不得不向 iOS 和 Android 都發(fā)送一遍推送。雖然保證了到達(dá),但是,一半的調(diào)用都是無效的。
為了解這個(gè)問題: 我們使用了agoo的設(shè)備信息。將用戶轉(zhuǎn)換設(shè)備這一階段提前到了調(diào)用 agoo 之前,先明確用戶對(duì)應(yīng)的設(shè)備,再指定設(shè)備調(diào)用 agoo,從而避免無效調(diào)用。
agoo調(diào)用方式優(yōu)化后,立刻剔除了無效調(diào)用,agoo受理率有了明顯提升。
至此: 我們總算能對(duì) agoo 受理失敗的真正原因做一個(gè)高大上的分析了。
根據(jù)統(tǒng)計(jì): 推送被 agoo 拒絕的主要原因是——用戶關(guān)閉了通知權(quán)限。同時(shí),我們對(duì) agoo 調(diào)用數(shù)據(jù)的進(jìn)一步分析發(fā)現(xiàn)——有部分用戶找不到對(duì)應(yīng)的設(shè)備。 優(yōu)化到此,我們猛然發(fā)現(xiàn)多了兩個(gè)問題。
那就繼續(xù)優(yōu)化唄:
1) 通知體驗(yàn)優(yōu)化,引導(dǎo)打開通知權(quán)限;
2) 與agoo共建設(shè)備庫,解決設(shè)備轉(zhuǎn)換失敗的問題。
這兩個(gè)優(yōu)化方向又是一片新天地,我們擇日再聊。
推送到達(dá) agoo ,分機(jī)型搭乘廠商“專列”,駛向下一站:用戶設(shè)備。
這是推送經(jīng)歷的第二站。出站查票,發(fā)現(xiàn)竟然超員了。
于是乎: 我們每天有大量推送因?yàn)槌^廠商設(shè)定的限額被攔截。
為什么會(huì)這樣呢?
實(shí)際上: 提供推送通道的廠商(沒錯(cuò), 各手機(jī)廠商的自家推送通道良莠不齊 ),為了保證用戶體驗(yàn),會(huì)對(duì)每個(gè)應(yīng)用能夠推送的消息總量進(jìn)行限制。
對(duì)于廠商而言,這個(gè)限制會(huì)根據(jù)推送的類型和應(yīng)用的用戶規(guī)模設(shè)定——推送主要分為產(chǎn)品類的推送和營銷類的推送。
廠商推送通道對(duì)于不同類型消息的限制是:
1) 對(duì)于產(chǎn)品類推送,廠商會(huì)保證到達(dá);
2) 對(duì)于營銷類推送,廠商會(huì)進(jìn)行額度限制;
3) 未標(biāo)記的推送,默認(rèn)作為營銷類推送對(duì)待。
我們剛好沒有對(duì)推送進(jìn)行標(biāo)記,因此觸發(fā)了廠商的推送限制。
這對(duì)我們的用戶來說,會(huì)帶來困擾。閑魚的交易,很依賴買賣家之間的消息互動(dòng)。這部分消息是需要確保到達(dá)的。
同樣: 訂單類的消息、用戶的關(guān)注,也需要保證推送給用戶。
根據(jù)主流廠商的接口協(xié)議,我們將推送的消息分為以下幾類,并進(jìn)行相應(yīng)標(biāo)記:
1) 即時(shí)通訊消息;
2) 訂單狀態(tài)變化;
3) 用戶關(guān)注內(nèi)容;
4) 營銷消息這幾類。
同時(shí),在業(yè)務(wù)上,我們也進(jìn)行了推送的治理——將用戶關(guān)注度不高的消息,取消推送,避免打擾。
經(jīng)過這些優(yōu)化,因?yàn)槌^廠商限額而被攔截的推送實(shí)現(xiàn)了清零。
通過優(yōu)化agoo受理率、廠商受理率,我們解決了推送到達(dá)量的瓶頸。但即使消息被最終送達(dá),用戶到底點(diǎn)擊了沒有?這才是消息推送的根本意義所在。
于是,在日常的開發(fā)測(cè)試過程中,我們發(fā)現(xiàn)了推送的兩個(gè)體驗(yàn)問題:
1) 用戶點(diǎn)擊Push有開屏廣告;
2) 營銷Push也有權(quán)限校驗(yàn),更換用戶登陸后無法點(diǎn)擊。
對(duì)于開屏廣告功能,我們?cè)黾恿薖ush點(diǎn)擊跳過廣告的能力。
針對(duì)Push的權(quán)限校驗(yàn)功能,閑魚根據(jù)場(chǎng)景做了細(xì)分:
1) 涉及個(gè)人隱私的推送,保持權(quán)限校驗(yàn)不變;
2) 營銷類的推送,放開權(quán)限校驗(yàn)。
以上是點(diǎn)擊體驗(yàn)的優(yōu)化,我們還需要考慮用戶的點(diǎn)擊意愿。
用戶點(diǎn)擊量與推送的曝光量、推送素材的有趣程度相關(guān)。推送的曝光量又和推送的到達(dá)量、推送的到達(dá)時(shí)機(jī)有關(guān)。
具體的優(yōu)化手段是:
1) 在推送內(nèi)容上:我們需要優(yōu)化的是推送的時(shí)機(jī)和相應(yīng)的素材;
2) 在推送時(shí)機(jī)上:算法會(huì)根據(jù)用戶的偏好和個(gè)性化行為數(shù)據(jù),計(jì)算每個(gè)用戶的個(gè)性化推送時(shí)間,在用戶空閑的時(shí)間推送(避免在不合適的時(shí)間打擾用戶,同時(shí)也能提升用戶看到推送的可能性)。
3) 在推送素材上:算法會(huì)根據(jù)素材的實(shí)時(shí)點(diǎn)擊反饋,對(duì)素材做實(shí)時(shí)賽馬。只發(fā)用戶感興趣的素材,提高用戶點(diǎn)擊意愿。
通過以上我們的分析和技術(shù)優(yōu)化手段,整體弱推送鏈路鏈路有了不錯(cuò)的提升,離線消息的到達(dá)率相對(duì)提升了兩位數(shù)。
本篇主要和大家聊的是只是IM消息系統(tǒng)鏈路中的一環(huán)——弱感知鏈路的優(yōu)化,落地到到具體的業(yè)務(wù)也就是離線消息送達(dá)率問題。
整體IM消息系統(tǒng),還是一個(gè)比較復(fù)雜的領(lǐng)域。
我們?cè)谙⑾到y(tǒng)的發(fā)展過程中,面臨著如下問題:
1) 如何進(jìn)行消息的鏈路追蹤;
2) 如何保證IM消息的快速到達(dá)(見《 閑魚億級(jí)IM消息系統(tǒng)的及時(shí)性優(yōu)化實(shí)踐 》);
3) 如何將消息的玩法和底層能力分離;
4) 離線推送中如何通過用戶找到對(duì)應(yīng)的設(shè)備。
這些問題,我們?cè)谝郧暗奈恼轮杏兴窒?,以后也?huì)陸續(xù)分享更多,敬請(qǐng)期待。
[1]? Android P正式版即將到來:后臺(tái)應(yīng)用?;?、消息推送的真正噩夢(mèng)
[2]? 一套高可用、易伸縮、高并發(fā)的IM群聊、單聊架構(gòu)方案設(shè)計(jì)實(shí)踐
[3]? 一套億級(jí)用戶的IM架構(gòu)技術(shù)干貨(上篇):整體架構(gòu)、服務(wù)拆分等
[4]? 一套億級(jí)用戶的IM架構(gòu)技術(shù)干貨(下篇):可靠性、有序性、弱網(wǎng)優(yōu)化等
[5]? 從新手到專家:如何設(shè)計(jì)一套億級(jí)消息量的分布式IM系統(tǒng)
[6]? 企業(yè)微信的IM架構(gòu)設(shè)計(jì)揭秘:消息模型、萬人群、已讀回執(zhí)、消息撤回等
[7]? 融云技術(shù)分享:全面揭秘億級(jí)IM消息的可靠投遞機(jī)制
[8]? 移動(dòng)端IM中大規(guī)模群消息的推送如何保證效率、實(shí)時(shí)性?
[9]? 現(xiàn)代IM系統(tǒng)中聊天消息的同步和存儲(chǔ)方案探討
[10]? 新手入門一篇就夠:從零開發(fā)移動(dòng)端IM
[11]? 移動(dòng)端IM開發(fā)者必讀(一):通俗易懂,理解移動(dòng)網(wǎng)絡(luò)的“弱”和“慢”
[12]? 移動(dòng)端IM開發(fā)者必讀(二):史上最全移動(dòng)弱網(wǎng)絡(luò)優(yōu)化方法總結(jié)
[13]? IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(一):保證在線實(shí)時(shí)消息的可靠投遞
[14]? IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(二):保證離線消息的可靠投遞
[15]? 零基礎(chǔ)IM開發(fā)入門(一):什么是IM系統(tǒng)?
[16]? 零基礎(chǔ)IM開發(fā)入門(二):什么是IM系統(tǒng)的實(shí)時(shí)性?
[17]? 零基礎(chǔ)IM開發(fā)入門(三):什么是IM系統(tǒng)的可靠性?
[18]? 零基礎(chǔ)IM開發(fā)入門(四):什么是IM系統(tǒng)的消息時(shí)序一致性?
(本文已同步發(fā)布于: ?)
這個(gè)事情需要展開來看
很多大型企業(yè)單位為了滿足業(yè)務(wù)系統(tǒng)的使用需要,使用很強(qiáng)勁的服務(wù)器主機(jī),以大型機(jī)、小型機(jī)為主。這些機(jī)器都不使用windows系統(tǒng),所以SQL Server之類的數(shù)據(jù)庫沒辦法在這種機(jī)器上運(yùn)行。Oracle、DB2、Sybase之類的是主流,這幾個(gè)數(shù)據(jù)庫有很強(qiáng)大的技術(shù)支持團(tuán)隊(duì),也是受到大企業(yè)歡迎的原因。
計(jì)算機(jī)水平國外還是比較高的,所以外國軟件公司開發(fā)的針對(duì)大企業(yè)的軟件也都要求在這種數(shù)據(jù)庫上運(yùn)行。
約定俗成,微軟的操作系統(tǒng)和數(shù)據(jù)庫由于不能運(yùn)行在很強(qiáng)勁的主機(jī)上,所以只能給中小企業(yè)服務(wù)。微軟系列的還有access數(shù)據(jù)庫,基本上是為單機(jī)服務(wù)的。
至于MySQL基本上是為網(wǎng)站服務(wù)的,主要特點(diǎn)是免費(fèi),應(yīng)用挺多,但是大企業(yè)信息化軟件很少用,因?yàn)闆]有對(duì)應(yīng)的業(yè)務(wù)支持人員,到時(shí)候出問題,找不到人,就出大事故了。
反過來再看數(shù)據(jù)庫本身,都有參數(shù)說明,你仔細(xì)看看就知道了。很多小數(shù)據(jù)庫本身底氣就不足,并發(fā)數(shù)量、最大庫文件等等參數(shù)標(biāo)得很低,你說大企業(yè)動(dòng)輒幾T幾P的數(shù)據(jù),敢忘這種數(shù)據(jù)庫上放嗎?軟件公司敢編寫用這種數(shù)據(jù)庫的軟件嗎?
再說說知名度,企業(yè)之間都會(huì)互相問,要是一個(gè)很小很便宜的數(shù)據(jù)庫大家都用,都用得很好,市場(chǎng)占有率極高。自然口碑就好,大家就都用了。微軟的sqlsever就是一個(gè)例子。從最開始的6.5基本上不能用到sql2000很成功,得到大量企業(yè)的認(rèn)同,到現(xiàn)在出到2008版本,占有率很高了,就是口碑,可是它在大企業(yè)中使用不理想,所以還是占有中小企業(yè)。
分析這些數(shù)據(jù)庫,應(yīng)該多方面來看,不能只看參數(shù),只看技術(shù)。你都分析好了,發(fā)現(xiàn)某個(gè)數(shù)據(jù)庫不像大家說的,你能用,可是市場(chǎng)上找不到對(duì)應(yīng)的軟件,也沒轍,除非你自己編寫。