1. 程式人生 > >Java程式設計領域技術名詞解釋

Java程式設計領域技術名詞解釋

1、Java中介軟體,分散式系統、分散式快取、訊息佇列

JAVA中介軟體:包括服務框架中介軟體:解決叢集間的訪問通訊問題。訊息中介軟體:解決應用之間的訊息傳遞、解耦、非同步的問題。資料訪問中介軟體:解決應用訪問資料庫的共性問題。

分散式系統:一定是有多個節點組成的系統,一般一個節點就是一臺伺服器,節點之間是相互連通協作的,這些連通的節點上部署了我們的元件,共同服務於一個大型系統。比如淘寶網,在對瀏覽器傳送請求的背後,是一個大型的分散式系統為我們服務,整個系統有的負責請求處理,有的負責儲存,有的負責計算,最終通過相互的協作把請求的結果返回給瀏覽器,並呈現給我們。

分散式快取:就是把資料存放在不同的物理機器上,利用分散式快取中介軟體進行處理資料。Redis和memcached快取系統都是以key-value的形式儲存和訪問資料,在記憶體中維護一張巨大的HashTable。但是redis比memcached支援的資料型別更多,有五種資料型別:String、Hash、List、Set、ZSet(有序集合)。注意:分散式快取系統需要用到一致雜湊演算法,它的的好處在於節點個數發生變化(減少或增加)時無需重新計算雜湊值,避免大量key的重新對映,保證資料儲存或讀取時可以正確、快速地找到對應的節點。

訊息佇列(中介軟體):負責訊息的收發管理,利用高效可靠的非同步訊息傳遞機制整合到分散式系統。五大優點:解耦、非同步、橫向擴充套件、安全可靠、順序保證。常見的有activeMQ(支援多語言,實現jms1.1),RabbitMQ(支援更多語言,基於AMQP規範),kafka(高吞吐量,分散式,分割槽,O(1)磁碟順序提供訊息持久化)

2、常用的開源專案框架理解

Spring

Spring是輕量級的IoC和AOP的容器框架,是進行物件管理、物件關聯、解耦的一箇中間層框架。是面向Bean的程式設計,實現了元件的解耦。

  • IoC(DI)依賴注入實現的技術反射機制、工廠模式。其中pring的BeanFactory主要實現步驟如下,
  1. 解析配置檔案(bean.xml)
  2. 使用反射機制動態載入每個class節點中配置的類
  3. 為每個class節點中配置的類例項化一個物件
  4. 使用反射機制呼叫各個物件的seter方法,將配置檔案中的屬性值設定進對應的物件
  5. 將這些物件放在一個儲存空間(beanMap)中
  6. 使用getBean方法從儲存空間(beanMap)中取出指定的JavaBean
  • AOP實現的技術: JDK動態代理技術 和 CGLIB技術(動態位元組碼增強技術) 。儘管實現技術不一樣,但都是基於代理模式 , 都是生成一個代理物件 。
  1. JDK動態代理技術:主要使用到 InvocationHandler 介面和 java.lang.reflect.Proxy類的newProxyInstance() 方法。通過使用介面,使系統鬆耦合。
  2. CGLIB(動態位元組碼增強)技術:是繼承被代理物件,然後Override需要被代理的方法。使用繼承,程式碼寫起來更簡單。

Struts2

Struts2是基於servlet、MVC設計模式的Web應用框架,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與檢視的資料互動。

  • Struts2框架採用Filter(StrutsPrepareAndExecuteFilter)作為核心控制器實現。是類級別的攔截,每次請求對應例項一個新的Action,然後呼叫setter getter方法把request中的資料注入。一個Action物件對應一個request上下文。
  • Struts2流程分析:

①當在瀏覽器中輸入相應網址,會載入web.xml中的核心控制器

②核心控制器會攔截所有請求,載入struts.xml的配置檔案,找到和請求名字相同的action

③建立Class屬性指定類的物件

④執行method屬性指定的方法,返回一個字串結果

⑤找Name等於此字串的result,轉到相應頁面或action

⑥在頁面中執行相關程式碼:通過EL表示式或者OGNL表示式取當前類屬性的值

SpringMVC

SpringMVC是基於Servlet 、MVC設計模式的一個鬆耦合的web應用框架,使用前端控制器模式來進行設計,再根據請求對映規則分發給相應的後端控制器進行處理。

  • SpringMVC框架採用Servlet作為核心控制器實現。是方法級別的攔截,攔截到方法後根據引數上的註解,把request資料注入進去。一個方法對應一個Request上下文,所以方法直接基本上是獨立的,獨享request,response資料。、
  • 開發效率對比:

