中間件簡(jiǎn)介

一、mysql

1、什么是mysql 數(shù)據(jù)庫(kù)

? msyql 是一種開(kāi)放源代碼的關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)(RDBMS),使用最常見(jiàn)的數(shù)據(jù)庫(kù)管理語(yǔ)句(結(jié)構(gòu)化查詢語(yǔ)言)進(jìn)行數(shù)據(jù)庫(kù)管理。

? mysql是由sql接口,解釋器,優(yōu)化器,緩存,存儲(chǔ)引擎組成

2、mysql原理

image.png

? connectors:交互接口

? Management Serveices & Utilities:系統(tǒng)管理和控制工具

? Connection Pool (連接池):管理緩沖用戶連接,線程處理等需要緩存的需求

? SQL Interface (SQL接口):接受用戶的SQL命令,并且返回用戶需要查詢的結(jié)果。比如select from就是調(diào)用SQL Interface

? Parser (解析器):SQL命令傳遞到解析器的時(shí)候會(huì)被解析器驗(yàn)證和解析。

? Optimizer (查詢優(yōu)化器):SQL語(yǔ)句在查詢之前會(huì)使用查詢優(yōu)化器對(duì)查詢進(jìn)行優(yōu)化(產(chǎn)生多種執(zhí)行計(jì)劃,最終數(shù)據(jù)庫(kù)會(huì)選擇最優(yōu)化的方案去執(zhí)行,盡快返會(huì)結(jié)果) 他使用的是“選取-投影-聯(lián)接”策略進(jìn)行查詢。

Cache和Buffer (查詢緩存):如果查詢緩存有命中的查詢結(jié)果,查詢語(yǔ)句就可以直接去查詢緩存中取數(shù)據(jù)。這個(gè)緩存機(jī)制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,權(quán)限緩存等

Engine (存儲(chǔ)引擎):存儲(chǔ)引擎是MySql中具體的與文件打交道的子系統(tǒng)。也是Mysql最具有特色的一個(gè)地方。

程序的請(qǐng)求會(huì)通過(guò)mysql的connectors與其進(jìn)行交互,請(qǐng)求到處后,會(huì)暫時(shí)存放在連接池(connection pool)中并由處理器(Management Serveices & Utilities)管理。當(dāng)該請(qǐng)求從等待隊(duì)列進(jìn)入到處理隊(duì)列,管理器會(huì)將該請(qǐng)求丟給SQL接口(SQL Interface)。SQL接口接收到請(qǐng)求后,它會(huì)將請(qǐng)求進(jìn)行hash處理并與緩存中的結(jié)果進(jìn)行對(duì)比,如果完全匹配則通過(guò)緩存直接返回處理結(jié)果;否則,需要完整的走一趟流程:

(1)由SQL接口丟給后面的解釋器(Parser),解釋器會(huì)判斷SQL語(yǔ)句正確與否,若正確則將其轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)。

(2)解釋器處理完,便來(lái)到后面的優(yōu)化器(Optimizer),它會(huì)產(chǎn)生多種執(zhí)行計(jì)劃,最終數(shù)據(jù)庫(kù)會(huì)選擇最優(yōu)化的方案去執(zhí)行,盡快返會(huì)結(jié)果。

(3)確定最優(yōu)執(zhí)行計(jì)劃后,SQL語(yǔ)句此時(shí)便可以交由存儲(chǔ)引擎(Engine)處理,存儲(chǔ)引擎將會(huì)到后端的存儲(chǔ)設(shè)備中取得相應(yīng)的數(shù)據(jù),并原路返回給程序。

3、優(yōu)點(diǎn)

  • 可移植性好
  • 支持多操作系統(tǒng)
  • 支持多線程
  • 多種變成語(yǔ)言提供api
  • 優(yōu)化 sql算法,提高了查詢速度
  • mysql內(nèi)提供很多管理工具

4、適用場(chǎng)景

