高性能架構(gòu)學(xué)習(xí)路線:zookeeper蔬墩,Nginx,消息中間件耗拓,Redis

(一)Zookeeper分布式環(huán)境指揮官

zookeeper基礎(chǔ)

ZooKeeper是一種分布式協(xié)調(diào)服務(wù)拇颅,用于管理大型主機(jī)。在分布式環(huán)境中協(xié)調(diào)和管理服務(wù)是一個(gè)復(fù)雜的過程乔询。ZooKeeper通過其簡單的架構(gòu)和API解決了這個(gè)問題樟插。ZooKeeper允許開發(fā)人員專注于核心應(yīng)用程序邏輯,而不必?fù)?dān)心應(yīng)用程序的分布式特性竿刁。

分布式應(yīng)用的優(yōu)點(diǎn)

(1)可靠性?- 單個(gè)或幾個(gè)系統(tǒng)的故障不會使整個(gè)系統(tǒng)出現(xiàn)故障黄锤。

(2)可擴(kuò)展性?- 可以在需要時(shí)增加性能,通過添加更多機(jī)器食拜,在應(yīng)用程序配置中進(jìn)行微小的更改鸵熟,而不會有停機(jī)時(shí)間。

(3)透明性?- 隱藏系統(tǒng)的復(fù)雜性负甸,并將其顯示為單個(gè)實(shí)體/應(yīng)用程序旅赢。

分布式應(yīng)用的挑戰(zhàn)

(1)競爭條件?- 兩個(gè)或多個(gè)機(jī)器嘗試執(zhí)行特定任務(wù),實(shí)際上只需在任意給定時(shí)間由單個(gè)機(jī)器完成惑惶。例如,共享資源只能在任意給定時(shí)間由單個(gè)機(jī)器修改短纵。

(2)死鎖?- 兩個(gè)或多個(gè)操作等待彼此無限期完成带污。

(3)不一致?- 數(shù)據(jù)的部分失敗。

(二)Nginx高并發(fā)分流進(jìn)階實(shí)戰(zhàn)

nginx如何實(shí)現(xiàn)高并發(fā)

簡單來講香到,就是異步鱼冀,非阻塞,使用了epoll和大量的底層代碼優(yōu)化悠就。

稍微詳細(xì)一點(diǎn)展開的話千绪,就是nginx的特殊進(jìn)程模型和事件模型的設(shè)計(jì)。

進(jìn)程模型

nginx采用一個(gè)master進(jìn)程梗脾,多個(gè)woker進(jìn)程的模式荸型。

master進(jìn)程主要負(fù)責(zé)收集、分發(fā)請求炸茧。當(dāng)一個(gè)請求過來時(shí)瑞妇,master拉起一個(gè)worker進(jìn)程負(fù)責(zé)處理這個(gè)請求。

master進(jìn)程也要負(fù)責(zé)監(jiān)控woker的狀態(tài)梭冠,保證高可靠性

woker進(jìn)程一般設(shè)置為跟cpu核心數(shù)一致辕狰。nginx的woker進(jìn)程跟apache不一樣。apche的進(jìn)程在同一時(shí)間只能處理一個(gè)請求控漠,所以它會開很多個(gè)進(jìn)程蔓倍,幾百甚至幾千個(gè)。而nginx的woker進(jìn)程在同一時(shí)間可以處理額請求數(shù)只受內(nèi)存限制,因此可以處理多個(gè)請求偶翅。

事件模型

nginx是異步非阻塞的默勾。

每進(jìn)來一個(gè)request,會有一個(gè)worker進(jìn)程去處理倒堕。但不是全程的處理灾测,處理到什么程度呢?處理到可能發(fā)生阻塞的地方垦巴,比如向上游(后端)服務(wù)器轉(zhuǎn)發(fā)request媳搪,并等待請求返回。那么骤宣,這個(gè)處理的worker不會這么傻等著秦爆,他會在發(fā)送完請求后,注冊一個(gè)事件:“如果upstream返回了憔披,告訴我一聲等限,我再接著干”。于是他就休息去了芬膝。此時(shí)望门,如果再有request 進(jìn)來,他就可以很快再按這種方式處理锰霜。而一旦上游服務(wù)器返回了筹误,就會觸發(fā)這個(gè)事件,worker才會來接手癣缅,這個(gè)request才會接著往下走厨剪。

web server的工作性質(zhì)決定了每個(gè)request的大部份生命都是在網(wǎng)絡(luò)傳輸中,實(shí)際上花費(fèi)在server機(jī)器上的時(shí)間片不多友存。這是幾個(gè)進(jìn)程就解決高并發(fā)的秘密所在祷膳。

(三)rabbitMQ消息中間件

(1)Broker: 消息中間件實(shí)例, 可能是單個(gè)節(jié)點(diǎn)也可能是運(yùn)行在多節(jié)點(diǎn)集群上的邏輯實(shí)體

(2)消息(Message):?消息由消息頭和消息體兩部分組成。消息頭中包括routing-key屡立、priority等標(biāo)準(zhǔn)消息頭以及其它自定義消息頭直晨,用于定義RabbitMQ對消息行為。消息體是字節(jié)流侠驯,包含消息內(nèi)容抡秆。

(3)連接(Connection):?客戶端與 Broker 之間的 TCP連接

(4)信道(Channel):?Channel 是建立在 TCP 連接上的邏輯(虛擬)連接。多個(gè) Channel 復(fù)用同一個(gè) TCP 連接, 以避免建立 TCP 連接的巨大開銷吟策。 RabbitMQ 官方要求每個(gè)線程使用獨(dú)立的 Channel, 禁止多個(gè)線程共用 Channel儒士。

(5)生產(chǎn)者(Publisher):?發(fā)送消息的客戶端線程

(6)消費(fèi)者(Consumer):?處理消息的客戶端線程

(7)交換機(jī)(Exchange):?交換機(jī)負(fù)責(zé)將消息投遞到相應(yīng)的隊(duì)列

(8)隊(duì)列(Queue):?接收并保存交換機(jī)投遞的消息,直至被消費(fèi)者成功消費(fèi)檩坚。邏輯結(jié)構(gòu)遵循先進(jìn)先出FIFO着撩。

(9)綁定(Binding):?將隊(duì)列(Queue)注冊到交換機(jī)(Exchange)的路由表

(10)虛擬主機(jī)(Vhost):?每個(gè)Broker下可建立多個(gè)vhost, 每個(gè) vhost 可建立獨(dú)立的 Exchange诅福、Queue、綁定及權(quán)限系統(tǒng)拖叙。同一個(gè) Broker 下的 vhost 共享 Connection氓润、Channel 和 用戶系統(tǒng),就是說可以使用同一個(gè)用戶身份使用同一個(gè) Channel 訪問不同 vhost薯鳍。

(四)ActiveMQ消息中間件

(1)多種語言和協(xié)議編寫客戶端咖气。語言: Java,C,C++,C#,Ruby,Perl,Python,PHP。應(yīng)用協(xié)議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

(2)完全支持JMS1.1和J2EE 1.4規(guī)范 (持久化挖滤,XA消息崩溪,事務(wù))

(3) 對Spring的支持,ActiveMQ可以很容易內(nèi)嵌到使用Spring的系統(tǒng)里面去斩松,而且也支持Spring2.0的特性

(4) 通過了常見J2EE服務(wù)器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測試伶唯,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業(yè)服務(wù)器上

(5) 支持多種傳送協(xié)議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

(6)支持通過JDBC和journal提供高速的消息持久化

(7)從設(shè)計(jì)上保證了高性能的集群惧盹,客戶端-服務(wù)器乳幸,點(diǎn)對點(diǎn)

(8) 支持Ajax

(9)支持與Axis的整合

(10)可以很容易的調(diào)用內(nèi)嵌JMS provider,進(jìn)行測試

(五)Redis高性能緩存數(shù)據(jù)庫

Redis的數(shù)據(jù)結(jié)構(gòu)和相關(guān)常用命令

Key:Redis采用Key-Value型的基本數(shù)據(jù)結(jié)構(gòu)钧椰,任何二進(jìn)制序列都可以作為Redis的Key使用(例如普通的字符串或一張JPEG圖片)

