IntelliJ IDEA 2017 Dubbo Elastic-job Redis Zookeeper RabbitMQ FastDFS MyCat 簡介以及部分實現(三)


前言

   首先需要說明一下,與前兩章的安裝篇不太一樣,這篇主要掃清一下這些插件/框架 等都是干什么用的,大多數都會用於服務端或監測工具或其他,作為新手建立一個大概的思想更好的了解自己的項目.廢話不多說直接進入正題.

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. 分布式調度

      Elastic-Job-LIte並無作業調度中心節點,而是基於部署作業框架的程序在到達相應時間點時各自觸發調度.
      注冊中心僅用於作業注冊和監控信息存儲。而主作業節點僅用於處理分片和清理等功能。

     2. 作業高可用

     Elastic-Job-Lite提供最安全的方式執行作業。將分片總數設置為1,並使用多於1台的服務器執行作業,作業將會以1主n從的方式執行。
一旦執行作業的服務器崩潰,等待執行的服務器將會在下次作業啟動時替補執行。開啟失效轉移功能效果更好,可以保證在本次作業執行時崩潰,備機立即啟動替補執行。

     3. 最大限度利用資源

    Elastic-Job-Lite也提供最靈活的方式,最大限度的提高執行作業的吞吐量。將分片項設置為大於服務器的數量,最好是大於服務器倍數的數量,作業將會合理的利用分布式資源,動態的分配分片項。
例如:3台服務器,分成10片,則分片項分配結果為服務器A=0,1,2;服務器B=3,4,5;服務器C=6,7,8,9。 如果服務器C崩潰,則分片項分配結果為服務器A=0,1,2,3,4;服務器B=5,6,7,8,9。在不丟失分片項的情況下,最大限度的利用現有資源提高吞吐量。
     
RabbitMQ
 
     RabbitMQ簡介
      AMQP消息中間件,即Advanced Message Queuing Protocol,高級消息隊列協議,是應用層協議的一個開放標准,為面向消息的中間件設計。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。
      AMQP的主要特征是面向消息、隊列、路由(包括點對點和發布/訂閱)、可靠性、安全。
RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗.
      
FastDFS
     
       什么是FastDFS?
       
       FastDFS是一個開源的輕量級分布式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等。
FastDFS為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集群提供 文件上傳、下載等服務。
   
         FastDFS 文件上傳/下載 過程(圖片轉自CSDN上的一位大神)
        
       
MyCat
     MyCat只是一個數據庫中間件么?
      從定義和分類來看,它是一個開源的分布式數據庫系統,是一個實現了MySQL協議的服務器,前端用戶可以把它看作是一個數據庫代理,用MySQL客戶端工具和命令行訪問,而其后端可以用MySQL原生協議與多個MySQL服務器通信,也可以用JDBC協議與大多數主流數據庫服務器通信,其核心功能是分表分庫,即將一個大表水平分割為N個小表,存儲在后端MySQL服務器里或者其他數據庫里。

      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

      看完這兩部分大神的理解 根據自己做的業務在做斟酌~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM