免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
仿微信 IM后臺(tái)(億級(jí)流量高并發(fā)) 瘋狂實(shí)戰(zhàn)
分布式、高并發(fā)、億級(jí)流量—— 瘋狂創(chuàng)客圈 死磕Netty 系列之10

億級(jí)流量IM的應(yīng)用場(chǎng)景

隨著移動(dòng)互聯(lián)網(wǎng)、AI的飛速發(fā)展,高性能高并發(fā)IM(即時(shí)通訊),有著非常廣泛的應(yīng)用場(chǎng)景。

一切高實(shí)時(shí)性通訊、消息推送的場(chǎng)景,都需要高并發(fā) IM 。

私信、聊天、大規(guī)模推送、視頻會(huì)議、彈幕、抽獎(jiǎng)、互動(dòng)游戲、基于位置的應(yīng)用(Uber、滴滴司機(jī)位置)、在線教育、智能家居等。

有這么多的應(yīng)用場(chǎng)景,對(duì)于想成長(zhǎng)為JAVA高手的小伙伴們,高并發(fā)IM 都繞不開(kāi)一個(gè)話題。尤其是對(duì)于APP開(kāi)發(fā)的小伙伴們來(lái)說(shuō),即時(shí)通訊,已經(jīng)成為大多數(shù)APP標(biāo)配。移動(dòng)互聯(lián)網(wǎng)時(shí)代,推送(Push)服務(wù)成為App應(yīng)用不可或缺的重要組成部分,推送服務(wù)可以提升用戶的活躍度和留存率。我們的手機(jī)每天接收到各種各樣的廣告和提示消息等大多數(shù)都是通過(guò)推送服務(wù)實(shí)現(xiàn)的。

隨著5G時(shí)代物聯(lián)網(wǎng)的發(fā)展,未來(lái)所有接入物聯(lián)網(wǎng)的智能設(shè)備,都將是IM系統(tǒng)的客戶端,這就意味著推送服務(wù)未來(lái)會(huì)面臨海量的設(shè)備和終端接入。為了支持這些千萬(wàn)級(jí)、億級(jí)終端,一定是需要強(qiáng)悍的后臺(tái)系統(tǒng)。對(duì)于想在后臺(tái)有所成就的小伙伴們來(lái)說(shuō),高并發(fā)IM實(shí)戰(zhàn),更是在終極BOSS PK之前的一場(chǎng)不可或缺的打怪練手。


十萬(wàn)級(jí) 單體IM 系統(tǒng)

路一步一步走,飯一口一口吃。飛起來(lái)之前的第一步,先來(lái)完成一個(gè)并發(fā)量在十萬(wàn)級(jí)別的 IM單體系統(tǒng)架構(gòu)。

首先是IO模型

傳統(tǒng)的BIO模型是肯定不行的,那么就只能使用 NIO 了。和阻塞模式的OIO(old IO)相比,JAVA NIO 的原理,也是比較復(fù)雜的。瘋狂創(chuàng)客圈的這三篇 JAVA NIO 簡(jiǎn)介 | Java NIO Buffer | Java NIO Channel 文件,對(duì)JAVA NIO 做了比較詳細(xì)的介紹。

JAVA NIO本身比較復(fù)雜,如果要通過(guò)JAVA NIO 寫(xiě)一個(gè)大型的程序,更加的復(fù)雜了。于是,一個(gè)非常牛逼的框架就擺在眼前,它就是Netty。 做JAVA NIO 的編程,Netty 一定不能少。Netty 的牛逼之處,就是通過(guò) Reactor 模式pipeline 模式 、future promise模式 這些神一級(jí)的 JAVA設(shè)計(jì)模式,對(duì) JAVA NIO 進(jìn)行了封裝。在使用Netty之前,一定要先了解這幾大模式,一定能事半功倍。

其次是通訊協(xié)議

大部分小伙伴應(yīng)該都聽(tīng)說(shuō)過(guò) openfire 吧。 這個(gè)傳統(tǒng)的企業(yè)級(jí)開(kāi)源IM,使用在高并發(fā)環(huán)境,肯定是非常不合適的。不說(shuō)別的,就說(shuō) openfire 所使用的XMPP協(xié)議。XMPP協(xié)議是一種古老的XML為基礎(chǔ)的通訊協(xié)議(古老不太適合),其弊端就是附加傳輸數(shù)據(jù)量大。并且因其復(fù)雜的通訊過(guò)程,性能會(huì)大大的降低。

另外,openfire 的基礎(chǔ)組件是使用了mina。正因?yàn)閙ina的創(chuàng)始人也是Netty的作者,正是由于看到了mina的劣勢(shì),該大牛才會(huì)自立門(mén)戶,寫(xiě)出了一個(gè)全新的Netty。

