java分布式系统开发_从微服务到分布式系统-Java开发人员生存指南
java分布式系統(tǒng)開發(fā)
感覺像是對(duì)微服務(wù)的炒作正在慢慢地落到實(shí)處,并且我們的行業(yè)開始意識(shí)到,根據(jù)微服務(wù)背后的體系結(jié)構(gòu)范式無法通過僅在現(xiàn)有組件之上公開一些HTTP接口來輕松創(chuàng)建一個(gè)系統(tǒng)。 。 我們似乎確實(shí)同意必須進(jìn)行服務(wù)優(yōu)化的基礎(chǔ)架構(gòu),文化和組織變革,以及最后但并非最不重要的是這些架構(gòu)的外部架構(gòu)或業(yè)務(wù)流程。 許多Java開發(fā)人員似乎仍在苦苦掙扎的部分是具體的系統(tǒng)體系結(jié)構(gòu),以及事實(shí)上,微服務(wù)只不過是分布式系統(tǒng)而已。 不幸的是,正是這些知識(shí)領(lǐng)域決定了項(xiàng)目失敗的成功。 對(duì)于一些背景知識(shí),我建議您閱讀
丹尼爾·布萊恩特(Daniel Bryant) 對(duì)Uwe和Adrian進(jìn)行的InfoQ精彩采訪 。
為什么再次使用微服務(wù)? 我不能只是高興地寫EJB和Servlet嗎?
微服務(wù)的關(guān)鍵思想是支持其余應(yīng)用程序環(huán)境的獨(dú)立性和快速可擴(kuò)展性的屬性。 此外,與基于應(yīng)用程序服務(wù)器的應(yīng)用程序相比,它們應(yīng)獨(dú)立擴(kuò)展并需要更少的資源。 在不斷變化的業(yè)務(wù)需求和不斷增長(zhǎng)的應(yīng)用程序客戶端數(shù)量的世界中,集中式基礎(chǔ)架構(gòu)的運(yùn)營(yíng)成本日益高昂,并朝著無法預(yù)測(cè)的負(fù)載或負(fù)載高峰擴(kuò)展。 如果所有人都被應(yīng)用服務(wù)器所困擾,那么就不會(huì)有Netflix,Twitter或Amazon。 所以:不。您不能只呆在原地。
微服務(wù)是分布式系統(tǒng)。 他們有什么特別之處?
分布式系統(tǒng)的原始定義是:“分布式系統(tǒng)是一種模型,其中位于聯(lián)網(wǎng)計(jì)算機(jī)上的組件通過傳遞消息來通信和協(xié)調(diào)其動(dòng)作?!?( Wikipedia )這正是基于微服務(wù)的體系結(jié)構(gòu)中發(fā)生的事情。 各個(gè)服務(wù)被部署到物理上在某個(gè)地方運(yùn)行的云實(shí)例,并且它們交換消息。 這與我們用來構(gòu)建集中式應(yīng)用程序的方式有很大的不同。 現(xiàn)在,我們不再擁有代表我們處理各種同步,事務(wù)和故障轉(zhuǎn)移方案的服務(wù)器,而是擁有獨(dú)立發(fā)展且相互獨(dú)立的獨(dú)立服務(wù)。 分布式計(jì)算存在一些獨(dú)特的基本挑戰(zhàn)。 其中包括容錯(cuò),同步,自我修復(fù),反壓,網(wǎng)絡(luò)分裂等。
分布式系統(tǒng)不是每個(gè)人都稱為React式系統(tǒng)嗎?
比這更復(fù)雜。 老實(shí)說,這些天“React性”這個(gè)詞本身有很多事情。 要使用單個(gè)微服務(wù)構(gòu)建應(yīng)用程序或系統(tǒng),您需要使用一組設(shè)計(jì)原則,使它們具有響應(yīng)性,彈性,彈性和消息驅(qū)動(dòng)性。 如果聽起來很熟悉,那可能是對(duì)的。 來自的定義
React式宣言 。 實(shí)現(xiàn)了《React式宣言》的四個(gè)特征的分布式系統(tǒng)就是所謂的
React系統(tǒng) 。 您可以在Jonas的書中閱讀有關(guān)React式微服務(wù)系統(tǒng)設(shè)計(jì)原理的更多信息。 Lagom框架是基于這些原則構(gòu)建的,但是讓我清楚一點(diǎn),您不一定需要特定的框架或產(chǎn)品來構(gòu)建此類應(yīng)用程序。 其中一些只是使您的地獄工作效率更高,而您的操作也會(huì)更有效。 休·麥基(Hugh McKee)有一本關(guān)于基于Actor的系統(tǒng)的設(shè)計(jì)原理的免費(fèi)書籍 。
構(gòu)建基于微服務(wù)的系統(tǒng)有哪些選擇?
我個(gè)人看到解決今天與微服務(wù)有關(guān)的問題的兩種不同趨勢(shì)。 首先是將問題歸結(jié)為業(yè)務(wù)流程或數(shù)據(jù)中心操作或云系統(tǒng),例如DC / OS,OpenShift,Cloudfoundry等。 第二種解決方案是在應(yīng)用程序或框架級(jí)別上本機(jī)處理它們(Akka,Vert.x等)。
每次服務(wù)一個(gè)容器,或者為什么Anaconda 不應(yīng)該 吞下馬匹。
讓我們更詳細(xì)地介紹第一種方法。 編寫微服務(wù),將其與運(yùn)行時(shí)一起打包在一個(gè)小容器中,然后將其推送到云中。 由于如今我們都是開發(fā)人員全力以赴,DevOps開發(fā)人員很容易創(chuàng)建基于云的運(yùn)行時(shí)所需的元信息。 多虧了我的引導(dǎo)性服務(wù),所有相關(guān)的監(jiān)視信息已經(jīng)公開,并且我可以輕松地檢測(cè)到失敗的服務(wù)并重新啟動(dòng)它們。 這肯定可以工作。 您甚至可以將功能齊全的應(yīng)用程序服務(wù)器用作微服務(wù)運(yùn)行時(shí)。 此外,還有許多魔術(shù)框架(NetflixOSS)可幫助應(yīng)對(duì)分布式系統(tǒng)的挑戰(zhàn)。 對(duì)我個(gè)人而言,缺點(diǎn)是在這種情況下與基礎(chǔ)架構(gòu)緊密耦合。 您的系統(tǒng)只能在所選平臺(tái)上運(yùn)行,而不能在其他平臺(tái)上運(yùn)行。 此外,他們建議您只需要使用容器來解決微服務(wù)領(lǐng)域中的所有問題。 回顧一下React式宣言,這些類型的系統(tǒng)將無法幫助您滿足在服務(wù)之間使用消息傳遞的要求。
沒有容器的微服務(wù)? 那就是沒有黃油的花生!
真正。 容器做得很好。 將整個(gè)堆棧以可控制的方式打包到可部署的單元中。 它們是基礎(chǔ)架構(gòu)級(jí)別的隔離機(jī)制。 擁有容器標(biāo)準(zhǔn)實(shí)際上可能是一件好事。 因此,請(qǐng)保留您的容器。 但是,您還需要更多。
因此,構(gòu)建具有復(fù)原力的自我修復(fù)系統(tǒng)的關(guān)鍵是允許對(duì)故障進(jìn)行以下處理:將故障包含在內(nèi),將其整化為消息,發(fā)送給其他組件(充當(dāng)主管)并從發(fā)生故障的組件外部的安全上下文中進(jìn)行管理。 在這里,以消息為驅(qū)動(dòng)力是推動(dòng)力:擺脫每個(gè)人都學(xué)會(huì)了遭受...或無視的強(qiáng)烈耦合,脆弱,深度嵌套的同步呼叫鏈。 想法是將故障管理與呼叫鏈分離,使客戶端從處理服務(wù)器故障的責(zé)任中解放出來。 沒有容器或業(yè)務(wù)流程編制工具可以幫助您將其集成。 您正在尋找事件源。 的
使用事件源的事件驅(qū)動(dòng)架構(gòu)的設(shè)計(jì)概念與微服務(wù)架構(gòu)模式非常吻合。
響應(yīng)式編程,系統(tǒng),流:不是全部一樣嗎?
React性已經(jīng)成為一個(gè)超負(fù)荷的術(shù)語,并且現(xiàn)在已經(jīng)與不同的人聯(lián)系在一起,與好幾個(gè)人相關(guān)聯(lián),例如“流”,“輕量級(jí)”和“實(shí)時(shí)”。 “響應(yīng)式編程通過性能和資源效率提高了開發(fā)人員在內(nèi)部邏輯和數(shù)據(jù)流管理的組件級(jí)別上的生產(chǎn)力。 Reactive Systems通過系統(tǒng)級(jí)別的彈性和彈性為架構(gòu)師和DevOps提供生產(chǎn)力,以構(gòu)建Cloud Native或其他大規(guī)模分布式系統(tǒng)。 您應(yīng)該真正花時(shí)間閱讀一下JonasBonér和Viktor Klang如何解釋他們之間的個(gè)體差異 。
在哪里可以了解有關(guān)如何設(shè)計(jì)React式微服務(wù)的更多信息?
詹姆斯·羅珀(James Roper)在去年的React式峰會(huì)上做了精彩的演講,并親身研究了系統(tǒng)的體系結(jié)構(gòu)(包括數(shù)據(jù)流,所使用的通信類型以及將系統(tǒng)分解為組件的方式)如何需要在將整體分解為基于React式微服務(wù)的系統(tǒng)時(shí)會(huì)發(fā)生變化。
我在CJUG上進(jìn)行了有關(guān)Java開發(fā)人員的CQRS的演講 ,向您進(jìn)行了介紹。 如果您有感興趣的特定主題,請(qǐng)?jiān)谠u(píng)論中讓我知道。
為您提供更多閱讀
- JonasBonér和Viktor Klang 在20分鐘內(nèi)介紹了React式編程與React式系統(tǒng)
- Konrad最近進(jìn)行了一次網(wǎng)絡(luò)研討會(huì),內(nèi)容涉及Java 8中的Aactive Streams,Alpakka和Kafka中的Reactive Integrations。
- 傳統(tǒng)Java企業(yè)的React式系統(tǒng)設(shè)計(jì)基礎(chǔ)
- Duncan DeVore 在不到12分鐘的時(shí)間內(nèi)進(jìn)行了React式架構(gòu),設(shè)計(jì)和編程
翻譯自: https://www.javacodegeeks.com/2017/02/microservices-distributed-systems-survival-guide-java-developers.html
java分布式系統(tǒng)開發(fā)
總結(jié)
以上是生活随笔為你收集整理的java分布式系统开发_从微服务到分布式系统-Java开发人员生存指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何选择合适的电脑电源电脑电源应该如何选
- 下一篇: java web源代码_检测Java W