天天看點

Dubbo+Zookeeper+springmvc + mybatis Jeesz的分布式架構什麼是dubbo 如何使用dubbo

Dubbo是一個阿裡巴巴開源出來的一個分布式服務架構,緻力于提供高性能和透明化的RPC遠端服務調用方案,以及SOA服務治理方案。其核心部分包含:

  • 遠端通訊: 提供對多種基于長連接配接的NIO架構抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的資訊交換方式。
  • 叢集容錯: 提供基于接口方法的透明遠端過程調用,包括多協定支援,以及軟負載均衡,失敗容錯,位址路由,動态配置等叢集支援。
  • 自動發現: 基于注冊中心目錄服務,使服務消費方能動态的查找服務提供方,使位址透明,使服務提供方可以平滑增加或減少機器。

什麼是dubbo

Dubbo是阿裡巴巴提供的開源的SOA服務化治理的技術架構,據說隻是剖出來的一部分開源的,但一些基本的需求已經可以滿足的,而且擴充性也非常好(至今沒領悟到擴充性怎麼做到的),通過spring bean的方式管理配置及執行個體,較容易上手且對應用無侵入。更多介紹可戳http://alibaba.github.io/dubbo-doc-static/Home-zh.htm。

如何使用dubbo

1.服務化應用基本架構

Dubbo+Zookeeper+springmvc + mybatis Jeesz的分布式架構什麼是dubbo 如何使用dubbo

如上圖所示,一個抽象出來的基本架構,consumer和provider是架構中必然存在的,Registry做為全局配置資訊管理子產品,推薦生産環境使用Registry,可實時推送現存活的服務提供者,Monitor一般用于監控和統計RPC調用情況、成功率、失敗率等情況,讓開發及運維了解線上運作情況。

應用執行過程大緻如下:

  • 服務提供者啟動,根據協定資訊綁定到配置的IP和端口上,如果已有服務綁定過相同IP和端口的則跳過
  • 注冊服務資訊至注冊中心
  • 用戶端啟動,根據接口和協定資訊訂閱注冊中心中注冊的服務,注冊中心将存活的服務位址通知到用戶端,當有服務資訊變更時用戶端可以通過定時通知得到變更資訊
  • 在用戶端需要調用服務時,從記憶體中拿到上次通知的所有存活服務位址,根據路由資訊和負載均衡機制選擇最終調用的服務位址,發起調用
  • 通過filter分别在用戶端發送請求前和服務端接收請求後,通過異步記錄一些需要的資訊傳遞到monitor做監控或者統計

ZooKeeper是Hadoop Ecosystem中非常重要的元件,它的主要功能是為分布式系統提供一緻性協調(Coordination)服務,與之對應的Google的類似服務叫Chubby。今天這篇文章分為三個部分來介紹ZooKeeper,第一部分介紹ZooKeeper的基本原理,第二部分介紹ZooKeeper提供的Client API的使用,第三部分介紹一些ZooKeeper典型的應用場景。

ZooKeeper基本原理

1. 資料模型

Dubbo+Zookeeper+springmvc + mybatis Jeesz的分布式架構什麼是dubbo 如何使用dubbo

如上圖所示,ZooKeeper資料模型的結構與Unix檔案系統很類似,整體上可以看作是一棵樹,每個節點稱做一個ZNode。每個ZNode都可以通過其路徑唯一辨別,比如上圖中第三層的第一個ZNode, 它的路徑是/app1/c1。在每個ZNode上可存儲少量資料(預設是1M, 可以通過配置修改, 通常不建議在ZNode上存儲大量的資料),這個特性非常有用,在後面的典型應用場景中會介紹到。另外,每個ZNode上還存儲了其Acl資訊,這裡需要注意,雖說ZNode的樹形結構跟Unix檔案系統很類似,但是其Acl與Unix檔案系統是完全不同的,每個ZNode的Acl的獨立的,子結點不會繼承父結點的,關于ZooKeeper中的Acl可以參考之前寫過的一篇文章《說說Zookeeper中的ACL》。

2.重要概念 

2.1 ZNode

前文已介紹了ZNode, ZNode根據其本身的特性,可以分為下面兩類:

  • Regular ZNode: 正常型ZNode, 使用者需要顯式的建立、删除
  • Ephemeral ZNode: 臨時型ZNode, 使用者建立它之後,可以顯式的删除,也可以在建立它的Session結束後,由ZooKeeper Server自動删除

ZNode還有一個Sequential的特性,如果建立的時候指定的話,該ZNode的名字後面會自動Append一個不斷增加的SequenceNo。

2.2 Session

Client與ZooKeeper之間的通信,需要建立一個Session,這個Session會有一個逾時時間。因為ZooKeeper叢集會把Client的Session資訊持久化,是以在Session沒逾時之前,Client與ZooKeeper Server的連接配接可以在各個ZooKeeper Server之間透明地移動。

