《逆流而上:阿里巴巴技術(shù)成長(zhǎng)之路》是阿里巴巴集團(tuán)榮耀背后的技術(shù)血淚史。《逆流而上:阿里巴巴技術(shù)成長(zhǎng)之路》通過(guò)分享業(yè)務(wù)運(yùn)行過(guò)程中各個(gè)領(lǐng)域發(fā)生的典型“踩坑”案例,幫助大家快速提升自我及團(tuán)隊(duì)協(xié)作,學(xué)習(xí)到寶貴的處理經(jīng)驗(yàn)及實(shí)踐方案,為互聯(lián)網(wǎng)生產(chǎn)系統(tǒng)的穩(wěn)定共同努力。從基礎(chǔ)架構(gòu)、中間件、數(shù)據(jù)庫(kù)、云計(jì)算、大數(shù)據(jù)等技術(shù)領(lǐng)域中不斷積累經(jīng)驗(yàn),顛覆技術(shù)瓶頸,不斷創(chuàng)新以適應(yīng)不斷增長(zhǎng)的需求。
《逆流而上:阿里巴巴技術(shù)成長(zhǎng)之路》主要面向互聯(lián)網(wǎng)技術(shù)從業(yè)人員和在校師生,使讀者能夠通過(guò)此書(shū)基本了解阿里在各技術(shù)領(lǐng)域的能力,學(xué)習(xí)在如此規(guī)模下可能出現(xiàn)的問(wèn)題以及解決方案的探討和沉淀分享。
本書(shū)主要面向互聯(lián)網(wǎng)技術(shù)從業(yè)人員和在校師生,使讀者能夠通過(guò)此書(shū)基本了解阿里在各技術(shù)領(lǐng)域的能力,學(xué)習(xí)在如此規(guī)模下可能出現(xiàn)
阿里巴巴集團(tuán)成長(zhǎng)集編委會(huì)
由阿里巴巴集團(tuán)不同業(yè)務(wù)線及不同技術(shù)領(lǐng)域內(nèi)的人員組成的虛擬組織。技術(shù)人員都知道軟件開(kāi)發(fā)過(guò)程中的八二原則,理解大多數(shù)問(wèn)題發(fā)生在何處,發(fā)生的原因,如何解決,變得尤為重要。阿里巴巴集團(tuán)業(yè)務(wù)飛速發(fā)展,技術(shù)人員積累了大量豐富的線上問(wèn)題排查及解決的案例和經(jīng)驗(yàn)。
成長(zhǎng)集編委會(huì)從中挑選了一些的技術(shù)案例,側(cè)重于對(duì)問(wèn)題的還原和分析。我們希望,曾經(jīng)踩過(guò)的坑都能具有其意義和使命,而后來(lái)者通過(guò)學(xué)習(xí)前人的經(jīng)驗(yàn),防微杜漸,快速成長(zhǎng)。
第1 章 基礎(chǔ)架構(gòu)高可用 1
1.1 明察秋毫,域名解析排查技巧 2
1.2 智能定位,網(wǎng)絡(luò)端到端靜默丟包點(diǎn)迅速鎖定 .14
1.3 靈活調(diào)度,對(duì)接運(yùn)營(yíng)商網(wǎng)絡(luò)流量的容災(zāi)策略 21
1.4 抽絲剝繭,深挖云盤(pán)掛起背后的真相 . 25
1.5 存儲(chǔ)的底線,SSD 數(shù)據(jù)不一致 34
第2 章 中間件使用常見(jiàn)隱患與預(yù)防 . 40
2.1 高并發(fā)“熱點(diǎn)”緩存數(shù)據(jù)快速“退火” 41
2.2 自我保護(hù),讓系統(tǒng)堅(jiān)如磐石 45
2.3 機(jī)房容災(zāi),VIPServer 軟負(fù)載流量調(diào)度實(shí)例 51
2.4 山洪暴發(fā),高流量觸發(fā)Tomcat bug 引起集群崩潰 .65
第3 章 數(shù)據(jù)庫(kù)常見(jiàn)問(wèn)題 . 80
3.1 性能殺手,SQL 執(zhí)行計(jì)劃 . 81
3.2 波譎云詭,數(shù)據(jù)庫(kù)延遲 . 92
3.3 風(fēng)暴來(lái)襲,AliSQL 連接池調(diào)優(yōu) 102
3.4 防患于未然,ORM 規(guī)約變更案例 110
3.5 云數(shù)據(jù)庫(kù),SQL 優(yōu)化經(jīng)典案例 114
第4 章 業(yè)務(wù)研發(fā)經(jīng)典案例 . 133
4.1 冪等控制,分布式鎖超時(shí)情況和業(yè)務(wù)重試的并發(fā) 134
4.2 另類(lèi)解法,分布式一致性 139
4.3 大道至簡(jiǎn),從故障模型的邊界狀態(tài)切換到原始狀態(tài) 143
4.4 疑案追蹤,JSON 序列化不一致 154
4.5 從現(xiàn)象到本質(zhì),不保障順序的Class.getMethods JVM 實(shí)現(xiàn) . 163
4.6 破解超時(shí)迷局,淺析啟動(dòng)初期load 飆高問(wèn)題 172
4.7 洞悉千絲萬(wàn)縷,淺談JIT 編譯優(yōu)化的誤區(qū) 180
第5 章 運(yùn)行管理域穩(wěn)定性建設(shè) 187
5.1 洞若觀火,讓故障無(wú)處遁形 188
5.2 體系化思考,高效解決運(yùn)營(yíng)商問(wèn)題 197
5.3 以戰(zhàn)養(yǎng)兵,以故障演練提升系統(tǒng)穩(wěn)定性 203
第1 章
基礎(chǔ)架構(gòu)高可用
互聯(lián)網(wǎng)、電子商務(wù)、云計(jì)算、大數(shù)據(jù)等領(lǐng)域都離不開(kāi)基礎(chǔ)設(shè)施建設(shè),基礎(chǔ)設(shè)施的建設(shè)包含從服務(wù)器到IDC、網(wǎng)絡(luò)等一系列的過(guò)程。技術(shù)日新月異變化的過(guò)程,也給基礎(chǔ)設(shè)施的建設(shè)帶來(lái)了巨大的挑戰(zhàn)。如何用研發(fā)能力解決基礎(chǔ)設(shè)施穩(wěn)定性是基礎(chǔ)架構(gòu)不斷提升核心競(jìng)爭(zhēng)力的關(guān)鍵。本章從線上案例入手,從基礎(chǔ)架構(gòu)角度介紹了問(wèn)題排查思路和創(chuàng)新設(shè)計(jì)概念,希望給讀者帶來(lái)啟迪。
1.1 明察秋毫,域名解析排查技巧
背景
網(wǎng)站服務(wù)是現(xiàn)在眾多互聯(lián)網(wǎng)服務(wù)中應(yīng)用最廣泛的服務(wù)之一,而且中國(guó)的網(wǎng)絡(luò)環(huán)境更為復(fù)雜,幾乎每個(gè)應(yīng)用都會(huì)使用到域名。域名在互聯(lián)網(wǎng)應(yīng)用中是非常重要的一環(huán),萬(wàn)一出現(xiàn)問(wèn)題可能會(huì)導(dǎo)致整個(gè)網(wǎng)站無(wú)法訪問(wèn),并且由于各地DNS(Domain Name System,域名系統(tǒng))緩存,有時(shí)候恢復(fù)解析所需時(shí)間會(huì)比較長(zhǎng)。本節(jié)針對(duì)幾種典型的域名解析問(wèn)題,做了簡(jiǎn)單的排查
思路介紹,以期與讀者交流。域名解析的過(guò)程
用戶使用終端(電腦、手機(jī)、Pad 等)上網(wǎng)時(shí),電腦會(huì)設(shè)置一組DNS(即緩存DNS,又叫Local DNS)作為一層“”、“緩存”,為當(dāng)?shù)鼐钟?/p>
網(wǎng)或其他用戶提供高性能的解析迭代查詢(xún)。這個(gè)緩存DNS 一般是在用戶連上網(wǎng)時(shí)自動(dòng)分配的, 不需要手工配置。當(dāng)用戶訪問(wèn)網(wǎng)站時(shí), 如www.example.com,會(huì)向緩存 DNS 發(fā)送example 對(duì)應(yīng)的地址的查詢(xún)請(qǐng)求。當(dāng)緩存DNS 收到請(qǐng)求后,如果其有相應(yīng)的緩存且沒(méi)過(guò)期,則直接響應(yīng);否則,向根DNS、頂級(jí)域DNS、主域名對(duì)應(yīng)的DNS 或更下級(jí)的DNS
進(jìn)行查詢(xún),直到查詢(xún)到最終的地址,然后返回給客戶端。對(duì)網(wǎng)站管理者(更地說(shuō),是域名的管理者)來(lái)說(shuō),需要為域名設(shè)置解析,將域名指向自己的網(wǎng)絡(luò)服務(wù)器。購(gòu)買(mǎi)了域名,一般會(huì)使用注冊(cè)商的DNS(即將注冊(cè)商提供的DNS 服務(wù)器作為購(gòu)買(mǎi)的域名的DNS 服務(wù)
器),或者使用第三方的DNS。如果使用注冊(cè)商的DNS,設(shè)置解析的流程會(huì)比較便捷;但如果使用第三方的DNS,需要在第三方添加域名、解析記錄,然后在注冊(cè)商處修改域名的DNS 作為第三方提供的DNS 名字。
在上述描述域名解析的過(guò)程中,有兩種DNS 的角色:
? 緩存DNS,又叫Local DNS 或Cache DNS,一般是由網(wǎng)絡(luò)接入服務(wù)提供商在近上網(wǎng)用戶端做的緩存DNS 服務(wù)器,主要用于迭代查詢(xún)的緩存,其中的數(shù)據(jù)均來(lái)自向上級(jí)的查詢(xún)得到,本身并無(wú)實(shí)際的數(shù)據(jù),這既增加了解析速度,又減少了對(duì)DNS 的查詢(xún)數(shù)量,
就好比是數(shù)據(jù)庫(kù)中的Memcache。
? DNS,又叫Authority DNS。由域名管理者負(fù)責(zé)管理,或委托其他DNS 服務(wù)提供商進(jìn)行管理,其中的記錄均是由負(fù)責(zé)本域的管理員添加進(jìn)來(lái)的。DNS 是由上到下一級(jí)級(jí)授權(quán)的,如根DNS(ROOT DNS)將各個(gè)后綴授權(quán)到各個(gè)后綴管理機(jī)構(gòu)的頂級(jí)域DNS
(即注冊(cè)局的DNS),而各個(gè)頂級(jí)域DNS 中又有指向下級(jí)域?qū)?yīng)的DNS。
如何判斷是否是解析異常
網(wǎng)站無(wú)法訪問(wèn)有多種原因,如網(wǎng)絡(luò)異常、服務(wù)器異常、網(wǎng)站配置不正確、服務(wù)器異常等。
當(dāng)你訪問(wèn)網(wǎng)站時(shí),如果打開(kāi)的頁(yè)面內(nèi)容和預(yù)期的不同,或報(bào)錯(cuò)信息中含有“resolve”相關(guān)字樣,或提示“找不到網(wǎng)站服務(wù)器”時(shí),就應(yīng)該懷疑是不是解析方面的問(wèn)題了。排查解析問(wèn)題用到的基本方法是用dig(或nslookup,本文以dig 為例來(lái)說(shuō)明,nslookup 相關(guān)命令請(qǐng)參考其對(duì)應(yīng)的幫助文檔)看能否正常解析到最終的IP。__如果無(wú)法獲取到最終的IP,或者獲取到最終的IP 不是網(wǎng)站的實(shí)際IP(這個(gè)由域名網(wǎng)站管理員判斷),就是解析異常了。如下是一個(gè)正常的解析(部分域名用example.com/bar.com/bar.net 等指代,部分IP 地址使用1.1.1.1、2.1.1.1、2.2.2.2 等代替,后續(xù)類(lèi)同)。
這本《逆流而上:阿里巴巴技術(shù)成長(zhǎng)之路》總結(jié)了近年來(lái)阿里巴巴集團(tuán)在重要領(lǐng)域中遇到的故障和排查方法。從故障中得到的教訓(xùn),剖析出來(lái)的架構(gòu)缺陷,折射出來(lái)的實(shí)現(xiàn)問(wèn)題以及運(yùn)維過(guò)程中的疏忽和錯(cuò)誤都是很真實(shí)的,很具有說(shuō)服力。他山之石,可以攻玉,希望為廣大開(kāi)發(fā)和運(yùn)維工程師帶來(lái)幫助。
—— 阿里云博學(xué)總監(jiān) 吳結(jié)生
古語(yǔ)說(shuō):前人栽樹(shù),后人乘涼。本書(shū)創(chuàng)作旨在讓歷史的經(jīng)驗(yàn)傳承下去,幫助到更多的人。它匯集了阿里巴巴集團(tuán)各個(gè)BU技術(shù)人員在日常工作中所遇到的典型踩坑案例,這些案例全部來(lái)自線上生產(chǎn)實(shí)踐,涉及基礎(chǔ)設(shè)施、中間件、數(shù)據(jù)庫(kù)、業(yè)務(wù)開(kāi)發(fā)以及穩(wěn)定性建設(shè),基本涵蓋了阿里巴巴所有的技術(shù)兵種,這是一本非常的技術(shù)踩坑實(shí)踐書(shū),具有很重要的參考意義。
—— 阿里云研究員 褚霸
阿里巴巴的技術(shù)人員日常的研發(fā)運(yùn)維過(guò)程,就是不斷和新問(wèn)題斗智斗勇的過(guò)程,我們會(huì)鼓勵(lì)把遇到的挑戰(zhàn)和問(wèn)題總結(jié)出來(lái),所以在這個(gè)過(guò)程中積累了大量的總結(jié)資料,這些資料有些總結(jié)到了產(chǎn)品里,成為架構(gòu)、系統(tǒng)的一部分,有些不斷被學(xué)習(xí)變成了其他更多同事的新能力。
—— 中間件技術(shù)部研究員 小邪
在我?guī)ьI(lǐng)阿里巴巴GOC(全球運(yùn)行指揮中心)團(tuán)隊(duì)期間,天天面對(duì)不斷發(fā)生的大小故障,尤其是重復(fù)發(fā)生的故障。而此書(shū)恰恰是在這種思考之下所采取的行動(dòng)之一。成功難以模仿,教訓(xùn)可以學(xué)習(xí)。每篇文章的背后都是血淋淋的教訓(xùn),值得每一個(gè)技術(shù)人員好好閱讀。
—— 菜鳥(niǎo)博學(xué)專(zhuān)家 王樂(lè)