java服務匯流排(服務匯流排和數據匯流排)

  • 1、如何用java 建立一個分散式系統
  • 2、什麼是ESB(企業服務匯流排)
  • 3、java用什麼伺服器
  • 4、JavaEE性能,與外部系統集成過多或過少怎麼解決?
  • 5、java微服務和分散式的區別有哪些?
  • 6、JAVA的基礎知識

分散式架構的演進

系統架構演化歷程-初始階段架構

初始階段 的小型系統 應用程序、資料庫、文件等所有的資源都在一台伺服器上通俗稱為LAMP

特徵:

應用程序、資料庫、文件等所有的資源都在一台伺服器上。

描述:

通常伺服器操作系統使用Linux,應用程序使用PHP開發,然後部署在Apache上,資料庫使用MySQL,彙集各種免費開源軟體以及一台廉價伺服器就可以開始系統的發展之路了。

系統架構演化歷程-應用服務和數據服務分離

好景不長,發現隨著系統訪問量的再度增加,webserver機器的壓力在高峰期會上升到比較高,這個時候開始考慮增加一台webserver

特徵:

應用程序、資料庫、文件分別部署在獨立的資源上。

描述:

數據量增加,單台伺服器性能及存儲空間不足,需要將應用和數據分離,並發處理能力和數據存儲空間得到了很大改善。

系統架構演化歷程-使用緩存改善性能

特徵:

資料庫中訪問較集中的一小部分數據存儲在緩存伺服器中,減少資料庫的訪問次數,降低資料庫的訪問壓力。

描述:

系統訪問特點遵循二八定律,即80%的業務訪問集中在20%的數據上。

緩存分為本地緩存和遠程分散式緩存,本地緩存訪問速度更快但緩存數據量有限,同時存在與應用程序爭用內存的情況。

系統架構演化歷程-使用應用伺服器集群

在做完分庫分表這些工作後,資料庫上的壓力已經降到比較低了,又開始過著每天看著訪問量暴增的幸福生活了,突然有一天,發現系統的訪問又開始有變慢的趨勢了,這個時候首先查看資料庫,壓力一切正常,之後查看webserver,發現apache阻塞了很多的請求,而應用伺服器對每個請求也是比較快的,看來 是請求數太高導致需要排隊等待,響應速度變慢

特徵:

多台伺服器通過負載均衡同時向外部提供服務,解決單台伺服器處理能力和存儲空間上限的問題。

描述:

使用集群是系統解決高並發、海量數據問題的常用手段。通過向集群中追加資源,提升系統的並發處理能力,使得伺服器的負載壓力不再成為整個系統的瓶頸。

系統架構演化歷程-資料庫讀寫分離

享受了一段時間的系統訪問量高速增長的幸福後,發現系統又開始變慢了,這次又是什麼狀況呢,經過查找,發現資料庫寫入、更新的這些操作的部分資料庫連接的資源競爭非常激烈,導致了系統變慢

特徵:

多台伺服器通過負載均衡同時向外部提供服務,解決單台伺服器處理能力和存儲空間上限的問題。

描述:

使用集群是系統解決高並發、海量數據問題的常用手段。通過向集群中追加資源,使得伺服器的負載壓力不在成為整個系統的瓶頸。

系統架構演化歷程-反向代理和CDN加速

特徵:

採用CDN和反向代理加快系統的 訪問速度。

描述:

為了應付複雜的網路環境和不同地區用戶的訪問,通過CDN和反向代理加快用戶訪問的速度,同時減輕後端伺服器的負載壓力。CDN與反向代理的基本原理都是緩存。

系統架構演化歷程-分散式文件系統和分散式資料庫

隨著系統的不斷運行,數據量開始大幅度增長,這個時候發現分庫後查詢仍然會有些慢,於是按照分庫的思想開始做分表的工作

特徵:

資料庫採用分散式資料庫,文件系統採用分散式文件系統。

描述:

任何強大的單一伺服器都滿足不了大型系統持續增長的業務需求,資料庫讀寫分離隨著業務的發展最終也將無法滿足需求,需要使用分散式資料庫及分散式文件系統來支撐。

分散式資料庫是系統資料庫拆分的最後方法,只有在單表數據規模非常龐大的時候才使用,更常用的資料庫拆分手段是業務分庫,將不同的業務資料庫部署在不同的物理伺服器上。

