摘要:編者按本文作者為,文章從程序架構(gòu)與系統(tǒng)的發(fā)展歷程出發(fā),逐步論證了為什么響應(yīng)式編程并非一時之勢,而是能帶來更快處理速度,更高硬件利用率的未來選擇。這就是摩爾定律所說的應(yīng)用程序。響應(yīng)式方法并非一時之勢它是編寫軟件的未來趨勢。
【編者按】本文作者為 David Buschman,文章從程序架構(gòu)與系統(tǒng)的發(fā)展歷程出發(fā),逐步論證了為什么響應(yīng)式編程并非一時之勢,而是能帶來更快處理速度,更高硬件利用率的未來選擇。文章系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。
這些年來,程序架構(gòu)和系統(tǒng)發(fā)生了不少變化。大部分情況下,這些變化都跟它們依托的硬件密切相關(guān)。軟件架構(gòu)到底是從何處起源,眾說紛紜,而且對構(gòu)架的實(shí)際構(gòu)成部分也有各種定義。本文將從整體化應(yīng)用的興起來展開討論。
摩爾定律當(dāng)你的所有資源都在單機(jī)上時,把所有的代碼存在一個地方很合理,而且是軟件設(shè)計(jì)的黃金標(biāo)準(zhǔn)。這種模式一直持續(xù)到 J2EE 時代,整體化應(yīng)用容器的出現(xiàn)。J2EE 的設(shè)計(jì)初衷就是為了能充分利用摩爾定律,因?yàn)檫@是變得越來越龐大的單核 CPU 系統(tǒng)的最佳設(shè)計(jì)方法。
摩爾定律指的是一個觀察發(fā)現(xiàn):在計(jì)算機(jī)硬件發(fā)展史上,密集的集成電路上的晶體管數(shù)量大概每兩年就會翻一倍。
這種構(gòu)架作為黃金標(biāo)準(zhǔn)持續(xù)了幾十年,因?yàn)槿绻覀円饬恳粋€系統(tǒng),就會往它身上“堆”更多硬件。添加更快的 CPU 和更多內(nèi)存來提高應(yīng)用程序的速度。這就是摩爾定律所說的應(yīng)用程序。
多核處理器的興起就在幾年前,CPU 制造商開始在 CPU 設(shè)計(jì)和速度方面遭遇瓶頸。他們怎么都沒辦法給單核 CPU 提速了。為了解決這個問題,芯片制造商開始“盡情發(fā)揮”,在一個芯片上加了好幾個核,以便獲得更多加速的能力。這意味著過去那種給 J2EE 應(yīng)用程序添加一個時鐘速度更高的 CPU 來提速的老方法行不通了。如果 CPU 無法再提速,應(yīng)用程序如何通過新一代的多核處理器來擴(kuò)大規(guī)模呢?必須改變現(xiàn)有的應(yīng)用程序設(shè)計(jì)和運(yùn)行方式,才能保持競爭力。
而且,事實(shí)證明,Java 企業(yè)級應(yīng)用程序的同步和阻塞 IO 構(gòu)架并不能充分利用這些新處理器的所有核。主要原因是它們的線程模型是“一個請求一個線程”,由于阻塞 I/O 命令,無法工作,這些線程要耗費(fèi)大量時間來“等待 IO”。
阿姆達(dá)爾定律這時候,阿姆達(dá)爾定律就開始發(fā)揮作用了。在目前的處理器中,該定律是現(xiàn)代新構(gòu)架的驅(qū)動力。現(xiàn)在有了更多核,就需要找到辦法來充分利用我們購置的這些 CPU。要實(shí)現(xiàn)這一點(diǎn),需要減少應(yīng)用程序使用非阻塞 I/O 命令帶來的“IO 等待”時間。這對過去幾十年的運(yùn)行模式而言是一個徹底的改變。
Java 企業(yè)級應(yīng)用程序和一個請求一個線程模型顯然,Java 企業(yè)構(gòu)架是在單核 CPU 盛行時設(shè)計(jì)的。它對發(fā)送到服務(wù)器的請求采用“一個請求一個線程”思維方式。一旦你的請求獲得一個線程,這個線程就會持續(xù)該請求的整個處理過程。在這種空間常用的函數(shù)庫甚至依賴這種模型才能使用,例如 Hibernate 和 Spring Security。兩個庫都使用“Thread-local”參數(shù)來保持“session”狀態(tài),因?yàn)樗鼈冎劳粋€線程會持續(xù)一個請求的整個周期。這樣做的重大不利影響就是“behavior”不能更改,否則就會破壞現(xiàn)在使用的大部分 JEE 程序的數(shù)據(jù)持久性和應(yīng)用安全代碼。
Lightbend 和響應(yīng)式宣言Lightbend 公司(前身是 Typesafe)發(fā)布了響應(yīng)式宣言,以記錄未來軟件設(shè)計(jì)時需求的變化,以及當(dāng)代多核 CPU 在未來世界的擴(kuò)展性。這種范式轉(zhuǎn)變太過巨大,因此很難簡單說清兩種構(gòu)架風(fēng)格之間的真正不同,就如同拿蘋果跟橙子做對比一樣。這種轉(zhuǎn)變在行業(yè)內(nèi)帶來了一些混亂,而且還會持續(xù)下去,直到完成過渡,找到讓多核 CPU 充分發(fā)揮潛力的方法。
該宣言列出了構(gòu)架系統(tǒng)時應(yīng)該著重考慮的四條原則,以便新系統(tǒng)能夠滿足所需的處理水平。其中有兩個概念直接適用于解決 Java 企業(yè)應(yīng)用程序的問題,就是非阻塞 I/O 和非同步處理。如果兩項(xiàng)都做好了,應(yīng)用程序可以占用更少的 CPU 和內(nèi)存需求,完成更多任務(wù),從而在任何一個系統(tǒng)、同樣的硬件基礎(chǔ)上,獲得比 Java 企業(yè)應(yīng)用程序更好的處理效果。下圖展示了這種并行處理的好處。
更快,更好,成本更低這種新的軟件架構(gòu)新方法帶來了更短的處理時間和更高的硬件利用率,從而降低了運(yùn)營成本?,F(xiàn)在運(yùn)行的很多大型系統(tǒng)都是基于響應(yīng)式宣言及其原則打造的。LinkedIn、Twitter、Facebook 等很多企業(yè)使用的系統(tǒng)都是基于非同步和非堵塞 I/O 技術(shù)架構(gòu),因此他們的應(yīng)用程序得以優(yōu)化,能夠最大化地利用硬件資源。這是打造可擴(kuò)展型應(yīng)用程序的新方法,而且正在迅速發(fā)展?!绊憫?yīng)式方法”并非一時之勢——它是編寫軟件的未來趨勢。
OneAPM能為您提供端到端的 Java 應(yīng)用性能解決方案,我們支持所有常見的 Java 框架及應(yīng)用服務(wù)器,助您快速發(fā)現(xiàn)系統(tǒng)瓶頸,定位異常根本原因。分鐘級部署,即刻體驗(yàn),Java 監(jiān)控從來沒有如此簡單。想閱讀更多技術(shù)文章,請?jiān)L問 OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客
原文地址: https://dzone.com/articles/why-reactive-programming-is-not-a-fad
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64803.html
摘要:與此同時,因新冠疫情的影響使得用戶對移動應(yīng)用程序的需求激增。調(diào)查報(bào)告顯示年移動應(yīng)用程序已經(jīng)產(chǎn)生了億美元的收入,預(yù)計(jì)到年將產(chǎn)生億美元的收入。 引言 計(jì)劃在2021年進(jìn)...
摘要:是前端開發(fā)領(lǐng)域新興的方法論體系,它繼承了與編程理念,在技術(shù)上有不少創(chuàng)新。但專利與開源協(xié)議是平行的兩個世界,改底層也不大容易解決問題。此外,要求在中結(jié)合各屬性的是否變化,判斷是否該觸發(fā)更新。 ReRest (Reactive Resource State Transfer) 是前端開發(fā)領(lǐng)域新興的方法論體系,它繼承了 MVVM 與 FRP 編程理念,在技術(shù)上有不少創(chuàng)新。本文從專利稿修改而來...
閱讀 3078·2021-11-24 10:34
閱讀 3334·2021-11-22 13:53
閱讀 2639·2021-11-22 12:03
閱讀 3605·2021-09-26 09:47
閱讀 3014·2021-09-23 11:21
閱讀 4812·2021-09-22 15:08
閱讀 3301·2021-07-23 10:59
閱讀 1267·2019-08-29 18:31