在前面一篇談數(shù)字化轉(zhuǎn)型的趨勢(shì)文章中,我曾經(jīng)談到過(guò)當(dāng)前企業(yè)數(shù)字化轉(zhuǎn)型,特別是大型集團(tuán)性企業(yè),有一定IT建設(shè)技術(shù)積累的企業(yè),在數(shù)字化轉(zhuǎn)型和IT平臺(tái)和應(yīng)用構(gòu)建過(guò)程中,有一個(gè)關(guān)鍵轉(zhuǎn)變點(diǎn)就是自主可控。
很多大集團(tuán)企業(yè)當(dāng)前主流趨勢(shì)都變成了自建IT團(tuán)隊(duì),進(jìn)行相應(yīng)的IT系統(tǒng)開(kāi)發(fā)和后續(xù)運(yùn)維,而不是類似傳統(tǒng)模式下去選擇商業(yè)套件產(chǎn)品。對(duì)于ERP套裝軟件,短期要做到自主研發(fā)不現(xiàn)實(shí),但是除了ERP軟件,大部分上層應(yīng)用軟件企業(yè)已經(jīng)具備自主研發(fā)能力。
也就是ERP應(yīng)用下沉為企業(yè)的后臺(tái)能力,而基于ERP上層的各類應(yīng)用變成了前臺(tái),同時(shí)由企業(yè)IT團(tuán)隊(duì)自己開(kāi)發(fā),并自己進(jìn)行后續(xù)實(shí)施和運(yùn)維管控。
自己組建團(tuán)隊(duì)從頭開(kāi)發(fā)內(nèi)部應(yīng)用,看上去并不省錢,前期投入成本往往比構(gòu)建成熟的商業(yè)套件花費(fèi)更大。但是帶來(lái)兩個(gè)關(guān)鍵好處,其一就是敏捷響應(yīng)業(yè)務(wù)需求的能力;其二是真正做到自主可控,合作IT支撐能力掌控在自己手上,而不是被開(kāi)發(fā)商綁架。
所以今天準(zhǔn)備再來(lái)討論下數(shù)字化轉(zhuǎn)型過(guò)程中IT建設(shè)自主可控的話題。
自主可控本身是一個(gè)大命題,當(dāng)前談的開(kāi)源,國(guó)產(chǎn)替代,鯤鵬云生態(tài),信創(chuàng),核高基,鴻蒙等都可以劃入到自主可控的范疇。今天談的自主可控則重點(diǎn)談IT應(yīng)用建設(shè)中的軟硬件方面的自主可控。
從早期的去IOE談起
如果回到14,15年左右,當(dāng)時(shí)談得最多的不是自主可控,而是由互聯(lián)網(wǎng)發(fā)起逐步也延伸到B端企業(yè)信息化建設(shè)的去IOE。去IOE簡(jiǎn)單來(lái)說(shuō)就是要去掉昂貴的IBM小型機(jī),Oracle數(shù)據(jù)庫(kù),EMC的集中化存儲(chǔ),而采用相應(yīng)的X86服務(wù)器,開(kāi)源中間件進(jìn)行替代。
大家要注意到去IOE當(dāng)前本質(zhì)已經(jīng)是變化為解決數(shù)據(jù)庫(kù)層面的問(wèn)題,對(duì)于應(yīng)用服務(wù)器和中間件,采用X86服務(wù)器和負(fù)載均衡,集群技術(shù)本身已經(jīng)不存在太大的問(wèn)題。包括其可靠性,可擴(kuò)展性和性能等。當(dāng)前我們看到的很多應(yīng)用本身也是應(yīng)用服務(wù)器層基本全部X86+虛擬化,而對(duì)于數(shù)據(jù)庫(kù)往往還在使用小型機(jī)和集中存儲(chǔ)。
現(xiàn)在的高性能的X86服務(wù)器性能已經(jīng)趕上了3,4年前的中端小型機(jī)性能。比如現(xiàn)在的6到8C,8核高配的X86服務(wù)器性能能夠達(dá)到80-100萬(wàn)TPMC,而3年前的中端小型機(jī)性能也就60萬(wàn)TPMC的樣子。對(duì)于小型機(jī)的替代大家最關(guān)心的問(wèn)題仍然是高可用性,小型機(jī)基本可以達(dá)到5個(gè)9的高可用性,而現(xiàn)在隨著類似至強(qiáng)7500等X86服務(wù)器引入了大量在小型機(jī)中才使用到的RAS技術(shù),基本達(dá)到4個(gè)9是沒(méi)有太大問(wèn)題的。
還有就是小型機(jī)的縱向擴(kuò)展能力相當(dāng)強(qiáng),比如CPU可以最多擴(kuò)展到24個(gè),而對(duì)于X86服務(wù)器則是希望通過(guò)橫向擴(kuò)展來(lái)應(yīng)對(duì)小型機(jī)的縱向擴(kuò)展能力。而橫向擴(kuò)展自然帶來(lái)的一個(gè)問(wèn)題就是分布式的問(wèn)題。
對(duì)于數(shù)據(jù)庫(kù)層面,拿MySQL數(shù)據(jù)庫(kù)來(lái)和Oracle數(shù)據(jù)庫(kù)做一個(gè)比較,當(dāng)前第三方的評(píng)測(cè)是在相同的硬件配置條件下兩個(gè)數(shù)據(jù)庫(kù)的性能和Benchmark數(shù)據(jù)庫(kù)相當(dāng)。而實(shí)際上對(duì)于數(shù)據(jù)庫(kù)層面我們更加關(guān)心的還是在海量數(shù)據(jù)下的復(fù)雜事務(wù)處理能力。如果對(duì)于存儲(chǔ)大表數(shù)據(jù)都在千萬(wàn)行級(jí)別一下,可以說(shuō)兩個(gè)數(shù)據(jù)庫(kù)可能不會(huì)出現(xiàn)太明顯的差距。而如果對(duì)于大于千萬(wàn)或上億數(shù)據(jù)的海量數(shù)據(jù)OLTP處理上,Oracle估計(jì)還是具備有明顯的優(yōu)勢(shì)。而對(duì)于這一個(gè)問(wèn)題的解決,根據(jù)互聯(lián)網(wǎng)企業(yè)的經(jīng)驗(yàn),仍然是通過(guò)數(shù)據(jù)庫(kù)的水平拆分和垂直拆分來(lái)解決這個(gè)問(wèn)題。
類似EMC提供的集中存儲(chǔ)是另外一個(gè)重要的話題,可以看到在使用集中存儲(chǔ)的時(shí)候,我們很容易去實(shí)現(xiàn)類似Oracle的RAC集群,同時(shí)本身集中SAN,NAS存儲(chǔ)也具備更高的存儲(chǔ)高可用性和高可靠性。類似互聯(lián)網(wǎng)企業(yè)淘寶也曾經(jīng)談到過(guò),在采用廉價(jià)的本地磁盤存儲(chǔ)后,由于大量的IO磁盤讀寫也經(jīng)常出現(xiàn)硬盤掛掉的情況。雖然這些可以通過(guò)RAID技術(shù)來(lái)避免單獨(dú)故障,但是對(duì)于存儲(chǔ)的高可靠性確實(shí)本地存儲(chǔ)趕不上集中存儲(chǔ)。
在云數(shù)據(jù)中心建設(shè)中,你會(huì)看到采用類似Ceph來(lái)實(shí)現(xiàn)一個(gè)分布式的共享存儲(chǔ),或者采用NFS來(lái)提供共享存儲(chǔ),都是一種對(duì)傳統(tǒng)EMC存儲(chǔ)的替代方案。但是不得不說(shuō),這些替代方案在性能和穩(wěn)定性上比FC SAN實(shí)現(xiàn)還是有較大差距。
由于在去小型機(jī),Oracle數(shù)據(jù)庫(kù)和集中存儲(chǔ)情況下,將直接轉(zhuǎn)換為數(shù)據(jù)庫(kù)層的構(gòu)建成為一個(gè)share nothing的分布式數(shù)據(jù)庫(kù)集群。而現(xiàn)在的MPP+Share nothing的New SQL數(shù)據(jù)庫(kù),類似Greenpulm,Vertica,Hive等更多的都是解決OLAP層面的問(wèn)題。而對(duì)于去IOE首先需要解決的是聯(lián)機(jī)事務(wù)處理層面的事情。
最近幾年出來(lái)一個(gè)新的開(kāi)源MPP數(shù)據(jù)庫(kù)ClickHouse,當(dāng)前也已經(jīng)相當(dāng)成熟并不斷在真實(shí)場(chǎng)景中得到應(yīng)用,感興趣的也可以關(guān)注。
那么對(duì)于Share nothing的分布式數(shù)據(jù)庫(kù),當(dāng)前也有類似Mysql Cluster技術(shù)來(lái)支撐,但是這種分布式數(shù)據(jù)庫(kù)雖然做到了高可靠性,但是由于需要支撐CUD操作,導(dǎo)致這種集群很難達(dá)到滿足實(shí)際應(yīng)用需求的存儲(chǔ)容量和業(yè)務(wù)高性能。在實(shí)際的業(yè)務(wù)應(yīng)用場(chǎng)景下,除了少量的類似MDM主數(shù)據(jù)場(chǎng)景比較適合采用外,真正的核心的大量業(yè)務(wù)操作和邏輯處理場(chǎng)景往往并不適合。
基于這種情況,當(dāng)前最常用的技術(shù)是對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平拆分和垂直拆分,但是這種拆分我們希望的是對(duì)應(yīng)用層透明,因此在數(shù)據(jù)庫(kù)上面引入了一個(gè)核心的DaaS服務(wù)層。但是當(dāng)前的DaaS服務(wù)層很難做到數(shù)據(jù)庫(kù)的完全透明,同時(shí)對(duì)于上層的應(yīng)用構(gòu)建造成一定的約束。包括有些跨庫(kù)的Sql語(yǔ)句,類似跨庫(kù)聚合Group By等的語(yǔ)句不支持,這些都需要應(yīng)用層自己去解決。
在跨庫(kù)后帶來(lái)的一個(gè)重要問(wèn)題就是分布式事務(wù)的問(wèn)題,對(duì)于DaaS來(lái)說(shuō)可以解決部分分布式事務(wù)的問(wèn)題,但是需要采用嚴(yán)格的XA兩階段提交來(lái)解決分布式事務(wù),本身的高可靠性和一致性仍然需要進(jìn)一步進(jìn)行驗(yàn)證。而對(duì)于應(yīng)用,仍然需要應(yīng)用去解決一些分布式事務(wù)的問(wèn)題,即通過(guò)事務(wù)補(bǔ)償,base方法等去解決分布式事務(wù)的問(wèn)題,這些本質(zhì)上都是削弱了對(duì)高一致性的支持,這也是CAP定量經(jīng)常說(shuō)的,在一個(gè)分布式的系統(tǒng)中很難真正做到三者全部滿足。在滿足高可用性和分區(qū)容錯(cuò)性的基礎(chǔ)上,往往需要犧牲一定的高一致性。
由于采用數(shù)據(jù)庫(kù)拆分和DaaS層,對(duì)于應(yīng)用層的應(yīng)用構(gòu)建將帶來(lái)比較大的變化,特別是很多原來(lái)數(shù)據(jù)庫(kù)沒(méi)有拆分的時(shí)候一個(gè)SQL就搞定的問(wèn)題,一個(gè)通過(guò)數(shù)據(jù)庫(kù)層事務(wù)就能解決的問(wèn)題,都會(huì)變成了分布式事務(wù)問(wèn)題,或者多次調(diào)用服務(wù)操作才能夠解決的問(wèn)題。這往往才是說(shuō)得去IOE的一個(gè)關(guān)鍵。
自主可控,國(guó)產(chǎn)化和開(kāi)源
注意前面談到的去IOE運(yùn)動(dòng),最開(kāi)始的考慮并不是自主可控,而是降低整個(gè)IT硬件設(shè)施和基礎(chǔ)中間件的成本投入。而當(dāng)前談的自主客戶,則更多是從自主知識(shí)產(chǎn)權(quán),國(guó)產(chǎn)化等方面再考慮。
舉個(gè)簡(jiǎn)單的例子你如果采購(gòu)類似人大金倉(cāng),達(dá)夢(mèng)數(shù)據(jù)庫(kù),整個(gè)成本并不是一定比采用類似Oracle,SqlServer數(shù)據(jù)庫(kù)便宜多少。但是好處就是符合當(dāng)前國(guó)家的自主可控,國(guó)產(chǎn)化替代和新創(chuàng)發(fā)展趨勢(shì)。
那么開(kāi)源是否也算自主可控?
實(shí)際上當(dāng)前很多國(guó)內(nèi)的國(guó)產(chǎn)化軟件,本身底層也是基于開(kāi)源軟件進(jìn)行的二次開(kāi)發(fā),采用開(kāi)源軟件本身也是實(shí)現(xiàn)自主可控的一個(gè)關(guān)鍵。企業(yè)采用各類開(kāi)源軟件,并不是開(kāi)發(fā)一個(gè)新產(chǎn)品用于產(chǎn)品銷售,從當(dāng)前的開(kāi)源軟件授權(quán)協(xié)議各方面來(lái)說(shuō)完全可行。
開(kāi)源帶來(lái)的一個(gè)好處就是至少源代碼可見(jiàn)可控掌控。
但是當(dāng)前開(kāi)源軟件本身也出現(xiàn)免費(fèi)版和社區(qū)企業(yè)版的分離,對(duì)于社區(qū)版或企業(yè)版本同樣需要付費(fèi),而且有些核心技術(shù)模塊代碼本身也沒(méi)有開(kāi)源,而且開(kāi)源軟件你購(gòu)買后續(xù)的技術(shù)支撐服務(wù)同樣需要付費(fèi)。
在很多年前我們實(shí)施SOA項(xiàng)目就為客戶做過(guò)比較,當(dāng)前可以選擇Oracle SOA產(chǎn)品套件和Mule開(kāi)源ESB的商業(yè)服務(wù)版本。由于Mule本身是按年度收技術(shù)服務(wù)訂閱費(fèi)用,實(shí)際核算下來(lái)即使按使用3到5年,那么Mule實(shí)際投入成本都超過(guò)Oracle產(chǎn)品套件。
所以開(kāi)源本身也不一定節(jié)約成本,但是開(kāi)源帶來(lái)的關(guān)鍵好處是自主可控。
簡(jiǎn)單總結(jié)下就是對(duì)于國(guó)產(chǎn)化各類基礎(chǔ)軟件本身并不開(kāi)源,但是符合國(guó)家大力發(fā)展自主軟件政策和最新的信創(chuàng)發(fā)展政策,從國(guó)家層面是自主可控;對(duì)于國(guó)外的一些開(kāi)源軟件,本身可以開(kāi)放源代碼,降低被廠商綁架的風(fēng)險(xiǎn),但是可能后續(xù)的技術(shù)服務(wù)也不便宜。
當(dāng)前就甲方企業(yè)來(lái)說(shuō)。如果你是國(guó)企或政府行業(yè),對(duì)各種安全性要求都更高,更多的方式都是直接購(gòu)買國(guó)產(chǎn)化基礎(chǔ)軟件。而對(duì)于民營(yíng)企業(yè)來(lái)說(shuō),當(dāng)前購(gòu)買國(guó)產(chǎn)化軟件的很少,更多的還是采用各種開(kāi)源軟件,類似Mysql數(shù)據(jù)庫(kù),Tomcat中間件等,這些也都是很成熟的技術(shù)中間件并得到了大面積應(yīng)用和驗(yàn)證。
在前面我們談到了大的集團(tuán)性企業(yè)更多的思路是自建IT開(kāi)發(fā)團(tuán)隊(duì),自建進(jìn)行IT應(yīng)用軟件的開(kāi)發(fā)和后續(xù)管控運(yùn)維。當(dāng)前還有一個(gè)思路就是仍然是公開(kāi)招標(biāo),但是要求完全按自己的技術(shù)規(guī)范進(jìn)行定制開(kāi)發(fā),并最終交付源代碼。
這個(gè)技術(shù)規(guī)范實(shí)際已經(jīng)制定了選擇的數(shù)據(jù)庫(kù)和中間件類型,開(kāi)發(fā)框架和技術(shù),技術(shù)標(biāo)準(zhǔn)要求等各種內(nèi)容,所有入圍的廠家都需要按照標(biāo)準(zhǔn)的技術(shù)規(guī)范,開(kāi)發(fā)框架和環(huán)境進(jìn)行應(yīng)用軟件的開(kāi)發(fā),這屬于定制化開(kāi)發(fā)范疇,而不是簡(jiǎn)單的提供一個(gè)你已有的成熟軟件。
注意特別是在微服務(wù)架構(gòu)后,原來(lái)的一個(gè)單體應(yīng)用往往已經(jīng)拆分為多個(gè)微服務(wù)模塊,甲方企業(yè)完全可以將一個(gè)應(yīng)用拆分后分包給多個(gè)供應(yīng)商定制開(kāi)發(fā),那么開(kāi)發(fā)商之間本身就成為一個(gè)相互備份和可替代關(guān)系,而不是被單一供應(yīng)商完全捆綁。
最近從招投標(biāo)情況來(lái)這種情況逐漸變多,就是集團(tuán)企業(yè)更多的是招標(biāo)軟件開(kāi)發(fā)外包的大框架協(xié)議,而外包需求,外部技術(shù)規(guī)范,開(kāi)發(fā)框架標(biāo)準(zhǔn)等甲方都會(huì)在發(fā)布的技術(shù)規(guī)范中說(shuō)明清楚。所有入圍的廠家遵循相同的開(kāi)發(fā)標(biāo)準(zhǔn)規(guī)范,技術(shù)框架體系進(jìn)行開(kāi)發(fā),而且最終提供開(kāi)發(fā)完成的源代碼,那么甲方也更加容易做到自主可控。
在這里必須打個(gè)小廣告。
一個(gè)甲方招標(biāo)了很多個(gè)開(kāi)發(fā)商進(jìn)行按自己的需求進(jìn)行定制開(kāi)發(fā),那么如何加強(qiáng)對(duì)開(kāi)發(fā)商整個(gè)開(kāi)發(fā)生命周期的全過(guò)程管控和質(zhì)量檢查,確保開(kāi)發(fā)商最終交付的產(chǎn)品本身滿足需求,同時(shí)產(chǎn)品本身甲方能夠接手運(yùn)維。這里面就是涉及到需要對(duì)整個(gè)開(kāi)發(fā)過(guò)程,CI/CD持續(xù)集成和持續(xù)交付,測(cè)試和質(zhì)量管理全過(guò)程管控。而這也正是我們DevOps平臺(tái)提供的關(guān)鍵價(jià)值。
從自主可控到云原生
在前面談數(shù)字化轉(zhuǎn)型的時(shí)候已經(jīng)談到,當(dāng)前整個(gè)IT發(fā)展趨勢(shì)是云原生。原來(lái)是IT基礎(chǔ)設(shè)施建設(shè)從自己構(gòu)建到直接使用云服務(wù)商提供的云資源池。而到了云原生階段后,整個(gè)抽象進(jìn)一步上移,從資源的使用變化到服務(wù)的使用。
舉個(gè)例子來(lái)說(shuō),你原來(lái)構(gòu)建應(yīng)用需要考慮選擇哪個(gè)數(shù)據(jù)庫(kù),然后自己安裝配置,后續(xù)運(yùn)維這個(gè)數(shù)據(jù)庫(kù)。而現(xiàn)在你可能使用的是云服務(wù)商提供的數(shù)據(jù)庫(kù)服務(wù),你不用再去關(guān)心數(shù)據(jù)庫(kù)的安裝和運(yùn)維。你只需要關(guān)心應(yīng)用層的軟件開(kāi)發(fā)和功能實(shí)現(xiàn)。
底層技術(shù)資源提供+底層技術(shù)服務(wù)提供都全部云化。
那么在這個(gè)時(shí)候又如何去做自主可控?
簡(jiǎn)單來(lái)說(shuō)你需要考慮的是應(yīng)用層的軟件開(kāi)發(fā),比如你使用當(dāng)前主流的類似Springcloud微服務(wù)開(kāi)發(fā)框架去進(jìn)行應(yīng)用開(kāi)發(fā),最終開(kāi)發(fā)完成后將其持續(xù)集成和交付到云環(huán)境即可。這個(gè)應(yīng)用本身的開(kāi)發(fā)源代碼還是在你手里面,你能夠做到自主可控。
但是這個(gè)時(shí)候?qū)嶋H引入一個(gè)新問(wèn)題。
各個(gè)云平臺(tái)服務(wù)商都推出了自己的各類PaaS層技術(shù)服務(wù)能力,包括了數(shù)據(jù)庫(kù),緩存,消息中間件等各種服務(wù)能力,也包括了自己的DevOps研發(fā)效能管理平臺(tái)等。其核心目的還是希望能夠?qū)⒃品?wù)延伸到企業(yè)需求開(kāi)發(fā)過(guò)程管理中,做到深度綁定。
那么從企業(yè)角度你需要思考的問(wèn)題就很簡(jiǎn)單,即不能被單個(gè)云服務(wù)商完全綁架,今天你的應(yīng)用托管在阿里云,明天也能夠快速平滑的遷移到華為云,只有這樣你才能夠做到完全的自主可控。
而要做到這個(gè),又涉及到一個(gè)核心能力就是你需要去構(gòu)建一個(gè)混合云的管理平臺(tái),你最終開(kāi)發(fā)的應(yīng)用能夠同時(shí)向不同的云環(huán)境交付,這個(gè)混合云管理平臺(tái)需要完成對(duì)多個(gè)公有云服務(wù)商服務(wù)能力的適配。而這個(gè)也是我們自己的DevOps平臺(tái)的一個(gè)優(yōu)點(diǎn),感興趣的可以發(fā)翻看我前面發(fā)布過(guò)的文章進(jìn)行詳細(xì)了解。