一、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原理

? 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、原理


-
主進(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

logstash

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)定性高
- 支持熱部署

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

- 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ù)。
- 客戶端連接到消息隊(duì)列服務(wù)器,打開(kāi)一個(gè)channel。
- 客戶端聲明一個(gè)exchange,并設(shè)置相關(guān)屬性。
- 客戶端聲明一個(gè)queue,并設(shè)置相關(guān)屬性。
- 客戶端使用routing key,在exchange和queue之間建立好綁定關(guān)系。
- 客戶端投遞消息到exchange
- 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

(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

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

-
跟蹤服務(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ǔ)圖片,視頻,文檔