關(guān)系型數(shù)據(jù)庫(kù)使用場(chǎng)景:

  • 需要做復(fù)雜處理數(shù)據(jù);
  • 數(shù)據(jù)量不是特別大的數(shù)據(jù);
  • 對(duì)安全性能要求高的數(shù)據(jù);
  • 數(shù)據(jù)格式單一的數(shù)據(jù);

非關(guān)系型數(shù)據(jù)庫(kù)使用場(chǎng)景

  • 適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ),數(shù)據(jù)量且不可預(yù)期。如:評(píng)論,文章
  • 排行榜數(shù)據(jù)獲取,實(shí)時(shí)更新的數(shù)據(jù)。如:游戲榜排名,用戶投票
  • 限時(shí)搶購(gòu)活動(dòng)。如:淘寶搶購(gòu)活動(dòng)
  • 反垃圾系統(tǒng)。如:敏感詞
  • 消息實(shí)時(shí)推送。如:微博推送
  • 緩存。如:熱點(diǎn)數(shù)據(jù)

(1)單節(jié)點(diǎn)

  • 很多個(gè)人站點(diǎn),初創(chuàng)公司,小型內(nèi)部系統(tǒng),考慮到成本,更新頻率,系統(tǒng)重要性等問(wèn)題,系統(tǒng)只依賴一個(gè)單例數(shù)據(jù)庫(kù)提供服務(wù),基本已經(jīng)滿足需求。
  • 單節(jié)點(diǎn)場(chǎng)景應(yīng)關(guān)注:數(shù)據(jù)備份,數(shù)據(jù)還原,備份監(jiān)控,數(shù)據(jù)文件遠(yuǎn)程存儲(chǔ)。

(2)一主一從

  • 考慮一主一從的多數(shù)初衷是系統(tǒng)性能和系統(tǒng)高可用性問(wèn)題

(3)一主n從

  • 一旦開(kāi)始考慮一主多從的服務(wù)器架構(gòu),則證明你的系統(tǒng)對(duì)可用性、一致性、性能中一種或者多種的要求比較高。好多系統(tǒng)在開(kāi)始搭建的時(shí)候都會(huì)往這個(gè)方向看齊,這樣“看起來(lái)”系統(tǒng)會(huì)健壯很多。一主n從關(guān)注的重點(diǎn)是:數(shù)據(jù)一致性、腦裂、雪崩、連接池管理

二、postgresql

1、介紹

? postgresql 是一種特性非常齊全的自由軟件的對(duì)象-關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS),不僅包括RDBMS所具有的特征,比如事務(wù),觸發(fā)器,視圖,外鍵,鎖機(jī)制還具有獨(dú)有的特性,如用戶定義的類(lèi)型,繼承性和規(guī)則

2、原理

image.png
image.png
  • 主進(jìn)程 Postmaster

    是整個(gè)數(shù)據(jù)庫(kù)實(shí)例的總控進(jìn)程,負(fù)責(zé)啟動(dòng)和關(guān)閉該數(shù)據(jù)庫(kù)實(shí)例

  • 輔助進(jìn)程:SysLogger(系統(tǒng)日志)進(jìn)程、BgWriter(后臺(tái)寫(xiě))進(jìn)程、WALWrite(預(yù)寫(xiě)式日志)進(jìn)程、PgArch(歸檔)進(jìn)程、AutoVacuum(系統(tǒng)自動(dòng)清理)進(jìn)程、PgStat(統(tǒng)計(jì)收集)進(jìn)程、CheckPoint()進(jìn)程

3、特點(diǎn),優(yōu)點(diǎn)

  • 支持多操作系統(tǒng)
  • 支持SQL的許多功能,例如復(fù)雜的SQL查詢,子查詢,外鍵,觸發(fā)器,視圖,視圖,多進(jìn)程并發(fā)控制(MVCC)、異步復(fù)制。(MVCC,Multi-Version Concurrency Control)
  • 良好的可擴(kuò)展性,可以自定義數(shù)據(jù)類(lèi)型、索引類(lèi)型等,同時(shí)也能開(kāi)發(fā)一系列的功能插件
  • 支持文本,圖片,視頻,聲音等

4、適用場(chǎng)景

100TB 數(shù)據(jù)量以內(nèi),OLTP和OLAP的混合場(chǎng)景,可以選擇PostgreSQL。
超過(guò)100TB,OLAP可以選擇Greenplum。
超過(guò)100TB,OLTP可以選擇基于PostgreSQL的分庫(kù)分表。
PostgreSQL 的特性較多,BUG較少。
比如窗口查詢,分組聚合,CUBE,地理位置,幾何類(lèi)型,圖類(lèi)型,機(jī)器學(xué)習(xí)庫(kù),醫(yī)學(xué)類(lèi)型,流式數(shù)據(jù)分析,哈希JOIN,MERGE JOIN,JSON類(lèi)型,multi master,IP地址類(lèi)型,ISBN類(lèi)型,外部表(可以直接讀寫(xiě)mysql, oracle, sqlserver, mongodb, redis, WWW, HADOOP等幾乎所有數(shù)據(jù)源)。
如果你對(duì)PostgreSQL熟悉的話,可以優(yōu)先考慮PG。

OLTP(on-line transacation processing):聯(lián)機(jī)事務(wù)處理,主要是執(zhí)行基本日常的事務(wù)處理,比如數(shù)據(jù)庫(kù)記錄的增刪改查;實(shí)時(shí)性要求高,數(shù)據(jù)量不是很大,交易一般是明確的,高并發(fā)。

OLAP(on-line analytical processing):聯(lián)機(jī)分析處理,是數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢結(jié)果;實(shí)時(shí)性要求不是很高,數(shù)據(jù)量大,重點(diǎn)是通過(guò)數(shù)據(jù)提供決策支持,所以查詢一般都是動(dòng)態(tài),自定義的。

三、redis

1、介紹

? redis(remote dictionary server)是一個(gè)鍵值存儲(chǔ)的高速緩存數(shù)據(jù)庫(kù)。整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過(guò)異步操作把數(shù)據(jù)庫(kù)數(shù)據(jù)flush到硬盤(pán)上進(jìn)行保存。

2、原理

。。。。。。

3、特征優(yōu)點(diǎn)

  • 性能極高 – Redis能讀的速度是110000次/s,寫(xiě)的速度是81000次/s 。
  • 豐富的數(shù)據(jù)類(lèi)型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類(lèi)型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個(gè)操作是原子性的。多個(gè)操作也支持事務(wù),即原子性,通過(guò)MULTI和EXEC指令包起來(lái)。
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過(guò)期等等特性。
  • 支持五種數(shù)據(jù)類(lèi)型:string,hash,list,set, sorted set(zset)

4、應(yīng)用場(chǎng)景

  • 會(huì)話緩存
  • 消息隊(duì)列 —支付
  • 活動(dòng)排行榜或計(jì)數(shù)
  • 發(fā)布,訂閱消息— 消息通知
  • 商品列表,評(píng)論列表

四、MongoDB

1、介紹

? MongoDB是一個(gè)基于分部署文件存儲(chǔ)的數(shù)據(jù)庫(kù),由c++語(yǔ)言編寫(xiě)。旨在為web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。

2、原理

https://blog.csdn.net/baijiwei/article/details/78128632

讀過(guò)程

  • 生成語(yǔ)法樹(shù)(matchExpression)
  • 邏輯優(yōu)化過(guò)程,由MatchExpression 生成 CanoncalQuery
  • 生成查詢計(jì)劃,由CanoncalQuery生成QuerySolution和 MultiPlanStage
  • 生成planExecutor
  • 執(zhí)行計(jì)劃

寫(xiě)過(guò)程

