首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >SSE >SSE在微服务架构中如何应用?

SSE在微服务架构中如何应用?

词条归属:SSE

1. 微服务中的SSE连接管理挑战

微服务架构下,SSE 长连接通常终止于网关层(如腾讯云API网关、Kong、Nginx ),或由专门的推送服务统一管理。如果每个微服务实例都直接维护SSE连接,当该实例下线或扩容时,连接到该实例的用户会全部断线并重连,造成较大的重连风暴。推荐方案是将SSE连接管理抽离为独立的推送服务(Push Service),其他微服务通过消息队列或gRPC向推送服务发送事件,由推送服务统一负责向在线客户端广播。

2. 结合消息队列实现事件广播

典型的微服务SSE架构为:多个业务微服务将需要推送的事件发布到消息队列(如腾讯云CMQ、CKafka 、RabbitMQ ),SSE 推送服务消费这些队列中的消息,并通过内存中的连接映射表将消息推送到对应的客户端SSE连接。该方案实现了业务处理逻辑与连接管理的解耦,且支持推送服务的水平扩展(通过按用户ID哈希分片连接到不同推送服务实例)。

3. 服务发现与负载均衡考量

当SSE推送服务需要水平扩展时,客户端的SSE连接会分散到多个推送服务实例上。如果业务服务需要向特定用户推送消息,需要一种机制来确定该用户的SSE 连接当前由哪个推送服务实例持有。常见解决方案包括:使用Redis 等分布式KV存储记录用户ID到推送服务实例地址的映射;或使用腾讯云CMQ等消息队列的广播/订阅能力,让所有推送服务实例都收到消息后各自判断是否需要处理。

4. Kubernetes环境中的部署要点

在腾讯云TKE 等Kubernetes环境中部署SSE推送服务时,需注意:Pod缩容或滚动更新会导致该Pod上的SSE连接全部断开,需确保客户端有自动重连机制;可使用Pod的preStop钩子,在Pod退出前等待足够长时间(如30秒),让客户端重连到其他Pod;Ingress Controller(如Nginx Ingress)需配置足够大的代理读取超时(proxy-read-timeout),避免正常但空闲的SSE连接被Ingress主动断开。

相关文章
微前端架构在现代应用开发中具有的价值
随着互联网应用的不断发展和迭代,传统的单体应用架构已经逐渐无法满足现代应用的需求。为了更好地适应快速变化的市场和业务需求,微服务和微前端架构成为了近年来的热门话题。其中,微前端架构作为前端开发的新兴架构模式,不仅可以提高开发效率、迭代速度和用户体验,还可以提高团队的协作效率和代码复用率,具有很高的业务价值。
用户10245619
2023-04-06
6400
「首席看应用架构」轮询,SSE 和WebSocket,如何选择合适的?
构建实时Web应用程序有点挑战,我们需要考虑如何将数据从服务器发送到客户端。能够“主动”实现这一功能的技术已经存在了很长时间,并且仅限于两种通用方法:客户端请求或服务器请求。
架构师研究会
2019-09-26
5.1K0
Redis在微服务架构中的几种应用场景
本文介绍在SpringCloud中使用Redis作为Pub/Sub异步通信、缓存或主数据库和配置服务器的三种场景应用。
苏先生
2019-04-30
1.8K0
Redis在微服务架构中的几种应用场景
本文介绍在SpringCloud中使用Redis作为Pub/Sub异步通信、缓存或主数据库和配置服务器的三种场景应用。
lyb-geek
2019-05-15
1.2K0
微服务在微信的架构实践
微服务的理念与腾讯一直倡导的“大系统小做”有很多相通之处,本文将分享微信后台架构的服务发现、通信机制、集群管理等基础能力与其上层服务划分原则、代码管理规则等。
Java架构师历程
2018-09-26
4.5K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券