SpringCloudAlibaba(前傳):接到個(gè)任務(wù),php轉(zhuǎn)Java

近期手頭上的工作差不多完成了,可能作為數(shù)據(jù)開(kāi)發(fā)來(lái)說(shuō)最近的數(shù)據(jù)已足以支撐當(dāng)前業(yè)務(wù)所以沒(méi)有較多的工作安排。所以突然收到一個(gè)任務(wù),php轉(zhuǎn)Java。別誤會(huì),不是說(shuō)我的開(kāi)發(fā)語(yǔ)言,是企業(yè)的開(kāi)發(fā)語(yǔ)言要從php轉(zhuǎn)到Java。而企業(yè)內(nèi)主要語(yǔ)言是Java的有我跟另外以為老哥,而我近期的工作基本完成,這個(gè)偉大的任務(wù)就落到了我的頭上。

脫胎換骨的升級(jí)-更換開(kāi)發(fā)語(yǔ)言

可能有人見(jiàn)過(guò)這句話,這句話是<阿里技術(shù)這十年>上寫(xiě)關(guān)于淘寶網(wǎng)從php轉(zhuǎn)換為Java開(kāi)發(fā)語(yǔ)言時(shí)書(shū)中用做菜單的一句話。04年淘寶網(wǎng)完成了php到Java語(yǔ)言的過(guò)渡,操刀者是Sun公司的第一流專(zhuān)家。16年后有一家公司,也要進(jìn)行php到Java語(yǔ)言的過(guò)渡,操刀者是個(gè)新晉菜鳥(niǎo)。

java_vs_php.png

為什么要用Java替換PHP?

首先,我不是一個(gè)PHP的開(kāi)發(fā)者,而且更多的工作其實(shí)在數(shù)據(jù)上。ETL、數(shù)據(jù)分析、實(shí)時(shí)計(jì)算、離線計(jì)算等工作。所以對(duì)于php替換到Java我也難以說(shuō)出個(gè)1 2 3 來(lái)??赡芙谟龅降囊恍﹩?wèn)題是讓我們選擇替換的原因吧。

  • 沒(méi)有php sdk?
    對(duì)接某云廠商的產(chǎn)品,提供了python,Java等相關(guān)語(yǔ)言的sdk,但是沒(méi)有php的sdk。最終方案,使用Java做個(gè)gateway是解釋php的請(qǐng)求。
  • 性能問(wèn)題
    隨著業(yè)務(wù)的發(fā)展并發(fā)數(shù)量也越來(lái)越高,php的并發(fā)性能壓力也就越來(lái)越大。同時(shí)社區(qū)也沒(méi)有教好的對(duì)于該問(wèn)題的支持。
  • 生態(tài)問(wèn)題
    生態(tài)問(wèn)題其實(shí)跟第一個(gè)問(wèn)題是一樣的,據(jù)說(shuō)php的相關(guān)生態(tài)內(nèi)容比之于Java欠缺較多。特別是當(dāng)前都在微服務(wù)的場(chǎng)景下,對(duì)于php來(lái)說(shuō)不是很友好的。
  • 規(guī)范問(wèn)題
    PHP開(kāi)發(fā)不像是Java有嚴(yán)格的編碼規(guī)范,每個(gè)人一套自己的風(fēng)格,api管理也較為混亂。所以在代碼的維護(hù)上非常的麻煩,同時(shí)php不需要進(jìn)行編譯。在開(kāi)發(fā)時(shí)可能是優(yōu)點(diǎn),但是在企業(yè)應(yīng)用開(kāi)發(fā)中可能就是缺點(diǎn)。無(wú)法在早期直接看到錯(cuò)誤。
    其他...

為什么選擇Java?

當(dāng)前來(lái)實(shí)現(xiàn)后端開(kāi)發(fā)的語(yǔ)言較多。Java、PHP、Python和Go等都有一批的擁護(hù)者,在當(dāng)前的環(huán)境下常用的語(yǔ)言 PHP、Java、Python、Scala是公司的常用語(yǔ)言。其中PHP占的份額最高實(shí)現(xiàn)了所有的Web相關(guān)的功能。Java基本實(shí)現(xiàn)了一些gateway或者某些特殊的數(shù)據(jù)處理或其他項(xiàng)目,Python主要應(yīng)用與運(yùn)維、Scala則是大數(shù)據(jù)處理的常用語(yǔ)言。
主要考慮內(nèi)部成員的語(yǔ)言掌握情況與社區(qū)的活躍情況下,我們選擇了Java作為PHP的替代語(yǔ)言。

SpringCloud Alibaba

其實(shí)在做選型的時(shí)候是帶有一些需求的。所以在做選型的時(shí)候因?yàn)檫@些簡(jiǎn)單的需求傾向直接就選型了SpringCloudAlibaba。

  1. 配置中心&注冊(cè)中心
  2. 分布式鏈路跟蹤
  3. RPC

其實(shí)需求比較簡(jiǎn)單,但是都是經(jīng)過(guò)一次次的‘災(zāi)難’取得的教訓(xùn):

  1. 分布式鏈路跟蹤是客戶的請(qǐng)求到最終的一個(gè)錯(cuò)誤整體鏈路查詢(xún)所get到的
  2. 配置中心是某些大哥把配置錯(cuò)誤的提交到了github。導(dǎo)致...
  3. RPC較為簡(jiǎn)單,僅僅是想要把后臺(tái)的http請(qǐng)求替換為rpc

可選的方案可能很多,Dubbo,SpringCloud。SpringCloudAlibaba。基于內(nèi)部的情況,我們選型SpringCloudAlibaba。

跟隨阿里的腳步在國(guó)內(nèi)的開(kāi)發(fā)者圈子中是個(gè)主流,Dubbo開(kāi)源后持續(xù)性的火了很久。但是后來(lái)停止維護(hù)一段時(shí)間。SpringCloud生態(tài)也是較為強(qiáng)大的。SpringCloudAlibaba可以說(shuō)是整合了 Dubbo 的RPC與 SpringCloud的生態(tài)優(yōu)勢(shì)實(shí)現(xiàn)的。同時(shí)SpringCloudAlibaba的相關(guān)組件 Nacos與 sleuth 實(shí)現(xiàn)了配置&注冊(cè)中心和分布式鏈路跟蹤的需求。 Seata的分布式事物中間件也會(huì)成為主要的使用場(chǎng)景。Sentinel實(shí)現(xiàn)分布式系統(tǒng)的流控。

總結(jié)

Java用來(lái)替換PHP 我可能沒(méi)有什么發(fā)言權(quán),只是一個(gè)任務(wù)的執(zhí)行者。畢竟我不是從PHP的高并發(fā)環(huán)境下走到Java的微服務(wù)生態(tài)中。所以,總結(jié)的可能不是很完美。如果各位有任何其他的想法或者對(duì)于Java框架的選型問(wèn)題可以私信我,一起談?wù)凱HP轉(zhuǎn)換Java語(yǔ)言的問(wèn)題。 微信公眾號(hào):指尖數(shù)蟲(chóng)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容