3、特征,優(yōu)點(diǎn)

  • MongoDB 是一個(gè)面向文檔存儲(chǔ)的數(shù)據(jù)庫(kù),操作起來(lái)比較簡(jiǎn)單和容易。
  • 你可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來(lái)實(shí)現(xiàn)更快的排序。
  • 你可以通過(guò)本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像,這使得MongoDB有更強(qiáng)的擴(kuò)展性。
  • 如果負(fù)載的增加(需要更多的存儲(chǔ)空間和更強(qiáng)的處理能力) ,它可以分布在計(jì)算機(jī)網(wǎng)絡(luò)中的其他節(jié)點(diǎn)上這就是所謂的分片。
  • Mongo支持豐富的查詢表達(dá)式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對(duì)象及數(shù)組。
  • MongoDb 使用update()命令可以實(shí)現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。
  • Mongodb中的Map/reduce主要是用來(lái)對(duì)數(shù)據(jù)進(jìn)行批量處理和聚合操作。
  • Map和Reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進(jìn)行處理。
  • Map函數(shù)和Reduce函數(shù)是使用Javascript編寫(xiě)的,并可以通過(guò)db.runCommand或mapreduce命令來(lái)執(zhí)行MapReduce操作。
  • GridFS是MongoDB中的一個(gè)內(nèi)置功能,可以用于存放大量小文件。
  • MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫(xiě)某個(gè)函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲(chǔ)在服務(wù)端,下次直接調(diào)用即可。
  • MongoDB支持各種編程語(yǔ)言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語(yǔ)言。
  • MongoDB安裝簡(jiǎn)單

4、應(yīng)用場(chǎng)景

  • 網(wǎng)站實(shí)時(shí)數(shù)據(jù)處理。它非常適合實(shí)時(shí)的插入、更新與查詢,并具備網(wǎng)站實(shí)時(shí)數(shù)據(jù)存儲(chǔ)所需的復(fù)制及高度伸縮性
  • 緩存。由于性能很高,它適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由它搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過(guò)載
  • 高伸縮性的場(chǎng)景。非常適合由數(shù)十或數(shù)百臺(tái)服務(wù)器組成的數(shù)據(jù)庫(kù),它的路線圖中已經(jīng)包含對(duì)MapReduce引擎的內(nèi)置支持

不適合的場(chǎng)景:

  • 要求高度事務(wù)性的系統(tǒng)
  • 傳統(tǒng)的商業(yè)智能應(yīng)用
  • 復(fù)雜的跨文檔(表)級(jí)聯(lián)查詢

五、es

1、什么是es

? es是一個(gè)分布式可擴(kuò)展的實(shí)時(shí)搜索和分析引擎,一個(gè)建立在全文搜索引擎Apache lucene基礎(chǔ)上的搜索引擎。不僅包括了全文搜索功能,還可以進(jìn)行一下工作:

  • 分布式實(shí)時(shí)文件存儲(chǔ),并將每一個(gè)字段都編入索引,使其可以被搜索
  • 實(shí)時(shí)分析非分布式搜索引擎
  • 可以擴(kuò)展到上百臺(tái)服務(wù)器,處理PB級(jí)別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)

2、原理

涉及概念:索引,類(lèi)型,文檔,字段,倒排索引

倒排索引原理:

  • 正向索引:用戶在主頁(yè)上搜索關(guān)鍵詞“華為手機(jī)”時(shí),假設(shè)只存在正向索引(forward index),那么就需要掃描索引庫(kù)中的所有文檔,找出所有包含關(guān)鍵詞“華為手機(jī)”的文檔,再根據(jù)打分模型進(jìn)行打分,排出名次后呈現(xiàn)給用戶

    文檔1”的ID > 單詞1:出現(xiàn)次數(shù),出現(xiàn)位置列表

    “文檔2”的ID > 此文檔出現(xiàn)的關(guān)鍵詞列表。

    一般是通過(guò)key,去找value

  • 倒排索引:

    “關(guān)鍵詞1”:“文檔1”的ID,“文檔2”的ID

    “關(guān)鍵詞2”:帶有此關(guān)鍵詞的文檔ID列表。

    從詞的關(guān)鍵字,去找文檔

