精碩科技劉喆:上不上云,需求說了算
由中國電子技術(shù)標(biāo)準(zhǔn)化研究院主辦、51CTO承辦的“第七屆中國云計(jì)算標(biāo)準(zhǔn)和應(yīng)用大會”于2018年1月4日至1月5日在北京成功召開。本次大會全面展示我國云計(jì)算國家標(biāo)準(zhǔn)研制工作的成果,解讀國內(nèi)云計(jì)算產(chǎn)業(yè)政策,報(bào)告云計(jì)算標(biāo)準(zhǔn)化工作的重要進(jìn)展。同時,大會還重磅發(fā)布了國家開源領(lǐng)域的標(biāo)準(zhǔn)化產(chǎn)物,分享了云計(jì)算***的技術(shù)趨勢和應(yīng)用創(chuàng)新成效,并頒發(fā)了云計(jì)算產(chǎn)品及解決方案第五批測評證書。此外,第二屆中國優(yōu)秀云計(jì)算開源案例評選結(jié)果也在大會現(xiàn)場公布。
在大會的云計(jì)算基礎(chǔ)架構(gòu)與實(shí)踐分論壇上,精碩科技資深架構(gòu)師劉喆帶來了《云 Or not?》的主題演講。他從自身的工作實(shí)踐講起,談到了云的優(yōu)點(diǎn)和未來的發(fā)展趨勢,并跟大家分享了哪些具體的業(yè)務(wù)應(yīng)該上云,哪些業(yè)務(wù)不能夠上云。雖然劉老師的演講時間比較靠后,但生動活潑的演講仍然吸引了大批聽眾的認(rèn)真聆聽。
以下為演講實(shí)錄:
大家下午好!
我看到現(xiàn)在還有這么多聽眾愿意在這兒聽我跟大家扯,感覺特別特別高興,現(xiàn)在坐在這里的都是真愛。受到大會的邀請跟大家做演講,如果我還講一些技術(shù)、細(xì)節(jié)、實(shí)現(xiàn)、優(yōu)化好像沒有太大的必要,因?yàn)檫@些東西大家可以在網(wǎng)上看到,可以跟身邊的人交流得到,我想了想準(zhǔn)備做這樣一個分享,就是云Or not。我叫劉喆,在場的有不認(rèn)識我的嗎?沒有人舉手,大家都認(rèn)識我,我來自于精碩科技,我們公司每天處理的數(shù)據(jù)量太大,每天超過一百億的數(shù)據(jù)增量,所以跟云和大數(shù)據(jù)相關(guān)。
不是所有的業(yè)務(wù)都適合上云
一切有云、有AI的地方必須涉及到大數(shù)據(jù),這是騰訊的馬化騰說的一句話。在深圳的高鐵站有一個更大的照片,那個圖片我找不到了,只找到這個,那句話馬化騰是這樣說的:“未來在云上用大數(shù)據(jù)來處理人工智能”。這句話說的特別到位,或者特別高大上而全。之所以把這個圖片放在這里,寫了個“云”,打一個問號,我們真的要把所有的東西都放在云上去嗎?除了跟大家分享技術(shù)方面的東西,還想給每一個在座的做更多云以外的分享,怎么樣能讓大家升職加薪,相信這一點(diǎn)大家都會非常關(guān)注。大家都想升職加薪,怎么樣才能做到呢?我們CEO經(jīng)常跟我們說的一句話是要想升職,要想加薪就要讓你的老板無事可做。我的老板經(jīng)常問我,這個東西要上云嗎?我要先替他想這個東西要上云嗎?到時候你給他一個12345,老板就很高興,你不升職加薪才怪。
云的優(yōu)點(diǎn)有很多很多,相信各位已經(jīng)聽的不厭其煩了,簡單列幾個:***個,按需付錢,節(jié)省成本。第二混合編排,充分利用資源。第三,占機(jī)器眾多,使用不充分,放在云上比較合適。
“成本、資源、放在云上”,這幾個詞也是我們經(jīng)常要考慮的點(diǎn),云真的省成本嗎?我們以前做過一個計(jì)算,當(dāng)你的數(shù)據(jù)量在500臺服務(wù)器上可以放下的時候,放在云上和放在云下其實(shí)成本是差不多的,大家可以記得這個數(shù)字,以后如果有人要做一個什么決策,可以參考一下這個數(shù)字。
放到云上真的能充分利用資源嗎?但是其實(shí)不一定,后面跟大家分享兩個案例來講講關(guān)于資源這個事情。所有搞大數(shù)據(jù)的同學(xué)都會知道,占的機(jī)器特別多,使用充分嗎?不一定。之前給一個企業(yè)做內(nèi)訓(xùn)的時候了解到他們的服務(wù)器超級的牛,相對我們來說已經(jīng)牛了好幾代,比如說一個硬盤8T,一個機(jī)器12臺硬盤,內(nèi)存最小的是256G。我說你們機(jī)器不會出問題嗎?不出問題,怎么出問題?多少臺機(jī)器,一千多吧,你說一千多臺這樣的機(jī)器放一起怎么可能出問題呢?我們經(jīng)常碰到的問題是什么?老板,硬盤快寫滿了怎么辦?趕緊加機(jī)器,我說你們不需要加嗎?我們不需要加,我們硬盤使用率在15%左右,我就發(fā)現(xiàn)沒法跟他對話了,使用不充分,放在云上正合適。是嗎?
我們有一些業(yè)務(wù)是放在云上的,我就被我的客戶問了這樣一個問題,我想把阿里云的大數(shù)據(jù)框架處理AWS的文件,因?yàn)樗奈募旁趤嗰R遜上,但是它有一部分業(yè)務(wù)在阿里云上,他說阿里云的大數(shù)據(jù)平臺比較好用,我想處理一下AWS,我們就灰頭灰臉的,我沒有辦法,我說不行,那我的數(shù)據(jù)在AWS上怎么辦呢?我還是不行。數(shù)據(jù)不好搞了,我自己搞,我又搞了一份上去。另外,由于各種原因,阿里云漲價(jià)了,老板說阿里云太貴了,我們想換個平臺,我還是整不了。沒辦法,我只能用私有云,我不用他們折騰了,我自己搞,因?yàn)闈q價(jià)歸他管,我自己公司有私有云。但是我們是面向企業(yè)用戶的,我的客戶來說,我不能把我的數(shù)據(jù)放在你的云上,我可以放在阿里云上,又繞回去了,很煩??赡艽蠹疫€沒有遇到這樣的問題,但是總有一天你們會遇到,我們遇到這么多,他怎么溝通,怎么互相通信呢?這始終是一個問題,如果你沒想這個事情,等你老板來問你你就傻眼了,像我一樣,怎么在阿里云上處理AWS,可能你一開始不建議他這么玩。 我們怎么玩?我們是玩私有云,因?yàn)橥饷娴氖遣豢煽氐?,我們不想被任何一個平臺綁架。
我剛才說過一個數(shù)字:500臺。很多很多交流過的公司,特別是創(chuàng)業(yè)公司他們數(shù)據(jù)量很小,我們也在做大數(shù)據(jù),我們有多少多少數(shù)據(jù),我一聽就“呵呵了……沒有超過500臺的不要跟我說大數(shù)據(jù),我們有一天兩三個G的數(shù)據(jù),我們不考慮這個事情,因?yàn)槟阍诎⒗镌粕贤娴暮芎茫憔驮谀莾和?,如果你的?shù)據(jù)量很小,你就扔在公有云,你就在哪兒玩,所有你需要的東西它都有,KV、存儲、計(jì)算,大數(shù)據(jù)的計(jì)算,人工智能的計(jì)算,語音、視頻什么東西都能搞。如果你的量很大,我把這些東西都扔到公有云上,遲早會玩死你的。
我們會有一個目標(biāo),叫資源優(yōu)化。當(dāng)然所有寫程序的同學(xué)都不會想這個事情,上來想老板提了一個功能趕緊做完,但是如果你后面還不去想,你怎么升職加薪呢?優(yōu)化的前提是度量,度量,度量,重要的事情說三遍。我們是一家做度量的公司,所有的東西先度量了之后才說其它。當(dāng)然,這個東西在其他公司可能有另外一種表述,叫“用數(shù)據(jù)說話”。大家可以記得這一句話,“用數(shù)據(jù)說話”,有人講我有多少多少臺東西扔到云上,然后就怎么樣。你先給我一個數(shù)據(jù)看一下,如果沒有數(shù)據(jù)不要在這兒說優(yōu)化也一樣。我們用私有云優(yōu)化了什么什么東西,數(shù)據(jù)在哪里?如果沒有相關(guān)的數(shù)據(jù)支撐,你可以測試。我不知道這樣好不好,我可以測一下,測出來的數(shù)據(jù)告訴我,這樣可能是好的,也可能是不好的,有了度量你太可能做后面所謂的優(yōu)化。
非集群類的需求不上云
我們最終的結(jié)論是非集群類的需求不上云。比如說一個前端機(jī),有人訪問你的頁面扔上去,沒問題,比如說你有一個Mysql數(shù)據(jù)庫,如果在公有云上不需要考慮安全不安全,就扔上去,所有集群類的需求我給他們做決策都是不要放在云去。比如說hadoop,你說我扔到云上吧,可以,但是不建議。為什么?所有集成類的應(yīng)用,在設(shè)計(jì)之初就是想著我自己怎么樣容錯,我自己怎么樣擴(kuò)展。所有集成類的都是上一些假設(shè),東西都是壞的,哪一天我要擴(kuò)展,這個東西跟云設(shè)計(jì)之初的想法是一樣的。昨天一個同學(xué)問我一個事情特別有意思,我在阿里云上做了一個Hadoop,我能不能把它副本同一個變成三個,一個副本也沒有問題,它不會丟棄。但是問題來了,Hadoop設(shè)計(jì)之初根本沒有考慮過你在底層做三備份,在我看來只有一個,我不知道你做了三備份,所有針對三備份的優(yōu)化你都用不了,在他看來就是一備份,他知道這個在哪個機(jī)架上,所以所有集成類的我們都不建議他扔到云上去。
另一個,度量,有了數(shù)據(jù)支撐才能好的決策,否則就是瞎猜。,現(xiàn)在可以說我現(xiàn)在就是瞎猜,我歡迎所有人說我現(xiàn)在就是瞎猜,因?yàn)槲覜]有這個數(shù)據(jù)。我們就是靠做度量起家的,度量什么呢?廣告,我們給廣告主度量,這個廣告做在這里是不是有效的,你做完了我給你評價(jià),今天放在這里沒有人看你的廣告,你在優(yōu)酷做了一個廣告,今天看你廣告的有兩百萬人,放在搜狐變成五百萬人,我兩個數(shù)據(jù)放在這里,哪個有效呢?我不用告訴你。程序的優(yōu)化靠時間分析,Profiler。
資源的優(yōu)化,找出浪費(fèi)的大頭,比如說看見這個程序大部分時間CPU忙的要死,把它拆開跑,內(nèi)存占用太大,跑著跑著爆掉了,自己看哪里的問題。
什么樣的非集群的需求上到云上?前端,開發(fā)機(jī),相信每一個公司里面都會有一些開發(fā)機(jī),應(yīng)用人員要寫應(yīng)用,要是,開發(fā)機(jī)測試統(tǒng)統(tǒng)扔到云上去沒有任何問題,因?yàn)樗?fù)載也不高,掛了也沒關(guān)系,安全性也沒有那么高的要求,掛就掛了。
數(shù)據(jù)庫,如果一些不重要的數(shù)據(jù)庫,你就扔上去就好了,他使用率也不高。尤其現(xiàn)在有一種東西特別建議扔在云上去,就是前端,我們的前端都是用容器扔到云上面去的,曾經(jīng)有一次我們試圖把它拿出來,然后就發(fā)現(xiàn)各種坑,因?yàn)镴S這個東西依賴的東西太多了,一會兒依賴這個,一會兒依賴那個,如果你沒有,這個機(jī)器掛了,重新部署一遍。
集群類的需求,不上云怎么辦呢?我們用Yarn管理所有統(tǒng)一的大數(shù)據(jù)應(yīng)用,像Hive/MR/Storm/Spark/Flink,給大家講一個案例,ES,原來這個東西是布在docker上面,他們問我這個東西經(jīng)常跑著跑著掛,怎么優(yōu)化一下。沒有度量就沒有優(yōu)化,我們就去看這個東西為什么老是掛呢?到底哪里占的比較高?去分析,發(fā)現(xiàn)沒有任何東西,沒有明顯的顯示CPU很高,內(nèi)存很高,但是它就是掛。發(fā)現(xiàn)在docker上面跑的,把它拿出來,一看別人跑的是OpenJdk,不知道大家知不知道這個埂?在docker早期的時候關(guān)于Jdk,全部是openJdk,我們發(fā)現(xiàn)有一個問題,某些情況下你拿openJdk可以跑這些JAVA的大數(shù)據(jù)的應(yīng)用,但是某些情況下就是會出問題。跑著跑著就掛了,我們沒有深究為什么,我們統(tǒng)一把這些東西搞出來,放在JDK上就Ok了。我們現(xiàn)在嘗試在測試集群上把H扔進(jìn)去,我們的老板不關(guān)心技術(shù),你部署一次環(huán)境浪費(fèi)時間那么多天,200臺機(jī)器什么時候好?我說兩天,太慢了,扔在docker瞬間搞定了,然后發(fā)現(xiàn)這個程序跑的很慢,雖然沒有慢那么多,中間加了一層總是會慢的,大家會覺得沒慢多少,總是會慢的。在這種情況下,“差之毫厘,謬之千里”,慢了0.01秒,你一天做那么多的計(jì)算,那你可以想象。
大數(shù)據(jù)放在云上并不是都能省資源
問題就來了,大數(shù)據(jù)放在云上不是也可以省資源嗎?其實(shí)云一開始想解決的問題就是你一會兒一個波峰,一會兒一個波谷,我把這個東西消掉,你需要的時候給你,不需要給你減了,一開始解決這個問題,如果一開始解決了,他天天忙的要死,上哪兒節(jié)省資源去?下一個問題大數(shù)據(jù)計(jì)算中大家覺得成本***的是什么,谷歌每年會會一個大會,那個大會的內(nèi)容一般不歸關(guān)注,但是名字很有意思,叫IO大會。
其實(shí)大數(shù)據(jù)里面最慢的就是IO,網(wǎng)絡(luò)也好,硬盤也好。虛擬化技術(shù)里面如果你想提高性能,最簡單的事情是所有的東西都本地化,你永遠(yuǎn)不要去訪問網(wǎng)絡(luò),永遠(yuǎn)不要去訪問問盤,永遠(yuǎn)不要訪問別人的CPU和別人的硬盤。
比如說我要讀一個數(shù)據(jù),在你的云上可能覺得我是讀的本地的呀,但是其實(shí)是不是呢?不一定,如果你讀的真是物理機(jī)本地的,它是會快的,如果你讀的東西要跨網(wǎng)絡(luò),肯定受限于網(wǎng)絡(luò)。昨天一個同事找我說,我要從集群上拿一個東西拿不下來,怎么回事,你去看一看我們的監(jiān)控你就會發(fā)現(xiàn)所有跑集群計(jì)算的交換機(jī)都是滿的,網(wǎng)絡(luò)都是滿的,***的瓶頸就是你要讀別人的數(shù)據(jù)把你卡住,你是在沒有辦法,如果你只讀本地的,取決于你的硬盤,最快的是CPU讀case最快,case讀硬盤最快。
谷歌的大會叫IO大會,IO和Shuffle,是幾乎所有大數(shù)據(jù)計(jì)算框架最關(guān)心性能問題,你要優(yōu)化,其實(shí)優(yōu)化就是本地化,盡量讀自己的。方案就是locallzing把東西拷到自己這里來。比如說Mem page配置預(yù)讀,內(nèi)存比配置快一千倍,你可以預(yù)先讀。最早的時候MR出來之所以先于現(xiàn)在大數(shù)據(jù)計(jì)算這一波過來,他自己設(shè)定的時候就是我假定如果你有資源怎么辦?誰離我近我在哪兒跑,不要讓我讀網(wǎng)絡(luò),讀網(wǎng)絡(luò)很慢。程序設(shè)計(jì)里面其實(shí)更多,我們知道邏輯判斷有個東西叫短路。大數(shù)據(jù)放到云上會有那些問題呢?大數(shù)據(jù)平臺都是基于物理機(jī)設(shè)計(jì)的,我們現(xiàn)在跑的Hadup,什么Spark,沒有哪個平臺說我是基于云設(shè)計(jì)的。現(xiàn)在云平臺上他們自己提供這種能力,自己有EMR,可能是根據(jù)自己的云又設(shè)計(jì)的一套大數(shù)據(jù)的計(jì)算框架,可能是。但是如果你用的是原生的,我還要用到云上這樣用,他不是為你的云設(shè)計(jì)的。
硬盤是不靠譜的,因?yàn)樗紤]到擴(kuò)容,考慮到容災(zāi),要做副本,但是其實(shí)云上面他已經(jīng)給你做了副本,就是剛才講的那個例子,這兩個副本怎么處理呢?要么就是浪費(fèi),要么就是低效。下面這兩個已經(jīng)講過了,讀寫網(wǎng)絡(luò)是比較慢的。為防止數(shù)據(jù)一下子壞掉,要放在不同的地方,大數(shù)據(jù)框架一般都會想的一個點(diǎn),數(shù)據(jù)會壞,壞了怎么辦?不要把雞蛋放在一個籃子里,要放在不同的地方,現(xiàn)在把這個東西扔到云上,問題來了,我怎么知道我所謂的不同地方是不是在一起?應(yīng)用 框架說我放在不同的地方你放心吧,結(jié)果在云上這倆就是在一起,結(jié)果這個機(jī)器掛了,他說我沒有放在一起,下面說你就是放在一起了。這個過程很可怕。
我希望大家只記住一句話,替你老板想你才能升職加薪,因?yàn)樯厦孢@些問題都是我老板天天問我的。謝謝!