相比與機(jī)遇笨重的XML的XMPP,現(xiàn)在互聯(lián)網(wǎng)編程都是用的輕量級(jí)的JSON。所以,建議小伙伴們選擇協(xié)議的時(shí)候,考慮一下JSON的優(yōu)勢(shì)。

單體Netty服務(wù), 僅僅支持十萬(wàn)級(jí)的并發(fā)嗎?

呵呵,肯定不止這個(gè)數(shù)。

在CPU 、內(nèi)存還不錯(cuò)的情況下,如果配置得當(dāng),單體的Netty服務(wù)器,遠(yuǎn)遠(yuǎn)不止支持10萬(wàn)并發(fā),甚至能撐到100萬(wàn)級(jí)別。

至于如何配置呢? 請(qǐng)看 此文 —— Netty 100萬(wàn)級(jí)高并發(fā)服務(wù)器配置


高并發(fā)分布式IM系統(tǒng)架構(gòu)

終于到了重要的小節(jié)了。

先上一圖,看下分布式IM系統(tǒng)的架構(gòu)。對(duì)比下和單體架構(gòu)的不同。

分布式IM的五大組件

  • Netty Server 連接器
    主要用來(lái)負(fù)責(zé)維持和客戶端的TCP連接

  • 連接器集群
    負(fù)責(zé) Netty Server 連接器集群的注冊(cè)、路由、負(fù)載均衡。集群IP注冊(cè)和節(jié)點(diǎn)ID分配。

  • 緩存集群

    負(fù)責(zé)用戶、用戶綁定關(guān)系、用戶群組關(guān)系的緩存。 緩存臨時(shí)數(shù)據(jù)、加快讀速度。

  • DB持久層集群

    存在用戶、群組、離線消息

  • 消息隊(duì)列集群

    用戶狀態(tài)廣播,群組消息廣播


業(yè)務(wù)系統(tǒng)配套功能

上面僅僅是 IM 系統(tǒng)的基本功能,還需要業(yè)務(wù)系統(tǒng)的其他功能進(jìn)行配套。比方說(shuō): 單點(diǎn)登錄訪問(wèn)系統(tǒng),完成用戶身份校驗(yàn)、加密令牌的發(fā)放、令牌簽名合法性校驗(yàn)等接口和功能檢索接口。再比方說(shuō):用戶在線管理系統(tǒng),完成管理用戶在線狀態(tài),負(fù)責(zé)統(tǒng)一保存所有用戶的在線離線狀態(tài)、保存用戶所連接的連接器。

這些個(gè)配置系統(tǒng),也應(yīng)該是分布式的。只是使用restful 短連接實(shí)現(xiàn)。


高并發(fā)分布式IM系統(tǒng)實(shí)戰(zhàn)——技術(shù)選型

  • 核心:

    Netty4.x + spring4.x

  • 業(yè)務(wù)配套系統(tǒng):spring cloud

    基于restful 短連接的分布式微服務(wù)架構(gòu), 完成用戶在線管理、單點(diǎn)登錄系統(tǒng)。

  • 消息隊(duì)列:

    rocketMQ 高速隊(duì)列。整流作用。

  • 底層數(shù)據(jù)庫(kù):mysql+mongodb

    mysql做業(yè)務(wù)還是很方便的,用來(lái)存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù),如用戶數(shù)據(jù)。

? mongodb 很重要,用來(lái)存儲(chǔ)非結(jié)構(gòu)化離線消息。

  • 協(xié)議JSON +自定義數(shù)據(jù)包

fastjson 淘寶的東西。很不錯(cuò)。目前最高效的吧。


實(shí)戰(zhàn)計(jì)劃

瘋狂創(chuàng)客圈,將組織一群小伙伴,逐步實(shí)現(xiàn)整個(gè)源碼,并選擇一些重點(diǎn)的模塊設(shè)計(jì)以博文的形式公開(kāi)。

如果對(duì)源碼有興趣或者分布式設(shè)計(jì)感興趣,想?yún)⑴c到開(kāi)發(fā)過(guò)程當(dāng)中,請(qǐng)加入瘋狂創(chuàng)客圈QQ群。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
分布式架構(gòu)理論篇
分布式服務(wù)框架下,如何做到服務(wù)化最佳實(shí)踐?
對(duì)于Netty的十一個(gè)疑問(wèn)
高級(jí)JAVA工程師需要掌握哪些技術(shù)
分布式應(yīng)用的各基本領(lǐng)域及開(kāi)發(fā)技術(shù)概要(1)
華為架構(gòu)師8年經(jīng)驗(yàn)談:從單體架構(gòu)到微服務(wù)的服務(wù)化演進(jìn)之路
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服