加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

消息队列、消息代理和消息中间件

发布时间:2021-04-28 12:37:27 所属栏目:传媒 来源:互联网
导读:么是中间件?我的理解是: 中间件是帮助应用程序与其他应用程序、网络、硬件、操作系统交互或通信的软件。 换句更简洁的话:「将具体业务和底层逻辑解耦的软件」。其实符合中间件的软件范畴非常宽,日常用的Redis、Nginx、Zookeeper、Memcached等等都是「中间

么是中间件?我的理解是:

中间件是帮助应用程序与其他应用程序、网络、硬件、操作系统交互或通信的软件。

换句更简洁的话:「将具体业务和底层逻辑解耦的软件」。其实符合中间件的软件范畴非常宽,日常用的Redis、Nginx、Zookeeper、Memcached等等都是「中间件」。所谓的「中间」是相对于架构体系内的,它不涉及具体的业务逻辑也不涉及底层的硬件逻辑,用于用户数据交换和管理,能够起到「中介」的作用,这就是中间件。

那么问题来了:为什么需要中间件的帮助(代理),直接去和对应的应用程序、硬件、操作系统等交互/通信不好嘛?

回答问题前,我们要明确一点:任何中间件必然是为了解决特定领域的某个(些)问题而出现的。

我举2个例子来帮助大家理解。

1. 数据库中间件

当项目很小的时候,直接使用编程语言下的数据库驱动操作数据库就可以了,有些开发会用ORM的方式操作数据库:这是够用的。

但随着业务发展,数据量和读写QPS越来越高,主从模式的MySQL实例压力越来越大,单纯的对服务器硬件升级已经无法满足生产环境的需要。在我司不成文的习惯是单表不要超过5千万条记录,数据库量大的时候就设计分库分表,也就是「分而治之」,把QPS和数据量分片限定在一个范围内。

当然还有很多其他相关的功能,如读写分离、路由策略、统计、管理、鉴权等等。这些是在业务逻辑之上的,不应该在业务代码中把这部分堆进去,应该抽象它们出来作为一个独立的组件,这就是数据库中间件。外还有Cetus ,作者是tcpcopy的作者,这个项目还在不断维护,有同学有兴趣的可以试试。当然其实各大公司内部都有自己的数据库中间件产品,更多的贴近公司的业务产品和基础设施。

2. Web框架中间件

一般Web框架都支持中间件,Web框架中间件的本质是插件系统,是一系列的框架钩子,在收到请求和返回响应这个过程里面去做一些额外的事情。中间件种类很多,举例一些:

  • 响应压缩
  • 记录日志
  • 支持会话Session
  • CSRF保护
  • 验证/身份鉴别
  • 访问控制
  • 资源使用检查(如内存占用)
  • 请求指标
  • 健康检查
  • 静态资源管理 …

这些中间件将业务和非业务代码功能进行解耦:

框架里面可能内置了一些常用的中间件,也可能只是内置中间件支持。你可以配置使用某个(些),也能方便的自定义中间件

Web视图中不需要手写中间件逻辑,按约定好的用法框架会在对应的生命周期中按照约定的顺序去执行这些中间件逻辑

PS:Golang语言中最知名的Web框架Gin支持中间件,而且还官网搞了个叫gin-gonic/contrib的项目搜集社区里面的中间件。

消息队列(Message Queue)

消息队列就是Message+Queue。其实消息可以说是一个数据传输单位,它包含了创建时间、通道/主题信息、输入参数等全部数据;队列(Queue)是一种F

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读