架構(gòu)學(xué)習(xí)筆記_第1頁
架構(gòu)學(xué)習(xí)筆記_第2頁
架構(gòu)學(xué)習(xí)筆記_第3頁
架構(gòu)學(xué)習(xí)筆記_第4頁
架構(gòu)學(xué)習(xí)筆記_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

?概述篇o為什么開發(fā)人員要學(xué)習(xí)架構(gòu)??無架構(gòu),不系統(tǒng)?現(xiàn)在的軟件系統(tǒng)規(guī)模越來越大,業(yè)務(wù)上和技術(shù)上都非常地復(fù)雜,大一點(diǎn)的互聯(lián)網(wǎng)公司,技術(shù)人員都有幾千號(hào)人。那么,如何開發(fā)這么復(fù)雜的系統(tǒng)?如何有效地組織他們的工作呢?在這里,一個(gè)好的架構(gòu)設(shè)計(jì)無疑是至關(guān)重要的,無論你是有一定經(jīng)驗(yàn)的開發(fā)人員,還是已經(jīng)開始從事系統(tǒng)設(shè)計(jì)的架構(gòu)師,深入學(xué)習(xí)和理解架構(gòu)都是必不可少的,掌握好架構(gòu)設(shè)計(jì),可以讓你輕松應(yīng)對技術(shù)和業(yè)務(wù)的挑戰(zhàn)。但是很多技術(shù)人員,由于個(gè)人項(xiàng)目經(jīng)驗(yàn)有限,又缺乏很好的學(xué)習(xí)途徑,對架構(gòu)設(shè)計(jì)一知半解。在實(shí)際工作中,不能把握好架構(gòu)設(shè)計(jì)的度,要么設(shè)計(jì)不足,要么過度設(shè)計(jì),導(dǎo)致系統(tǒng)變來變?nèi)ィ瑖?yán)重影響開發(fā)效率和質(zhì)量。?拓展你的職業(yè)發(fā)展空間?此外,對于技術(shù)人員來說,公司通常會(huì)提供兩個(gè)職業(yè)發(fā)展通道供你選擇:管理路線和技術(shù)路線。現(xiàn)實(shí)中,大部分同學(xué)應(yīng)該都是走技術(shù)路線的,很多程序員的職業(yè)發(fā)展目標(biāo),也都是想要成為一名優(yōu)秀的架構(gòu)師。這不僅僅意味著更優(yōu)渥的薪水和更持久的職業(yè)生涯,更因?yàn)樵诩軜?gòu)師這個(gè)舞臺(tái)上,你可以憑借個(gè)人出色的架構(gòu)能力,為項(xiàng)目的落地發(fā)揮巨大的作用,你會(huì)有更大的成就感。所以說,無論從軟件發(fā)展的趨勢,還是從個(gè)人職業(yè)發(fā)展方向上考慮,你都應(yīng)該擁抱架構(gòu),主動(dòng)學(xué)習(xí),盡快成長為一個(gè)能力全面的架構(gòu)師。?需要克服的挑戰(zhàn)?而這些,無疑都是非??简?yàn)人,也非常鍛煉人的,需要你能夠快速成長起來。如果你在走向架構(gòu)師這條路上,完全靠自己摸索,找不到正確的方向,不斷地犯錯(cuò),你很可能會(huì)半途而廢。?系統(tǒng)角度?你需要跳出當(dāng)前的小模塊,站在系統(tǒng)整體的角度來考慮問題?業(yè)務(wù)角度?你不僅要從技術(shù)的角度考慮問題,也要學(xué)會(huì)從業(yè)務(wù)的角度來考慮問題,深入理解系統(tǒng)的挑戰(zhàn)在哪里,不要在錯(cuò)誤的地方發(fā)力。?資源平衡?你需要做好各方面的平衡,能在現(xiàn)有的各項(xiàng)資源約束下,尋求一個(gè)最優(yōu)?如何找到一個(gè)好的學(xué)習(xí)方式呢??理論?在架構(gòu)學(xué)習(xí)這方面,并沒有十分系統(tǒng)的理論指導(dǎo),教你如何一步步進(jìn)階。?實(shí)戰(zhàn)o架構(gòu)本質(zhì)?通過合理的內(nèi)部編排,保證系統(tǒng)高度有序,能夠不斷擴(kuò)展,滿足業(yè)務(wù)和技術(shù)的?架構(gòu)的出發(fā)點(diǎn)是業(yè)務(wù)和技術(shù)在不斷復(fù)雜化,引起系統(tǒng)混亂,需要通過架構(gòu)來保證有序?架構(gòu)實(shí)現(xiàn)從無序到有序,是通過合理的內(nèi)部編排實(shí)現(xiàn)的,基本的手段,就是“分”與“合”,先把系統(tǒng)打散,然后將它們重新組合,形成更合理的關(guān)系。o?架構(gòu)的分類?業(yè)務(wù)架構(gòu)o從概念層面幫助我們理解系統(tǒng)面臨哪些問題以及如何處理o講清楚核心業(yè)務(wù)的處理過程,定義各個(gè)業(yè)務(wù)模塊的相互關(guān)系?應(yīng)用架構(gòu)o從邏輯層面幫助我們理解系統(tǒng)內(nèi)部是如何分工與協(xié)作的。o講清楚系統(tǒng)內(nèi)部是怎么組織的,有哪些應(yīng)用,相互間是怎么調(diào)用的?技術(shù)架構(gòu)o技術(shù)架構(gòu)從物理層面幫助我們理解系統(tǒng)是如何構(gòu)造的,以及如決穩(wěn)定性的問題。o講清楚系統(tǒng)由哪些硬件、操作系統(tǒng)和中間件組成,它們是如何和我們開發(fā)的應(yīng)用一起配合,應(yīng)對各種異常情況,保持系統(tǒng)的?好的架構(gòu)要求?業(yè)務(wù)復(fù)雜性o業(yè)務(wù)可擴(kuò)展、可復(fù)用?技術(shù)復(fù)雜性o系統(tǒng)的高可用、高性能和可伸縮,并盡量采用低成本的方式落地?好的架構(gòu)師要求?能力模型圖o?出色的程序員,寫的一手好代碼?架構(gòu)師要有技術(shù)的廣度(多領(lǐng)域知識(shí))和深度(技術(shù)前瞻)?思維的高度,具備抽象思維能力,善于把實(shí)物概念化并?思維的深度,能夠透過問題看本質(zhì)?良好的溝通能力(感性)?良好的平衡取舍能力(理性)?業(yè)務(wù)架構(gòu)篇o概述?從架構(gòu)角度看,業(yè)務(wù)架構(gòu)是源頭,然后才是技術(shù)架構(gòu)。?業(yè)務(wù)架構(gòu)師和產(chǎn)品經(jīng)理區(qū)別?產(chǎn)品經(jīng)理o他要實(shí)現(xiàn)什么o目標(biāo):定義系統(tǒng)的外觀,滿足了用戶?業(yè)務(wù)架構(gòu)師o職責(zé):把業(yè)務(wù)流程和節(jié)點(diǎn)打散,按照業(yè)務(wù)域的維度來劃分系統(tǒng)模塊,并定義這些模塊之間的關(guān)系,最終形成一個(gè)高度結(jié)構(gòu)化o目標(biāo):定義系統(tǒng)的外觀、滿足了用戶、定義系統(tǒng)的內(nèi)部模塊結(jié)構(gòu),滿足了開發(fā)人員?架構(gòu)目標(biāo)?業(yè)務(wù)的可擴(kuò)展o業(yè)務(wù)架構(gòu)設(shè)計(jì)要能支持打造一個(gè)柔性系統(tǒng),通過提供良好的業(yè)務(wù)擴(kuò)展性,允許業(yè)務(wù)不斷調(diào)整和快速生長。o特點(diǎn):業(yè)務(wù)的主題是變化和創(chuàng)新,系統(tǒng)的主題是穩(wěn)定和可靠。??我們把業(yè)務(wù)平臺(tái)和業(yè)務(wù)線剝離開,讓業(yè)務(wù)平臺(tái)封裝基礎(chǔ)通用的功能,這樣,它就變得相當(dāng)?shù)胤€(wěn)定;讓各個(gè)業(yè)務(wù)線包含自己的個(gè)性化需求,業(yè)務(wù)線只依賴業(yè)務(wù)平臺(tái),業(yè)務(wù)線彼此之間互相獨(dú)立,可以自由變化。這樣的業(yè)務(wù)架構(gòu)設(shè)計(jì),就同時(shí)保證了系統(tǒng)的相對穩(wěn)定和業(yè)務(wù)的快速創(chuàng)新。o案例??在支付寶一代的業(yè)務(wù)架構(gòu)中,前臺(tái)的業(yè)務(wù)和后臺(tái)的業(yè)務(wù)直接耦合,形成了多對多的網(wǎng)狀結(jié)構(gòu),如果修改一個(gè)后臺(tái)業(yè)務(wù)線,就會(huì)影響到很多前臺(tái)業(yè)務(wù)線;如果增加一條新的前臺(tái)業(yè)務(wù)線,需要同時(shí)和很多后臺(tái)業(yè)務(wù)線對接,這樣的架構(gòu)無疑是對業(yè)務(wù)的擴(kuò)展非常不利的。而在支付寶二代業(yè)務(wù)架構(gòu)中,你會(huì)發(fā)現(xiàn),他們在前后臺(tái)業(yè)務(wù)線之間,構(gòu)建了獨(dú)立的支付清算平臺(tái),從而實(shí)現(xiàn)了前臺(tái)業(yè)務(wù)和后臺(tái)業(yè)務(wù)的解還是后臺(tái)業(yè)務(wù),都只需要對接中間的支付清算平臺(tái),把系統(tǒng)的變化收斂到一個(gè)點(diǎn),而?常見問題業(yè)務(wù)線之間相互不影響,這樣的方式,自然可以很好地支?業(yè)務(wù)的可復(fù)用o按照業(yè)務(wù)域來劃分業(yè)務(wù),把業(yè)務(wù)流程中的節(jié)點(diǎn)拆分到各個(gè)業(yè)務(wù)域,按照業(yè)務(wù)域構(gòu)造系統(tǒng)模塊o業(yè)務(wù)域是相對固定的,它有明確的數(shù)據(jù)模型和業(yè)務(wù)規(guī)則,這樣一來,系統(tǒng)模塊也就比較固定和通用,也就具備比較好的復(fù)用基o系統(tǒng)模塊要求?模塊的職責(zé)定位要非常清晰?對于模塊來說,在定位范圍內(nèi)的職責(zé)要全部涵蓋到,而不在這個(gè)范圍的職責(zé)全部不要。?模塊的數(shù)據(jù)模型和接口設(shè)計(jì)要保證通用?架構(gòu)師需要?dú)w納業(yè)務(wù)場景,通過抽象提煉,形成通用化的設(shè)計(jì),以此來滿足多個(gè)類似場景的需求。?做好業(yè)務(wù)的層次劃分?越是底層的業(yè)務(wù),它就相對更固定。舉個(gè)例子,同樣是訂單業(yè)務(wù)域,對于底層訂單的增刪改查功能,不同類型的訂單都是一樣的,但對于上層的訂單生命周期管理,外賣訂單和堂食訂單可能就不一樣。所以,在做高復(fù)用設(shè)計(jì)時(shí),我們可以嘗試把一個(gè)業(yè)務(wù)域按照層次拆分得更細(xì),比如,把訂單模塊拆分為多個(gè)上層訂單模塊和一個(gè)基礎(chǔ)訂單模塊,這樣,基礎(chǔ)訂單模塊對于所有類型的訂單,都能夠提o可擴(kuò)展架構(gòu)?目標(biāo):如何打造一個(gè)善變的柔性系統(tǒng)??如何設(shè)計(jì)一個(gè)具有良好擴(kuò)展性的系統(tǒng),能夠快速支持業(yè)務(wù)變化落地??快:如何快速地上線新業(yè)務(wù)?老板很可能明天就想看到效果。?穩(wěn):對某個(gè)功能進(jìn)行修改,如何不影響到系統(tǒng)其它的功能??案例?電商平臺(tái)架構(gòu)是如何演變的?o發(fā)展過程??單體?分布式?soao傳統(tǒng)的SOA架構(gòu):解決的是企業(yè)內(nèi)部大量異構(gòu)系統(tǒng)集成的問題??新的SOA架構(gòu):解決的是系統(tǒng)重復(fù)建設(shè)的問題o?首先,它通過服務(wù)化思想,提供更好的業(yè)務(wù)封裝性,并通過標(biāo)準(zhǔn)技術(shù),能更友好地對外輸出業(yè)務(wù)能力;o其次,SOA服務(wù)不依附于某個(gè)具體應(yīng)用,它可以獨(dú)立地部署和擴(kuò)展,這樣避免了直接影響現(xiàn)有的系統(tǒng);o最后,服務(wù)通過封裝通用的業(yè)務(wù)邏輯,共享,解決了重復(fù)造輪o微服務(wù)?微服務(wù)=小應(yīng)用+小服務(wù)。o中臺(tái)o1號(hào)店App服務(wù)端架構(gòu)改造?V1.0架構(gòu)?架構(gòu)圖o????V2.0架構(gòu)?架構(gòu)圖o??優(yōu)點(diǎn):架構(gòu)比較簡單,App的服務(wù)端整體上就一個(gè)應(yīng)用,由移動(dòng)團(tuán)隊(duì)來維護(hù)所有對外接口,服務(wù)端內(nèi)部有很多Jar包,比如商品搜索、商品詳情、購物車等等,這些Jar包包含了各個(gè)業(yè)務(wù)線的業(yè)務(wù)邏輯及數(shù)據(jù)庫訪問,它們由各個(gè)業(yè)務(wù)線的開發(fā)者負(fù)責(zé)提供。缺點(diǎn)?移動(dòng)服務(wù)端對Jar包的緊密依賴?移動(dòng)團(tuán)隊(duì)的職責(zé)過分復(fù)雜?團(tuán)隊(duì)并行開發(fā)困難優(yōu)點(diǎn):每塊業(yè)務(wù)由不同的團(tuán)隊(duì)負(fù)責(zé),可以很好地支持團(tuán)隊(duì)之間的并行開發(fā);同時(shí),移動(dòng)接口和PC端共享底層業(yè)務(wù)邏輯,有助于快速把PC端的功能完整地復(fù)制到App端。業(yè)務(wù)線團(tuán)隊(duì)的生產(chǎn)力就被完全釋放了,App的功能也就快速豐富起來了。缺點(diǎn)?移動(dòng)端和PC端互相干擾的問題?重復(fù)開發(fā)的問題:系統(tǒng)級(jí)的功能,比如說,安接口都需要這些通用功能。?V3.0架構(gòu)?架構(gòu)圖o?o嗎???回顧o前臺(tái)??o后臺(tái)??穩(wěn)定性的問題:于這種直連方式,只要一個(gè)后端系統(tǒng)出問題,就會(huì)直接影響到App的可用性,使得App整體上非常的脆弱。效果?App端和PC端徹底獨(dú)立了?通過架構(gòu)改造,實(shí)現(xiàn)了核心業(yè)務(wù)的復(fù)用?這個(gè)架構(gòu)強(qiáng)化了系統(tǒng)級(jí)功能?團(tuán)隊(duì)分工也更明確了定義:面向C端的應(yīng)用,比如像微信、淘寶這樣的應(yīng)用。不過,你要注意,前臺(tái)不僅僅是指前端,它還包含和前端配套的服務(wù)端前臺(tái)對外,我們知道,消費(fèi)者的需求快速多變,所以前臺(tái)需要能快速響應(yīng),做到低成本試錯(cuò);管理系統(tǒng)等等,主要是面向企業(yè)內(nèi)部人員使用。對于傳統(tǒng)企業(yè)來說,之前只有線下場景,通過內(nèi)部的后臺(tái)就能完成所有業(yè)務(wù)流程;而對于互聯(lián)網(wǎng)企業(yè),或者逐步開展線上業(yè)務(wù)的傳統(tǒng)企業(yè)來說,同時(shí)需要前臺(tái)和后臺(tái),一起協(xié)作,完成業(yè)務(wù)的閉環(huán)。?后臺(tái)對內(nèi),企業(yè)內(nèi)部的業(yè)務(wù)流程不能經(jīng)常變,所以后臺(tái)需要穩(wěn)定,不能隨意調(diào)整,一旦改動(dòng),影響面廣,成本很高?前臺(tái)要快,后臺(tái)要穩(wěn),業(yè)務(wù)擴(kuò)展時(shí),常遇到以下兩類挑戰(zhàn)o這個(gè)營銷思路很棒,老板希望能馬上驗(yàn)證,前臺(tái)好改,但后臺(tái)調(diào)整起來需要好幾個(gè)月,互聯(lián)網(wǎng)行業(yè)比較普遍o后臺(tái)系統(tǒng)技術(shù)舊,性能差,接口不開放,前臺(tái)對接起來很麻煩,而且一有促銷活動(dòng),后臺(tái)立馬就掛。傳統(tǒng)行業(yè)比較普通?如何實(shí)現(xiàn)前后臺(tái)的平滑對接,這是一個(gè)巨大的挑戰(zhàn),中臺(tái)架構(gòu)因此而?中臺(tái)定位o例子?Windows系統(tǒng)??麥當(dāng)勞?背景o歷史?前臺(tái)?傳統(tǒng)的線下業(yè)務(wù)?后臺(tái)o總部使用的ERP、門店使用的收銀系統(tǒng)等等開辟新業(yè)務(wù),新零售轉(zhuǎn)型?外賣?小程序點(diǎn)餐服務(wù)o改造?改造圖??改造步驟?對內(nèi)部老系統(tǒng)進(jìn)行包裝,對外提供標(biāo)準(zhǔn)的API,這樣就能把舊的IT基礎(chǔ)設(shè)施,轉(zhuǎn)換成面向互聯(lián)網(wǎng)的業(yè)務(wù)平臺(tái)?新的C端應(yīng)用可以快速基于這個(gè)業(yè)務(wù)平臺(tái)來構(gòu)建,而不用關(guān)心底層老系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié)。這個(gè)中間層就是中臺(tái)?傳統(tǒng)行業(yè)?中臺(tái)相當(dāng)于企業(yè)的商業(yè)操作系統(tǒng),通過對后臺(tái)的包裝,為前臺(tái)提供全方位的支持。需要注意的是,中臺(tái)不僅僅是前后臺(tái)之間簡單的適配器,中臺(tái)本身也會(huì)落業(yè)務(wù)數(shù)據(jù),有完整的業(yè)務(wù)規(guī)則,就像Windows操作系統(tǒng)一樣,它在適配硬件的基礎(chǔ)上,進(jìn)一步提供內(nèi)存管理、進(jìn)程調(diào)度等功能,為上層應(yīng)用提供體系化的支持。?互聯(lián)網(wǎng)行業(yè)?前后臺(tái)雖然是同時(shí)建設(shè)的,它們在功能上能夠銜接起來,但前臺(tái)求據(jù),和前臺(tái)構(gòu)成C端業(yè)務(wù)的小閉環(huán),支持業(yè)務(wù)的快速創(chuàng)新,等業(yè)務(wù)模式驗(yàn)證后,中臺(tái)和后臺(tái)再進(jìn)一步徹底打通,構(gòu)成業(yè)務(wù)的大閉環(huán)。o中臺(tái)的適用性?o中臺(tái)實(shí)現(xiàn)了通用基礎(chǔ)業(yè)務(wù)的平臺(tái)化的作用?通過有限而比較固定的基礎(chǔ)業(yè)務(wù),來滿足無限而快速變化的上層業(yè)務(wù)場景?從變化速度來看,企業(yè)基礎(chǔ)的業(yè)務(wù)是相對固定的,而具體上層業(yè)務(wù)場景是相對多變的;?從數(shù)量來看,基礎(chǔ)業(yè)務(wù)數(shù)量是有限的,而具體業(yè)務(wù)場景是無限的。?企業(yè)級(jí)業(yè)務(wù)能力的快速復(fù)用業(yè)務(wù)規(guī)則?從系統(tǒng)角度看,中臺(tái)相當(dāng)于操作系統(tǒng),對外提供標(biāo)準(zhǔn)接口,屏蔽了底層系統(tǒng)的復(fù)雜性?從數(shù)據(jù)角度看,中臺(tái)收斂了數(shù)據(jù),比如使用同一套訂單數(shù)據(jù)模型,讓所有渠道的訂單使用相同的訂單模型,所有訂單數(shù)據(jù)落到同一個(gè)訂單?概念?中臺(tái)是微服務(wù)的升級(jí)版o在微服務(wù)架構(gòu)下,我們搭建的是一個(gè)個(gè)離散的服務(wù),如商品服務(wù)、訂單服務(wù)等等。而在中臺(tái)里,這些微服務(wù)升級(jí)為了商品中心、訂單中心,每個(gè)中心更強(qiáng)調(diào)體系化,包括更好的業(yè)務(wù)通用能力,更好的系統(tǒng)運(yùn)營能力(如監(jiān)控、穩(wěn)定性、性能的強(qiáng)化),更好的業(yè)務(wù)運(yùn)營能力(比如商品中心自帶配套的商品管理后臺(tái))o每個(gè)服務(wù)中心都圍繞核心業(yè)務(wù),自成體系,成為一個(gè)微內(nèi)核,這些微內(nèi)核形成一個(gè)有機(jī)整體,共同構(gòu)成了基礎(chǔ)業(yè)務(wù)平臺(tái),也服務(wù)架構(gòu)向中臺(tái)架構(gòu)的演進(jìn)過程。?業(yè)務(wù)中臺(tái)三層結(jié)構(gòu)o?基礎(chǔ)業(yè)務(wù)能力由通用基礎(chǔ)業(yè)務(wù)平臺(tái)來實(shí)現(xiàn)?通用聚合服務(wù)對基礎(chǔ)業(yè)務(wù)進(jìn)行組合,進(jìn)一步提升了業(yè)務(wù)能力的易用性?通用中間件平臺(tái),通過技術(shù)手段保證了業(yè)務(wù)中臺(tái)的穩(wěn)定性,三者一起實(shí)現(xiàn)了企業(yè)整體業(yè)務(wù)能力的復(fù)用?落地化到中臺(tái),更多的是各個(gè)基礎(chǔ)服務(wù)點(diǎn)上的強(qiáng)化和面上的整合?系統(tǒng)構(gòu)成?對于傳統(tǒng)企業(yè)來說,系統(tǒng)基本上是“川”字型的結(jié)構(gòu),大量獨(dú)立的商業(yè)套件組成遺留系統(tǒng),落地中臺(tái)是一個(gè)革命性的動(dòng)作。o傳統(tǒng)企業(yè)中臺(tái)架構(gòu)設(shè)計(jì)圖?渠道&應(yīng)用?整個(gè)系統(tǒng)的對外部分,包括了各個(gè)應(yīng)用的前端,如App、小程序、公眾號(hào)等等,這些是需要定制的部分。同時(shí),在對外部分,我們還會(huì)?應(yīng)用平臺(tái)?是各個(gè)具體應(yīng)用的母體,它包含了各個(gè)應(yīng)用的等,這些服務(wù)端會(huì)針對具體場景,做流程編排和信息的聚合?業(yè)務(wù)中臺(tái)?是中臺(tái)架構(gòu)的核心,它包括一系列的通用基礎(chǔ)服務(wù),以及它上面的通用聚合服務(wù)和下面的技術(shù)平臺(tái)?后臺(tái)?第一部分是適配插件,用于連接商戶內(nèi)部系統(tǒng)和中臺(tái)基礎(chǔ)服務(wù),比如,在中臺(tái)的商品服務(wù)和后臺(tái)ERP之間同步商品數(shù)據(jù),在中臺(tái)的會(huì)員服務(wù)和后臺(tái)CRM之間同步會(huì)員信息。一般針對每個(gè)內(nèi)部系統(tǒng),都有一個(gè)適配插件,它起到了類似硬件驅(qū)動(dòng)程序的作用,這個(gè)一般是定制化的?第二部分是企業(yè)內(nèi)部系統(tǒng),這個(gè)是企業(yè)的IT基o關(guān)系o系統(tǒng)的構(gòu)成:模塊+關(guān)系?模塊是系統(tǒng)的基本組成部分,它泛指子系統(tǒng)、應(yīng)用、服務(wù)或功能模塊。關(guān)系指模塊之間的依賴關(guān)系,簡單地講,就是模塊之間有調(diào)用,我們知道,調(diào)用區(qū)分發(fā)起方和服務(wù)方,因此,依賴關(guān)系是有方向性的。o模塊?概念?模塊定義系統(tǒng)都有哪些基本的“玩家”,分別承擔(dān)什么職責(zé)。從業(yè)務(wù)的角度看,每個(gè)模塊都代表了某個(gè)業(yè)務(wù)概念,或者說業(yè)務(wù)領(lǐng)域。?模塊內(nèi)部由數(shù)據(jù)和業(yè)務(wù)邏輯組成,其中數(shù)據(jù)是核心,業(yè)務(wù)邏輯圍繞著數(shù)據(jù),對數(shù)據(jù)做進(jìn)一步加工,方便外部使用。?打造可擴(kuò)展要求?定位明確,概念完整。o定位:保證模塊業(yè)務(wù)概念的完整性。數(shù)據(jù)上,模塊需要覆蓋對應(yīng)業(yè)務(wù)領(lǐng)域的全部數(shù)據(jù),比如一個(gè)訂單模塊,它要覆蓋所有渠的訂單等,這些不同類型訂單的數(shù)據(jù)模型和實(shí)際數(shù)據(jù),都由訂。o功能:模塊要包含業(yè)務(wù)領(lǐng)域的全部功能,比如訂單模塊包含所有訂單相關(guān)的功能,包括訂單數(shù)據(jù)的增刪改查、訂單業(yè)務(wù)規(guī)則校驗(yàn)、訂單的狀態(tài)和生命周期管理等。o自成體系:模塊的業(yè)務(wù)邏輯盡量圍繞自身內(nèi)部數(shù)據(jù)進(jìn)行處理,對外部依賴越小,模塊的封裝性越好,穩(wěn)定性也越強(qiáng),不會(huì)隨著外部模塊的調(diào)整而調(diào)整。o粒度適中:不能為了追求定位清晰,把粒度劃分得很小,導(dǎo)致系統(tǒng)的碎片化。?關(guān)系定義了模塊如何協(xié)作,一起完成業(yè)務(wù)流程,依賴關(guān)系實(shí)質(zhì)上體現(xiàn)的是模塊?簡化模塊的依賴關(guān)系?簡化依賴的方向o單向關(guān)系?減少依賴的數(shù)量o網(wǎng)狀結(jié)構(gòu)轉(zhuǎn)化為層次結(jié)構(gòu)?借鑒做法?我們按照模塊定位的不同,把模塊劃分為不同層次,比如劃分為上面的應(yīng)用層和下面的資源層。這樣,一個(gè)層通過把多個(gè)模塊組織在一起,就形成了概念上更大粒度的模塊。有了層以后,我們理解業(yè)務(wù)時(shí),因?yàn)槟K定位相同,往往關(guān)注這個(gè)更大粒度的層就可以,依賴關(guān)系只要指向這個(gè)層,而不是層里面的各個(gè)模塊。這樣,從人理解業(yè)務(wù)的角度,依賴的數(shù)量大幅?具體例子?MVC架構(gòu):表示層、應(yīng)用層、聚合服務(wù)層、基礎(chǔ)服務(wù)層o?擴(kuò)展性的本質(zhì)o表象?業(yè)務(wù)總在變化,要求架構(gòu)設(shè)計(jì)給系統(tǒng)提供良好的擴(kuò)展性。o深層o通過構(gòu)建合理的模塊體系,有效地控制系統(tǒng)復(fù)雜度,最小化業(yè)務(wù)變化引起的系統(tǒng)調(diào)整。?打造可擴(kuò)展的模塊體系o拆分:實(shí)現(xiàn)模塊劃分??水平拆分o定義:從上到下把系統(tǒng)分為多層,按照系統(tǒng)處理的先后順序,個(gè)步驟。o優(yōu)點(diǎn)?使每一塊職責(zé)都比較明確,功能內(nèi)聚,每個(gè)模塊管理自己內(nèi)部的復(fù)雜性?模塊之間相互松耦合,一個(gè)模塊的修改不影響另一個(gè)模塊?很好地滿足現(xiàn)有業(yè)務(wù)做深度擴(kuò)展,當(dāng)業(yè)務(wù)有變化時(shí),系統(tǒng)在特定層做調(diào)整,對其他層影響有限,這樣把變化局限在一個(gè)小范圍?垂直拆分o定義:是按照不同的業(yè)務(wù)線拆分,按照不同的業(yè)務(wù)場景,自上而下進(jìn)行豎切,讓每個(gè)業(yè)務(wù)都自成體系,形成自己的業(yè)務(wù)閉o優(yōu)點(diǎn)?滿足業(yè)務(wù)廣度上的擴(kuò)展?一般做業(yè)務(wù)架構(gòu)時(shí),我們先考慮垂直拆分,從大方向上,把不同業(yè)務(wù)給區(qū)分清楚,然后再針對具體業(yè)務(wù),按照業(yè)務(wù)處理流程進(jìn)行水平拆分。o整合:優(yōu)化模塊依賴關(guān)系?通用化似功能的模塊?優(yōu)點(diǎn):模塊的數(shù)量減少了,模塊的定位更清晰,概念更完整,職責(zé)更聚焦。在實(shí)踐中,當(dāng)不同業(yè)務(wù)線對某個(gè)功能需求比較類似時(shí),我們經(jīng)?平臺(tái)化?定義:把定位相同的模塊組織在一起,以組團(tuán)的方式對外提供服務(wù)。對于外部系統(tǒng)來說,我們可以把這些模塊看成是一個(gè)整體,一起對業(yè)全面的支撐。??可復(fù)用架構(gòu)o問題?好不容易搞定了一個(gè)項(xiàng)目,接著又有新的類似項(xiàng)目過來,我們又要從頭再來?項(xiàng)目的代碼是定制的,項(xiàng)目結(jié)束后,系統(tǒng)維護(hù)的噩夢剛剛開始o(jì)復(fù)用的分類?技術(shù)復(fù)用:代碼復(fù)用和技術(shù)組件復(fù)用?業(yè)務(wù)復(fù)用:業(yè)務(wù)實(shí)體復(fù)用、業(yè)務(wù)流程復(fù)用和產(chǎn)品復(fù)用?業(yè)務(wù)實(shí)體復(fù)用個(gè)業(yè)務(wù)領(lǐng)域的數(shù)據(jù)和業(yè)務(wù)規(guī)則進(jìn)行封裝,將它變成上層應(yīng)用系統(tǒng)可以直接使用的業(yè)務(wù)組件?業(yè)務(wù)流程的復(fù)用o針對的是業(yè)務(wù)場景,它可以把多個(gè)業(yè)務(wù)實(shí)體串起來,完成一個(gè)端到端的任務(wù)。比如說,下單流程需要訪問會(huì)員、商品、訂單、庫存等多個(gè)業(yè)務(wù),如果我們把這些調(diào)用邏輯封裝為一個(gè)下單流程服務(wù),那下單頁面就可以調(diào)用這個(gè)流程服務(wù)來完成下單,而不需要去深入了解下單的具體過程。?產(chǎn)品復(fù)用o系統(tǒng)的復(fù)用,比如說一個(gè)SaaS系統(tǒng)(Software-as-a-Service),它在內(nèi)部做了各種通用化設(shè)計(jì),允許我們通過各種參數(shù)配置,得到我們想要的功能;o復(fù)用程度排序?產(chǎn)品復(fù)用>業(yè)務(wù)流程復(fù)用>業(yè)務(wù)實(shí)體復(fù)用>組件復(fù)用>代碼復(fù)用?o從技術(shù)復(fù)用到業(yè)務(wù)復(fù)用,越往上,復(fù)用程度越高,復(fù)用產(chǎn)生的價(jià)值也越大,但實(shí)現(xiàn)起來也越復(fù)雜,它能復(fù)用的場景就越有o如果我們能進(jìn)一步打造業(yè)務(wù)中間件,并在這個(gè)基礎(chǔ)上,形成業(yè)務(wù)平臺(tái),這樣,我們就能實(shí)現(xiàn)更高的業(yè)務(wù)級(jí)復(fù)用,可以更高效的快速落地。o基礎(chǔ)服務(wù)邊界劃分?定義?要解決“我是誰”的問題,它實(shí)現(xiàn)了服務(wù)和周邊環(huán)境的清晰切割口是服務(wù)的對外視圖,它封裝了服務(wù)的業(yè)務(wù)數(shù)據(jù)和規(guī)則?原則個(gè)完整的業(yè)務(wù)領(lǐng)域o品基本信息,還需要包含商品擴(kuò)展信息(標(biāo)簽),最后還要包含復(fù)雜商品類型 (組合商品、套餐商品等)o服務(wù)功能的完整性,對于服務(wù)使用者來說,他們是以業(yè)務(wù)的角度看服務(wù),而不是純粹的數(shù)據(jù)角度。比如一個(gè)套餐商品,在服務(wù)內(nèi)部,它是多個(gè)單品的復(fù)雜組合,但從服務(wù)調(diào)用者的角度來?服務(wù)的一致性原則:服務(wù)的數(shù)據(jù)和職責(zé)要一致,誰擁有信息,誰就負(fù)責(zé)提供相應(yīng)的功能o服務(wù)內(nèi)部的業(yè)務(wù)邏輯要盡量依賴內(nèi)部數(shù)據(jù),而不是接口輸入的數(shù)據(jù),否則會(huì)造成數(shù)據(jù)和業(yè)務(wù)規(guī)則的脫節(jié)(一個(gè)在外面,一個(gè)在里面)o舉例:訂單里的優(yōu)惠信息,如:商品原價(jià)多少、滿減優(yōu)惠多少、特價(jià)減多少?促銷服務(wù)負(fù)責(zé)促銷規(guī)則的維護(hù),以及對應(yīng)的優(yōu)惠計(jì)算功能?訂單服務(wù)負(fù)責(zé)優(yōu)惠結(jié)果數(shù)據(jù)落地,以及后續(xù)的查詢功能?正交原則o基礎(chǔ)服務(wù),它們就處于調(diào)用鏈的底層,服務(wù)之間不會(huì)有任何的調(diào)用關(guān)系,也就是說基礎(chǔ)服務(wù)相互之間是正交的。比如說會(huì)員服務(wù)和商品服務(wù),它們代表不同維度的基礎(chǔ)業(yè)務(wù)域,彼此之間不會(huì)有調(diào)用關(guān)系o服務(wù)之間有數(shù)據(jù)的依賴關(guān)系,但沒有接口的調(diào)用關(guān)系,如:訂單明細(xì)里包含商品ID信息,但訂單服務(wù)內(nèi)部不會(huì)調(diào)用商品服務(wù)來獲取商品詳情。如果頁面需要展示訂單的商品詳情,針對這個(gè)具體的業(yè)務(wù)場景,我們可以在上層的聚合服務(wù)里,通過聚合訂單服務(wù)和商品服務(wù)來實(shí)現(xiàn)o案例?如何設(shè)計(jì)一個(gè)基礎(chǔ)服務(wù)?落地共享服務(wù)核心o服務(wù)邊界的劃分?服務(wù)邊界確定了這個(gè)服務(wù)應(yīng)該“做什么”o功能的抽象設(shè)計(jì)?抽象設(shè)計(jì)確定了這個(gè)服務(wù)應(yīng)該“怎么做”?訂單服務(wù)o訂單業(yè)務(wù)架構(gòu)?o訂單服務(wù)邊界劃分?包含的服務(wù)?基本信息管理?訂單優(yōu)惠管理o從最開始的商品金額,到最后需要用戶實(shí)際支付的金額,中間會(huì)有一系列的折扣和減免,這些都是屬于訂單信息的一部分。這些信息我們需要展示給用戶看,如果后續(xù)要進(jìn)行訂單成本的分?jǐn)偅?訂單生命周期管理o負(fù)責(zé)管理訂單的狀態(tài)變化?不包含的服務(wù)?作為基礎(chǔ)服務(wù),訂單服務(wù)不主動(dòng)調(diào)用其他服務(wù)o訂單的用戶詳情、商品詳情等等,這應(yīng)該由上層應(yīng)用通過調(diào)用相應(yīng)的服務(wù)來實(shí)現(xiàn),然后和訂單信息組裝在一起,而不是在訂單服務(wù)內(nèi)部直接調(diào)用其他服務(wù),否則會(huì)導(dǎo)致基礎(chǔ)服務(wù)之間相互依賴,職責(zé)模糊。?訂單服務(wù)不負(fù)責(zé)和第三方系統(tǒng)的集成o第三方系統(tǒng),太不具有通用性?訂單服務(wù)不提供優(yōu)惠計(jì)算或成本分?jǐn)傔壿?不提供履單詳情,不負(fù)責(zé)詳細(xì)物流信息的存儲(chǔ)o功能抽象設(shè)計(jì)?訂單數(shù)據(jù)模型??訂單狀態(tài)通用化?開放訂單狀態(tài)定義o優(yōu)點(diǎn):訂單狀態(tài)及規(guī)則是完全由外部負(fù)責(zé)管理的,自己負(fù)責(zé)屬性存儲(chǔ),訂單服務(wù)很穩(wěn)定o弊端:上層應(yīng)用的負(fù)擔(dān)會(huì)很重,不但要負(fù)責(zé)定義有哪些狀態(tài),而且還要維護(hù)狀態(tài)的轉(zhuǎn)換規(guī)則,一不小心,訂單可能從A狀態(tài)B,導(dǎo)致業(yè)務(wù)出問題?應(yīng)用和服務(wù)共同管理狀態(tài)o主狀態(tài),由訂單服務(wù)負(fù)責(zé)定義??子狀態(tài),開放給各個(gè)應(yīng)用來定義o比如,一個(gè)訂單處于配送中,實(shí)際情況可能是“倉庫已發(fā)貨”,“貨已到配送站”,或者是“快遞員正在送貨中”等等o訂單服務(wù)接口定義?同步的服務(wù)接口調(diào)用?設(shè)計(jì)查詢接口,來滿足各種場景需求o粗粒度接口o中粒度接口o細(xì)粒度接口?異步的消息通知息+查詢接口?瘦消息o1號(hào)店庫存服務(wù)化改造?背景和目標(biāo)?背景o?所有商品相關(guān)的表都存在產(chǎn)品庫里面,有產(chǎn)品的表(產(chǎn)品、分類、品牌、組合關(guān)系、屬性等)、商品SKU的表、商家和供應(yīng)商的表、庫存和價(jià)格的表等等,這些表加起來,數(shù)量超過了上百張。?系統(tǒng)是類似分布式的,但數(shù)據(jù)庫是集中式,前后臺(tái)系統(tǒng)都需要訪問產(chǎn)品庫?痛點(diǎn)o從應(yīng)用方面來說,各個(gè)系統(tǒng)功能重復(fù)建設(shè),比如很多系統(tǒng)都會(huì)直接訪問庫存相關(guān)的表,類似的庫存邏輯散布在很多地方;另外,如果修改了庫存表的某個(gè)字段,這些系統(tǒng)同時(shí)會(huì)受影響,正所謂牽一發(fā)而動(dòng)全身o從數(shù)據(jù)庫方面來說,數(shù)據(jù)庫的可用性是比較差的,如果某個(gè)系統(tǒng)有慢查詢,它就很可能拖垮整個(gè)產(chǎn)品數(shù)據(jù)庫,導(dǎo)致它不可用;還有,這么多系統(tǒng)同時(shí)訪問產(chǎn)品庫,數(shù)據(jù)庫的連接數(shù)也經(jīng)常不夠用?目標(biāo)o對這個(gè)大數(shù)據(jù)庫按照業(yè)務(wù)維度進(jìn)行垂直拆分,比如分成產(chǎn)品數(shù)據(jù)庫、庫存數(shù)據(jù)庫、價(jià)格數(shù)據(jù)庫等等o方式來支持?jǐn)?shù)據(jù)庫表的訪問o將各個(gè)業(yè)務(wù)系統(tǒng)統(tǒng)一接入微服務(wù),最終完成整個(gè)商品體系的微服務(wù)化改造?庫存微服務(wù)改造?挑選庫存改造原因o業(yè)務(wù)價(jià)值大o改動(dòng)小?過程o?準(zhǔn)備階段?圈表o確定庫存微服務(wù)具體包含哪些表?表的要求:既容易拆分?jǐn)?shù)據(jù)庫,又能控制服務(wù)的粒度,保證功能聚焦?滿足所有的庫存訪問需求o表的數(shù)量不能太多?確定服務(wù)的數(shù)據(jù)模型??確定服務(wù)的邊界劃分o收集SQL?收集所有業(yè)務(wù)系統(tǒng)訪問這些表的SQL語句,包括它的業(yè)務(wù)場景說明、訪問頻率o拆分SQL?SQL拆分,會(huì)涉及一定的業(yè)務(wù)系統(tǒng)改造及性能影響,需要評(píng)估?實(shí)施階段o構(gòu)建庫存微服務(wù)?接口設(shè)計(jì)、代碼開發(fā)、功能測試等步驟,服務(wù)開發(fā)團(tuán)隊(duì)會(huì)對業(yè)務(wù)方提供的SQL進(jìn)行梳理,然后對接口做一定的通用化設(shè)計(jì),避免為每個(gè)SQL定制一個(gè)單獨(dú)的接?o接入庫存微服務(wù)o數(shù)據(jù)庫獨(dú)立?效果圖o??中臺(tái)是如何煉成的o系統(tǒng)架構(gòu)是否需要升級(jí)的判斷依據(jù)?業(yè)務(wù)上有什么重大變化,導(dǎo)致當(dāng)前系統(tǒng)的弊端已經(jīng)很明顯,不能適應(yīng)業(yè)務(wù)發(fā)展?架構(gòu)改造時(shí),如何在業(yè)務(wù)、系統(tǒng)、資源三者之間做好平衡,對系統(tǒng)進(jìn)行分步式o背景?為大型餐飲連鎖企業(yè)打造O2O交易平臺(tái),包括三方聚合外賣、自有小程序、App點(diǎn)餐,這些線上用戶的訂單最終會(huì)落到門店的收銀系統(tǒng),由門店進(jìn)行履o系統(tǒng)升級(jí)過程的架構(gòu)?只有聚合外賣服務(wù)v1版??增加小程序版本v2版?方案選擇o小程序訂單和外賣訂單的處理類似,收銀系統(tǒng)除了對接外賣系要同時(shí)對接兩套訂單接口,它需要做大的改造。由于這是第三很難落地。o我們把小程序訂單當(dāng)作一個(gè)特殊的外賣渠道,把小程序訂單推就是相當(dāng)于小程序訂單直接借用了外賣訂單的履單通道。?統(tǒng)一訂單服務(wù)架構(gòu)v3版??中臺(tái)架構(gòu)v4版??技術(shù)架構(gòu)篇o概述?面對一個(gè)復(fù)雜的系統(tǒng)的困惑?不清楚系統(tǒng)整體的處理過程,當(dāng)系統(tǒng)出問題時(shí),不知道如何有針對性地去排查問題?系統(tǒng)設(shè)計(jì)時(shí),經(jīng)常忽視非業(yè)務(wù)性功能的需求,也不清楚如何實(shí)現(xiàn)這些目標(biāo),經(jīng)常是付出慘痛的教訓(xùn)后,才去亡羊補(bǔ)牢?系統(tǒng)的物理模型??技術(shù)架構(gòu)的職責(zé)?負(fù)責(zé)系統(tǒng)所有組件的技術(shù)選型?確保這些組件可以正常運(yùn)行?技術(shù)架構(gòu)的挑戰(zhàn)?硬件的問題o硬件的處理能力有限?垂直擴(kuò)展:升級(jí)硬件來提升處理能力?水平擴(kuò)展:增加機(jī)器數(shù)量來提升處理能力o硬件不是100%的可靠,它本身也會(huì)出問題?軟件的問題o軟件組件?中間件?系統(tǒng)級(jí)軟件o軟件是硬件的延伸,給系統(tǒng)的優(yōu)勢?彌補(bǔ)了硬件的缺陷。比如Redis集群,通過數(shù)據(jù)分片,解決了單臺(tái)服務(wù)器內(nèi)存和帶寬的瓶頸問題,實(shí)現(xiàn)服務(wù)器處理能力的水平擴(kuò)展;?封裝讓我們可以更高效地訪問系統(tǒng)資源。比如說,數(shù)據(jù)庫是對文件系統(tǒng)的加強(qiáng),使數(shù)據(jù)的存取更高效;oCAP理論?技術(shù)架構(gòu)的目標(biāo)?技術(shù)架構(gòu)就要選擇和組合各種軟硬件,再結(jié)合我們開發(fā)的應(yīng)用代碼,統(tǒng)非功能性需求。?非功能性需求o系統(tǒng)的高可用?可用性出問題常見場景?軟硬件本身有故障,比如機(jī)器斷電,網(wǎng)絡(luò)不通。通過容錯(cuò)機(jī)制解決?高并發(fā)引起的系統(tǒng)處理能力的不足,通過優(yōu)o系統(tǒng)的高性能?保證合理的性能分兩種情況?常規(guī)的流量進(jìn)來,但系統(tǒng)內(nèi)部處理比較復(fù)雜,我們就需要運(yùn)用技術(shù)手段進(jìn)行優(yōu)化。比如針對海量商品的檢索,我們就需要構(gòu)建復(fù)雜的搜索系統(tǒng)來支持。?高并發(fā)的流量進(jìn)來,系統(tǒng)仍舊需要在合理的時(shí)間內(nèi)提供響應(yīng),這就更強(qiáng)調(diào)我們做架構(gòu)設(shè)計(jì)時(shí),要保證系統(tǒng)的處理能力能夠整體上做水平擴(kuò)展,而不僅僅是對某個(gè)節(jié)點(diǎn)做絕對的性能優(yōu)。o系統(tǒng)的可伸縮和低成本o可監(jiān)控性?故障不可避免,但如何能第一時(shí)間發(fā)現(xiàn)問題,快速進(jìn)行恢復(fù)保障業(yè)務(wù)的連續(xù)性是非常重要的。?做技術(shù)架構(gòu)設(shè)計(jì)時(shí),不能不顧一切地要求達(dá)到所有目標(biāo),而是要根據(jù)業(yè)務(wù)特點(diǎn),選擇最關(guān)鍵的目標(biāo)予以實(shí)現(xiàn)。比如說,一個(gè)新聞閱讀系統(tǒng),它和訂單、錢沒有關(guān)系,即使短時(shí)間不可用,對用戶影響也不大。但在出現(xiàn)熱點(diǎn)新聞時(shí),系統(tǒng)要能支持高并發(fā)的用戶請求。因此,這里的設(shè)計(jì),主要是考慮滿足高性能,而不用太過于追求4個(gè)9或5o高可用架構(gòu)?故障點(diǎn)?o資源不可用?網(wǎng)絡(luò)和服務(wù)器出故障,網(wǎng)絡(luò)出故障表明節(jié)點(diǎn)連接不上,服務(wù)器出故障表明該節(jié)點(diǎn)本身不能正常工作。o資源不足發(fā)的情況o節(jié)點(diǎn)的功能有問題?這個(gè)主要體現(xiàn)在我們開發(fā)的代碼上,比如它的內(nèi)部業(yè)務(wù)邏輯有問題,或者是接口不兼容導(dǎo)致客戶端調(diào)用出了問?高可用的總體解決思路??架構(gòu)設(shè)計(jì)原則?o正面保障?冗余無單點(diǎn)?無單點(diǎn)設(shè)計(jì)針對的是節(jié)點(diǎn)本身的故障?水平擴(kuò)展?針對的是節(jié)點(diǎn)處理能力的不足o減少損失?柔性事務(wù)?柔性事務(wù)保證功能的基本可用和數(shù)據(jù)的最終一致?系統(tǒng)可降級(jí):通過損失非核心功能來保證核心功能的可用?限流?降級(jí)?熔斷?功能禁用o系統(tǒng)可監(jiān)控?通過監(jiān)控,我們可以實(shí)時(shí)地了解系統(tǒng)的當(dāng)前狀態(tài)?高可用手段o客戶端到服務(wù)端通常是遠(yuǎn)程訪問,需要解決網(wǎng)絡(luò)的可用性問題oHA如Nginx、HAProxy、LVS等負(fù)載均衡軟件,能很好地支持雙節(jié)點(diǎn)+Keepalived部oWeb節(jié)點(diǎn)的水平擴(kuò)展o自動(dòng)故障轉(zhuǎn)移o系統(tǒng)的可降級(jí)(限流)o反爬蟲WeboWeb節(jié)點(diǎn)的水平擴(kuò)展o自動(dòng)故障轉(zhuǎn)移o系統(tǒng)的可降級(jí)(限流、業(yè)務(wù)開關(guān))?訪問基礎(chǔ)資源o關(guān)系數(shù)據(jù)庫?主從部署?讀寫分離?MHA方案?VIP漂移o緩存o消息系統(tǒng)?處理事故有三板斧?回滾?重啟?加機(jī)器?高可用案例?如何實(shí)現(xiàn)O2O平臺(tái)日訂單500萬?o項(xiàng)目背景介紹?大型餐飲公司的小程序點(diǎn)餐平臺(tái)?用戶在小程序上點(diǎn)餐并支付完成后,訂單會(huì)先落到訂單庫,然后進(jìn)一步推送到門店的收銀系統(tǒng);收銀系統(tǒng)接單后,推送給后廚系統(tǒng)進(jìn)行生產(chǎn);同時(shí)返回小程序取餐碼,用戶可以憑取餐碼去門店取餐或收取外賣。?促銷活動(dòng)?前端小程序請求將會(huì)達(dá)到每秒10萬QPS?首日的訂單數(shù)量會(huì)超過500萬?保證用戶的體驗(yàn),系統(tǒng)整體的可用性要達(dá)到99.99%。?系統(tǒng)架構(gòu)?o高可用系統(tǒng)改造措施??前端接入改造o小程序端的CDN優(yōu)化?儲(chǔ)存靜態(tài)的商品數(shù)據(jù)、圖片?Nginx負(fù)載均衡?收銀端的通信線路備份?應(yīng)用和服務(wù)的水平擴(kuò)展?訂單水平分庫?異步化處理?主動(dòng)通知,避免輪詢?如何第一時(shí)間知道系統(tǒng)哪里有問題??監(jiān)控的分類o?用戶體驗(yàn)監(jiān)控?指的是從前端用戶的訪問速度出發(fā),來監(jiān)測系統(tǒng)的可用性,包括頁面能否打開、關(guān)鍵接口的響應(yīng)時(shí)間等等,用戶體驗(yàn)監(jiān)控一般結(jié)合前端的埋點(diǎn)來實(shí)現(xiàn)?業(yè)務(wù)監(jiān)控?它是從業(yè)務(wù)結(jié)果的角度來看,比如說訂單數(shù)、交易金額等等,業(yè)務(wù)監(jiān)控也是最直觀的,我們知道,如果業(yè)務(wù)數(shù)據(jù)沒問題,系統(tǒng)整體也就沒里定時(shí)拉取業(yè)務(wù)數(shù)據(jù),然后以曲線的方式展示業(yè)務(wù)指標(biāo)隨著時(shí)間的變化過程。除了當(dāng)前的曲線,一般還有同比和環(huán)比曲線。同比是和前一天的數(shù)據(jù)進(jìn)行比較,環(huán)比是和一周前的數(shù)據(jù)進(jìn)行比較,兩方面結(jié)合起來,我們就能知道當(dāng)前有問題。?應(yīng)用監(jiān)控?指的是對自己開發(fā)的代碼進(jìn)行監(jiān)控,比如接口在一段時(shí)間內(nèi)的調(diào)用次數(shù)、響應(yīng)時(shí)間、出錯(cuò)次數(shù)等等。更深入一點(diǎn)的應(yīng)用監(jiān)控還包含了調(diào)用鏈監(jiān)控,我們知道,一個(gè)外部請求的處理過程包含了很多環(huán)節(jié),比如說網(wǎng)關(guān)、應(yīng)用、服務(wù)、緩存和數(shù)據(jù)庫,我們可以通過調(diào)用鏈監(jiān)控把這些環(huán)節(jié)串起來,當(dāng)系統(tǒng)有問題時(shí),我們可以一步步地排查。有很多APM工具可以實(shí)現(xiàn)調(diào)用?中間件監(jiān)控?指的是對標(biāo)準(zhǔn)中間件進(jìn)行監(jiān)控,它是第三方開等,這些組件對應(yīng)的是系統(tǒng)的PaaS層。這些中間件往往帶有配套的監(jiān)控系統(tǒng),比如,RabbitMQ就有自帶的監(jiān)控后臺(tái)。?基礎(chǔ)平臺(tái)監(jiān)控?指的是對系統(tǒng)底層資源進(jìn)行監(jiān)控,如操作系系統(tǒng)的IaaS層。Zabbix就是典型的基礎(chǔ)設(shè)施監(jiān)控工具,它可以監(jiān)控CPU、內(nèi)存和磁盤的使用情況。?監(jiān)控的痛點(diǎn)o不同的節(jié)點(diǎn),它的監(jiān)控的方式是不一樣的,相應(yīng)地,監(jiān)控的結(jié)同的系統(tǒng)里輸出。o系統(tǒng)不同部分的監(jiān)控都是由不同的人負(fù)責(zé)的,比如說,運(yùn)維負(fù)責(zé)的是基礎(chǔ)平臺(tái)監(jiān)控,開發(fā)負(fù)責(zé)的是應(yīng)用系統(tǒng)監(jiān)控。而監(jiān)控信息往往專門的人才能解讀,比如應(yīng)用監(jiān)控,它需要對應(yīng)的開發(fā)人員才能判斷當(dāng)前的接口訪問是否有問題o系統(tǒng)作為一個(gè)整體,需要上下游各個(gè)環(huán)節(jié)的人一起協(xié)作,進(jìn)行大量的溝通,才能最終找到問題。?常見問題o?發(fā)現(xiàn)問題慢?業(yè)務(wù)監(jiān)控的曲線一般1分鐘更新一次,有時(shí)候因?yàn)檎5臉I(yè)務(wù)抖動(dòng),Monitor還需要把這種情況排除掉。因此,他會(huì)傾向于多觀察幾分鐘,這樣就導(dǎo)致問題的確認(rèn)有很大的滯后性?定位問題慢于節(jié)點(diǎn)依賴復(fù)雜,需要反復(fù)溝通才能把信息串起來,因此很多時(shí)候,這種排查方式是串行或者說無序的。一方面,無關(guān)的人會(huì)卷入進(jìn)來,造成人員的浪費(fèi);另一方面排查效率低,定位問題的時(shí)間長?解決問題慢?當(dāng)定位到問題,對系統(tǒng)進(jìn)行調(diào)整后,驗(yàn)證問題是否已經(jīng)得到解決,也不是一件很直觀的事情,需要各個(gè)研發(fā)到相應(yīng)的監(jiān)控系統(tǒng)里去進(jìn)行觀察,通過滯后的業(yè)務(wù)曲線觀察業(yè)務(wù)是否恢?解決思路o對系統(tǒng)的監(jiān)控要求?系統(tǒng)能夠自動(dòng)地判斷每個(gè)節(jié)點(diǎn)是否正常,并直觀地給出結(jié)果,不需要經(jīng)過專業(yè)人員的分析。?系統(tǒng)能夠自動(dòng)把各個(gè)節(jié)點(diǎn)的監(jiān)控信息有機(jī)地串起來,從整體的角度對系統(tǒng)進(jìn)行監(jiān)控,不需要很多人反復(fù)地進(jìn)行o監(jiān)控效果?要實(shí)時(shí)?需要第一時(shí)間知道系統(tǒng)當(dāng)前是否有問題?要直觀?節(jié)點(diǎn)是否有問題,我們需要很直觀地就能判斷出來,就像交通圖上的紅黃綠顏色標(biāo)識(shí)一樣。?整體監(jiān)控?針對系統(tǒng)做整體監(jiān)控,就像交通圖一樣,它是針對周邊整體的道路情況進(jìn)行展示,我們也需要把系統(tǒng)的各個(gè)節(jié)點(diǎn)放在一起,清晰地給出節(jié)點(diǎn)依賴關(guān)系。系統(tǒng)真正出問題的地方往往只有一個(gè),其他地方都是連帶的,如果監(jiān)控系統(tǒng)能夠給出節(jié)點(diǎn)的上下游依賴關(guān)系,對于定位真正的問題源是非常有用的。o監(jiān)控方式?系統(tǒng)中的每個(gè)節(jié)點(diǎn)對應(yīng)交通圖的一條道路?節(jié)點(diǎn)的健康狀況對應(yīng)道路的擁堵情況,節(jié)點(diǎn)同樣也有紅黃綠三種不同的顏色,來展示該節(jié)點(diǎn)是否正常;?節(jié)點(diǎn)之間的調(diào)用關(guān)系對應(yīng)道路的方位關(guān)系?目標(biāo)o構(gòu)建一個(gè)實(shí)時(shí)的、直觀的、一體化的監(jiān)控系統(tǒng),類似交通圖一樣,可以一眼就看出系統(tǒng)的問題所在。o終極目標(biāo):故障自動(dòng)定位(自動(dòng)發(fā)現(xiàn)問題、通知故障處理、自動(dòng)定位問題、故障處理、故障恢復(fù))?監(jiān)控系統(tǒng)的整體架構(gòu)o?如何打造一體化的監(jiān)控系統(tǒng)??節(jié)點(diǎn)信息采集?接入監(jiān)控系統(tǒng)?前端信息展示?高性能和可伸縮架構(gòu)o常見場景?系統(tǒng)的TPS很低,只要流量一大,系統(tǒng)就掛,加機(jī)器也沒用;?機(jī)器的資源利用率很低,造成資源嚴(yán)重浪費(fèi)o常用的性能數(shù)據(jù)?o高性能的策略和手段?加快單個(gè)請求處理?優(yōu)化處理路徑上每個(gè)節(jié)點(diǎn)的處理速度?并行處理單個(gè)請求,MapReduce思想?同時(shí)處理多個(gè)請求?請求處理異步化o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論