近期手頭上的工作差不多完成了,可能作爲數據開發來說最近的數據已足以支撐當前業務所以沒有較多的工作安排。所以突然收到一個任務,php轉Java。別誤會,不是說我的開發語言,是企業的開發語言要從php轉到Java。而企業內主要語言是Java的有我跟另外以爲老哥,而我近期的工作基本完成,這個偉大的任務就落到了我的頭上。
脫胎換骨的升級-更換開發語言
可能有人見過這句話,這句話是<阿里技術這十年>上寫關於淘寶網從php轉換爲Java開發語言時書中用做菜單的一句話。04年淘寶網完成了php到Java語言的過渡,操刀者是Sun公司的第一流專家。16年後有一家公司,也要進行php到Java語言的過渡,操刀者是個新晉菜鳥。
爲什麼要用Java替換PHP?
首先,我不是一個PHP的開發者,而且更多的工作其實在數據上。ETL、數據分析、實時計算、離線計算等工作。所以對於php替換到Java我也難以說出個1 2 3 來。可能近期遇到的一些問題是讓我們選擇替換的原因吧。
-
沒有php sdk?
對接某雲廠商的產品,提供了python,Java等相關語言的sdk,但是沒有php的sdk。最終方案,使用Java做個gateway是解釋php的請求。 -
性能問題
隨着業務的發展併發數量也越來越高,php的併發性能壓力也就越來越大。同時社區也沒有較好的對於該問題的支持。 -
生態問題
生態問題其實跟第一個問題是一樣的,據說php的相關生態內容比之於Java欠缺較多。特別是當前都在微服務的場景下,對於php來說不是很友好的。 -
規範問題
PHP開發不像是Java有嚴格的編碼規範,每個人一套自己的風格,api管理也較爲混亂。所以在代碼的維護上非常的麻煩,同時php不需要進行編譯。在開發時可能是優點,但是在企業應用開發中可能就是缺點。無法在早期直接看到錯誤。
其他...
爲什麼選擇Java?
當前來實現後端開發的語言較多。Java、PHP、Python和Go等都有一批的擁護者,在當前的環境下常用的語言 PHP、Java、Python、Scala是公司的常用語言。其中PHP佔的份額最高實現了所有的Web相關的功能。Java基本實現了一些gateway或者某些特殊的數據處理或其他項目,Python主要應用於運維、Scala則是大數據處理的常用語言。
主要考慮內部成員的語言掌握情況與社區的活躍情況下,我們選擇了Java作爲PHP的替代語言。
SpringCloud Alibaba
其實在做選型的時候是帶有一些需求的。所以在做選型的時候因爲這些簡單的需求傾向直接就選型了SpringCloudAlibaba。
-
配置中心&註冊中心 -
分佈式鏈路跟蹤 -
RPC
其實需求比較簡單,但是都是經過一次次的‘災難’取得的教訓:
-
「分佈式鏈路跟蹤是客戶的請求到最終的一個錯誤整體鏈路查詢所get到的」 -
「配置中心是某些大哥把配置錯誤的提交到了github。導致...」 -
「RPC較爲簡單,僅僅是想要把後臺的http請求替換爲rpc」
可選的方案可能很多,Dubbo,SpringCloud。SpringCloudAlibaba。基於內部的情況,我們選型SpringCloudAlibaba。
跟隨阿里的腳步在國內的開發者圈子中是個主流,Dubbo開源後持續性的火了很久。但是後來停止維護一段時間。SpringCloud生態也是較爲強大的。SpringCloudAlibaba可以說是整合了 Dubbo 的RPC與 SpringCloud的生態優勢實現的。同時SpringCloudAlibaba的相關組件 Nacos與 sleuth 實現了配置&註冊中心和分佈式鏈路跟蹤的需求。Seata的分佈式事物中間件也會成爲主要的使用場景。Sentinel實現分佈式系統的流控。
總結
Java用來替換PHP 我可能沒有什麼發言權,只是一個任務的執行者。畢竟我不是從PHP的高併發環境下走到Java的微服務生態中。所以,總結的可能不是很完美。如果各位有任何其他的想法或者對於Java框架的選型問題可以私信我,一起談談PHP轉換Java語言的問題。 微信公衆號:指尖數蟲
本文分享自微信公衆號 - 指尖數蟲(zhijianshuchong)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。