輕鬆理解Spring、RPC、SOA、集羣、分佈式、kafka相關概念

 

1、理解 Spring

Spring 是一個開源的輕量級的應用開發框架,目的用於簡化企業級應用程序開發,減少侵入。控制反轉是Spring框架的一個核心設計模式,可以將組件的耦合度降至最低,即解耦。便於系統日後的維護和升級。Spring 爲系統提供了一個整體的解決方案,開發者可以利用它本身提供的功能外,也可以與第三框框架與技術整合應用,可以自由選擇哪種技術進行開發。Spring 框架提供約20個模塊,可以根據應用程序的要求來使用。

                                                        Spring 體系結構

核心容器 由 spring-core,spring-beans,spring-context,spring-context-support 和 spring-expression(spEl) 等模塊組成,他們的細節如下:

1)spring-core 模塊提供了框架的基礎部分,包括 IOC 和依賴注入功能;

2)spring-beans 模塊提供 BeanFactory,工廠模塊的微妙實現,它移除了編碼式單例的需要,並且可以把配置和依賴從實際編碼邏輯中解耦;

3)context 模塊建立是在由 core 和 beans 模塊的基礎上建立起來的,它以一種類似於 JNDI 註冊的方式訪問對象。Context 模塊繼承自 Bean 模塊,並且添加了國際化、事件傳播、資源加載和透明的創建上下文等功能。Context 模塊也支持 Java EE 的功能,比如 EJB、JVM 和遠程調用等。 ApplicationContext 接口是 Context 模塊的焦點。spring-context-support 提供了對第三方庫集成到 Spring 上下文的支持,比如緩存(EhCache、Guava、JCache)、郵件(JavaMail)、調度(CommonJ、Quartz)、模塊引擎(FreeMarker、JasperReports、Velocity)等。

4)spring-expression 模塊提供了強大的表達式語言,用於在運行時查詢和操作對象圖

 

數據訪問/集成層 包括 JDBC(Java Data Base Connectivity),ORM(Object Relational Mapping),OXM(Object XML Mapping),JMS(Java Message Service)和事務處理模塊,它們的細節如下:

1)JDBC 模塊提供了 JDBC 抽象層,它消除了冗長的 JDBC 編碼和對數據庫供應商特定錯誤代碼的解析;

2)ORM 模塊提供了對流行的對象關係映射 API 的繼承,包括 JPA、JDO 和 Hibernate 等。通過此模塊可以讓這些 ORM 框架和 sping 的其他功能整合,比如前面提到的事務管理;

3)OXM 模塊提供了對 OXM 實現的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等;

4)JMS 模塊包含生產和消費消息的功能;

5)事務模塊爲實現特殊接口類及所有的 POJO 支持編程式和聲明式事務管理

 

Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成,它們的細節如下:

1)Web 模塊提供面向 Web 的基本功能和麪向 Web 的應用上下文,比如多部分(multipart)文件上傳功能、使用 Servlet 監聽器初始化 IOC 容器等。它還包括 HTTP 客戶端以及 Spring 遠程調用中與 web 相關的部分;

2)Web-MVC 模塊爲 Web 應用模型視圖控制和 REST Web 服務的實現;

3)Web-Socket 模塊爲 WebSocket-based 提供了支持,而且在 web 應用程序中提供了客戶端和服務器端之間通信的兩種方式;

4)Web-portlet 模塊提供了用於 Portlet 環境的 MVC 實現,並反映了 spring-webmvc 模塊的功能。

 

框架可以理解成由別人包裝好的一系列工具,你拿過來就能用。好比買房子時,需要選擇一套滿意的戶型,在這個戶型的基礎上,再去買傢俱進行裝修。在這裏,框架就好比戶型,由別人規定好的,你只要選擇你想用的那個框架,然後拿過來用即可。

 

爲什麼要使用框架?

因爲方便,高效,能夠屏蔽底層細節,以及提供一種開發的思想。還拿上面的房子的例子來說,各個售樓部的幾種戶型都是經過專業設計師設計,結合多方面因素定下來的。我們沒有那麼多的專業知識,自己設計房子的戶型相對來說也不太實際。因此爲什麼使用框架這個問題就類似於買房爲什麼不自己設計戶型,而選擇別人設計好的戶型。因爲方便,因爲效率問題。設計戶型他們更專業,更合理,我們直接用。

