上個(gè)月參加了upyun運(yùn)維與架構(gòu)交流大會(huì),自己在做運(yùn)維之前不曾參加過(guò)這樣的會(huì)議检柬,參加之后發(fā)現(xiàn)意義不僅僅在于拓展知識(shí)雳攘,更多在于擴(kuò)大自己的觸摸空間智末。
分以下幾個(gè)部分來(lái)分享
自動(dòng)化運(yùn)維的發(fā)展
這一塊的內(nèi)容主要來(lái)自于upyun運(yùn)維總監(jiān)的分享,他的講義中講到了他做運(yùn)維的那些年踩過(guò)的坑法精,以及高可用的自動(dòng)化運(yùn)維架構(gòu)多律。要做到部署和監(jiān)控都抓好才能有更精益的性能。
精華是這張圖:
我們目前應(yīng)用層級(jí)只能做到可用和一點(diǎn)點(diǎn)用好狼荞,應(yīng)用方面可以做到定時(shí)定人,但是沒(méi)把自動(dòng)化的運(yùn)維工具用起來(lái)帮碰。監(jiān)控方面zabbix目前夠用相味,又拍運(yùn)維總監(jiān)講解的時(shí)候說(shuō)到zabbix到后期機(jī)器特別多的時(shí)候?qū)Ψ?wù)器的內(nèi)存占用較高。所以他們選擇了使用ELK套件搭建監(jiān)控平臺(tái)殉挽,后來(lái)我網(wǎng)搜了一下丰涉,評(píng)價(jià)挺好的,還能夠搭建日志分析平臺(tái)斯碌。接下來(lái)要好好研究一下「使用ELK套件搭建日志分析平臺(tái)」
項(xiàng)目經(jīng)典架構(gòu)
接下來(lái)在聽(tīng)唯品會(huì)架構(gòu)師趙先生講以cloud native打造大型電商系統(tǒng)的議題時(shí)一死,講到電商系統(tǒng)的架構(gòu)。如下圖傻唾,從架構(gòu)上來(lái)看投慈,主要有四層:LB層,APP服務(wù)層(微服務(wù))冠骄,緩存層逛裤,DB層,存在
三種典型模式:
– 主從模式
– 集群模式
– 分布式模式
這里跟我們現(xiàn)在的架構(gòu)也是類似的猴抹,使用了lvs分流到不同的后端服務(wù)器带族,使用了緩存服務(wù)和mysql。這是一個(gè)項(xiàng)目的經(jīng)典架構(gòu)也是最基礎(chǔ)的架構(gòu)蟀给,以下是一個(gè)電商系統(tǒng)的基礎(chǔ)結(jié)構(gòu)蝙砌。
隨著用戶量的增長(zhǎng),如何能做到整個(gè)架構(gòu)的穩(wěn)定跋理,趙先生這里重點(diǎn)講到的就是對(duì)服務(wù)進(jìn)行拆分择克,對(duì)DB的拆分,項(xiàng)目服務(wù)的拆分等等前普。
我們可以從X軸肚邢,Y軸,Z軸。進(jìn)一步拆分骡湖。
業(yè)務(wù)的拆分
以業(yè)務(wù)為單位進(jìn)行功能拆分贱纠,比如電商系統(tǒng)可以拆分為訂單服務(wù)、用戶服務(wù)响蕴、庫(kù)存服務(wù)等谆焊。每個(gè)服務(wù)可以根據(jù)需要在進(jìn)一步拆分為更細(xì)力度的服務(wù)。一般的大型網(wǎng)站可以拆分出幾千個(gè)這樣的服務(wù)浦夷。
DB的拆分
以mysql為例辖试,隨著訪問(wèn)量的上升,幾乎大部分使用MySQL架構(gòu)的網(wǎng)站在數(shù)據(jù)庫(kù)上都開(kāi)始出現(xiàn)了性能問(wèn)題劈狐,web程序不再僅僅專注在功能上罐孝,同時(shí)也在追求性能。程序員們開(kāi)始大量的使用緩存技術(shù)來(lái)緩解數(shù)據(jù)庫(kù)的壓力肥缔,優(yōu)化數(shù)據(jù)庫(kù)的結(jié)構(gòu)和索引莲兢。開(kāi)始比較流行的是通過(guò)文件緩存來(lái)緩解數(shù)據(jù)庫(kù)壓力,但是當(dāng)訪問(wèn)量繼續(xù)增大的時(shí)候辫继,多臺(tái)web機(jī)器通過(guò)文件緩存不能共享怒见,大量的小文件緩存也帶了了比較高的IO壓力。在這個(gè)時(shí)候姑宽,Memcached/Redis就自然的成為一個(gè)非常時(shí)尚的技術(shù)產(chǎn)品遣耍。
主從讀寫(xiě)分離
由于數(shù)據(jù)庫(kù)的寫(xiě)入壓力增加,緩存只能緩解數(shù)據(jù)庫(kù)的讀取壓力炮车。讀寫(xiě)集中在一個(gè)數(shù)據(jù)庫(kù)上讓數(shù)據(jù)庫(kù)不堪重負(fù)舵变,大部分網(wǎng)站開(kāi)始使用主從復(fù)制技術(shù)來(lái)達(dá)到讀寫(xiě)分離,以提高讀寫(xiě)性能和讀庫(kù)的可擴(kuò)展性瘦穆。Mysql的master-slave模式成為這個(gè)時(shí)候的網(wǎng)站標(biāo)配了纪隙。
分表分庫(kù)
隨著web2.0的繼續(xù)高速發(fā)展,在Memcached的高速緩存扛或,MySQL的主從復(fù)制绵咱,讀寫(xiě)分離的基礎(chǔ)之上,這時(shí)MySQL主庫(kù)的寫(xiě)壓力開(kāi)始出現(xiàn)瓶頸熙兔,而數(shù)據(jù)量的持續(xù)猛增悲伶,由于MyISAM使用表鎖,在高并發(fā)下會(huì)出現(xiàn)嚴(yán)重的鎖問(wèn)題住涉,大量的高并發(fā)MySQL應(yīng)用開(kāi)始使用InnoDB引擎代替MyISAM麸锉。同時(shí),開(kāi)始流行使用分表分庫(kù)來(lái)緩解寫(xiě)壓力和數(shù)據(jù)增長(zhǎng)的擴(kuò)展問(wèn)題舆声。這個(gè)時(shí)候花沉,分表分庫(kù)成了一個(gè)熱門(mén)技術(shù),是面試的熱門(mén)問(wèn)題也是業(yè)界討論的熱門(mén)技術(shù)問(wèn)題。也就在這個(gè)時(shí)候碱屁,MySQL推出了還不太穩(wěn)定的表分區(qū)磷脯,這也給技術(shù)實(shí)力一般的公司帶來(lái)了希望。雖然MySQL推出了MySQL Cluster集群忽媒,但是由于在互聯(lián)網(wǎng)幾乎沒(méi)有成功案例争拐,性能也不能滿足互聯(lián)網(wǎng)的要求腋粥,只是在高可靠性上提供了非常大的保證晦雨。
這里又涉及到荔枝架構(gòu)師講到的,Mysql Cluster集群的CA模式:
CAP理論
- ?致性(Consistency) 所有節(jié)點(diǎn)都能訪問(wèn)同?份最新的數(shù)據(jù)副本
- 可?性(Availability) 每個(gè)請(qǐng)求都能接收到?個(gè)響應(yīng)隘冲,?論響應(yīng)成功或失敗闹瞧,?不應(yīng)該
是?絡(luò)超時(shí)、連接斷開(kāi)等?服務(wù)程序答復(fù)展辞。 - 分區(qū)容忍性(Partition tolerance) 除了整個(gè)?絡(luò)的故障外奥邮,其他的故障(集)都不能導(dǎo)致整個(gè)系統(tǒng)
?法正確響應(yīng)。
這三個(gè)要素最多只能同時(shí)實(shí)現(xiàn)兩點(diǎn)罗珍,不可能三者兼顧洽腺。
易擴(kuò)展高性能且靈活的數(shù)據(jù)庫(kù)
NoSQL數(shù)據(jù)庫(kù)種類繁多,但是一個(gè)共同的特點(diǎn)都是去掉關(guān)系數(shù)據(jù)庫(kù)的關(guān)系型特性覆旱。數(shù)據(jù)之間無(wú)關(guān)系蘸朋,這樣就非常容易擴(kuò)展。也無(wú)形之間扣唱,在架構(gòu)的層面上帶來(lái)了可擴(kuò)展的能力藕坯。NoSQL數(shù)據(jù)庫(kù)都具有非常高的讀寫(xiě)性能,尤其在大數(shù)據(jù)量下噪沙,同樣表現(xiàn)優(yōu)秀炼彪。這得益于它的無(wú)關(guān)系性,數(shù)據(jù)庫(kù)的結(jié)構(gòu)簡(jiǎn)單正歼。一般MySQL使用Query Cache辐马,每次表的更新Cache就失效,是一種大粒度的Cache局义,總體來(lái)說(shuō)性能要高喜爷。
NoSQL無(wú)需事先為要存儲(chǔ)的數(shù)據(jù)建立字段,隨時(shí)可以存儲(chǔ)自定義的數(shù)據(jù)格式旭咽。而在關(guān)系數(shù)據(jù)庫(kù)里贞奋,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表穷绵,增加字段簡(jiǎn)直就是一個(gè)噩夢(mèng)轿塔。這點(diǎn)在大數(shù)據(jù)量的web2.0時(shí)代尤其明顯。NoSQL在不太影響性能的情況,就可以方便的實(shí)現(xiàn)高可用的架構(gòu)勾缭。
MySQL和NoSQL都有各自的特點(diǎn)和使用的應(yīng)用場(chǎng)景揍障,兩者的緊密結(jié)合將會(huì)給web2.0的數(shù)據(jù)庫(kù)發(fā)展帶來(lái)新的思路。讓關(guān)系數(shù)據(jù)庫(kù)關(guān)注在關(guān)系上俩由,NoSQL關(guān)注在存儲(chǔ)上毒嫡。
分享大會(huì)中所有講義的pdf
「云運(yùn)維的啟示與架構(gòu)設(shè)計(jì)」
「酷狗大數(shù)據(jù)平臺(tái)架構(gòu)重構(gòu)」
「以 Cloud Native 打造大型電商系統(tǒng)」
「騰訊分布式NoSQL集群運(yùn)營(yíng)實(shí)踐」
「異地多活I(lǐng)DC機(jī)房架構(gòu)」
「高速發(fā)展下的電商運(yùn)維環(huán)境建設(shè)之路」