由於SpringMVC基於方法的攔截,有載入一次單例模式bean注入。而Struts2是類級別的攔截,每次請求對應例項一個新的Action,需要載入所有的屬性值注入,所以,SpringMVC開發效率和效能高於Struts2

  • SpringMVC的工作流程如下:
  1. 使用者傳送請求至前端控制器(DispatcherServlet)
  2. DispatcherServlet收到請求呼叫處理器對映器(HandlerMapping)
  3. 處理器對映器根據請求url找到具體的處理器,生成處理器物件及處理器攔截器物件一併返回給DispatcherServlet
  4. DispatcherServlet通過處理器介面卡(HandlerAdapter)呼叫具體的處理器(Controller)
  5. 處理器即後端控制器(Controller)執行具體的業務操作,完成後返回ModelAndView
  6. HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
  7. DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器
  8. ViewReslover解析後返回具體View
  9. DispatcherServlet對View進行渲染檢視(即將模型資料填充至檢視中)
  10. DispatcherServlet響應使用者

MyBatis

MyBatis 是一個基於 Java 的 持久層 框架, MyBatis 消除了幾乎所有的 JDBC 程式碼和引數的手工設定以及結果集的檢索。 把實體類和SQL語句之間建立了對映關係,是一種半自動化的ORM實現。

MyBatis的特點:

基於SQL語法,SQL語句封裝在配置檔案中,便於統一管理與維護。

自動化程度低、手工對映SQL,靈活程度高。

Hibernate

Hibernate是優秀的Java 持久化層解決方案、物件-關係對映(ORM)工具、簡化了JDBC 繁瑣的編碼。

Hibernate特點:

Hibernate物件-關係對映能力強,資料庫無關性好,對於關係模型要求高的軟體(例如需求固定的定製化軟體)如果用hibernate開發可以節省很多程式碼,提高效率。

編寫程式的時候,HQL語句操作,以面向物件的方式處理資料。而儲存資料的時候,卻以關係型資料庫的方式儲存。

SpringBoot

SpringBoot是基於Spring4.0的一套快速搭建Spring框架的整合包。方便對各種框架的整合,讓他們整合在一起更加簡單,簡化了我們在整合過程中的模板化配置。遵循”約定大於配置”,實現零配置。

特點:

  1.  建立獨立的Spring應用程式
  2.  嵌入的Tomcat,無需部署WAR檔案
  3.  簡化Maven配置
  4.  自動配置Spring
  5.  提供生產就緒型功能,如指標,健康檢查和外部配置

微服務

微服務是一種可以讓軟體職責單一、鬆耦合、自包含、可以獨立執行和部署的架構思想。微服務架構是讓微服務與微服務之間在結構上“鬆耦合”,而在功能上則表現為一個統一的整體。目的是有效的拆分應用,實現敏捷開發和部署。

關鍵思想就是:拆分、單一、獨立、元件化。把原本一個龐大、複雜的專案按業務邊界拆分一個一個獨立執行的小專案,通過介面的方式組裝成一個大的專案。

Dubbo

首先了解一下ESB(企業資料匯流排):一般採用集中式轉發請求,適合大量異構系統整合,側重任務的編排,效能問題可通過異構的方式來進行規避,無法支援特別大的併發。

Dubbo(服務註冊管理),採用的是分散式呼叫,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。其側重服務的治理,將各個服務顆粒化,各個子業務系統在程式邏輯上完成業務的編排。是遠端服務呼叫的分散式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上註冊)

其核心部分包含:

1. 遠端通訊: 提供對多種基於長連線的NIO框架抽象封裝,包括多種執行緒模型,序列化,以及“請求-響應”模式的資訊交換方式。

2. 叢集容錯: 提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及軟負載均衡,失敗容錯,地址路由,動態配置等叢集支援。

3. 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查詢服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。

服務註冊中心:Zookeeper     服務呼叫方式: RPC

Spring Cloud

Spring cloud是基於spring boot以及結合Netflix 相關思想和程式碼對微服務理念的java實現。提供了一些可以用於快速構建分散式系統通用模式的工具(例如:配置管理、服務註冊與發現、斷路器、智慧路由、微代理、控制匯流排),在本質上是一種分散式的解決方案。

五大核心元件:

  1. 服務註冊發現 - Netflix Eureka
  2. 配置中心 - spring cloud config
  3. 負載均衡-Netflix Ribbon
  4. 斷路器 - Netflix Hystrix
  5. 路由(閘道器) - Netflix Zuu

服務註冊中心:Netflix Eureka     服務呼叫方式:REST API

Zookeeper

ZooKeeper是一種分散式應用程式協調服務,用於管理大型主機。它是叢集的管理者,監視著叢集中各個節點的狀態,根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

Zookeeper作用:

1.命名服務   2.配置管理   3.叢集管理   4.分散式鎖  5.佇列管理

Zookeeper設計目的:

1.最終一致性:client不論連線到哪個Server,展示給它都是同一個檢視,這是zookeeper最重要的效能。

2.可靠性:具有簡單、健壯、良好的效能,如果訊息被到一臺伺服器接受,那麼它將被所有的伺服器接受。