Spring框架正式因爲Java應用開發的複雜性而創建的,大程度減少了Java應用開發工作量,同時降低應用的維護成本。

        IOC:控制反轉,是一種設計模式。 IOC 控制反轉就是將某一接口具體實現類的控制從調用類移除,轉交給第三方,即 Spring 容器;一層含義是控制權的轉移:由傳統的在程序中控制依賴轉移到由容器控制依賴;第二層是依賴注入:將相互依賴的對象分離,在 Spring 配置文件中描述他們的依賴關係。他們的依賴關係只有在使用時才建立。

        AOP:面向切面,是一種編程思想,OOP 的延續。將系統中的非核心的業務提取出來,進行單獨處理。在業務系統中除了要實現業務代碼外,還是實現權限攔截、性能監控、事務管理等非業務功能。通常的做法是將非業務代碼穿插在業務代碼中,從而導致業務組件和非業務組件的耦合。AOP 面向切面編程,就是將這些分散在各個業務邏輯代碼中的非業務代碼,通過橫向切割的方式抽取到一個獨立的模塊中,從而實現業務組件與非業務組件的解耦。

        Spring 中的 IOC 和 AOP 都是爲了解決系統代碼耦合度過高的問題,使代碼重用度高、易於維護。比如事務、日誌、安全等。

 

2、理解 RPC(遠程過程調用/Remote Procedure Call)

遠程過程調用區別於本地調用,遠程過程調用針對於存在調用關係的兩個服務處於不同的服務器。通過 RPC 服務,使得跨服務器間的調用速度如同本地調用一樣。RPC 服務處在會話層,相對於http請求,少了表示層和應用層的解析和封裝(可參考OSI七層網絡模型)因此,比 http 連接更高效。RPC 服務建立 socket 連接後,通過序列化和反序列化進行跨服務器間的信息傳遞。建立 socket 連接的速度與序列化、反序列化的效率成爲 RPC 性能的衡量標準。

 

3、理解 SOA(面向服務架構/服務治理/Service Oriented Architecture)

SOA 致力於解決多服務凌亂問題以及複雜的數據服務(一般用於大型項目)。隨着項目複雜程度的提高,服務器類型一般由集成服務器轉向分佈式服務器,將一個系統拆分爲不同的子模塊,服務之間相互調用。而隨着項目的迭代升級,服務、功能的相互交互及相互調用會非常複雜,調用關係混亂較難維護。因此,SOA 應運而生。SOA 建立了“數據總線”的概念,類似於阿里的dubbo、zookeepper 註冊中心,通過註冊的形式簡化調用關係,實時調度,提高服務調用效率。

 

4、理解集羣、分佈式

當一臺服務器的性能不足以支持處理某些任務時,需要添加一臺或多臺服務器,共同處理該任務,而這些服務器的工作內容、過程完全相同。此時,服務器的集合就叫做集羣。當一臺服務器出現問題時,其他的服務器仍能正常工作。而分佈式可以理解成:這些服務器由原來處理相同的任務變爲分別負責不同的功能模塊,各服務器單獨負責特定的模塊和功能,這些功能整合後可以協同完成某項工作。分佈式服務的質量取決於三個要素:數據一致性、可用性和容錯性。數據一致性和可用性往往不能兼顧,有興趣的可去深入瞭解分佈式的 CA、CP 原則

 

5、理解 MQ(消息隊列中間件/Message Queue)

首先說一下 MQ 的特點:異步、削峯(緩存)、解耦。

異步:比如從 A 執行到 B 需要串行調用 A1,A2,A3,...,An 多處邏輯,調用鏈很長,而引入 MQ 後,調用關係可轉變爲A -》 AA -》 B,AA 則爲消息隊列,其中通過消息隊列,A1,A2,A3,...,An 可併發執行。這就縮短了串行服務的調用鏈,等同於縮短了時間。而不使用多線程解決串行調用的原因就在於多線程代碼的耦合度較高,且代碼不好維護

緩存:當同時存在大量的請求時,MQ 可起到緩存、削峯的作用,將請求發送到隊列中,依次處理,避免服務器同時處理大量請求,cpu 不夠導致服務器崩潰

 

6、理解 kafka

kafka 是分佈式的基於發佈/訂閱模式的 MQ(消息隊列),涉及的主要元素有:生產者、消費者、broker(一個獨立的kafka服務結點)以及 Zookeeper。

生產者、消費者通過 zookeeper 上面的註冊信息,尋找到對應的 broker 上,進行生產、消費操作。

消息隊列分爲兩種模式:點對點模式、一對多模式(發佈/訂閱模式)。點對點模式下,生產者生產信息後,信息伴隨着消費者的消費操作而消失;發佈/訂閱模式下,信息並不會因爲消費者的行爲消失,而是通過設立消息的有效期來限制。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章