3、es特征優(yōu)點(diǎn)

  • 高度的可伸縮性:可以搭建大型的分布式集群,處理PB級(jí)的數(shù)據(jù)服務(wù)于大公司,也可以運(yùn)行在單機(jī)上,服務(wù)于小公司

  • ES本身不是新技術(shù),而是將全文檢索、數(shù)據(jù)分析、分布式技術(shù)融合在一起而形成的,lucene(全文檢索)

    商用的數(shù)據(jù)分析軟件(也是有的),

    分布式數(shù)據(jù)庫(kù)(mycat)

  • 開(kāi)箱即用、搭建簡(jiǎn)單

  • 與數(shù)據(jù)庫(kù)互補(bǔ):復(fù)雜數(shù)據(jù)分析,海量數(shù)據(jù)的近實(shí)時(shí)處理;Elasticsearch作為傳統(tǒng)數(shù)據(jù)庫(kù)的一個(gè)補(bǔ)充,提供了數(shù)據(jù)庫(kù)所不能提供的很多功能

  • 高可用提供復(fù)制(replica)機(jī)制,一個(gè)分片可以設(shè)置多個(gè)復(fù)制,使得某臺(tái)服務(wù)器宕機(jī)的情況下,集群仍舊可以照常運(yùn)行。

4、應(yīng)用場(chǎng)景

  • 維基百科
  • The Guardian(國(guó)外新聞網(wǎng)站)
  • Stack Overflow(國(guó)外的程序異常討論論壇)
  • GitHub(開(kāi)源代碼管理)
  • 電商網(wǎng)站
  • 日志數(shù)據(jù)分析
  • 商品價(jià)格監(jiān)控網(wǎng)站
  • BI系統(tǒng)(Business intelligence 商業(yè)智能)

5、常用命令

命令 描述
查看es集群統(tǒng)計(jì)信息 curl -XGET 'http://localhost:9200/_cluster/stats?pretty'
查看所有索引 curl 'localhost:9200/_cat/indices?v'
查看集群的節(jié)點(diǎn)列表 curl 'localhost:9200/_cat/nodes?v'
檢查集群狀態(tài) curl 'localhost:9200/_cat/health?v'
獲取數(shù)據(jù) curl -XGET 'localhost:9200/customer/external/1?pretty' #獲取customer索引下類(lèi)型為external,id為1的數(shù)據(jù),pretty參數(shù)表示返回結(jié)果格式
創(chuàng)建索引 curl -XPUT 'localhost:9200/customer?pretty'
刪除索引 curl -XGET 'localhost:9200/customer/external/1?pretty'
插入數(shù)據(jù) curl -XPUT 'localhost:9200/customer/external/1?pretty' d
查詢數(shù)據(jù) curl 'localhost:9200/bank/_search?q=*&pretty'<br />#返回所有bank中的索引數(shù)據(jù),其中q=*
https://blog.csdn.net/zhuoshengda/article/details/90378466

六、elk

what

? ELK是elasticsearch,logstash,kibana三大開(kāi)源框架首寫(xiě)字母簡(jiǎn)稱。是一個(gè)日志分析架構(gòu)技術(shù)??偡Q,但實(shí)際上ELK不僅僅適用于日志分析,它還可以支持其它任何數(shù)據(jù)分析和收集的場(chǎng)景

how to work

filebeat

image.png

logstash

image.png

es

使用log4j的appender向kafka的topic發(fā)送日志信息,同時(shí)也記錄了文本文件,logstash收到kafka的數(shù)據(jù)存儲(chǔ)起來(lái)過(guò)濾后交給elasticsearch拿去建立索引分析、檢索,最后kibana的web頁(yè)面來(lái)搜索日志、分析出圖表等。

kibana

advantages

  • 強(qiáng)大的搜索功能

  • 完善的展示功能

  • 分布式功能

application scenarios

  • 分部署部署項(xiàng)目,需要收集日志
  • 微服務(wù)架構(gòu)項(xiàng)目,收集各個(gè)服務(wù)的日志
  • 大數(shù)據(jù)行業(yè)

七、nginx

1、what

? Nginx 是一個(gè)使用c語(yǔ)言開(kāi)發(fā)的高性能的HTTP和反向代理web服務(wù)器。由俄羅斯的程序員gor sysoev 所開(kāi)發(fā),官方測(cè)試nginx能夠支支撐5萬(wàn)并發(fā)鏈接,并且cpu、內(nèi)存等資源消耗卻非常低,運(yùn)行非常穩(wěn)定。

