1.引言
其實我一直是個懶人,開博也有好幾年了,但是一直懶得寫文章,主要怕打字麻煩, 手機都是用訊飛語音輸入的, 可惜部落格裡面很多專業性的詞語,用訊飛也不大好,另外無論在家還是在公司,開個語音一本正經的嘰嘰嘰,畫面也太美好,乾脆還是手打吧,對觀眾也是一個尊重
這個話題實在不想開,主要是怕開了,各路大軍蜂擁而至,一人一口唾液也被噴死了,原來只要一討論.net java php誰好,馬上就有混戰了,最終以PHP是世界上最好的語言為結論休戰,講真,作為一個IT界混了這麼多年的人,啥語言都要會點,要不然你真不好意思出來圍觀,所以在MVC之前的時期,根本也無所謂那種語言好,哪種不好,都是半斤八兩吧。 不過在那個時期,很公正的講:
2.五軍介紹
1 ..Net 還不錯,尤其是VS開發環境,那除錯真心爽,程式碼也很優雅,唯一不足就是.net 環境很噁心,各種體積大,各種向後相容,搞的實施人員罵娘
2 .JAVA也不錯,這幾年一直是我的主開發語言,主要是一個JDK跑天下,各種平臺爽呆呆。當然各種Jar包也會找的你哭,直到Maven這個神器出來一統江湖,大家都爽了,唯一偶爾還罵一下的也就Eclipse了。當然也有用其他IDE的,在此不多評論,用過VS的話都得趴下。
3 .PHP嘛,我不知道怎麼講了,好像連噴的引子都沒有了, 比IDE? PHP有IDE麼? 比除錯? PHP 有除錯麼? 比中介軟體?PHP有中介軟體麼? 當然,PHP開發還是蠻快的,有他自身的優點(一大波PHPer正在趕來,好吧,PHP是世界上最好的語言)
4 .GO&NodeJS Python 二線語言, 各位大爺先別噴, 真正的大型,大規模產品,還真沒用這幾個語言開發的,有個別用的後果也是最終轉上面3個大哥
5 .其他語言 IOS ,C++ 等, 不說了,沒法噴,地球的未來是網際網路時代。除了圖形及前端運算等需要,這類語言不會消失,但生存空間會越來越小。現在鋪天蓋地的混合開發框架已經在不停的打壓前端語言了。
好了, 五軍湊齊,但是真正開戰的主力,還是前3個, 後面2個的粉絲可以先去討論下PHP是不是世界上最好的語言,然後再過來觀戰
3.開戰背景
為什麼前三個要開戰呢? 主要還是從16年下半年開始,蓬勃發展的微服務架構,Docker DevOPS ,這兩個傢伙把IT市場徹底給攪亂了,不明真相的吃瓜群眾肯定說:用自己的開發語言就好,其他管我屁事? 且聽我繼續道來,這2個傢伙終究要改變世界,啊不,終究要改變IT界的生存模式。
1 .首先受到衝擊的就是運維人員, 這群龐大的組織,因為Docker DevOps的存在,會逐漸消亡,因為以後基本不需要什麼實施,也不需要蹲點運維了,所有的功能程式碼,最終交付形態都是一個image映象,一個DevOps人員就可以完成自動化構建,生成Docker映象,叢集化部署。 而傳統的安裝文件Step1-Step100就再也沒人看了。
這塊影響最大的,可能就是依賴於IBM,Oracle等巨頭中介軟體的這部分人了,想當年,IBM靠WebSphere中介軟體系列, Tovoli系列養活了多少實施運維人員,工資傻高,福利賊好,但是Docker一出誰與爭鋒,DevOps概念深入身心,開發運維一體化將是未來唯一主流的道路
2. 其次受到衝擊的,就是傳統思維,傳統架構的的開發人員,16年下半年開始,JAVA率先轉入微服務仙域,坐看人間百態,笑而不語。因為SpringBoot和SpringCloud完美支援無縫對接微服務,那可是JAVA的親大爺,.Net只有乾瞪眼的份,無奈天生基因形態,無法有效實現微服務,更別說像SpringCloud的生態鏈了,不過微軟打死都不改變,你Linux有Docker,我也得弄個Docker,好嘛,出來的是基於微軟Hyper-V的,微軟引以為豪的介面型操作,在Docker命令型操作面前被轟成了渣渣,沒辦法,把PowerShell改下,全學Linux的Shell,奈何最終是一個四不像,搞得人都不願意用,幹嘛費那麼大勁學PowerShell?直接轉Linux多開心? .Net Core 也開始跨平臺,可惜背後的生態鏈都無法完美進入Docker,更別說DevOps的思路了。所以.Net Core看起來很美好,其實道路還是很曲折的,一個人對抗整個JAVA生態鏈,還是太弱。至於PHP,怎麼昇仙進入微服務? 請先把自己的MVC搞定再來發言吧。 什麼?有同學說PHP的MVC有啊,好吧,請先去參觀研究下JAVA 和.Net的MVC吧。
3. 另外一個受影響的,應該是網際網路甚至是整個IT界的運作模式了,目前雖然收到衝擊,但是還不算致命,但是未來1-3年內,肯定要大變樣,主流應用,主流網際網路產品可能都會轉型到微服務模式,畢竟從快速開發實現,快速迭代,及時響應變更,同時降低成本方面考慮,企業都願意接受更好的方案。傳統企業,國企政企嘛,想想就算了,真帶不動,一群只會用XP IE6的群體,和網際網路本身就是互斥的,所以對於在這類產品環境下生存的ITer們,就要考慮了,不轉微服務,那你的技術生涯可能也就2-3年了,轉微服務?那估計只能跳槽了。畢竟對於思想排斥網際網路,動不動就是管控,內網,各種約束,是無法有效高效利用網際網路帶來的價值的。
4.DevOps助攻
好了,說了這麼多,也簡單說下微服務+Docker+DevOps的簡要流程和關鍵點:
傳統模式: 1.開發程式碼-》2.測試-》3.打生產包,寫部署文件,資料庫指令碼,其他環境要求-》4.實施人員安裝-》5.運維人員維護,備份資料-》6.再次迴圈1-5過程
這期間基本每個環節到下一步都會出現扯皮的情況,就是各種不行,各種驗證,各種開罵。環節多了,經手人就多,出問題機率就大
DevOps模式: 1.開發程式碼-》2.測試-》3.提交Git/SVN 自動構建生成Docker映象-》4.,自動釋出叢集 -》5迴圈3-4過程
這種模式,只關注2個重要點,第一個是程式碼,第二個是生產環境的共享儲存,尤其是在雲端計算環境下,就更爽,其他的伺服器,環節操作,都可以隨時銷燬,隨時重建。
這裡面需要重點強調下Docker的牛逼之處, 傳統模式,如果需要建立分散式叢集,那是需要幾個軟硬體專家,或利用各種中介軟體來實現,維護難度,企業成本不是一般的高,買軟體,加伺服器,甚至實施運維都是皇帝,公司惹不起,沒事給你來個刪庫毀叢集再跑路,哭都來不及。而Docker出現後,就把這部分群體徹底廢掉了,隨時隨地加伺服器,硬的,虛擬的,雲的,統統只要一行命令就搞定。隨便刪,隨便Down,隨便加,有了Docker都不怕。
5.開戰
講了這麼多,吃瓜群眾不樂意了,不是五軍之戰麼? 到底還打不打了? 不打退票~!
好,前面也說了,主站還是3軍 JAVA .Net PhP , 其實JAVA是不戰而勝, 所有的微服務Docker幾乎是為JAVA 量身定做的。剩下就看.Net 和PHP的生態鏈如何來PK了
從15年底,微軟開始親近開源社群來看,後續一系列動作,包括.Net Core 1.0發行,到現在2.0. 基本跨平臺還算可以, 尤其引入Nuget生態系統,可以說彌補了.net的很多不足, 整體生態鏈已經在建設,我認為可以達到JAVA的30%-35% ,而自動化構建本身也是.Net的強項,可以達到95%,唯一不足的是這個生態圈子以Win為主,無法跨平臺,Docker部分
我覺得微軟路子沒選對, 可能考慮到自家的生態系統,所以選擇了以Hyper-V作為Docker的核心,導致Linux中眾多的Docker服務,無法在Win下使用,其實微軟既然在新Win裡面嵌入了MiniLinux,完全可以以此為基礎,進行加強,形成一個混合的系統,連Docker也可以混合支援Linux。但是現在微軟在Docker的做法,可能真的就把Win系統生態鏈帶入絕境。 開始我也說了,未來是Docker的世界,這塊不做好,只有死路一條。
至於PHP,我已經找不到好的切入點了,因為基本的MVC,就和JAVA .Net相差一部分,而微服務的基本思想,也都會依託與MVC服務,所以這部分至關重要,成熟的MVC框架,包括其身後的生態系統支撐,才能形成可靠的微服務系統。 當然Docker的話PHP也是可以很快整合融入。 唯一不足的可能就在於微服務的基本基因較弱吧。至於服務發現,服務熔斷降級,全域性配置中心,統一閘道器,PHP貌似還沒有太成熟可靠的生態系統。
6.結論
基於16年17年的現狀來看, .Net已經在改變,但是沒有下狠心, PHP可能還在夢遊,沒有一個統一的組織來引導這個。所以這樣持續下去的話,1-3年內PHP先死,2-4年內.Net也僅僅是苟活著了。而市場80%可能都會轉入JAVA生態系統了。
7.總結
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
集中答疑一下吧:
1. 首先作為一個13年的ITer,各種開發語言還是都可以玩一下的,平時用的最多的還是JAVA和.Net ,這2個是真心喜歡,PHP偶爾也寫寫配合下大部隊,16年底我倒也不會說到底那個語言好壞,畢竟各有優勢,但是為什麼現在要給大家做一個預判告警,就是因為Docker+JAVA+微服務這3個傢伙到一起後,互相加成,從17年開始,就要徹底幹翻其他的語言了。從世界頂尖的公司全面微服務Docker化,到中小型網際網路公司陸續轉型微服務,可以看出這個大趨勢不可逆。 而Docker+.Net 生態鏈+ 微服務 和Docker +PHP生態鏈 +微服務,不但無法相互加成,還相互抵消。具體可以關注我的微博,後續慢慢給大家講。
2. 看了很多朋友的留言,只能說看懂的是真看懂了,不懂的是真不懂,半懂不懂的還堅持在自己的小天地裡面,我說過1-3年可以見分曉,很簡單的一個例子,我們不是僅僅把.Net Core跨平臺裝進Docker裡面,也不是想辦法把SQL Server裝到Docker裡面來刺激下G點。這都是玩具,真正要考慮的是一個全面的體系,我簡單說下問題,有疑惑的可以認真思考下
1. 公司都是小團隊,客戶,產品,變更快,2周出一個迭代版本,3周換一個大業務流,怎麼去響應?我說的是測試完成並且上線。 尤其是PHP
2. 公司購置伺服器,是一次買10臺?外加儲存陣列?還是用雲主機+共享儲存? 現在多數都會選擇後者,那麼問題來了,平時流量5臺足以,6月,8月電商日活動峰值需要30臺,怎麼辦?買不買?買多久?與此相關的訊息佇列MQ,Redis快取,MySql都需要同步伸縮,怎麼辦? 這時候有人要抬槓了, .Net 不行? PHP 不行? 從目前來講,還真不行,沒有SpringCloud生態支援,這兩個語言真玩不轉, 更可怕的是微軟現在僅僅把 .Net Core 開放到Linux平臺,就想讓Linux的Docker資源開放到Win平臺, 本身就會把Win生態鏈搞死, 想想把,我秒開30臺MySQL,微軟給我秒開30臺SQL Server試試? 所以微服務時代,微軟真心不適合, 連我也都放棄了最愛的Oracle,想想為什麼吧。
3. 有朋友說微服務是一種思想,和作業系統有毛線關係? Docker是一種容器,啥都能放,和你JAVA有毛線關係? 這個是正確的,分開看,的確是這樣的, 包括Docker其實也出來2年了,也沒有見驚天地泣鬼神的事件,但是一切的一切都在於 Docker +JAVA微服務化(SpringBoot)+微服務生態鏈(SpringCloud) 這3個在16年底,17年上半年相遇了(各自有成熟的發行版)從此才可以改變整個IT界。 瞬間讓秒部署成百上千臺伺服器成為一個SoEasy的事情。 .Net的生態圈可以?還是PHP可以? GO語言.NodeJS ? 身後沒有一個強大的生態鏈,真搞不定。
所以在這裡,我也不多說,請關注我後續的部落格發言,我給大家逐步講解分析。 Now,不理解的朋友,可以去搜下SpringBoot,SpringCloud,JAVA微服務,Docker,DevOps等實際的文章,園裡的大牛還是很多的,看下他們的理解和想法,你終究會明白,這IT界的天,是要變了。