消息中间件随着分布式系统的发展变得越来越火, 下面就学习课程过程对消息中间件进行解释
概念:(部分内容引用自: 享学课堂课件)
其实并没有标准定义. 一般认为, 消息中间件属于分布式系统中一个子系统, 关注于数据的发送和接收, 利用高效可靠的异步消息传递机制对分布 式系统中的其余各个子系统进行集成.
高效: 对于消息的处理处理速度快.
可靠: 一般消息中间件都会有消息持久化机制和其他的机制确保消息不丢失.
异步: 指发送完一个请求, 不需要等待返回, 随时可以再发送下一个请求, 既不需要等待.
一句话总结, 我们消息中间件不生产消息, 只是消息的搬运工
为什么要用消息中间件?
最初系统设计都是一个整体, 业务相对简单, 一个 war 就可以部署使用, 不涉及系统之间通信问题,
但是随着计算机技术的发展, 系统数据量越来越大, 业务越来越复杂, 一个系统就变得越来越臃肿, 难以维护, 所以出现了分布式概念, 将一个大系统根据业务模块
拆分成多个子系统, 每个子系统分别负责不同的业务职能, 这时就出现了系统与系统之间的数据频繁交互情况, RPC 就是用来做系统间数据交互, 但是由于系统之间直接数据交互依赖性太强, 一个子系统出现问题,
它对应的数据交互就会出现问题进而整个系统的出现问题, 而且随着系统的不断拓展, 子系统越来越多, 不同系统之间数据进行交互, 越来越混乱, 难以管理和维护
所以提出了消息中间件的概念:
无论多少子系统, 消息中间件根据与自己的交互情况分成两部分, 消息生产者和消息消费者
消息生产者: 系统向中间件发送数据, 此时系统为生产者
消息消费者: 系统向中间件请求数据, 此时系统为消费者
当然同一个系统同时存在请求数据和发送数据的情况, 那他即时生产者还是消费者(不同的业务场景下角色不一样罢了)
消息中间件出现解决的问题:
1, 统一对系统间数据交换进行管理, 使得系统间的逻辑层次划分家清晰明了
2, 通过消息中间件中进行数据分析统计更加方便
3, 解耦合, 系统之间通过媒介 (消息中间件) 间接通信, 降低了系统之间的相互依赖
4, 异步通信, 系统之间交互无需等待对方的回复, 只要将消息成功发送到中间件即可(可独立的进行自己的业务, 降低系统间依赖)
5, 缓冲能力, 消息中间件像是一个巨大的蓄水池, 将高峰期大量的请求存储下来慢慢交给后台进行处理, 避免了大数据量的系统交互出现的系统崩溃问题, 对于秒杀业务来说尤为重要.
6, 缓冲能力 伸缩性 伸 缩 性 , 是 指 通 过 不 断 向 集 群 中 加 入 服 务 器 的 手 段 来 缓 解 不 断 上 升 的 用 户 并 发 访 问 压 力 和 不 断 增 长 的 数 据 存 储 需 求 . 就 像 弹 簧 一 样 挂 东 西 一 样 , 用 户 多 , 伸 一 点 , 用 户 少 , 浅 一 点 , 啊 , 不 对 , 缩 一 点 . 是 伸 缩 , 不 是 深 浅 . 衡 量 架 构 是 否 高 伸 缩 性 的 主 要 标 准 就 是 是 否 可 用 多 台 服 务 器 构 建 集 群 , 是 否 容 易 向 集 群 中 添 加 新 的 服 务 器 . 加 入 新 的 服 务 器 后 是 否 可 以 提 供 和 原 来 服 务 器 无 差 别 的 服 务 . 集 群 中 可 容 纳 的 总 的 服 务 器 数 量 是 否 有 限 制 .
7, 扩展性 扩 展 性 , 主 要 标 准 就 是 在 网 站 增 加 新 的 业 务 产 品 时 , 是 否 可 以 实 现 对 现 有 产 品 透 明 无 影 响 , 不 需 要 任 何 改 动 或 者 很 少 改 动 既 有 业 务 功 能 就 可 以 上 线 新 产 品 . 比 如 用 户 购 买 电 影 票 的 应 用 , 现 在 我 们 要 增 加 一 个 功 能 , 用 户 买 了 铁 血 战 士 的 票 后 , 随 机 抽 取 用 户 送 异 形 的 限 量 周 边 . 怎 么 做 到 不 改 动 用 户 购 票 功 能 的 基 础 上 增 加 这 个 功 能 . 熟 悉 设 计 模 式 的 同 学 , 应 该 很 眼 熟 , 这 是 设 计 模 式 中 的 开 闭 原 则 ( 对 扩 展 开 放 , 对 修 改 关 闭 ) 在 架 构 层 面 的 一 个 原 则
消息中间件和 RPC(远程系统调用)区别 --RPC 就是实现了子系统之间的直接数据交互
1,RPC 同步的, 消息中间件是异步的
2,RPC 系统间依懒性太强, 消息中间件系统间依赖性较低
未待完续......
来源: http://www.bubuko.com/infodetail-3203329.html