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