2、how to work

? Nginx由內(nèi)核和模塊組成。Nginx本身做的工作實(shí)際很少,當(dāng)它接到一個(gè)HTTP請(qǐng)求時(shí),它僅僅是通過(guò)查找配置文件將此次請(qǐng)求映射到一個(gè)location block,而此location中所配置的各個(gè)指令則會(huì)啟動(dòng)不同的模塊去完成工作,因此模塊可以看做Nginx真正的勞動(dòng)工作者。通常一個(gè)location中的指令會(huì)涉及一個(gè)handler模塊和多個(gè)filter模塊(當(dāng)然,多個(gè)location可以復(fù)用同一個(gè)模塊)。handler模塊負(fù)責(zé)處理請(qǐng)求,完成響應(yīng)內(nèi)容的生成,而filter模塊對(duì)響應(yīng)內(nèi)容進(jìn)行處理。

用戶根據(jù)自己的需要開(kāi)發(fā)的模塊都屬于第三方模塊。正是有了這么多模塊的支撐,Nginx的功能才會(huì)如此強(qiáng)大。

Nginx的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊:

  • 核心模塊:HTTP模塊、EVENT模塊和MAIL模塊
  • 基礎(chǔ)模塊:HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊,
  • 第三方模塊:HTTP Upstream Request Hash模塊、Notice模塊和HTTP Access Key模塊。

Nginx的模塊從功能上分為如下三類(lèi):

  • Handlers(處理器模塊)。此類(lèi)模塊直接處理請(qǐng)求,并進(jìn)行輸出內(nèi)容和修改headers信息等操作。Handlers處理器模塊一般只能有一個(gè)。
  • Filters (過(guò)濾器模塊)。此類(lèi)模塊主要對(duì)其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,最后由Nginx輸出。
  • Proxies (代理類(lèi)模塊)。此類(lèi)模塊是Nginx的HTTP Upstream之類(lèi)的模塊,這些模塊主要與后端一些服務(wù)比如FastCGI等進(jìn)行交互,實(shí)現(xiàn)服務(wù)代理和負(fù)載均衡等功能。

3、advantages

  • 高并發(fā)
  • 內(nèi)存消耗少
  • 成本低
  • 配置文件簡(jiǎn)單
  • 支持rewrite
  • 內(nèi)置健康檢查功能
  • 穩(wěn)定性高
  • 支持熱部署
image.png

4、application scenarios

  • http 服務(wù)器,Nginx是一個(gè)http服務(wù)可以獨(dú)立提供http服務(wù)??梢宰鼍W(wǎng)頁(yè)靜態(tài)服務(wù)器
  • 虛擬主機(jī)??梢詫?shí)現(xiàn)在一臺(tái)服務(wù)器虛擬出多個(gè)網(wǎng)站
    • 基于端口的,不同的端口
    • 基于域名的,不同域名
  • 反向代理,負(fù)載均衡

八、rabbitmq

1、what

RabbitMQ(Advanced Message Queuing Protocol) erlang語(yǔ)言開(kāi)發(fā),支持持久化消息隊(duì)列的消息中間件。應(yīng)用在上下游的層次級(jí)業(yè)務(wù)邏輯中,上級(jí)業(yè)務(wù)邏輯相當(dāng)于生產(chǎn)者發(fā)布消息,下游業(yè)務(wù)邏輯相當(dāng)于消費(fèi)者接受到消息并且消費(fèi)消息。

2、how to work