在實際的應用中,如果Client與Server之間的通信足夠頻繁,Session的維護就不需要其它額外的消息了。否則,ZooKeeper Client會每t/3 ms發一次心跳給Server,如果Client 2t/3 ms沒收到來自Server的心跳回應,就會換到一個新的ZooKeeper Server上。這裡t是使用者配置的Session的逾時時間。

2.3 Watcher

ZooKeeper支援一種Watch操作,Client可以在某個ZNode上設定一個Watcher,來Watch該ZNode上的變化。如果該ZNode上有相應的變化,就會觸發這個Watcher,把相應的事件通知給設定Watcher的Client。需要注意的是,ZooKeeper中的Watcher是一次性的,即觸發一次就會被取消,如果想繼續Watch的話,需要用戶端重新設定Watcher。這個跟epoll裡的oneshot模式有點類似。

3. ZooKeeper特性 

3.1 讀、寫(更新)模式

在ZooKeeper叢集中,讀可以從任意一個ZooKeeper Server讀,這一點是保證ZooKeeper比較好的讀性能的關鍵;寫的請求會先Forwarder到Leader,然後由Leader來通過ZooKeeper中的原子廣播協定,将請求廣播給所有的Follower,Leader收到一半以上的寫成功的Ack後,就認為該寫成功了,就會将該寫進行持久化,并告訴用戶端寫成功了。

3.2 WAL和Snapshot

和大多數分布式系統一樣,ZooKeeper也有WAL(Write-Ahead-Log),對于每一個更新操作,ZooKeeper都會先寫WAL, 然後再對記憶體中的資料做更新,然後向Client通知更新結果。另外,ZooKeeper還會定期将記憶體中的目錄樹進行Snapshot,落地到磁盤上,這個跟HDFS中的FSImage是比較類似的。這麼做的主要目的,一當然是資料的持久化,二是加快重新開機之後的恢複速度,如果全部通過Replay WAL的形式恢複的話,會比較慢。

3.3 FIFO

對于每一個ZooKeeper用戶端而言,所有的操作都是遵循FIFO順序的,這一特性是由下面兩個基本特性來保證的:一是ZooKeeper Client與Server之間的網絡通信是基于TCP,TCP保證了Client/Server之間傳輸包的順序;二是ZooKeeper Server執行用戶端請求也是嚴格按照FIFO順序的。

3.4 Linearizability

在ZooKeeper中,所有的更新操作都有嚴格的偏序關系,更新操作都是串行執行的,這一點是保證ZooKeeper功能正确性的關鍵。

        Jeesz是一個分布式的架構,提供項目子產品化、服務化、熱插拔的思想,高度封裝安全性的Java EE快速開發平台。

        Jeesz本身內建Dubbo服務管控、Zookeeper注冊中心、Redis分布式緩存技術、FastDFS分布式檔案系統、ActiveMQ異步消息中間件、Nginx負載均衡等分布式技術

        使用Maven做項目管理,項目子產品化,提高項目的易開發性、擴充性

        以spring Framework為核心容器,Spring MVC為模型視圖控制器,MyBatis為資料通路層, Apache Shiro為權限授權層,Ehcahe對常用資料進行緩存,Activit為工作流引擎等。

        前端內建Bootstrap4 metronic架構,UI響應式、扁平化布局,适應所有PC、Pad、Anroid、iOS 移動裝置等。

        Jeesz主要定位于網際網路企業架構,已内置企業資訊化系統的基礎功能和高效的代碼生成工具,包括:系統權限元件、資料權限元件、資料字典元件、核心工具 元件、視圖操作元件、工作流元件、代碼生成等。采用分層設計、雙重驗證、送出資料安全編碼、密碼加密、通路驗證、資料權限驗證。

        Jeesz目前包括以下子產品項目,背景系統管理系統,RestFul獨立服務系統、Scheduler定時排程系統、内容管理(CMS)系統、線上辦公(OA)系統、我的待辦(Task服務)、我的收藏(Bookmark服務)。

        背景管理系統包括企業組織架構(使用者管理、機構管理、區域管理)、菜單管理、角色權限管理、字典管理等功能;

        RestFul獨立提供标準Rest服務API,您可以快速實作自己的業務,提供需要的服務;

        Quartz定時排程系統可以動态配置您的任務規則等;

願意了解架構技術或者源碼的朋友直接加QQ(2042849237)

        内容管理(CMS)系統,包括内容管理,欄目管理、站點管理、公共留言、檔案管理、前端網站展示等功能;

        線上辦公(OA)系統,主要提供簡單的流程執行個體。

        Jeesz提供了常用工具進行封裝,包括日志工具、緩存工具、伺服器端驗證、資料字典、目前組織機構資料(使用者、機構、區域)以及其它常用小工具等。另外 還提供一個強大的線上 代碼生成 工具,此工具提供簡單的單表、一對多、樹結構功能的生成,如果對外觀要求不是很高,生成的功能就可以用了。使用了Jeesz基礎架構,可以提高快速開發效 率。

想了解更多詳細請點選源碼位址擷取:mingli.com

有興趣的朋友們可以前往球球哦~一起分享學習技術:2042849237

繼續閱讀