成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何構建支持百萬并發量的企業級聊天架構

譯文
開發 架構
在本文中,我們將通過基礎知識向您介紹如果構建支持百萬并發量的企業級聊天架構。

[[312676]]

【51CTO.com快譯】無論是在醫生與患者之間,還是在客戶與支持代理之間,都需要通過交流來交換信息,進而解決問題。同樣,企業也需要通過聊天應用來為用戶排憂解難,并實現企業的服務價值。下面和我們一起來探討如何設計并構建企業級的聊天應用架構,以承載數百萬級的并發用戶和消息。

聊天模型的標準架構

總的說來,標準的聊天體系架構包括兩個主要部分:聊天服務器引擎和客戶端聊天部件。

  • 聊天服務器引擎 - 它是負責中繼消息操作的多臺服務器組合。
  • 客戶端聊天部分 - 它是被安裝在臺式機、移動設備上的聊天應用程序。

在令牌的協助下,聊天服務器引擎掌控著消息從服務器端發送、并傳遞到客戶端設備上的整個操作過程。該引擎通常由如下組件構成:

  • 聊天WebSocket服務器
  • 聊天WebSocket客戶端庫
  • 聊天REST API
  • 聊天媒體存儲服務器

對于一定數量的用戶和消息來說,標準版本是足以應對的;但是當涉及到不同通信信道(如:文本、視頻和語音呼叫),數百萬個的用戶連接,以及需要根據企業項目進行應用定制時,該標準架構就需要升級了。

在此,我們引入MirrorFly聊天類API架構,它采用的是基于Erlang的XMPP協議 + ejabberd服務器 + Mnesia數據庫。

企業級聊天應用的架構

Ejabberd可以被分為三層:

  • 接口層:如上所述,它處理所有與客戶端往來的數據。
  • 邏輯層:這是最為復雜的一層。它處理所有與XMPP相關的邏輯、以及諸如:HTTP綁定、訪問控制、可擴展模塊、以及鉤子(hooks)等其他功能。
  • 數據層:它處理如何將數據存儲到數據庫中,并確保數據的完整性和滿足相應的約束。

接口層

該層的主要功能是偵聽并等待客戶端連接到本地端口上,然后按需建立客戶端與服務器的連接,交換通信數據。由于支持TCP與TLS方式的連接、以及UDP的傳輸形式,因此它充當了外部世界與ejabberd服務器之間的接口。

邏輯層

作為Ejabberd系統中最主要、也是最重要的部分,邏輯層具有如下功能:

  • Jabber邏輯(Logics):

客戶端與服務器的連接由模塊ejabberd_c2s來控制,通常走的是TCP的5222號端口。服務器與服務器之間的連接由模塊ejabberd_s2s、ejabberd_s2s_in、以及ejabber_s2s_out來控制,通常走的是TCP的5269號端口。而HTTP的綁定,則由模塊ejabberd_http來控制。

  • 路由器(Router):

路由器處理的是各種消息之間的路由,以保證消息能夠最終到達正確的目的地。例如:當Jabber客戶端向另一個實體發送消息時,第一個ejabberd通過查看“to”的屬性,來判斷該屬性所隱含的主機是否由自己所托管。如果該消息屬于本地消息,那么應當交由ejabberd_local來處理,否則屬于遠程消息,應當將其視為s2s消息。

  • 模塊(Modules):

除了上述核心的Jabber與路由器邏輯之外,我們將ejabberd的絕大部分稱為模塊。由于這些模塊可以隨時被動態地啟動或停止,因此ejabberd服務器即使在運行時(runtime)也具有高度的可擴展性。通常,這些模塊被廣泛地使用在各種擴展的場景中(也就是所謂的“XEP”)。

  • 鉤子(Hooks):

在某些場景下,您可能需要修改ejabberd服務器中的核心邏輯。此時鉤子正好能夠派上用場。鉤子是一種在無需更改任何現有代碼的基礎上,通過將新代碼注入目標系統,進而更改ejabberd行為的方法。例如:如果您希望通過消息過濾器,以過濾掉不需要的消息,那么就可以將模塊鉤子添加到“filter_packet/3”鉤子中。而如果您想跟蹤客戶端發送的所有消息,則可以編寫一個函數,并鏈接到“user_send_packet/3”中。

  • l訪問控制(Access Control):

所有用戶(包括真正的jabber客戶端用戶和管理員)信息都是以相同的方式存儲在ejabberd中。他們的所有權限完全取決于其所屬的組群。因此,ejabberd中的訪問控制模塊,使我們能夠按組區分用戶,從而為不同的用戶提供不同的服務。

  • 工具與庫(Utils and Libraries):