image.png
  • Broker:rabbitmq集群節(jié)點(diǎn)
  • Exchange:消息交換機(jī),它指定消息按什么規(guī)則,路由到哪個(gè)隊(duì)列
  • Queue:消息隊(duì)列載體,每個(gè)消息都會(huì)被投入到一個(gè)或多個(gè)隊(duì)列
  • binding:綁定,它的作用就是把exchange和queue按照路由規(guī)則綁定起來(lái)
  • Routing Key:路由關(guān)鍵字,exchange根據(jù)這個(gè)關(guān)鍵字進(jìn)行消息投遞
  • vhost:虛擬主機(jī),一個(gè)broker里可以開(kāi)設(shè)多個(gè)vhost,用作不同用戶的權(quán)限分離
  • producer:消息生產(chǎn)者,就是投遞消息的程序
  • consumer:消息消費(fèi)者,就是接受消息的程序
  • channel:消息通道,在客戶端的每個(gè)連接里,可建立多個(gè)channel,每個(gè)channel代表一個(gè)會(huì)話任務(wù)。
  1. 客戶端連接到消息隊(duì)列服務(wù)器,打開(kāi)一個(gè)channel。
  2. 客戶端聲明一個(gè)exchange,并設(shè)置相關(guān)屬性。
  3. 客戶端聲明一個(gè)queue,并設(shè)置相關(guān)屬性。
  4. 客戶端使用routing key,在exchange和queue之間建立好綁定關(guān)系。
  5. 客戶端投遞消息到exchange
  6. exchange接收到消息后,就根據(jù)消息的key和已經(jīng)設(shè)由binding,進(jìn)行消息路里,將消息投遞到一個(gè)或多個(gè)隊(duì)列里

3、advantages

幾種消息隊(duì)列軟件對(duì)比:https://www.cnblogs.com/mengchunchen/p/9999774.html

  • 支持集群化,高可用架構(gòu),消息高可靠支持
  • 復(fù)雜系統(tǒng)的解耦
  • 復(fù)雜系統(tǒng)的異步調(diào)用
  • 瞬時(shí)高峰的削峰處理

4、application scenarios

  • 異步處理
  • 應(yīng)用解耦
  • 流量削峰

九、kafka

1、what

? kafka 是一種高吞吐量的分布式發(fā)布 訂閱消息系統(tǒng),它可以出來(lái)消費(fèi)者在網(wǎng)站中的所有動(dòng)作流數(shù)據(jù)。

2、how to work

image.png

(1)broker

待整理

kafka 常用命令

命令 描述
./kafka-topics.sh --create --topic test1 --replication-factor 2 --partitions 3 --zookeeper hbp001:2181 創(chuàng)建topic
./kafka-topics.sh --zookeeper node01:2181 --alter --topic t_cdr --partitions 10 添加分區(qū)
./kafka-topics.sh --zookeeper hbp201:2181 –list 查看所有topic列表
./kafka-topics.sh --zookeeper hbp201:2181 --describe --topic TopicName 查看指定topic信息
./kafka-console-producer.sh --broker-list node86:9092 --topic t_cdr 控制臺(tái)向topic生產(chǎn)數(shù)據(jù)
https://www.cnblogs.com/aixinge/p/9456381.html

十、zookeeper

1、what

? Zookeeper 是一個(gè)開(kāi)源分布式協(xié)調(diào)服務(wù)。ZooKeeper 的設(shè)計(jì)目標(biāo)是將那些復(fù)雜且容易出錯(cuò)的分布式一致性服務(wù)封裝起來(lái),構(gòu)成一個(gè)高效可靠的原語(yǔ)集,并以一系列簡(jiǎn)單易用的接口提供給用戶使用。是一個(gè)典型的分布式數(shù)據(jù)一致性解決方案,分布式應(yīng)用程序可以基于 ZooKeeper 實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布/訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集群管理、Master 選舉、分布式鎖和分布式隊(duì)列等功能。 一個(gè)最常用的使用場(chǎng)景就是用于擔(dān)任服務(wù)生產(chǎn)者和服務(wù)消費(fèi)者的注冊(cè)中心。即服務(wù)生產(chǎn)者將自己提供的服務(wù)注冊(cè)到 ZooKeeper 中心,服務(wù)的消費(fèi)者在進(jìn)行服務(wù)調(diào)用的時(shí)候先到 ZooKeeper 中查找服務(wù),獲取到服務(wù)生產(chǎn)者的詳細(xì)信息之后,再去調(diào)用服務(wù)生產(chǎn)者的內(nèi)容與數(shù)據(jù)

2、how to work

image.png

