前世今生
Java誕生於90年代,憑藉面向對象、跨平臺、GUI、無需手動控制內存回收等優勢,簡單一上手早就全球Javaer人羣衆多
憑藉Pivotal
推出Spring
、SpringBoot
框架,Javaer則在業務層面享受到了簡單快捷、易擴展等特性。讓其他語言的開發者羨慕,Spring
思想也給其他語言框架開發借鑑。
SOA(服務治理)
當企業規模不斷擴大,分散在各個團隊組織中大量應用服務交互沒有標準化、沒有統一監控治理,支離破碎的、混亂不堪的服務爲未來的開發埋下大量風險。
這時候SOA
橫空出世,滿足企業標準化、集中化管理的訴求,大量企業紛紛更新改造,爲Javaer
帶來了大量重構工作,也爲業務開發爲主的Javaer
積累了系統架構知識,在前後端沒分離的以前,中小公司Javaer
後端人員對業務、前端、後端、運維全部參與,現今很多架構師主要是後端開發出身。
ESB
總線基於SOA
架構更進一步擴展,使用WebService
、XML
、Web
服務等技術開發。它是所有應用的總線,集中化管理和簡化應用之間的集成,以多種的開放協議(協議轉換)標準爲基礎來支持應用之間通過消息、事件和服務級別上動態的交互,是一種在鬆散耦合的服務和應用之間標準的集成方式。
微服務春風
SOA
雖然解決服務治理,但是中心化的缺陷,所有服務必須接入ESB
總線,單點故障,性能差。
Martin Fowler
提出了微服務
的概念,大型單體維護地獄,發佈測試困難,擴展性差,微服務
提出了設想,但對於微服務怎麼劃分卻沒有給出明顯的邊界,這不要緊實踐出真理。
微服務以輕量的Http
協議,跨語言,松耦合,強調獨立,提供統一註冊發現、熔斷限流、網關、認證授權等基礎設施,但這對於中小型公司來說,開發成本太大。
Netflix
就實踐出自己一套方法論,再加上Spring Cloud
積極維護,微服務成爲一套銀彈,遍地開花,面試必問微服務,Javaer
掌控雷電。
但是微服務拆到那個粒度,服務之間怎麼交互,數據一致性怎麼保證,還是沒找到一套方法論,但是部分公司服務拆的太細,團隊沒拆,服務拆分先行,服務之間存在關聯,又引入BFF
聚合服務層,DDD
被翻出來當做服務拆分銀彈,DDD
明確了領域的邊界,邊界交互的方式,子領域聚合根,那就以此來劃分,以此領域事件來通信?相信完全落地DDD
還是少數,作爲企業項目穩定,技術也是演進式的,太激進的技術對於企業還是開發來說成本太高、試錯風險太大。
不考慮場景,提出解決方法是不負責任的,微服務不是銀彈
大中臺戰略
阿里提出大中臺戰略
,其實在企業內部技術部門已經服務化,獨立無耦合已經拆分,這個中臺戰略是要跨部門組織協調,企業內部不同團隊負責的業務線不同,業務模式也不同,這要強行中臺化,我覺得是兩級化理解了上層的意思,所謂的複用,是有前提,業務模式一樣的,多部門利益是一致的。
雖然阿里業務部門的中臺化無法借鑑,但是對於數據、技術領域的中臺化確實可以落地的,畢竟企業內部技術棧、軟件開發的流程都差不多。
時代寵兒-雲原生
OpenStack
標準化困難、部署複雜,被很多企業詬病 Docker
就像Spring
幹掉了EJB
,年邁的老者面對年輕人,只能暗罵年輕人不講武德。Docker
的簡單和留下也讓它成爲事實上的容器標準,但是Docker
沒有對多機統一管理、交互的方法,之後Docker Swarm
的強硬也讓雲大廠拋棄Docker
,反而擁抱Google
開源的kubernetes
產品,Google
贏得了勝利果實,是容器頂層標準制定者。
有了物理機虛擬化、多機多數據中心基礎設施,企業技術中臺落地事半功倍,Javaer
從運維中釋放出來,只要完成鏡像的製作,工作就完成了。
像SpringCloud
的API網關,熔斷、限流、東西向流量、服務註冊發現還是在應用層做,儘管一般以SDK
或Agent
探針接入,但是事實上對於代碼上還是有侵入,而且SpringCloud
體系只對Javaer
友好,企業內部其他語言需要自己自研。
Service Mesh
統一接管微服務基礎設施,在平臺層做統一處理,屏蔽底層應用差異,讓其他語言開發者也能享受服務網格的利好,企業招聘也可以更加多樣化,開發不侷限於語言,再合適的場景引入適合技術棧。但Mesh
本身對性能有一定的影響,需要根據場景定製化,多一層代理,對性能損耗是必然,要看業務容忍度。
Javaer
突然發現以前靠着微服務的雷電不管用,統一被平臺接管,Javaer
在架構上能做的事情已經不多,Java
出了JDK17
還是沒解決協程,ZGC
生產應用有待考證。
Java
兩個未來發展方向,Loom
協程和graalvm
,但是這些都對業務開發來說並不能成爲競爭力,畢竟面試並不考業務,可以發力一地方就是在協程難產時,掌握Reactor
編程技巧,但是部分開源框架對其支持落後,改變編程模型有一點難度,騰訊和阿里的JDK
都支持了無侵入協程,在JVM
層面優化部分阻塞代碼。
函數即是正義 - FaaS
前面graalvm
語言是不懂的,二進制才原汁原味,減少溝通成本,參考類似於DAG
流程編排,事件驅動,函數化,SpringBoot
太重了!
自宮 - 低代碼平臺
有幸接觸用過一段時間低代碼平臺,統一標準,抽象業務模型,元數據管理,區分推拉,如果業務足夠簡單,不需要寫代碼,以後不會再存在開發和產品對立、撕逼場面了,產品經理就是設計和開發,通過設計來解決簡化複雜業務
八股文,內卷
在面試這個事情上,在國內人供過於求背景下,產業轉型緩慢,高新技術崗位缺乏,一旦有高薪行業,大量人湧入,不斷降低行業人員紅利,藍海瞬間紅海。
在經濟下行週期中,企業崗位不再新增崗位,甚至減少崗位,從業人員不變的情況,211/985
碩士以前想都不敢想,企業現在還可以挑着選。
八股文、LeeCode應運而生,Javaer
作爲業務開發,在工作不可能想做什麼就做什麼,你能力行企業不會允許,穩定大於一切,學歷和麪試題不過是爲了減少面試者,企業管理員不能花那麼多時間對所有面試一個個面試,一刀切是無奈之舉,這是對面試者和麪試官的雙刃劍,因爲行業一旦發展惡性循環,你處於旋渦中,必然要被捲入,跟着內卷,跟着八股文,成爲受害者。下班之後照着書抄着無意義的博客,Copy
別人代碼倉庫改下包名的開源,無意義的工作並不會增加產出,但會擠壓你的空餘時間,畢竟996
的開源都不可持續的,希望大家能共同維護好環境。