3.實時性:Zookeeper保證客戶端將在一個時間間隔範圍內獲得伺服器的更新資訊,或者伺服器失效的資訊。但由於網路延時等原因,Zookeeper不能保證兩個客戶端能同時得到剛更新的資料,如果需要最新資料,應該在讀資料之前呼叫sync()介面。

4.等待無關(wait-free):慢的或者失效的client不得干預快速的client的請求,使得每個client都能有效的等待。

5.原子性:更新只能成功或者失敗,沒有中間狀態。

6.順序性:包括全域性有序和偏序兩種:全域性有序是指如果在一臺伺服器上訊息a在訊息b前釋出,則在所有Server上訊息a都將在訊息b前被髮布;偏序是指如果一個訊息b在訊息a後被同一個傳送者釋出,a必將排在b前面。

Docker

Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用介面Docker 將應用程式與該程式的依賴,打包在一個檔案裡面。執行這個檔案,就會生成一個虛擬容器。程式在這個虛擬容器裡執行,就好像在真實的物理機上執行一樣。有了 Docker,就不用擔心環境問題。

總體來說,Docker 的介面相當簡單,使用者可以方便地建立和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的程式碼一樣。

Docker 主要用途。

(1)提供一次性的環境。比如,本地測試他人的軟體、持續整合的時候提供單元測試和構建的環境。

(2)提供彈性的雲服務。因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

(3)組建微服務架構。通過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。

Redis

Redis 是一個開源的,基於高階的key-value儲存在記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體。 它支援多種型別的資料結構,如 字串(strings), 雜湊(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內建了 複製(replication),LUA指令碼(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁碟持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分割槽(Cluster)提供高可用性(high availability)。

Redis優點

(1) 速度快,因為資料存在記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1)

(2) 支援豐富資料型別,支援string,list,set,sorted set,hash

(3) 支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行

(4) 豐富的特性:可用於快取,訊息,按key設定過期時間,過期後將會自動刪除

Memcached

Memcached基於一個儲存鍵/值對的hashmap。Memcached 是一個高效能的分散式記憶體物件快取系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。

  • Memcached特徵:
  1. 協議簡單
  2. 基於libevent的事件處理
  3. 內建記憶體儲存方式
  4. memcached不互相通訊的分散式
  • Memcache與Redis的區別都有哪些?  

1)、儲存方式 Memecache把資料全部存在記憶體之中,斷電後會掛掉,資料不能超過記憶體大小。 Redis有部份存在硬碟上,這樣能保證資料的永續性。

2)、資料支援型別 Memcache對資料型別支援相對簡單。 Redis有複雜的資料型別。

3)、使用底層模型不同 它們之間底層實現方式 以及與客戶端之間通訊的應用協議不一樣。 Redis直接自己構建了VM 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求。

3、遠端服務呼叫 RPC、REST API

RPC 即遠端過程呼叫(Remote Procedure Call Protocol,簡稱RPC),像呼叫本地服務(方法)一樣呼叫伺服器的服務(方法)。通常的實現有 XML-RPC , JSON-RPC , 通訊方式基本相同, 不同的只是傳輸資料的格式。

RPC架構裡包含如下4個元件:

1、 客戶端(Client):服務呼叫方

2、 客戶端存根(Client Stub):存放服務端地址資訊,將客戶端的請求引數打包成網路訊息,再通過網路傳送給服務方

3、 服務端存根(Server Stub):接受客戶端傳送過來的訊息並解包,再呼叫本地服務

4、 服務端(Server):真正的服務提供者。

RPC架構目的是把呼叫、編碼/解碼的過程封裝起來,讓使用者像呼叫本地服務一樣的呼叫遠端服務。要做到對客戶端(呼叫方)透明化服務, RPC框架需要考慮解決如下問題:

  • 服務端提供的服務如何釋出,客戶端如何發現服務;
  • 如何對請求物件和返回結果進行序列化和反序列化;
  • 如何更高效進行網路通訊。

REST 即表述性狀態傳遞(Representational State Transfer,簡稱REST),是Roy Fielding博士在2000年他的博士論文中提出來的一種軟體架構風格。它是一種針對網路應用的設計和開發方式,可以降低開發的複雜性,提高系統的可伸縮性。

REST通過資源的角度觀察網路( 通過HTTP協議定義的通用動詞方法(GET、PUT、DELETE、POST) ),以URI對網路資源進行唯一標識,響應端根據請求端的不同需求,通過無狀態通訊,對其請求的資源進行表述。

REST使用HTTP+URI+XML 來實現其要求的架構風格:HTTP協議和URI用於統一介面和定位資源,文字、二進位制流、XML、JSON等格式用來作為資源的表述。

滿足REST約束條件和原則的架構或介面,就被稱為是RESTful架構或RESTful介面。就像URL都是URI(統一資源標識)的表現形式一樣,RESTful是符合REST原則的表現形式。