如何搭建一个支持百万级并发的企业级聊天架构。同样,企业也需要通过聊天应用为用户解决问题,实现企业的服务价值。下面就和我们一起探讨如何设计和构建一个企业级的聊天应用架构来承载百万并发用户和消息。聊天模型的标准架构一般来说,标准聊天架构包括两个主要部分:聊天服务器引擎和客户端聊天组件。聊天服务器引擎-它是负责中继消息操作的服务器组合。客户端聊天部分——它是安装在桌面、移动设备上的聊天应用程序。在令牌的帮助下,聊天服务器引擎处理从服务器向客户端设备发送消息的整个过程。该引擎通常由以下组件组成:聊天WebSocket服务器聊天WebSocket客户端库聊天RESTAPI聊天媒体存储服务器对于一定数量的用户和消息,标准版就足够了;但是当涉及到不同的通信渠道(例如:文本、视频和语音通话)、百万用户连接和企业项目的应用程序定制时,标准架构需要升级。这里介绍MirrorFly聊天API架构,采用基于Erlang的XMPP协议+ejabberd服务器+Mnesia数据库。企业级聊天应用Ejabberd的架构可分为三层:接口层:如前所述,它处理与客户端交换的所有数据。逻辑层:这是最复杂的层。它处理所有与XMPP相关的逻辑和其他功能,例如:HTTP绑定、访问控制、可扩展模块和挂钩。数据层:它处理如何将数据存储到数据库中并确保数据的完整性和相应的约束。接口层该层的主要功能是监听并等待客户端连接到本地端口,然后根据需要建立客户端与服务器之间的连接,交换通信数据。它充当外部世界和ejabberd服务器之间的接口,因为它支持TCP和TLS连接,以及作为传输的UDP。逻辑层是Ejabberd系统中最重要也是最重要的部分。逻辑层有以下功能:Jabber逻辑(Logics):客户端和服务端的连接由模块ejabberd_c2s控制,通常使用TCP端口5222。服务器与服务器之间的连接由模块ejabberd_s2s、ejabberd_s2s_in和ejabber_s2s_out控制,通常使用TCP端口5269。HTTP绑定由模块ejabberd_http控制。路由器:路由器处理各种消息之间的路由,确保消息最终能够到达正确的目的地。例如:当一个Jabber客户端向另一个实体发送消息时,第一个ejabberd会检查“to”属性以确定该属性隐含的主机是否由其自己托管。如果消息是本地消息,应该由ejabberd_local来处理,否则是远程消息,应该视为s2s消息。模块:除了上面提到的核心Jabber和路由器逻辑,我们将大部分ejabberd称为模块。由于这些模块可以随时动态启动或停止,ejabberd服务器即使在运行时也具有高度可扩展性。通常,这些模块广泛用于各种扩展场景(也称为“XEP”)。Hooks:在某些场景下,你可能需要修改ejabberd服务器中的核心逻辑。这就是钩子派上用场的地方。挂钩是一种通过在不更改任何现有代码的情况下将新代码注入目标系统来更改ejabberd行为的方法。例如:如果你想通过消息过滤器过滤掉不需要的消息,你可以将模块钩子添加到“filter_packet/3”钩子。如果你想跟踪客户端发送的所有消息,你可以编写一个函数并将它链接到“user_send_packet/3”。l访问控制(AccessControl):所有用户(包括真正的jabber客户端用户和管理员)信息都以相同的方式存储在ejabberd中。他们的所有权限完全取决于他们所属的组。因此,ejabberd中的访问控制模块使我们能够对用户进行分组区分,从而为不同的用户提供不同的服务。UtilsandLibraries:对于一般用途,ejabberd中还有其他类型的工具和库,例如:XML处理、SASL身份验证、编码、记录器等。其中,值得注意的是ejabberd_logger。是一个非常实用的日志记录模块,可以在各种项目场景中使用。数据层Ejabberd主要使用mnesia作为它的“数据库”。实际上,mnesia是erlang库中内置的一个高性能的key-value存储系统。它具有以下功能:复制。可以跨多个节点复制不同的表。事务原子性。可以将对一系列表的操作分组到单个原子事务中。位置是透明的。可以在不知道数据的真实位置的情况下编写各种程序。极快的实时数据搜索能力。此外,作为一个可扩展的数据库系统,它还提供了复制、实时搜索等功能。当然,ejabberd并不强制用户使用这个数据库。它还提供了各种ODBC接口,方便用户使用其他数据库。例如:用户可以使用存储在现有数据库服务器中的数据进行身份验证;或出于某种目的使用其他关系数据库。一般来说,mnesia适用于快速键值搜索。因此,我们不建议您将其用于“关系”数据的查找场景。使用EnterpriseChatArchitecture的好处可重用性-可以轻松地为任何其他项目重新设计聊天组件。可扩展性——当聊天应用程序(或项目)变得更加复杂并且需要服务更多用户时,这种架构可以处理大量并发用户。定制和集成——该架构可以根据业务需求轻松集成和定制。迁移——组件之间的迁移可以很容易地实现,而不会干扰其他服务器或组件。总结现在,借助微服务架构、Kubernetes、S3桶存储、XMPP协议,Ejabberd开发了一套可扩展的企业级聊天API架构。该架构不仅简单易用,而且可以支持百万级用户的并发规模。你也应该尝试一下。原标题:KeyThingstoKnow:EnterpriseChatArchitectureThatConnectsMillionsofUsers,作者:Parthibakumar