String:String是Redis的基礎(chǔ)數(shù)據(jù)類型粹断,Redis沒有Int、Float嫡霞、Boolean等數(shù)據(jù)類型的概念姿染,所有的基本類型在Redis中都以String體現(xiàn)。

SET:為一個(gè)key設(shè)置value秒际,可以配合EX/PX參數(shù)指定key的有效期,通過NX/XX參數(shù)針對key是否存在的情況進(jìn)行區(qū)別操作狡汉,時(shí)間復(fù)雜度O(1)

GET:獲取某個(gè)key對應(yīng)的value娄徊,時(shí)間復(fù)雜度O(1)

GETSET:為一個(gè)key設(shè)置value,并返回該key的原value盾戴,時(shí)間復(fù)雜度O(1)

MSET:為多個(gè)key設(shè)置value寄锐,時(shí)間復(fù)雜度O(N)

MSETNX:同MSET,如果指定的key中有任意一個(gè)已存在尖啡,則不進(jìn)行任何操作橄仆,時(shí)間復(fù)雜度O(N)

MGET:獲取多個(gè)key對應(yīng)的value,時(shí)間復(fù)雜度O(N)

INCR:將key對應(yīng)的value值自增1衅斩,并返回自增后的值盆顾。只對可以轉(zhuǎn)換為整型的String數(shù)據(jù)起作用。時(shí)間復(fù)雜度O(1)

INCRBY:將key對應(yīng)的value值自增指定的整型數(shù)值畏梆,并返回自增后的值您宪。只對可以轉(zhuǎn)換為整型的String數(shù)據(jù)起作用奈懒。時(shí)間復(fù)雜度O(1)

DECR/DECRBY:同INCR/INCRBY,自增改為自減宪巨。

(六)項(xiàng)目實(shí)戰(zhàn)資料

(1)kafka百萬級吞實(shí)戰(zhàn)

(2)Memcached進(jìn)階實(shí)戰(zhàn)

(3)高性能緩存開發(fā)實(shí)戰(zhàn)

(4)MongoDB進(jìn)階實(shí)戰(zhàn)

需要項(xiàng)目資料(可私信我免費(fèi)領(lǐng)取答案)私信【學(xué)習(xí)資料】即可領(lǐng)取

附加java開發(fā)的資料(面試資源與經(jīng)驗(yàn)總結(jié)磷杏,Dubbo、Redis捏卓、設(shè)計(jì)模式极祸、Netty、zookeeper怠晴、Spring cloud遥金、分布式、高并發(fā)等架構(gòu)技術(shù)視頻教程資料,架構(gòu)思維導(dǎo)圖龄寞,以及面試資料汰规,了解最新的學(xué)習(xí)動態(tài);了解最新的阿里物邑、京東招聘資訊)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溜哮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子色解,更是在濱河造成了極大的恐慌茂嗓,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件科阎,死亡現(xiàn)場離奇詭異述吸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锣笨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門蝌矛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人错英,你說我怎么就攤上這事入撒。” “怎么了椭岩?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵茅逮,是天一觀的道長。 經(jīng)常有香客問我判哥,道長献雅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任塌计,我火速辦了婚禮挺身,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锌仅。我一直安慰自己瞒渠,他們只是感情好良蒸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伍玖,像睡著了一般嫩痰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窍箍,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天串纺,我揣著相機(jī)與錄音,去河邊找鬼椰棘。 笑死纺棺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的邪狞。 我是一名探鬼主播祷蝌,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帆卓!你這毒婦竟也來了巨朦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剑令,失蹤者是張志新(化名)和其女友劉穎糊啡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吁津,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棚蓄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碍脏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梭依。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖典尾,靈堂內(nèi)的尸體忽然破棺而出睛挚,到底是詐尸還是另有隱情,我是刑警寧澤急黎,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站侧到,受9級特大地震影響勃教,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匠抗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一故源、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汞贸,春花似錦绳军、人聲如沸印机。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽射赛。三九已至,卻和暖如春奶是,著一層夾襖步出監(jiān)牢的瞬間楣责,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工聂沙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秆麸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓及汉,卻偏偏與公主長得像沮趣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子坷随,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容