系統架構演化歷程-使用NoSQL和搜索引擎

特徵:

系統引入NoSQL資料庫及搜索引擎。

描述:

隨著業務越來越複雜,對數據存儲和檢索的需求也越來越複雜,系統需要採用一些非關係型資料庫如NoSQL和分資料庫查詢技術如搜索引擎。應用伺服器通過統一數據訪問模塊訪問各種數據,減輕應用程序管理諸多數據源的麻煩。

系統架構演化歷程-業務拆分

特徵:

系統上按照業務進行拆分改造,應用伺服器按照業務區分進行分別部署。

描述:

為了應對日益複雜的業務場景,通常使用分而治之的手段將整個系統業務分成不同的產品線,應用之間通過超鏈接建立關係,也可以通過消息隊列進行數據分發,當然更多的還是通過訪問同一個數據存儲系統來構成一個關聯的完整系統。

縱向拆分:

將一個大應用拆分為多個小應用,如果新業務較為獨立,那麼就直接將其設計部署為一個獨立的Web應用系統

縱向拆分相對較為簡單,通過梳理業務,將較少相關的業務剝離即可。

橫向拆分:將復用的業務拆分出來,獨立部署為分散式服務,新增業務只需要調用這些分散式服務

橫向拆分需要識別可復用的業務,設計服務介面,規範服務依賴關係。

系統架構演化歷程-分散式服務

特徵:

公共的應用模塊被提取出來,部署在分散式伺服器上供應用伺服器調用。

描述:

隨著業務越拆越小,應用系統整體複雜程度呈指數級上升,由於所有應用要和所有資料庫系統連接,最終導致資料庫連接資源不足,拒絕服務。

Q:分散式服務應用會面臨哪些問題?

A:

(1) 當服務越來越多時,服務URL配置管理變得非常困難,F5硬體負載均衡器的單點壓力也越來越大。

(2) 當進一步發展,服務間依賴關係變得錯蹤複雜,甚至分不清哪個應用要在哪個應用之前啟動,架構師都不能完整的描述應用的架構關係。

(3) 接著,服務的調用量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什麼時候該加機器?

(4) 服務多了,溝通成本也開始上升,調某個服務失敗該找誰?服務的參數都有什麼約定?

(5) 一個服務有多個業務消費者,如何確保服務質量?

(6) 隨著服務的不停升級,總有些意想不到的事發生,比如cache寫錯了導致內存溢出,故障不可避免,每次核心服務一掛,影響一大片,人心慌慌,如何控制故障的影響面?服務是否可以功能降級?或者資源劣化?

Java分散式應用技術基礎

分散式服務下的關鍵技術:消息隊列架構

消息對列通過消息對象分解系統耦合性,不同子系統處理同一個消息

分散式服務下的關鍵技術:消息隊列原理

分散式服務下的關鍵技術:服務框架架構

服務框架通過介面分解系統耦合性,不同子系統通過相同的介面描述進行服務啟用

服務框架是一個點對點模型

服務框架面向同構系統

適合:移動應用、互聯網應用、外部系統

分散式服務下的關鍵技術:服務框架原理

分散式服務下的關鍵技術:服務匯流排架構

服務匯流排同服務框架一樣,均是通過介面分解系統耦合性,不同子系統通過相同的介面描述進行服務啟用

服務匯流排是一個匯流排式的模型

服務匯流排面向同構、異構系統

適合:內部系統

分散式服務下的關鍵技術:服務匯流排原理

分散式架構下系統間交互的5種通信模式

request/response模式(同步模式):客戶端發起請求一直阻塞到服務端返回請求為止。

Callback(非同步模式):客戶端發送一個RPC請求給伺服器,服務端處理後再發送一個消息給消息發送端提供的callback端點,此類情況非常合適以下場景:A組件發送RPC請求給B,B處理完成後,需要通知A組件做後續處理。

Future模式:客戶端發送完請求後,繼續做自己的事情,返回一個包含消息結果的Future對象。客戶端需要使用返回結果時,使用Future對象的.get(),如果此時沒有結果返回的話,會一直阻塞到有結果返回為止。

Oneway模式:客戶端調用完繼續執行,不管接收端是否成功。

