“一天宕機(jī)三次”,為什么高并發(fā)這么難?
高并發(fā),并不是一個(gè)新鮮的話題,全互聯(lián)網(wǎng)公司為之“費(fèi)盡心思”多年,仍然無(wú)法完全逃脫卡頓、崩潰乃至宕機(jī)的宿命。
這不近日,一款名為“羊了個(gè)羊”的小程序游戲突然爆火,玩法雖簡(jiǎn)單,但還是沒(méi)有扛住無(wú)數(shù)挑戰(zhàn)了 2000 次硬是沒(méi)有一次把第二關(guān)玩過(guò)去、還要持以“扶我起來(lái),還能再戰(zhàn) 500 回合”斗志的網(wǎng)友帶來(lái)巨大流量的壓力,一日三次宕機(jī)時(shí)有發(fā)生,導(dǎo)致熱搜榜接連出現(xiàn)#又雙叒叕崩了#的話題。
行業(yè)中諸如此類(lèi)的事件屢見(jiàn)不鮮,譬如,還有不久之前鬧得沸沸揚(yáng)揚(yáng)的東軟集團(tuán)的核酸系統(tǒng)崩潰事件等等。那么,放眼當(dāng)下,是否會(huì)出現(xiàn)一種方式、一種系統(tǒng)、一種架構(gòu)可以實(shí)現(xiàn)“永不宕機(jī)”且建筑屬于高并發(fā)、高可用、高拓展的烏托邦?
現(xiàn)實(shí)來(lái)得很快,“絕對(duì)不會(huì)有!”,陳皓堅(jiān)定地說(shuō)道。
陳皓,或許大家更熟悉他在技術(shù)圈的昵稱——左耳朵耗子。深耕于互聯(lián)網(wǎng)和金融架構(gòu)二十多年的陳皓,先后擔(dān)任阿里云資深架構(gòu)師、天貓開(kāi)發(fā)總監(jiān)、亞馬遜高級(jí)研發(fā)經(jīng)理、湯森路透基礎(chǔ)架構(gòu)師和高級(jí)研發(fā)經(jīng)理,經(jīng)歷過(guò)“雙 11”、阿里云、AWS、Amazon 倉(cāng)庫(kù)預(yù)測(cè)、實(shí)時(shí)金融數(shù)據(jù)發(fā)布平臺(tái)、大規(guī)模并行計(jì)算等項(xiàng)目和產(chǎn)品研發(fā),他于 2017 年創(chuàng)立了 MegaEase 公司,帶著「不改一行代碼提升系統(tǒng)的性能和穩(wěn)定性并支持秒殺」的目標(biāo),致力于將云計(jì)算(PaaS/SaaS )的那些高可用高并發(fā)的分布式技術(shù)普及到那些需要對(duì)技術(shù)自主可控的公司。
陳皓(左耳朵耗子)
近日,CSDN 與陳皓就屬于程序員的“三高”(高并發(fā)、高可用、高性能)問(wèn)題進(jìn)行了深入的探討,邀請(qǐng)他從自身經(jīng)歷出發(fā),分享“避免不了的宕機(jī)事件,那又該如何提升架構(gòu)的穩(wěn)定性以及做好防御措施降低損失”的寶貴經(jīng)驗(yàn),也希望借此能夠?yàn)檎诩蛹毙迯?fù)系統(tǒng)的程序員們帶來(lái)一些啟發(fā)。20 年前 vs 20 年后做架構(gòu)
CSDN:在 90 年代,你為什么選擇計(jì)算機(jī)這條路?
陳皓:算是“誤入歧途”。本來(lái)是想做個(gè)中學(xué)的物理或是數(shù)學(xué)老師的,也許會(huì)成為今天的李永樂(lè)。但是那時(shí)高考結(jié)束之后,同學(xué)和老師都說(shuō)我的分?jǐn)?shù)當(dāng)老師有點(diǎn)浪費(fèi)了,讓我學(xué)醫(yī)或是搞建筑,我一看這兩個(gè)學(xué)科都是要學(xué) 5 年,覺(jué)得學(xué)不動(dòng),于是就學(xué)了個(gè) 4 年的計(jì)算機(jī),因?yàn)楦杏X(jué)可以在上學(xué)的時(shí)候玩游戲。
CSDN:隨著云計(jì)算、大數(shù)據(jù)、AI 等技術(shù)的蓬勃發(fā)展,20 年前做架構(gòu)設(shè)計(jì)和 20 年后的今天做架構(gòu)設(shè)計(jì),有什么不一樣的感受?
陳皓:以前做架構(gòu)更像是做系統(tǒng)集成,主要是把各種系統(tǒng)拼裝在一起,那時(shí)只要是把它做出來(lái)就好了。
現(xiàn)在做架構(gòu)除了要做出來(lái),還需要考慮包括運(yùn)維、工程管理等多方面的事情。當(dāng)前很多架構(gòu)都是使用分布式系統(tǒng),然而這種方式帶來(lái)的問(wèn)題就是亂,運(yùn)維太過(guò)復(fù)雜,因此需要有一些頂層設(shè)計(jì)加以支持,如協(xié)議規(guī)范、中間件使用規(guī)范、服務(wù)治理規(guī)范、日志規(guī)范、上線規(guī)范、故障處理規(guī)范等,而以前雖然需要這些,但并沒(méi)有這么精細(xì)化。除此之外,還要在系統(tǒng)中放入很多關(guān)鍵的調(diào)度和觀測(cè)系統(tǒng),如流量調(diào)度、服務(wù)調(diào)度、資源調(diào)度、數(shù)據(jù)調(diào)度、調(diào)用鏈、指標(biāo)、健康度等等。
簡(jiǎn)單地打個(gè)比喻:做架構(gòu)好比是在建設(shè)新城市,以前進(jìn)行架構(gòu)開(kāi)發(fā)就是在建設(shè)城市,建完就結(jié)束了;現(xiàn)在不僅僅是要建設(shè)城市,還要進(jìn)行管理和調(diào)度城市,讓城市運(yùn)作得更穩(wěn)定、更經(jīng)濟(jì)、更高效。技術(shù)越來(lái)越成熟,但為什么阻止不了宕機(jī)?
CSDN:僅在本月,成都核酸檢測(cè)系統(tǒng)異常、《羊了個(gè)羊》游戲宕機(jī)等事件頻上熱搜......從技術(shù)維度來(lái)看,造成在線系統(tǒng)崩潰可能的原因有哪些?
陳皓:系統(tǒng)其實(shí)包括軟件和硬件兩個(gè)方面。拋開(kāi)一些人為的故意因素不談,按照正常故障而言,宕機(jī)通常源于:
軟件到達(dá)運(yùn)行的瓶頸。常見(jiàn)的情況有:帶寬占滿或不足,對(duì)于不少公司而言,買(mǎi)夠足夠的帶寬,需要花費(fèi)高昂的費(fèi)用,因此不少系統(tǒng)采用 CDN 技術(shù),這樣即使系統(tǒng)出現(xiàn)崩潰,但是網(wǎng)頁(yè)都能打得開(kāi)(比如 12306);還有應(yīng)用的 CPU /內(nèi)存過(guò)高,以及數(shù)據(jù)庫(kù)或關(guān)鍵中間件處理不過(guò)來(lái),有單點(diǎn)故障導(dǎo)致系統(tǒng)打不開(kāi)等等。
工程能力的問(wèn)題。造成這一問(wèn)題的原因是上線前沒(méi)有進(jìn)行過(guò)相關(guān)的性能測(cè)試,亦或是企業(yè)內(nèi)部沒(méi)有擴(kuò)容和應(yīng)急計(jì)劃,沒(méi)有足夠的運(yùn)維工具和手段(如監(jiān)控?cái)?shù)據(jù)不足,沒(méi)有足夠的自動(dòng)化的控制系統(tǒng)),不能快速解決問(wèn)題。這就好像很多天災(zāi)一樣,本質(zhì)就是沒(méi)有科學(xué)的管理,不重視技術(shù),災(zāi)難來(lái)了后,才發(fā)現(xiàn)很多設(shè)計(jì)沒(méi)有到位,甚至都是錯(cuò)的。
CSDN:多大并發(fā)才算高并發(fā)?對(duì)此,是否有一個(gè)通用的判定或界定標(biāo)準(zhǔn)?
陳皓:高并發(fā)沒(méi)有一個(gè)具體的數(shù)字來(lái)衡量,但是跟業(yè)務(wù)邏輯和應(yīng)用場(chǎng)景很有關(guān)系。
第一種是像 12306 系統(tǒng)、****、電商等類(lèi)似的業(yè)務(wù)場(chǎng)景,這些具備交易邏輯和復(fù)雜計(jì)算,有強(qiáng)一致性事務(wù),這類(lèi)的系統(tǒng)是最有挑戰(zhàn)的系統(tǒng),因此調(diào)優(yōu)使用到的技術(shù)手段也是非常多的。從我個(gè)人經(jīng)歷來(lái)談,2013 年,我在阿里巴巴做“雙 11”時(shí),交易業(yè)務(wù)使用到的服務(wù)器大約有 1500 臺(tái),當(dāng)時(shí)是阿里第一次做全鏈路壓力測(cè)試,性能設(shè)置在了每秒 5-8 萬(wàn)筆訂單左右。經(jīng)過(guò)幾年下來(lái),阿里最近的數(shù)據(jù)可以做到峰值每秒 60 萬(wàn)單,平時(shí)每秒 10 萬(wàn)單。除此之外,我經(jīng)歷過(guò)的餓了么系統(tǒng)在 2018 年時(shí),一天有 3000 萬(wàn)筆訂單,都集中在中午和晚上兩個(gè)飯點(diǎn),而且這是需要實(shí)時(shí)處理的訂單,不過(guò)好在這個(gè)業(yè)務(wù)是地域性很強(qiáng)的業(yè)務(wù),所以,很容易分庫(kù)分表,做多活也相對(duì)比較容易。
第二種是像微博這樣的社交類(lèi)應(yīng)用。相較前一種,這種應(yīng)用通過(guò)沒(méi)有太過(guò)復(fù)雜的交易邏輯,屬于輕應(yīng)用類(lèi),微博可以通過(guò)彈性擴(kuò)容做到百萬(wàn)并發(fā),普通社交類(lèi)應(yīng)用實(shí)現(xiàn)幾萬(wàn)至幾十萬(wàn)的 QPS(每秒查詢率)也不算太難。這類(lèi)的系統(tǒng)主要還是通過(guò)下面幾種手段,一種是在各種環(huán)節(jié)加緩存,一種是通過(guò)異步和最終一致(這類(lèi)系統(tǒng)基本不需要強(qiáng)一性,丟數(shù)據(jù)都無(wú)所謂),最后是通過(guò) sharding 的方式把用戶請(qǐng)求分布式。
第三種是像視頻類(lèi)的應(yīng)用。像視頻類(lèi)就更簡(jiǎn)單了,不久前,劉德華的在線演唱會(huì)吸引了 3 億人在線,雖然聽(tīng)起來(lái)數(shù)字非常龐大,但是從技術(shù)上來(lái)看,視頻主要是廣播和內(nèi)容分發(fā),基本沒(méi)有交互邏輯。因此,用 CDN 這樣的分發(fā)網(wǎng)絡(luò)很容易實(shí)現(xiàn)幾億人同時(shí)在線。以世界杯比賽為例,全世界幾十億的人觀看電視直播,這樣的高并發(fā)早就實(shí)現(xiàn)了,因?yàn)橹饕菑V播。
第四種是需要保證實(shí)時(shí)性的在線網(wǎng)游等應(yīng)用,不過(guò),在線網(wǎng)游通常是需要給玩家分區(qū)、分服務(wù)器的,這樣一臺(tái)服務(wù)只能處理有限的玩家,一般來(lái)說(shuō)也就是幾百個(gè)玩家,甚至更低。
整體而言,高并發(fā)與業(yè)務(wù)場(chǎng)景息息相關(guān),在實(shí)現(xiàn)難易度上,偏交易型的第一種難度最高,其次是社交類(lèi),然后是游戲,最后是視頻。所以,我們可以看到很多論文或是術(shù)語(yǔ)都會(huì)提到 transaction,transaction 通常意味著比較大的復(fù)雜度。
CSDN:互聯(lián)網(wǎng)發(fā)展至今,虛擬化、分布式已經(jīng)迭代多輪,為什么還有那么多大規(guī)模以及時(shí)間長(zhǎng)的宕機(jī)事件發(fā)生?
陳皓:“這個(gè)世界上不可能存在一種 100% 穩(wěn)定的系統(tǒng)”。
可以從兩個(gè)方面進(jìn)行解析,一方面故障是不可避免的,有人為的故障(人是容易出錯(cuò)的——Human Error)和非人為的故障(機(jī)器 Failure)。這些是無(wú)計(jì)劃的停機(jī),還有有計(jì)劃的停機(jī),如發(fā)布新系統(tǒng)、升級(jí)維護(hù)、更新硬件等。這也是為什么行業(yè)中即使部分公司做得再好也只能說(shuō)自己能做到多少個(gè) 9,而非 100% 的主要原因。
當(dāng)前,我們所能努力的就是盡可能地做到多少個(gè) 9,這其中需要很強(qiáng)的技術(shù)實(shí)力支撐。
級(jí)別 | 可用性級(jí)別 | 通俗說(shuō)法 | 年度停機(jī)時(shí)間 | 配套措施 |
基本可用性 | 99% | 2 個(gè) 9 | 3d-15h-39m-29s | 服務(wù)在一個(gè)數(shù)據(jù)中心里有冗余,簡(jiǎn)單基礎(chǔ)的自動(dòng)化運(yùn)維 |
高可用性 | 99.9% | 3 個(gè) 9 | 8h-45m-56s | 大量的自動(dòng)化故障工具,以及各種控制調(diào)度系統(tǒng)等基礎(chǔ)設(shè)施要做好 |
具有故障自動(dòng)恢復(fù) | 99.99% | 4 個(gè) 9 | 52m-35s | 本地多機(jī)房(像 AWS 一樣每個(gè)地方都有三個(gè)可用區(qū)) |
極高可用性 | 99.999% | 5 個(gè) 9 | 5m-15s | 遠(yuǎn)程多機(jī)房,異地多活 |
另一方面,從分布式架構(gòu)設(shè)計(jì)來(lái)說(shuō),我們認(rèn)為這個(gè)世界上的軟件都是有故障的,當(dāng)故障發(fā)生時(shí),大家無(wú)非都是希望兩個(gè)事情:
故障不要蔓延開(kāi),能夠控制得?。?/span>
故障的時(shí)間越短越好,不要太長(zhǎng)。
然而,架構(gòu)系統(tǒng)也有很多的依賴,如基礎(chǔ)設(shè)施 DNS、CDN、運(yùn)營(yíng)商、機(jī)房等等,想要實(shí)現(xiàn)穩(wěn)定,還需要大家一起來(lái)實(shí)現(xiàn)。
CSDN:當(dāng)前多數(shù)公司普遍能做到幾個(gè)九?
陳皓:我相信一般公司在 90%-99% 之間,頭部公司都是在兩個(gè)九到三九之間,有技術(shù)的努努力可以實(shí)現(xiàn)三個(gè)九,不過(guò)四個(gè)九及以上需要耗費(fèi)大量的人力、財(cái)力,對(duì)普通公司而言,具有極高的挑戰(zhàn),基本不可能。
五個(gè)九的系統(tǒng),我曾在路透的時(shí)候看過(guò),所有的基礎(chǔ)硬件(包括電源、光纖、空調(diào)、機(jī)架、服務(wù)器、交換機(jī)……)都需要在一個(gè)機(jī)房里有雙份,而且要能防得住不可抗力(火災(zāi),地震,甚至核彈),然后還要租衛(wèi)星,租專(zhuān)用的光纖甚至專(zhuān)用的海底光纜,不到要到中立的國(guó)家如日內(nèi)瓦建數(shù)據(jù)中心,還要把歐洲,亞洲,美洲做成多活系統(tǒng)。這應(yīng)該算是六個(gè)九的系統(tǒng)了,著實(shí)很花錢(qián)。如何降低宕機(jī)事件帶來(lái)的損失?
CSDN:在過(guò)往的職業(yè)生涯中,你是否經(jīng)歷過(guò)比較嚴(yán)重的宕機(jī)事件?亦或是在架構(gòu)研發(fā)過(guò)程中,最具挑戰(zhàn)的一次經(jīng)歷是什么樣的?
陳皓:有挑戰(zhàn)的東西太多了,無(wú)論是做性能調(diào)優(yōu),還是創(chuàng)新型項(xiàng)目,處處都是挑戰(zhàn)。圍繞高并發(fā),早期在開(kāi)發(fā)阿里巴巴聚石塔(由天貓攜手阿里云、萬(wàn)網(wǎng)宣布聯(lián)合推出的一個(gè)“開(kāi)放的電商云工作平臺(tái)”),因?yàn)橐淮紊?jí)所有的服務(wù)都掛了,所有工程師加班加點(diǎn),搶修 10 多個(gè)小時(shí)才恢復(fù)回來(lái)。
此外,早期阿里云存在各種故障以及****系統(tǒng)宕機(jī),都是非常嚴(yán)峻的挑戰(zhàn)。
CSDN:有時(shí)候像秒殺、雙十一等活動(dòng),可以是有足夠的預(yù)期準(zhǔn)備時(shí)間,但是針對(duì)一些突發(fā)事件帶來(lái)的高流量,往往并不可控,系統(tǒng)架構(gòu)應(yīng)該在日常做好哪些應(yīng)急措施,提高系統(tǒng)性能和穩(wěn)定性,盡量減少損失?
陳皓:這種可以分為兩種情況,一種是預(yù)期流量(像做活動(dòng)),可以通過(guò)評(píng)估、壓力測(cè)試,做好充足的事前準(zhǔn)備。如阿里雙 11,提前做好預(yù)案。
第二種是非預(yù)期的流量。以我曾在路透做金融數(shù)據(jù)為例,對(duì)于一些突發(fā)事件,會(huì)造成股****交易的高峰,倘若系統(tǒng)出現(xiàn)崩潰,是一件很可怕的事情。因此,平時(shí)做性能測(cè)試時(shí),除了要高過(guò)平時(shí)流量來(lái)應(yīng)對(duì)高峰,還需要考慮時(shí)常。比如平時(shí)的流量是 100K/s,那么性能測(cè)試時(shí)要做到 300K/s 以上。不過(guò),這是有錢(qián)的做法。
如果沒(méi)有錢(qián)的話,就要通過(guò)云計(jì)算的方式,實(shí)時(shí)擴(kuò)容,微博就是這樣做的,他們可以在 5 分鐘內(nèi)擴(kuò) 1000 臺(tái)服務(wù)器。最后,如果沒(méi)有資源了,只能走最極端的手段,即拒絕用戶訪問(wèn),比如在阿里的雙 11 就有這樣的預(yù)案,如果量太大,就先停西部,再停中部,保中心城市和東部,不行就保北上廣深等大城市。
這種預(yù)案在大公司非常常見(jiàn),無(wú)論是國(guó)外的 Facebook、GitHub,還是國(guó)內(nèi)的阿里、騰訊等,這樣即使出現(xiàn)故障,造成的后續(xù)影響也會(huì)比一般公司好很多。基于開(kāi)源和技術(shù)手段,提高系統(tǒng)的高并發(fā)性
CSDN:2017 年,你創(chuàng)立了 MegaEase 公司,主要是想把云計(jì)算(PaaS/SaaS層)的那些高可用高并發(fā)的分布式技術(shù)普及到那需要對(duì)技術(shù)自主可控的公司,經(jīng)過(guò) 5 年的發(fā)展,MegaEase 發(fā)展是否達(dá)到您的預(yù)期?
陳皓:如果說(shuō),我們幫助了想要進(jìn)步的公司,這個(gè)是達(dá)到預(yù)期的, 因?yàn)閹椭怂麄兏铝苏麄€(gè)系統(tǒng)架構(gòu),降低了很多成本,提升了技術(shù)實(shí)力。
不過(guò),也還有很多公司是沒(méi)有幫到,這個(gè)還沒(méi)有達(dá)到預(yù)期。因?yàn)榉植际郊軜?gòu)、云原生的技術(shù)門(mén)檻依然很高,為此,我們也想要把這個(gè)門(mén)檻降得再低一些,包括實(shí)施的成本。因此,從去年開(kāi)始,MegaEase 著重開(kāi)源建設(shè),并且著手研發(fā)一個(gè)云原生平臺(tái),以及一個(gè)知識(shí)平臺(tái),讓用戶可以容易地獲得云原生的知識(shí)以及使用云原生的技術(shù)。
一定程度上,可以說(shuō)云原生本身就是一個(gè)比較高的門(mén)檻,很多東西需要封裝起來(lái),讓它變得更簡(jiǎn)單應(yīng)用。
CSDN:早期,你曾分享過(guò)一句話,“不改一行代碼提升系統(tǒng)的性能和穩(wěn)定性并支持秒殺”,這樣的愿景也是不少開(kāi)發(fā)者夢(mèng)寐以求的事情,那么,是如何實(shí)現(xiàn)這一點(diǎn)的?
陳皓:是的,就是不改一行代碼做秒殺!請(qǐng)注意,這里指的是秒殺場(chǎng)景。所謂秒殺場(chǎng)景,其本身具有特殊性,比如某個(gè)參與秒殺活動(dòng)的產(chǎn)品,在參與人數(shù)達(dá)到百萬(wàn)人時(shí),實(shí)際的產(chǎn)品數(shù)量只有 1000 件。在設(shè)計(jì)系統(tǒng)架構(gòu)時(shí),首先得保證系統(tǒng)能夠扛住一百萬(wàn)的流量,然后通過(guò)一個(gè)中間件,如 MegaEase 開(kāi)發(fā)的 Easegress 網(wǎng)關(guān),先是扛住前面整體的流量,然后再將最先參與秒殺的 1000 名用戶放進(jìn)來(lái)中獎(jiǎng),隨后活動(dòng)結(jié)束。
遵循這樣的邏輯,基于開(kāi)源軟件 Easegress 就可以做到這一點(diǎn)。使用方法可以參考Easegress在 GitHub 上的技術(shù)文檔:https://github.com/megaease/easegress/blob/main/doc/cookbook/flash-sale.md
CSDN:這也是云原生流量調(diào)度服務(wù) Easegress 誕生的初衷?相比競(jìng)品,Easegress 具有哪些優(yōu)勢(shì)?
陳皓:其實(shí)行業(yè)中有 IaaS 層做資源調(diào)度、有 Kubernetes 做服務(wù)調(diào)度編排、有分布式數(shù)據(jù)庫(kù)或 NoSQL 做數(shù)據(jù)分布式調(diào)度,但是缺乏流量調(diào)度,而流量又是所有分布式技術(shù)根因,是一件非常重要的事。我們覺(jué)得這個(gè)問(wèn)題非常重要,于是便開(kāi)發(fā)了 Easegress。
相比業(yè)界已有的一些解決方案,Easegress 采用的不是反向代理,而是全功能性的流量網(wǎng)關(guān),它具有流量著色調(diào)度和編排、業(yè)務(wù)擴(kuò)展等優(yōu)勢(shì),支持多種編程語(yǔ)言,可以應(yīng)用在秒殺、灰度、服務(wù)治理、全鏈接壓力測(cè)試、工作流、API 編排、FaaS/Serverless 等場(chǎng)景與工作中。
圖源:MegaEase 官網(wǎng),Easegress 架構(gòu)圖
CSDN:Easegress 采用的是開(kāi)源的方式,根據(jù)當(dāng)前技術(shù)發(fā)展的趨勢(shì),開(kāi)源是一種避不開(kāi)的創(chuàng)新策略,開(kāi)源為軟件架構(gòu)開(kāi)發(fā)帶來(lái)了怎樣的影響?
陳皓:開(kāi)源肯定是避不開(kāi)的。現(xiàn)在所有的公司,或多或少都在用開(kāi)源軟件。這其中包含了幾層因素:
一,開(kāi)源免費(fèi),基于開(kāi)源,可以有更低的成本。
二,開(kāi)源更容易與企業(yè)內(nèi)部的軟件解決兼容問(wèn)題。
圍繞開(kāi)源,可以獲得更多的客戶和開(kāi)發(fā)者。另外,開(kāi)源也可以建立技術(shù)社區(qū)和開(kāi)發(fā)者網(wǎng)絡(luò),它是一種能夠以最低成本、最容易建立社區(qū)的方式,樹(shù)立品牌宣傳。
此外,我也認(rèn)為開(kāi)源是唯一一個(gè)可以與大公司閉源產(chǎn)品競(jìng)爭(zhēng)的方式,好比 MySQL 和 Oracle 競(jìng)爭(zhēng)、Linux 和 UNIX 競(jìng)爭(zhēng)。尤其對(duì)于小型創(chuàng)業(yè)公司而言,初創(chuàng)業(yè)時(shí)的產(chǎn)品很難獲得業(yè)界信任,但是開(kāi)源可以讓大家清晰地看到產(chǎn)品和技術(shù)實(shí)力,而且可以省去那些商務(wù)流程,技術(shù)人員和技術(shù)人員直接對(duì)話,拓展用戶的成本就更低了,這基本是一種互聯(lián)網(wǎng)的思維方式——產(chǎn)品總是從免費(fèi)開(kāi)始的。
CSDN:有些企業(yè)做開(kāi)源可能會(huì)存在盲目跟風(fēng)的趨勢(shì),甚至導(dǎo)致開(kāi)源之后選擇閉源,在你看來(lái),企業(yè)做開(kāi)源的正確態(tài)度是什么?
陳皓:我覺(jué)得是這樣的,各個(gè)公司開(kāi)源都有不一樣的目的,有的是不得不開(kāi)源,這類(lèi)正常是使用了開(kāi)源軟件,在開(kāi)源協(xié)議下也必須要去開(kāi)源,屬于被動(dòng)開(kāi)源。還有的是主動(dòng)開(kāi)源。然而,開(kāi)源不是把源代碼開(kāi)放出來(lái)就結(jié)束,還需要有后續(xù)的運(yùn)行等,開(kāi)源軟件不是由某個(gè)公司私有化運(yùn)作的,而是由社區(qū)來(lái)運(yùn)作,像現(xiàn)在 TOC、開(kāi)源辦公室,所做的每一個(gè)技術(shù)決定都是一群人來(lái)做的,而不是這家公司。
因此,想要正確地保持開(kāi)源的活躍性,有以下幾點(diǎn)建議:
真心喜歡開(kāi)源、不要想著通過(guò)開(kāi)源掙錢(qián),開(kāi)源類(lèi)似于一種公益事業(yè);
開(kāi)源軟件和其它軟件一樣,能夠解決用戶的需求和痛點(diǎn);
開(kāi)源要有一種開(kāi)放的心態(tài),開(kāi)源其實(shí)是一種民主活動(dòng);
- 開(kāi)源主要是要建立開(kāi)發(fā)者社區(qū),與更多的開(kāi)源兼容,不只是開(kāi)放源代碼。
一款好的架構(gòu)需要具備哪些前提?
CSDN:不少架構(gòu)師似乎有這樣一個(gè)共識(shí),“一款好的架構(gòu)并不是設(shè)計(jì)出來(lái)的,而是進(jìn)化出來(lái)的”,對(duì)此,您是否贊同這一觀點(diǎn)?
陳皓:一定程度上,這兩句話是不沖突的。事實(shí)上,好的架構(gòu)一定是設(shè)計(jì)出來(lái)的,而且還是精良設(shè)計(jì)的,不然就是系統(tǒng)集成了。
不過(guò),軟件設(shè)計(jì)也是一種 Trade-off (權(quán)衡)的取舍過(guò)程。隨著公司不同時(shí)期的發(fā)展,不同的階段有不同的重點(diǎn),導(dǎo)致 Trade-off 也不一樣,處于不斷進(jìn)化過(guò)程。因此,我認(rèn)為這句話應(yīng)該這么說(shuō),“一款好的軟件必須是經(jīng)過(guò)精良設(shè)計(jì)的,精良的設(shè)計(jì)是不斷演化出來(lái)的”。
CSDN:構(gòu)建高可用、高性能、高并發(fā)的系統(tǒng)架構(gòu)多年間,有沒(méi)有一直在遵循的原則可以與我們分享?
陳皓:這其中涉及的東西太多了,這里我只能籠統(tǒng)簡(jiǎn)單地說(shuō)說(shuō)了,從一些通用的維度來(lái)分享:
首先要了解業(yè)務(wù)特性;
通過(guò)數(shù)據(jù)分析;
使用分布式的方式(業(yè)務(wù)用戶數(shù)據(jù)流量分片或冗余、加緩存、降低一致性要求、異步系統(tǒng)等等);
不要魔改,要堅(jiān)持功能高于性能,先做對(duì)、再做快的理念。
CSDN:對(duì)于架構(gòu)師而言,現(xiàn)在小公司不談高并發(fā),大公司入門(mén)門(mén)檻便是高并發(fā),在程序員向上升級(jí)的過(guò)程中,他們?cè)撊绾潍@取高并發(fā)方面的經(jīng)驗(yàn),需要具備哪些不可或缺的技能?
陳皓:行業(yè)中的技術(shù)大佬總要帶徒弟,因?yàn)樗粋€(gè)人干不了所有事情,正所謂一個(gè)籬笆三個(gè)樁一個(gè)好漢三個(gè)幫。因此,問(wèn)題就是如何成為他們的徒弟?
要想成為技術(shù)專(zhuān)家的徒弟,首先自身需要具備一定的潛力,這前提就是需要開(kāi)發(fā)者基礎(chǔ)能力過(guò)硬,對(duì)于高并發(fā)開(kāi)發(fā)而言,基礎(chǔ)知識(shí)包括網(wǎng)絡(luò)、操作系統(tǒng)、中間件、算法、數(shù)據(jù)結(jié)構(gòu)等等。在此基礎(chǔ)上,剩下的就是積攢經(jīng)驗(yàn)。
結(jié)合我的個(gè)人經(jīng)歷來(lái)談,最初從大學(xué)畢業(yè)開(kāi)始,我也并沒(méi)有如今這些經(jīng)驗(yàn)。記得我曾經(jīng)入職一家企業(yè),對(duì)方讓我做業(yè)務(wù),但是我并不想做業(yè)務(wù),而是想從事系統(tǒng)相關(guān)的開(kāi)發(fā)。
在工作的第一天,對(duì)方告訴我,如果有什么問(wèn)題,可以去公司內(nèi)部的論壇里面提問(wèn),會(huì)有人來(lái)幫你解決問(wèn)題。后來(lái),我看到論壇的一些板塊中,有很多基礎(chǔ)性的技術(shù)性問(wèn)題,只有提問(wèn),沒(méi)有人回答。于是,我就把那些問(wèn)題全部回答了。最終迎來(lái)了意外之喜,在入職第一天臨近下班時(shí)候,我特別想去的那個(gè)核心開(kāi)發(fā)團(tuán)隊(duì)經(jīng)理便來(lái)邀請(qǐng)我加入他們團(tuán)隊(duì)。
因此,只要自身基礎(chǔ)知識(shí)過(guò)硬,就值得別人來(lái)帶領(lǐng)入門(mén),然后自身再不斷學(xué)習(xí),不斷夯實(shí),就會(huì)有成長(zhǎng)。
CSDN:你曾分享過(guò)「技術(shù)的發(fā)展要根植于歷史,而不是未來(lái)」,現(xiàn)在是否還這么認(rèn)為?當(dāng)下的開(kāi)發(fā)者該如何跟上技術(shù)時(shí)代的步伐?
陳皓:可以用“踢足球”來(lái)比喻,當(dāng)踢足球時(shí),我們總是會(huì)沿著足球運(yùn)動(dòng)的軌跡去跑,而要想跑在球的前面,必須判斷足球的走向,你要知道球往哪跑,你就要看足球運(yùn)動(dòng)軌跡。技術(shù)發(fā)展亦是如此,如果要知道往哪里走,你就要看技術(shù)的發(fā)展軌跡,所以,你要看整個(gè)技術(shù)發(fā)展史,從中歸納總結(jié),你就知道要去哪里了。
從歷史中不斷地看技術(shù)的變化路線,也要學(xué)會(huì)在變化中找到一直不變的東西。
另外,技術(shù)更迭,不要一直追新,往往有競(jìng)爭(zhēng)性的新技術(shù)具備以下幾種特性:
有殺手級(jí)應(yīng)用:無(wú)論是什么技術(shù),它一定要是能解決痛點(diǎn)問(wèn)題的。
有大廠的支持:需要明白,大公司不會(huì)把錢(qián)浪費(fèi)在一些“無(wú)用功”上,它一定會(huì)投資一些有價(jià)值的技術(shù)。譬如 Go 語(yǔ)言的背后是 Google、Java 的背后亦是很多巨頭公司支持的。
有強(qiáng)大的社區(qū)支持。
只要具備以上三點(diǎn),我認(rèn)為這個(gè)技術(shù)就可以全身心地投入進(jìn)去。否則,建議大家先做觀望。
CSDN:對(duì)此,是否有一些面向云時(shí)代的書(shū)籍推薦給開(kāi)發(fā)者們?
陳皓:其實(shí),云原生時(shí)代包含了很多內(nèi)容,我覺(jué)得最好的兩本書(shū)是《微服務(wù)架構(gòu)設(shè)計(jì)模式》和《 Designing Data-Intensive Applications》(數(shù)據(jù)密集型應(yīng)用系統(tǒng)設(shè)計(jì))。除此之外,也建議大家多讀讀官方文檔。One More Thing
CSDN:畢業(yè)之后從國(guó)企到在亞馬遜、阿里巴巴、湯森路透再到自己創(chuàng)業(yè),這一路走來(lái),對(duì)自身無(wú)論是從技術(shù)上還是管理上,要求都非常高,一直以來(lái),保持持續(xù)學(xué)習(xí)的動(dòng)力是什么?有什么樣的學(xué)習(xí)方法?
陳皓:首先,學(xué)習(xí)需要有動(dòng)力。我最早學(xué)習(xí)的動(dòng)力就是害怕失業(yè),因?yàn)樽畛跷覜Q定放棄人人眼中的鐵飯碗——****的工作,隨后到互聯(lián)網(wǎng)浪潮中求職,恰遇 2000 年的互聯(lián)網(wǎng)經(jīng)濟(jì)泡沫,很多公司相繼倒閉,這也讓我產(chǎn)生了很大的落差,當(dāng)時(shí)只有一個(gè)想法,“如果最初花費(fèi)力氣做下的決定,再失業(yè),狼狽的跑回家,很多人都準(zhǔn)備看你失敗的笑話”。所以,那時(shí)也有背水一戰(zhàn)的感覺(jué),不能失敗,必須要去學(xué)。
第二個(gè)動(dòng)力就是獲得成就感。當(dāng)學(xué)到一定的時(shí)候,就會(huì)有一定的基礎(chǔ)解決一些技術(shù)問(wèn)題,然后別人會(huì)給到很多的正反饋,包括創(chuàng)業(yè)也是。
其次,在學(xué)習(xí)方法上,我覺(jué)得最重要的是學(xué)會(huì)掌握信息來(lái)源,因?yàn)樾畔⒃床缓玫脑?,其?shí)會(huì)有誤導(dǎo)性。所以我喜歡看一些英文的資料,然后應(yīng) Google 搜索引擎。另外,學(xué)習(xí)一定要多問(wèn)為什么,多找最佳時(shí)間,多比較技術(shù)的優(yōu)點(diǎn)和缺點(diǎn)(Pros/Cons),尋找最適合自己的。
CSDN:從****離職,到入職各種不同規(guī)模的公司,再到現(xiàn)如今的創(chuàng)業(yè),期間是否有后悔過(guò)最初的決定?
陳皓:沒(méi)有!我覺(jué)得這是我迄今為止做的最正確的一個(gè)決定,從來(lái)沒(méi)有后悔過(guò)!甚至覺(jué)得還好當(dāng)初在 24 歲的時(shí)候便做了這個(gè)決定?,F(xiàn)在只是說(shuō)如果在 2017 年創(chuàng)業(yè)的時(shí)候,要是能再早個(gè)五六年就好了。
CSDN:作為公司創(chuàng)始人,你現(xiàn)在還會(huì)經(jīng)常寫(xiě)代碼嗎?可否簡(jiǎn)單分享一下你的技術(shù)棧演進(jìn)路線?
陳皓: 會(huì)寫(xiě)的,現(xiàn)在我的時(shí)間太過(guò)碎片化,寫(xiě)代碼的時(shí)間大概占 30%。
過(guò)去多年間,我的技術(shù)也在不斷變化:
后端:C -> C++ -> Java -> Go
Web:Perl -> ASP -> PHP -> Java、jQuery -> React.js
操作系統(tǒng):Unix/Windows -> Linux
部署:Ansible -> Docker -> Kubernetes
架構(gòu):?jiǎn)螜C(jī) -> CS -> BS- > 三層架構(gòu) -> SOA -> 微服務(wù) -> 云原生
謹(jǐn)此,希望本文對(duì)大家有所裨益。
本文來(lái)自《近匠》欄目。《近匠》是 CSDN 推出的訪談欄目,其意思即為「走近工匠」,走近深耕于開(kāi)源、云、AIoT、根技術(shù)、數(shù)字化轉(zhuǎn)型、前沿技術(shù)的工具創(chuàng)造者和技術(shù)管理者們,了解他們?cè)趺纯创F(xiàn)在的開(kāi)發(fā)工作,分享自己精雕細(xì)琢出來(lái)的工具有何特點(diǎn),剖析整個(gè)行業(yè)發(fā)展現(xiàn)狀及未來(lái)趨勢(shì)。
為此,基于開(kāi)源、云、AIoT、根技術(shù)、數(shù)字化轉(zhuǎn)型、前沿技術(shù)等領(lǐng)域,如果您及團(tuán)隊(duì)有報(bào)道需求,亦或者如果您有對(duì)技術(shù)趨勢(shì)的真知灼見(jiàn),或是深度的應(yīng)用實(shí)踐、場(chǎng)景方案等的新見(jiàn)解,歡迎聯(lián)系 CSDN 投稿,聯(lián)系方式:微信(hanbb120,請(qǐng)備注投稿+姓名+公司職位)、郵箱(tumin@csdn.net)。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。