3、advantages

  • 最終一致性:客戶端不論連接到哪個(gè)Zookeeper的哪一個(gè)節(jié)點(diǎn),都會(huì)收到同一份狀態(tài)
  • 可靠性
  • 實(shí)用性
  • wait-free:慢的或者失效的client不得干預(yù)快速的client的請(qǐng)求,使得每個(gè)client都能有效的等待
  • 原子性
  • 順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺(tái)server上消息a在消息b前發(fā)布,則在所有Server上消息a都將在消息b前被發(fā)布;偏序是指如果一個(gè)消息b在消息a后被同一個(gè)發(fā)送者發(fā)布,a必將排在b前面

4、application scenarios

  • 數(shù)據(jù)發(fā)布與訂閱
  • 命名空間服務(wù)
  • 分布式通知/協(xié)調(diào)
  • 分布式鎖
  • 集群管理

十一、fastdfs

1、what

? fastDFS 是以C語(yǔ)言開(kāi)發(fā)的一項(xiàng)開(kāi)源輕量級(jí)分布式文件系統(tǒng),他對(duì)文件進(jìn)行管理,主要功能有:文件存儲(chǔ),文件同步,文件訪問(wèn)(文件上傳/下載),特別適合以文件為載體的在線服務(wù),如圖片網(wǎng)站,視頻網(wǎng)站等

2、how to work

image.png
  • 跟蹤服務(wù)器(Tracker Server)

    追蹤服務(wù)器負(fù)責(zé)接收客戶端的請(qǐng)求,選擇合適的組合storage server ,tracker server 與 storage server之間也會(huì)用心跳機(jī)制來(lái)檢測(cè)對(duì)方是否活著。
    Tracker需要管理的信息也都放在內(nèi)存中,并且里面所有的Tracker都是對(duì)等的(每個(gè)節(jié)點(diǎn)地位相等),很容易擴(kuò)展
    客戶端訪問(wèn)集群的時(shí)候會(huì)隨機(jī)分配一個(gè)Tracker來(lái)和客戶端交互

  • 存儲(chǔ)服務(wù)器(Storage Server)

    實(shí)際存儲(chǔ)數(shù)據(jù),分成若干個(gè)組(group),實(shí)際traker就是管理的storage中的組,而組內(nèi)機(jī)器中則存儲(chǔ)數(shù)據(jù),group可以隔離不同應(yīng)用的數(shù)據(jù),不同的應(yīng)用的數(shù)據(jù)放在不同group里面。

  • 客戶端(client)主要是上傳下載數(shù)據(jù)的服務(wù)器,也就是我們自己的項(xiàng)目所部署在的服務(wù)器。每個(gè)客戶端服務(wù)器都需要安裝Nginx

寫(xiě)入數(shù)據(jù)

寫(xiě)操作的時(shí)候,storage會(huì)將他所掛載的所有數(shù)據(jù)存儲(chǔ)目錄的底下都創(chuàng)建2級(jí)子目錄,每一級(jí)256個(gè)總共65536個(gè),新寫(xiě)的文件會(huì)以hash的方式被路由到其中某個(gè)子目錄下,然后將文件數(shù)據(jù)作為本地文件存儲(chǔ)到該目錄中

下載文件

當(dāng)客戶端向Tracker發(fā)起下載請(qǐng)求時(shí),并不會(huì)直接下載,而是先查詢storage server(檢測(cè)同步狀態(tài)),返回storage server的ip和端口,
然后客戶端會(huì)帶著文件信息(組名,路徑,文件名),去訪問(wèn)相關(guān)的storage,然后下載文件。

3、advantages

  • 量的存儲(chǔ),主從型分布式存儲(chǔ),存儲(chǔ)空間方便拓展;
  • fastDFS對(duì)文件內(nèi)容做hash處理,避免出現(xiàn)重復(fù)文件;
  • 然后fastDFS結(jié)合Nginx集成, 提供網(wǎng)站效率
  • 需要的計(jì)算資源少
  • 支持在線擴(kuò)容

4、application scenarios

  • 適合用來(lái)存儲(chǔ)圖片,視頻,文檔
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容