Reliable模式:為保證通信可靠,將藉助於消息中心來實現消息的可靠送達,請求將做持久化存儲,在接收方在線時做送達,並由消息中心保證異常重試。

五種通信模式的實現方式-同步點對點服務模式

五種通信模式的實現方式-非同步點對點消息模式1

五種通信模式的實現方式-非同步點對點消息模式2

五種通信模式的實現方式-非同步廣播消息模式

分散式架構下的服務治理

服務治理是服務框架/服務匯流排的核心功能。所謂服務治理,是指服務的提供方和消費方達成一致的約定,保證服務的高質量。服務治理功能可以解決將某些特定流量引入某一批機器,以及限制某些非法消費者的惡意訪問,並在提供者處理量達到一定程度是,拒絕接受新的訪問。

基於服務框架Dubbo的服務治理-服務管理

可以知道你的系統,對外提供了多少服務,可以對服務進行升級、降級、停用、權重調整等操作

可以知道你提供的服務,誰在使用,因業務需求,可以對該消費者實施屏蔽、停用等操作

基於服務框架Dubbo的服務治理-服務監控

可以統計服務的每秒請求數、平均響應時間、調用量、峰值時間等,作為服務集群規劃、性能調優的參考指標。

基於服務框架Dubbo的服務治理-服務路由

基於服務框架Dubbo的服務治理-服務保護

基於服務匯流排OSB的服務治理-功能介紹

基於服務匯流排OSB的服務治理

Q:Dubbo到底是神馬?

A:

淘寶開源的高性能和透明化的RPC遠程調用服務框架

SOA服務治理方案

Q:Dubbo原理是?

A:

-結束-

ESB全稱為Enterprise Service Bus,即企業服務匯流排。它是傳統中間件技術與XML、Web服務等技術結合的產物。ESB提供了網路中最基本的連接中樞,是構築企業神經系統的必要元素。ESB的出現改變了傳統的軟體架構,可以提供比傳統中間件產品更為廉價的解決方案,同時它還可以消除不同應用之間的技術差異,讓不同的應用伺服器協調運作,實現了不同服務之間的通信與整合。從功能上看,ESB提供了事件驅動和文檔導向的處理模式,以及分散式的運行管理機制,它支持基於內容的路由和過濾,具備了複雜數據的傳輸能力,並可以提供一系列的標準介面。

Java 的應用伺服器很多,從功能上分為兩大類,JSP 伺服器和 Java EE 伺服器,也可分其他小類。

JBoss AS

在J2EE應用伺服器領域,Jboss是發展最為迅速的應用伺服器。由於Jboss遵循商業友好的LGPL授權分發,並且由開源社區開發,這使得Jboss廣為流行。另外,Jboss應用伺服器還具有許多優秀的特質。

其一,它將具有革命性的JMX微內核服務作為其匯流排結構;

其二,它本身就是面向服務的架構(Service-Oriented Architecture,SOA);

其三,它還具有統一的類裝載器,從而能夠實現應用的熱部署和熱卸載能力。因此,它是高度模塊化的和松耦合的。Jboss用戶的積極反饋告,Jboss應用伺服器是健壯的、高質量的,而且還具有良好的性能。  為滿足企業級市場日益增長的需求,Jboss公司從2003年開始就推出了24*7、專業級產品支持服務。同時,為拓展Jboss的企業級市場,Jboss公司還簽訂了許多渠道合作夥伴。比如,Jboss公司同HP、Novell、Computer Associates、Unisys等都是合作夥伴。

JOnAS

JOnAS是一個開放源代碼的J2EE實現,在ObjectWeb協會中開發。整合了Tomcat或Jetty成為它的Web容器,以確保符合Servlet 2.3和JSP 1.2規範。JOnAS伺服器依賴或實現以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail 。

JFox3.0

JFox 是 Open Source Java EE Application Server,致力於提供輕量級的Java EE應用伺服器,從3.0開始,JFox提供了一個支持模塊化的MVC框架,以簡化EJB以及Web應用的開發! 如果您正在尋找一個簡單、輕量、高效、完善的Java EE開發平台

原因是高分散式系統,典型案例是電信IT環境。

在這個環境中,一個中間件領域(例如,服務匯流排)很少會做所有的工作,而僅僅是把一些業務「委託」給其他部分,例如產品質量,客戶資料和訂單管理,到其他JavaEE中間件平台或遺留系統中,如支持各種不同的負載類型和通信協議的大型機。

