服务架构:Web-Queue-Worker架构
创始人
2025-06-28 00:42:55
0

  1. 这种架构的核心组件包含:
  2. 一个Web前端,用户可以通过这里发送请求
  3. 一个worker服务,它可以执行资源密集型任务、耗时的工作流或批处理作业。

Web前端和worker服务通过一个消息队列进行通信。

这个架构中还包含其它一些组件:

  • 一个/多个数据库
  • KV Cache,用来降低数据库的负载
  • CDN系统,提供静态资源的访问加速
  • 远程服务,比如email或消息发送服务,通常是第三方的服务
  • 身份认证服务,比如Google Oauth登录服务

Web前端和worker服务都是无状态的。作业的会话状态通常存储在分布式存储里(比如Redis集群)。worker通过异步的方式处理耗时的作业,我们通常使用消息队列来触发作业的创建和执行,或者通过一个定时任务调度批处理任务。worker并不是必须的,如果没有耗时的操作,就不需要它。

前端除了页面的部分,也可以提供web API(BFF层)。在client端,我们可以通过一个单页应用触发ajax请求,或者使用原生的APP去触发。

应用场景

Web-Queue-worker架构在云服务中很常见,比如函数计算服务(FAAS)。这类服务通常会提供 HTTP API 或 RPC API,同时支持消费Kafka来的流式消息。目前流行的低代码也是由此衍生出来的。

该架构适用于以下的场景:

  • 应用的业务领域/场景比较简单
  • 应用包含了一些耗时的工作流或批处理任务;
  • 想要低成本地接入现有的服务,而不是从Infra开始搭建

架构优势

  • 架构简单易懂;
  • 部署和管理很简单;
  • 服务职能边界清晰;
  • 前端和worker是解耦的,消息队列使用现成的技术即可;
  • 前端和worker可以独立进行扩容;

有哪些挑战

  • 如果设计不合理,前端和worker都可能融入太多的逻辑,变得越来越重。后期演变成单体架构后,很难维护和升级;
  • 如果前端和worker共享了一些数据结构或代码,可能会有隐藏的依赖;

最佳实践

  • 暴露给client的API必须清晰明了,经过良好的设计;对于HTTP请求,可以遵循REST协议;
  • 对于工作负载的变化,启动自动扩缩容;云平台和K8s都提供了监控实例CPU/内存自动扩缩容的能力;
  • 对于半静态的数据,使用缓存进行加速访问;比如memcached/memory cache等;
  • 使用CDN对静态资源进行缓存加速;
  • 根据需求使用混合持久化方案。比如关系数据库和非关系型数据库混合使用,比如KV存储、文档数据库、搜索数据库、时序数据库、列式存储数据库、图数据库等。数据库之间,可以采用最终一致性方案进行数据同步;
  • 对数据进行分区,分区可以更好地支持扩容,减少竞争读写问题,提升访问性能。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...