分佈式架構

前言

沒有最優的設計,只有最符合應用需求的設計 分佈式也是如此

 概念

分佈式系統是由一組通過網絡進行通信、爲了完成共同的任務而協調工作的計算機節點組成的系統

分佈式系統挑戰

  分佈式系統需要大量機器協作,面臨諸多的挑戰:

  第一,異構的機器與網絡:

    分佈式系統中的機器,配置不一樣,其上運行的服務也可能由不同的語言、架構實現,因此處理能力也不一樣;節點間通過網絡連接,而不同網絡運營商提供的網絡的帶寬、延時、丟包率又不一樣。怎麼保證大家齊頭並進,共同完成目標,這四個不小的挑戰。

  第二,普遍的節點故障:

    雖然單個節點的故障概率較低,但節點數目達到一定規模,出故障的概率就變高了。分佈式系統需要保證故障發生的時候,系統仍然是可用的,這就需要監控節點的狀態,在節點故障的情況下將該節點負責的計算、存儲任務轉移到其他節點

  第三,不可靠的網絡:

    節點間通過網絡通信,而網絡是不可靠的。可能的網絡問題包括:網絡分割、延時、丟包、亂序。

    相比單機過程調用,網絡通信最讓人頭疼的是超時:節點A向節點B發出請求,在約定的時間內沒有收到節點B的響應,那麼B是否處理了請求,這個是不確定的,這個不確定會帶來諸多問題,最簡單的,是否要重試請求,節點B會不會多次處理同一個請求。

分步式簡單架構

概念與實現

  那麼對於上面的各種技術與理論,業界有哪些實現呢,下面進行簡單羅列。

  當然,下面的這些實現,小部分我用過,知其所以然;大部分聽說過,知其然;還有一部分之前聞所未聞,分類也不一定正確,只是從其他文章抄過來的。羅列在這裏,以便日後或深或淺的學習。

 

  • 負載均衡:

    Nginx:高性能、高併發的web服務器;功能包括負載均衡、反向代理、靜態內容緩存、訪問控制;工作在應用層

    LVS: Linux virtual server,基於集羣技術和Linux操作系統實現一個高性能、高可用的服務器;工作在網絡層

  • webserver:

    Java:Tomcat,Apache,Jboss

    Python:gunicorn、uwsgi、twisted、webpy、tornado

  • service:  

    SOA、微服務、spring boot,django

  • 容器:

    docker,kubernetes

  • cache:

    memcache、redis等

  • 協調中心:

    zookeeper、etcd等

    zookeeper使用了Paxos協議Paxos是強一致性,高可用的去中心化分佈式。zookeeper的使用場景非常廣泛,之後細講。

  • rpc框架:

    grpc、dubbo、brpc

    dubbo是阿里開源的Java語言開發的高性能RPC框架,在阿里系的諸多架構中,都使用了dubbo + spring boot

  • 消息隊列:

    kafka、rabbitMQ、rocketMQ、QSP

    消息隊列的應用場景:異步處理、應用解耦、流量削鋒和消息通訊

  • 實時數據平臺:

    storm、akka

  • 離線數據平臺:

    hadoop、spark

    PS: apark、akka、kafka都是scala語言寫的,看到這個語言還是很牛逼的

  • dbproxy:

    cobar也是阿里開源的,在阿里系中使用也非常廣泛,是關係型數據庫的sharding + replica 代理

  • db:

    mysql、oracle、MongoDB、HBase

  • 搜索:

    elasticsearch、solr

  • 日誌:

    rsyslog、elk、flume

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