這樣的外部系統調用意味著客戶端的JavaEE應用程序觸發創建或重用套接字鏈接從外部系統中讀寫數據。根據業務流程的實施和實現可以配置成同步調用或非同步調用。需要注意的是,響應時間會根據外部系統的穩定狀況進行改變,所以通過適當的使用超時來保護JavaEE應用程序和中間件也是非常重要的。

這個問題已經收藏了一個多月了,一直在考慮如何回答這個問題,總結了很長時間終於有了一些感悟(之前一直都是只可意會不可言傳的感覺),和大家分享一下,如果有不同的建議,歡迎大家留言指正。

分散式和微服務

首先 ,我認為微服務就是分散式框架的一種。

分散式的思想就是把一個系統的不同模塊,部署在不同的伺服器上,以應對高並發的問題。

SOA是一種分散式架構,把業務系統分成多個子系統,提供不同的服務,再通過服務組合、編排實現業務流程;通常在SOA架構中,ESB企業服務匯流排扮演了重要的角色。

微服務是SOA的升華,如果非要說點兒不同的,那麼微服務更加強調服務的細分和專業,去ESB匯流排、去中心化,部署粒度更細,服務擴展更靈活。

微服務不只是技術架構

很多同學一說微服務,就說這是一種技術架構,有的推薦使用Dubbo,有的推薦使用Spring Cloud。

我認為,微服務不單單是一種技術架構,也涉及到了管理、組織架構。

大多數的公司,需求、開發、測試、運維都是獨立的團隊,這實際上是有悖於微服務快速迭代的思想;在微服務的架構下,一個服務應該是由一個團隊全權負責的。

不過組織架構方面的事情,真的不是我們能說了算的。

必須要用微服務?

我覺得沒有必要為了微服務,而微服務;有的公司把服務拆分,但是資料庫依然是同一個庫,依然是一個項目直接掉另外一個項目的介面,然後對外就宣稱完成了微服務的改造…

架構設計還是要根據需求背景、團隊開發能力、軟硬體實力綜合來考慮。

好的架構是可以進化的,而不是一步到位建成的。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。

21.請描述一下JSP中forward與include的區別與聯繫

答: forward 是跳轉A變成B.include是包含,A包含B.A變成B時,B會無法應用A中的屬性方法等.A包含B時,B可以應用A中的屬性方法等.(A與B指代”JSP頁面”).

22. 請描述一下Cookie與Session的關係, 並請解釋一下如何實現Session的持久化?

答:Cookie與Session 都是用來存數據的(…呵呵)Cookie是存在用戶這一端而Session 是存在伺服器這一端.

如果用戶這端允許Cookie功能並指定Cookie的生命周期則Cookie可在周期內保存.Session則伺服器關閉或者Session被關閉時(比如用戶登出後Session自動銷毀等等情況)數據就消失.

Session的持久化

1.用Cookie來保存.

2.用資料庫來保存.

3.配置conf/xml.

23. 請描述一下解析XML有哪些方法?請分別解釋一下DTD和XML Schema以及二者之間的聯繫與區別?什麼是XSL、XSLT、XPath?

答:主要有 dom解析 和 sax解析.DTD和XML Schema 都是實現對XML文件的約束(XML文件格式規則).DTD用來說明XML文檔格式,Schema用來說明數據文件格式。XSL、XSLT、XPath三者都是基於XML的語言.

24. 請描述一下WSDL 、UDDI、SOAP的含義及關係

答:WSDL是網頁服務描述語言.UDDI是統一描述、發現和集成協議.SOAP是簡單對象訪問協議.

簡單的說就是上面三者都是讓各種系統與各種系統之間更容易的交換信息\理解信息.

25. 請解釋以下名詞: SOA 、ESB 、JCA、SDO

答:SOA 是面向服務的架構.ESB是企業服務匯流排.JCA是J2EE平台上連接傳統系統的一個技術規範.SDO是SOA的一個規範.

PS:還不快快給分!

原創文章,作者:TGJHT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126531.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TGJHT的頭像TGJHT
上一篇 2024-10-03 23:08
下一篇 2024-10-03 23:08

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29

發表回復

登錄後才能評論