热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

消息中间件是什么

这个问题在网上一堆的答案,最核心的内容包含如下几个:异步解耦、峰值流量控制以及高性能、高可靠等等。这些词都是牛逼又高大上的词,相信读者朋友

 

这个问题在网上一堆的答案,最核心的内容包含如下几个:异步解耦、峰值流量控制以及高性能、高可靠等等。这些词都是牛逼又高大上的词,相信读者朋友或多都了解过一些,没看过至少听过吧。下面我结合自己干了这么几年系统开发的感觉,按我自己思考的方式讲一讲。


  • 依赖

百度百科中解释 “依靠别人或事物而不能自立或自给称为依赖 ”。一个系统一般会包含多个模块,比如:登录、存储、权限管理和系统配置等等,那这模块间就存在着相互依赖关系。例如,A需要完成某个业务逻辑,需要请求B的某个功能,而B又需要C的某个处理过程,那么我们就说A对B存在依赖,B对C存在依赖,也可表示为A->B->C,关系如下图1所示。

图1


  • 单体应用

在学校里面学习编程时,只要考试几乎都是先做一个学生成绩管理系统,那回顾一下这个系统包含哪些模块:登录、学生/老师信息录入、课程录入、选课、成绩录入等,再加上日志、导入/导出、权限控制等基础功能。刚开始我们只是用内存存放数据,在Console捕获输入,打印输出。后来玩到了数据库,那就接一个关系型数据库来持久化,然后就没有然后了....,如下图2。一个普通的高校,少说也有几千人,牛逼的学校几万人,某天学校通知要开始下学期的选课了,然后通知到各个学院、各个系在哪个时间点登录系统去选课。即使错开时间,很多学校的系统也是会出现“哟吼,你访问的服务500”提示,然后一群人在寝室大骂这是哪个傻逼做的系统,可能老师也在埋怨......。

图2

功能、部署都在集中于一个系统的应用,我们称之为单体应用。为了保证服务的高性能、高可靠,一般的系统部署采用负载加多个应用服务器,后面接一个数据库(集群),对于本文的学生成绩管理系统,部署结构如下图3所示。


图3


  • 系统拆分

学生选课需要老师先录入课程,这就存在依赖关系。针对上面系统不可用问题,把老师操作的系统与学生选课系统拆分开来,采用服务化的方式进行集成,这样保证即使学生选课错了问题,老师也可以继续录入课程,如下图4所示。

图4

这下老师、学生稍微可以缓一缓了。为保证学生选课系统里靠谱点,在老师进行课程登记时出了问题,已登记的课程学生任然可以继续选课,考虑在学生选课系统里进行多线程异步调用课程登记接口获取课程信息,在课程系统回复后在进行信息传递,也即使提高了系统的容错能力。


  • 系统解耦

前面这种方案还是会对学生选课系统造成影响,比如大量的异常日志导致系统不稳定。同时也不适用与业务扩展。通过引入中间的服务处理程序把这种调用关系进行拆分来满足业务解耦,如下图5所示。

 

至此,引出了消息中间件方案,这里描述的时系统解耦,其他关于峰值流量控制、高性能、高可靠都可以类比推理。

 


推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
author-avatar
hk129
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有