出于通用目的,在ejabberd中還存在著其他類型的工具與庫,例如:XML處理、SASL身份驗證、編碼、日志記錄器等。其中,值得注意的是ejabberd_logger。它是一個非常實用的日志模塊,可以被用在各種項目的場景中。

數據層

Ejabberd主要使用mnesia作為其“數據庫”。實際上,mnesia是內置在erlang庫中的一種高性能的鍵值對(key-value)存儲系統。它具有如下功能:

  • 復制。不同的表可以在多個節點間進行復制。
  • 交易原子性??梢詫⒁幌盗斜淼牟僮鞣纸M為單個的原子事務。
  • 位置透明??梢栽谖粗獢祿鎸嵨恢玫那闆r下,編寫各種程序。
  • 極快的實時數據搜索能力。

另外,作為一種可擴展的數據庫系統,它還提供了復制和實時搜索等功能。當然,ejabberd并未強制用戶使用該數據庫。它也提供了各種ODBC接口,方便用戶使用其他的數據庫。例如:用戶可以使用存儲在現有數據庫服務器中的數據,進行身份驗證;或者出于某種目的使用其他關系型數據庫。

通常情況下,mnesia適合于快速的鍵值對搜索。因此,我們不建議您將其用于“關系型”數據的查找場景中。

使用企業型聊天架構的好處

  • 可重用性 - 可以輕松地為其他任何項目重新設計聊天組件。
  • 可擴展性 - 當聊天應用(或稱項目)變得更復雜、需要服務于更多的用戶時,此類架構能夠應對大量的并發用戶數。
  • 定制與集成 - 可以根據業務需求,輕松地將該架構進行集成與定制。
  • 遷移 - 可以輕松地實現組件之間的遷移,而不會干擾到其他的服務器或組件。

總結

如今,借助微服務架構、Kubernetes、S3 bucket storage、以及XMPP協議,Ejabberd開發了一整套具有可擴展性的企業級聊天API架構。該架構不但簡單易用,而且能夠支持百萬用戶的并發規模。您也去試試吧。

原文標題:Key Things to Know: Enterprise Chat Architecture That Connects Millions of Users,作者:Parthiba kumar

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2021-10-11 14:28:25

TypeScript企業級應用

2009-01-03 14:54:36

ibmdwWebSphere

2009-06-03 14:24:12

ibmdwWebSphere

2014-09-09 14:10:01

企業級HadoopSpark

2024-05-20 11:23:18

2020-07-31 07:45:43

架構系統企業級

2011-05-19 10:57:47

架構

2025-06-23 08:55:00

架構Vue重復提交

2012-05-15 15:21:29

企業級

2017-01-09 16:06:19

2025-03-06 01:00:55

架構推送服務編程語言

2009-04-10 23:08:59

2011-04-14 09:49:16

Novell企業級LinuxSUSE

2023-09-11 12:57:00

大數據大數據中臺

2014-09-24 13:32:41

企業號

2025-05-06 07:19:52

2018-02-02 11:21:25

云計算標準和應用大會

2022-08-12 11:46:50

Kubernetes云原生開源

2016-10-12 17:18:26

私有云持續交付華為

2019-02-12 09:34:00

微博短視頻架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美最猛黑人xxxx黑人 | 国产精品黄视频 | 九九热精品在线 | 久久久精品天堂 | 久久国产免费 | 国产精品完整版 | 色婷婷国产精品 | 男人天堂网av | 久久这里只有精品首页 | 亚洲激精日韩激精欧美精品 | 中文字幕在线观看一区 | 亚洲日本欧美日韩高观看 | 亚洲小视频在线播放 | 日韩福利 | 成人亚洲精品久久久久软件 | 成人黄色电影在线观看 | 亚洲精品4 | 精品国产91 | 免费网站国产 | 91国在线 | 欧美日韩国产精品 | 亚洲欧美一区二区三区国产精品 | 国产欧美日韩在线一区 | 日韩人体在线 | 日韩视频国产 | 一本色道精品久久一区二区三区 | 日本精品视频 | 国产精品a久久久久 | 久久国产欧美日韩精品 | 国产精品1区2区 | 成年人精品视频 | 97视频精品 | 黄色一级电影免费观看 | 在线激情视频 | 岛国av在线免费观看 | 成年女人免费v片 | 台湾a级理论片在线观看 | 精品一二区| 欧美黄色一区 | 亚洲 欧美 日韩 在线 | 久久骚 |