微语集 群部署方案
概述
微语系统支持两种部署模式:
- 开源社区版:支持单机部署,适合小型团队或个人使用
- 企业版:支持集群部署,适合中大型企业使用,提供高可用性和水平扩展能力
- 平台版:同企业版,支持集群部署,提供高可用性和水平扩展能力
本文档主要介绍企业版的集群部署方案,帮助您在生产环境中实现高可用、高并发的微语系统。
集群架构
微语系统的集群架构主要包括以下几个部分:
- 负载均衡层:Nginx或云服务商提供的负载均衡服务
- 应用服务层:多个微语服务实例
- 消息中间件:Apache ActiveMQ Artemis
- 数据存储层:MySQL、ElasticSearch、Redis集群
- 文件存储层:MinIO对象存储或共享文件系统
架构说明
微语服务实例与数据存储的交互采用两种方式:
- 直接连接(蓝色实线):用于同步操作,如用户登录验证、数据查询、配置管理等
- 消息中间件(橙色虚线):用于实时消息传递、状态同步、异步处理等
- 异步处理(灰色虚线):消息中间件与数据存储的异步交互
集群部署步骤
1. 部署 Artemis 消息中间件
集群部署的核心是让多个微语服务实例共享同一个消息中间件。首先,我们需要部署 Artemis:
详细说明:有关 Artemis 消息中间件的安装部署、配置及使用的完整说明,请参考 Artemis 消息中间件文档
2. 配置微语服务连接Artemis
集群环境中,所有微语服务实例需要连接到同一个Artemis消息中间件。请为每个微语服务实例配置以下内容:
- 在配置文件中将Artemis模式修改为
native
- 使用相同的Artemis broker-url地址
- 配置适当的JMS监听器参数
重要提示:请确保所有服务实例使用相同的Artemis服务器地址。在生产环境中,建议使用内网地址以提高消息传输效率并增强安全性。
配置具体示例及详细参数设置请参考 Artemis 消息中间件文档
3. 部署多个微语服务实例
在不同服务器上部署多个微语服务实例,确保它们都连接到同一个Artemis消息中间件。
Docker部署示例
详细的Docker部署说明请参考:Docker部署文档
4. 配置文件存储
在集群环境中,所有微语服务实例需要共享同一个文件存储系统,以确保文件访问的一致性。推荐使用 MinIO 对象存储作为集群的文件存储解决方案。
重要提示:所有服务实例必须使用相同的文件存储配置,确保文件访问的一致性。
详细配置:
- 有关 MinIO 的详细安装、配置和管理说明,请参考 MinIO 对象存储文档
- 有关文件上传的完整配置说明,请参考 文件上传配置文档
5. 配置负载均衡
使用Nginx或云服务商提供的负载均衡服务,将请求分发到多个微语服务实例。
Nginx配置示例
首先,在nginx.conf的http块中添加upstream配置:
# 在nginx.conf文件中的http模块中添加
http {
# ... 已有配置 ...
# 配置REST API服务的负载均衡(可以根据需要修改upstream名称,例如替换"weiyuai"为你的系统名称)
upstream weiyuai {
ip_hash; # 同一IP访问同一服务器,保持会话一致性
server 127.0.0.1:9003 weight=2 max_fails=10 fail_timeout=60s;
# 如需部署多台服务器实例,添加更多server行,例如:
# server 172.16.81.2:9003 weight=2 max_fails=10 fail_timeout=60s;
# server 172.16.81.3:9003 weight=2 max_fails=10 fail_timeout=60s;
}
# 配置WebSocket服务的负载均衡(可以根据需要修改upstream名称,例如替换"weiyuaiwss"为你的系统名称+wss)
upstream weiyuaiwss {
ip_hash; # WebSocket连接必须保持会话一致性
server 127.0.0.1:9885 weight=2 max_fails=10 fail_timeout=60s;
# 如需部署多台服务器实例,添加更多server行,例如:
# server 172.16.81.2:9885 weight=2 max_fails=10 fail_timeout=60s;
# server 172.16.81.3:9885 weight=2 max_fails=10 fail_timeout=60s;
}
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
详细的Nginx配置说明请参考:Nginx配置文档
6. 会话共享与消息同步
多个服务实例之间的交互采用混合模式:
通过消息中间件的交互(实时消息)
- 客服上线消息:客服登录后,上线消息通过Artemis广播到所有服务实例
- 实时聊天消息:客户发送消息后,通过Artemis路由到对应的客服
- 客服状态同步:客服状态变更(在线、忙碌、离线)通过Artemis同步到所有实例
- 系统通知:系统级通知和广播消息
直接数据存储交互(同步操作)
- 用户认证:登录验证、权限检查等
- 数据查询:历史消息查询、配置信息获取等
- 数据写入:消息持久化、用户信息更新等
- 缓存操作:Redis缓存读写操作