服务治理·理论篇(一)
0、故事主角
呱呱樂(lè) 是一家互聯(lián)網(wǎng)金融公司。主營(yíng)現(xiàn)金貸、p2p理財(cái)、消費(fèi)分期業(yè)務(wù)。
公司現(xiàn)有技術(shù)人員800名,系統(tǒng)極其龐雜,每日穩(wěn)定處理25w左右的訂單量,有搶購(gòu)活動(dòng)時(shí),系統(tǒng)的QPS(Query Per Second)峰值達(dá)到了3w。
系統(tǒng)雖然龐雜,但在技術(shù)老大C哥的帶領(lǐng)下,服務(wù)的可靠性高達(dá)99.99%,技術(shù)方面的成績(jī)聞名業(yè)內(nèi)。
這不,C哥受邀參加2022年全球互聯(lián)網(wǎng)大會(huì)了。
我是技術(shù)主編王小五,讓我們一起來(lái)采訪下C哥吧,你們有什么想問(wèn)的,也可以關(guān)注我的專欄留言吆~
1、呱呱樂(lè)系統(tǒng)初期
小五:C哥好,很多網(wǎng)友對(duì)呱呱樂(lè)公司的系統(tǒng)演進(jìn)感興趣,您能給我們講一講嗎?
C哥得意的笑了笑:好的,那我簡(jiǎn)單介紹下吧。
呱呱樂(lè)初期其實(shí)是一個(gè)名不見(jiàn)經(jīng)傳的小公司,只有6名技術(shù),主要做消費(fèi)分期業(yè)務(wù),系統(tǒng)是基于LNMP搭建的基礎(chǔ)架構(gòu),框架使用的是ThinkPhp。
剛開(kāi)始流量比較小,業(yè)務(wù)也比較基礎(chǔ),主要提供用戶登錄注冊(cè)、訂單、賬單、支付、風(fēng)控、消息發(fā)送等功能。
功能剛開(kāi)始都比較簡(jiǎn)單,所以這樣的架構(gòu)能夠滿足需求,所有的功能都在一個(gè)Git工程里開(kāi)發(fā)。
這些功能抽象出來(lái),可以用一張圖表示:
小五:是的,初創(chuàng)型公司基本都是這樣的技術(shù)架構(gòu),簡(jiǎn)單而實(shí)用,滿足快速迭代、功能為主的需求。
C哥:但是,隨著訪問(wèn)量的增多、業(yè)務(wù)越來(lái)越復(fù)雜,這樣的架構(gòu)就有點(diǎn)力不從心了...
2、宕機(jī)一小時(shí)
小五:哦?怎么個(gè)力不從心法? C哥微笑一下:宕機(jī)的時(shí)候,你就知道了,哈哈。
小五:哈哈,那C哥給我們講講吧,大家都很想聽(tīng)。
C哥:當(dāng)我們業(yè)務(wù)開(kāi)展到了6個(gè)月左右的時(shí)候,注冊(cè)用戶比較多了。 一天下午,大量用戶反饋我們的app打不開(kāi)了,同時(shí)我們也發(fā)現(xiàn)了這個(gè)問(wèn)題。
于是我們從Nginx開(kāi)始排查,發(fā)現(xiàn)流量正常,沒(méi)有被DDOS攻擊,Nginx配置也正常,沒(méi)有任何問(wèn)題。
接下來(lái),我們又排查了PHP,PHP進(jìn)程也一切正常,沒(méi)有出現(xiàn)內(nèi)存泄漏等問(wèn)題。
剩下的,就排查Mysql了,一看不要緊,原來(lái)真是 Mysql 在搞鬼,CPU使用率近乎100%...
于是,我們趕緊暫停了Mysql服務(wù)。
通過(guò)查詢慢Sql日志發(fā)現(xiàn),原來(lái)是張二胖寫(xiě)的一條SQL導(dǎo)致了風(fēng)控日志表進(jìn)行了全表掃描,而風(fēng)控日志表中的數(shù)據(jù)高達(dá)800萬(wàn)條...
小五:哈哈,這樣的場(chǎng)景似曾相識(shí),好多公司應(yīng)該都經(jīng)歷過(guò)。 C哥:是啊,好多攻城獅都對(duì)數(shù)據(jù)庫(kù)進(jìn)行直接操作,而他們寫(xiě)出的SQL的質(zhì)量又不能保證。
小五:那你們最終怎么解決的呢? C哥:首先我們對(duì)服務(wù)進(jìn)行了降級(jí),先保證核心功能可用。而后,我們又對(duì)該數(shù)據(jù)表加索引,對(duì)SQL進(jìn)行優(yōu)化,最終解決了這個(gè)問(wèn)題。
C哥:從發(fā)現(xiàn)問(wèn)題到解決問(wèn)題,大約用了一個(gè)小時(shí)的時(shí)間,這一小時(shí)內(nèi),所有服務(wù)都不能用了,真是驚心動(dòng)魄的一小時(shí)。從這時(shí)起,我就想有什么辦法能夠規(guī)避這類問(wèn)題。 小五:是啊,這次可能是張二胖寫(xiě)出了全表掃描的SQL,下次可能是張三胖寫(xiě)出全表掃描的SQL,這樣都會(huì)導(dǎo)致服務(wù)不可用,功能之間的耦合性太高了。
3、業(yè)務(wù)的繼續(xù)開(kāi)展
小五:C哥,除了消費(fèi)分期業(yè)務(wù)外,咱們公司后來(lái)又開(kāi)展了現(xiàn)金貸、理財(cái)業(yè)務(wù)。這些業(yè)務(wù)的加入,對(duì)于系統(tǒng)有什么影響呢?
C哥:哎,說(shuō)起來(lái)都是淚啊。因?yàn)橄M(fèi)分期、現(xiàn)金貸、理財(cái)?shù)葮I(yè)務(wù),很多東西都是相同的,比如用戶功能、訂單功能、賬單功能,前期為了業(yè)務(wù)的快速發(fā)展,我們直接從消費(fèi)分期拷貝了兩套代碼出來(lái),分別用來(lái)處理現(xiàn)金貸、理財(cái)?shù)臉I(yè)務(wù)。
小五:的確是,這樣能最快的支撐業(yè)務(wù)的運(yùn)轉(zhuǎn)。
C哥:但這樣給自己埋了很大的坑,以后還得慢慢的去填~
C哥:業(yè)務(wù)中存在很多Copy-Paste的代碼,比如用戶表改動(dòng)了一個(gè)字段,三個(gè)系統(tǒng)都需要去改。又比如加了Redis緩存,三個(gè)系統(tǒng)也都需要改動(dòng)。實(shí)在是太繁瑣了,如果忘記改動(dòng),還有可能造成服務(wù)掛掉,那時(shí)候真實(shí)天天改bug啊。
小五:心疼你們1秒鐘。。。
4、沒(méi)完沒(méi)了的加班
C哥:隨著業(yè)務(wù)的發(fā)展,系統(tǒng)越來(lái)越復(fù)雜,技術(shù)人員的體會(huì)也越來(lái)越“痛”,天天改不完的bug,夜以繼日的加班...... 小五:現(xiàn)在的系統(tǒng)沒(méi)有這問(wèn)題了吧,C哥?
C哥:好在我們進(jìn)行了微服務(wù)的改造,這種問(wèn)題才得以解決。 小五:微服務(wù)?最近很火的概念,C哥給我們分享一下吧!
C哥:今天時(shí)間也不早了,要不明天再跟大家細(xì)講吧。 小五:好的C哥,感謝您的分享,明天再來(lái)采訪您~
注:文中公司、人物均為虛構(gòu),只為故事更加精彩~
小記:服務(wù)治理還在學(xué)習(xí)階段,經(jīng)驗(yàn)有限,不對(duì)的地方請(qǐng)多多指教。
后續(xù):服務(wù)治理理論篇(二)、實(shí)踐篇會(huì)相繼出爐~
總結(jié)
以上是生活随笔為你收集整理的服务治理·理论篇(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自定义ant中table表格的展开图标
- 下一篇: 已经学过51单片机,如何进阶?我来教你