摘要: 一、前言 在高并发、高吞吐量的极限情况下,简单的事情就会变得没有那么简单了。 一个业务逻辑非常简单的微服务,日常情况下都能稳定运行,一到大促就卡死甚至进程挂掉。 一个做数据汇总的应用,按照小时、天这样的粒度进行数据汇总都没有问题,到年底需要汇总全年数据的时候,没等数据汇总出来,程序就死掉了。 出现这 阅读全文
posted @ 2019-09-06 11:50 chjxbt 阅读(941) 评论(0) 推荐(0) 编辑
摘要: 一、前言 应用程序之间要想互相通信,一起配合来实现业务功能,还需要有一套传输协议来支持。设计传输协议,并没有太多规范和要求,只要是通信双方的应用程序都能正确处理这个协议,并且没有歧义就好了。 二、如何“断句” 传输协议也是一种语言,那么在应用程序之间“通话”的过程中,与我们人类用自然语言沟通有很多相 阅读全文
posted @ 2019-09-04 16:47 chjxbt 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 一、前言 在TCP的连接上,它传输数据的基本形式就是二进制流,也就是一段一段的1和0。在一般编程语言或者网络框架提供的API中,传输数据的基本形式是字节,也就是Byte。一个字节就是8个二进制位,8个Bit,所以在这里,二进制流和字节流本质上是一样的。对于我们编写的程序来说,它需要通过网络传输的数据 阅读全文
posted @ 2019-09-04 14:14 chjxbt 阅读(2696) 评论(0) 推荐(0) 编辑
摘要: 一、前言 应用程序最常使用的 IO 资源,主要包括磁盘 IO 和网络 IO。由于现在的 SSD 的速度越来越快,对于本地磁盘的读写,异步的意义越来越小。所以,使用异步设计的方法来提升 IO 性能,我们更加需要关注的问题是,如何来实现高性能的异步网络传输。 二、理想的异步网络框架 大部分语言提供的网络 阅读全文
posted @ 2019-09-03 18:10 chjxbt 阅读(1047) 评论(0) 推荐(0) 编辑
摘要: 一、前言 异步是一种程序设计的思想,使用异步模式设计的程序可以显著减少线程等待,从而在高吞吐量的场景中,极大提升系统的整体性能,显著降低时延。因此,像消息队列这种需要超高吞吐量和超低时延的中间件系统,其核心流程中,一定会大量采用异步的设计思想。 二、异步设计如何提升系统性能? 假设我们要实现一个转账 阅读全文
posted @ 2019-09-02 14:22 chjxbt 阅读(1135) 评论(0) 推荐(1) 编辑
摘要: 一、消息积压的原因 消息积压的直接原因,一定是系统中某个部分出现了性能问题,来不及处理上游发送的消息,才会导致消息积压。 二、优化性能来避免消息积压 在使用消息队列的系统中,对于性能的优化,主要体现在生产者和消费者两部分的业务逻辑中。对于消息队列本身的性能,作为使用者不需要太关注。主要原因是对于绝大 阅读全文
posted @ 2019-08-30 11:50 chjxbt 阅读(1196) 评论(0) 推荐(0) 编辑
摘要: 在消息传递过程中,如果出现传递失败的情况,发送方会执行重试,重试过程中就有可能产生重复的消息。如果没有对重复消息进行处理,就可能导致系统的数据出现错误。 比如,一个消费订单消息,统计下单金额的微服务,如果没有正确处理重复消息,那就会出现重复统计,导致统计结果错误。 一、消息重复的情况必然存在 在MQ 阅读全文
posted @ 2019-08-29 11:36 chjxbt 阅读(994) 评论(0) 推荐(0) 编辑
摘要: 现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制,完全可以做到在消息传递过程中,即使发生网络中断或者硬件故障,也能确保消息的可靠传递,不丢消息。 绝大部分丢消息的原因都是由于开发者不熟悉消息队列,没有正确使用和配置消息队列导致的。虽然不同的消息队列提供的 API 不一样,相关的配置项也不同 阅读全文
posted @ 2019-08-26 17:55 chjxbt 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 一、消息事务 其实很多场景下,我们“发消息”这个过程,目的往往是通知另外一个系统或者模块去更新数据,消息队列中的“事务”,主要解决消息生产者和消息消费者的数据一致性问题。 用户在电商APP上购物时,先把商品加到购物车里,然后几件商品一起下单,最后支付,完成购物流程。 这个过程中有一个需要用到消息队列 阅读全文
posted @ 2019-08-26 15:20 chjxbt 阅读(6340) 评论(1) 推荐(1) 编辑
摘要: 一、消息队列的演进 1、初始阶段 最初的消息队列,就是一个严格意义上的队列。队列是一种数据结构,先进先出,在消息入队出队过程中,保证这些消息严格有序。早期的消息队列就是按照“队列”的数据结构设计的。 队列模型: 生产者(Producer)发消息就是入队操作,消费者(Consumer)收消息就是出队也 阅读全文
posted @ 2019-08-25 14:49 chjxbt 阅读(3564) 评论(0) 推荐(1) 编辑