前言
首先需要說明一下,與前兩章的安裝篇不太一樣,這篇主要掃清一下這些插件/框架 等都是干什么用的,大多數都會用於服務端或監測工具或其他,作為新手建立一個大概的思想更好的了解自己的項目.廢話不多說直接進入正題.
Dubbo
什么是Dubbo?
Dubbo是一個分布式服務框架,由阿里旗下團隊開發出來,來源與核心業務抽取出來說白了就是根據業務流向取出來做成框架,能使前端更加快速和穩定的相應.
首先是服務治理部分:

我說一下我個人理解,這個套系統的根源是線上的實際業務誕生兒來的,整體的架構思想如圖我感覺特別凸顯了MVC的原理不過深化了MVC思想,並不是簡單的model層貫穿程序過程,這里指的是注冊中心,治理中心,而調度中心和監控中心提供所有數據分析與治理中心行程依賴關系,為所有服務層出現的問題提供解決方案感覺上相當於一個有監管模式的model 如果有任何問題我可以從根源上改變model 來應付出現的錯誤.
視圖層我覺得可以分為前端和集成,功能在於收集服務與編排服務,比如服務路由,軟負載均衡 等等,當然他們不管處理這些服務,服務會被編排之后統一進入核心層面那才是真正的服務處理也就是MVC中的Controller層,這段完全是我自己的理解如有偏差還請指出.

為什么要使用Dubbo?
1.首先是剛剛提及的服務中心和注冊中心,貫穿整個流程開發者只需要在服務中心注冊服務,客戶端去在服務中心查找該服務就可以了 而且服務中心使用zookeeper實現節點控制服務啟動該服務時候會創建服務提供者節點信息,當然關閉時候會刪除該信息.這樣就方便客戶端測試時候去主動選擇服務提供者了,也就是直連服務提供者.
2.集群容錯策略,我個人理解就是給報錯划分等級制度,比如出現特別嚴重的錯誤需要馬上修復的會立即報出,而部分錯誤並不會影響正常的線上業務所以優先級沒有那么高,可以暫緩修改,還有如果一條服務出現問題,而有很多類似服務可以運行,那么會切換該服務,並且報錯,這應該也算是一種集群容錯策略,簡單來說就是"不是不報,時候未到",這種集群容錯對於程序耦合度要求很高.
3.負載均衡,就像上面所提到了如果一條服務壓力過大而其他服務壓力不是很大的時候就需要去均攤當前壓力最大的服務這就是負載均衡機制,再搭配集群容錯,划分錯誤等級 選擇性報錯 形成一條完整的自執行體.
4.多協議,相當於數據的多重入口 除了dubbo ,hessian,rmi 等等 根據需求選擇合適的數據協議進行粒化分類
這里就不具體舉例子如何實現的了,才疏學淺 只能理解到這些了,過一段時間使用熟練了再來分享以dubbo框架實現的工程
Zookeeper
什么是Zookeeper?
ZooKeeper是一個開源的分布式服務框架,它是Apache Hadoop項目的一個子項目,主要用來解決分布式應用場景中存在的一些問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置管理等,它支持Standalone模式和分布式模式,在分布式模式下,能夠為分布式應用提供高性能和可靠地協調服務,而且使用ZooKeeper可以大大簡化分布式協調服務的實現,為開發分布式應用極大地降低了成本。

ZooKeeper工作原理
ZooKeeper集群由一組Server節點組成,這一組Server節點中存在一個角色為Leader的節點,其他節點都為Follower。當客戶端Client連接到ZooKeeper集群,並且執行寫請求時,這些請求會被發送到Leader節點上,然后Leader節點上數據變更會同步到集群中其他的Follower節點.dubbo中集群管理部分就用到它,但是具體如何實現的暫未深層挖掘.
Redis
什么是redis?
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
在dubbo框架中分布式服務會用到redis,在集群容錯方案中各個節點的配置信息會儲存在redis中(這也許就是服務提供者發布之后,服務使用者可以查詢到服務信息,單服務提供者關閉服務之后隨之該服務也會消失的原因? 個人理解)
Elastic-job
什么是Elastic-job?
elastic-job是當當開發的基於qutarz以及zookeeper封裝的作業調度工具,主要有兩個大框架,一個是elastic-job lite另外一個是elastic-job cloud,其中qutarz是一個開源的作業調度工具,zookeeper是分布式調度工具,這兩者結合搭建了elastic-job-lite,這是一個無中心節點的調度,而elastic-job-cloud是一個有中心節點的分布式調度開源工具,只需要設置好機器以及分片,就可以自動的調度到對應的機器上運行,與lite的不同時cloud采用了mesos來進行分布式資源管理,簡單的來說兩者的不同是:同一個作業在兩台機器上跑,lite需要手動在兩台機器上跑,但是cloud只需要上傳作業包,就可以自動的在兩台機器上跑,因為lite不支持作業的調度,為無中心的。
Elastic-job有點優勢
1. 分布式調度
2. 作業高可用
3. 最大限度利用資源
AMQP的主要特征是面向消息、隊列、路由(包括點對點和發布/訂閱)、可靠性、安全。
RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗.
MyCat發展到目前的版本,已經不是一個單純的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數據庫,也支持MongoDB這種新型NoSQL方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在MyCat里,都是一個傳統的數據庫表,支持標准的SQL語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅降低開發難度,提升開發速度.
對於數據庫中間件了解比較匱乏,不過這里有兩位大神的回答比較到位:
其一是參與mycat開發的大神: http://www.csdn.net/article/2015-07-16/2825228
其二對其設計初衷表示懷疑的大神:http://www.yougemysqldba.com/discuz/viewthread.php?tid=526&extra=page%3D1
看完這兩部分大神的理解 根據自己做的業務在做斟酌~
