自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 消息队列_16(使用锁保护共享数据,协调异步线程)

如何正确使用锁保护共享数据,协调异步线程在消息队列中,“锁”是一个必须要使用的技术使用锁其实会降低系统的性能锁的原理:任何时间都只能有一个线程持有锁,只有持有锁的线程才能访问被锁保护的资源。1. 避免滥用锁使用锁的原则(参考性):如果能不用锁就不用锁;如果不确定是不是应该用锁,那也不要用锁。使用锁的代价:加锁和解锁需要CPU时间,是个性能的损失。等待锁过程是阻塞状态也会降低程序...

2020-02-18 21:40:35 866

原创 消息队列_15(缓存策略)

缓存策略:如何使用缓存来减少磁盘IO消息队列都使用磁盘文件来存储消息。内存的随机读写速度是磁盘的10万倍!使用内存作为缓存来加速应用程序的访问速度,是几乎所有高性能系统都会采用的方法。一般业务系统,执行比较面的方法上加上一个@Cacheable的注解。1. 选择只读缓存还是读写缓存区别:在更新数据的时候,是否经过缓存。kafka使用的PageCache,典型的读写缓存。应用程序在写文件...

2020-02-16 21:43:24 641

原创 消息队列_14(Kafka如何实现高性能IO)

Kafka如何实现高性能IO?1.使用批量消息提升服务端处理能力kafka内部,消息都是以“批”为单位处理的。消息在kafka中的流转:发送端(Producer)kafka的Producer只提供了单条返送的send()方法,并没有提供任何批量发送的接口。当调用send()方法发送一条消息之后,无论是同步还是异步发送,这条消息不会发送出去,会先缓存起来,然后选择合适的时机把缓存中的所有...

2020-02-15 21:55:16 189

原创 消息队列_13(JMQ的Broker是如何异步处理消息的)

JMQ的Broker是如何异步处理消息的1. JMQ消息队列的Broker,最核心的两个流程:1. 接收生产者发来的消息2. 给消费者发送消息。影响消息队列性能的关键就是消息生产这个业务流程。消息生产的流程需要完成的功能:生产者发送一批消息给Broker的主节点;Broker收到消息之后,会对消息做一系列的解析、检查等处理把消息复制给所有的Broker从节点,并且需要吧消息写...

2020-02-14 21:48:33 419

原创 消息队列_12(内存管理)

内存管理:如何避免内存溢出和频繁的垃圾回收java、Go语言等,采用的都是自动内存管理机制。自动内存管理机制优点:方便,降低开发难度,提升效率,完美地解决内存泄漏问题。同时会存在一些问题。1.自动内存管理机制的实现原理内存管理,主要考虑申请内存和内存回收。申请内存的逻辑:计算要创建对象所需占用的内存大小在内存中找一块连续并且是空闲的内存空间,标记为已占用把申请的内存地址绑定到对...

2020-02-13 21:12:02 542

原创 消息队列_11(传输协议)

传输协议:应用程序之间对话的语言应用程序之间要想互相通信,一起配合来实现业务功能,还需要有一套传输协议来支持。传输协议就是应用程序之间对话的语言。设计传输协议没有太多规范,通信双发正确处理好这个协议且没有歧义就好设计高性能传输协议的方法和技巧:1.如何“断句”在协议中加上“标点符号”,就相当于定义一个分隔符很多传输协议采用这种方法,如HTTP1协议,它的分隔符是换行(\r\n)。...

2020-02-12 22:07:09 205

原创 消息队列_10( 序列化与反序列化:如何通过网络传输结构化的数据)

序列化与反序列化:如何通过网络传输结构化的数据网络传输的数据是结构化的数据,这些数据对应在代码中就可以用一个类(Class)或者一个结构体(Struct)来表示。使用网络框架的API来传输结构化的数据,必须得先实现结构化的数据与字节流之间的双向转换。结构化数据 ——> 字节流 == 序列化,反之为反序列化。序列化用途:网络上的传输数据将结构化的数据保存在文件中海量数据的...

2020-02-11 22:17:22 674

原创 消息队列_09(如何实现高性能的异步网络传输)

如何实现高性能的异步网络传输异步和同步模型最大的区别:同步模型会阻塞线程等待资源,而异步模型不会,它是等资源准备好后,再通知业务代码来完成后续的资源处理逻辑。这种异步设计的方法,很好地解决IO等待的问题。IO密集型系统大部分时间都在执行IO操作,主要包括网络IO和磁盘IO,以及与计算机连接的一些外围设备的访问。现在更加关注的是如何实现高性能的异步网络传输。1.理想的异步网络框架应该是什么样...

2020-02-10 21:56:38 207

原创 消息队列_07(消息积压该怎么处理)

消息积压该怎么处理1. 出现原因系统的某个部分出现了性能问题,来不及处理上游发送的消息,才会导致消息积压2. 优化性能避免消息积压消息队列的性能优化,更关注,在消息的收发两端,我们的业务代码怎么和消息队列配合,达到一个最佳的性能。2.1 发送端性能优化代码发送消息的性能上不去,你需要优先检查一下,是不是发消息之前的业务逻辑好事太久导致的只需要注意设置合适的并发和批量大小,就可以达到很...

2020-02-10 01:25:18 727

原创 消息队列_06(如何处理消息消费过程中的重复消息)

如何处理消息消费过程中的重复消息1.MQTT协议,三种传递消息是的服务质量标准At most once:至多一次。消息在传递时,最多会被送达一次。允许丢消息At least once:至少一次。消息在传递时,至少会被传达一次。不允许丢消息,但允许有少量重复消息Exactly once:恰好一次。消息在传递时,只会被送达一次,不允许丢失也不允许重复。这些服务质量标准对所有的消息队列都是适...

2020-02-10 01:21:42 250 1

原创 消息队列_05(如何确保消息不会丢失)

如何确保消息不会丢失1.检测消息丢失的方法一般有分布式链路追踪系统可以追踪每一条消息或者可以利用消息队列的有序性来验证是否有消息丢失实现方案在producer端给每个消息增加一个连续递增的序号,consumer端来检查这个序号注意kafka和RocketMQ这样的消息队列,不能保证Topicd上的严格顺序,只能保证分区上的消息是有序的,所以在发消息的时候必须指定分区,单独在每个分...

2020-02-10 01:16:36 353

原创 消息队列_04(如何利用事务消息实现分布式事务)

如何利用事务消息实现分布式事务消息队列中的事务,主要解决的是消息生产者和消费者的数据的一致性问题举例:下订单的中删除购物车中的商品分布式事务介绍事务:要么都成功,要么都失败不仅限于数据,可以是文件,远端服务,其他形式存储的数据原子性:一个事务不可分割,要么成功,要么失败一致性:更新完成后读到的数据是更新前或者更新后的数据,不是更新过程的数据隔离性:一个事务的执行不能被其他事务干扰...

2020-02-10 01:07:18 298

原创 消息队列_03(消息模型: 主题和队列有什么区别)

消息模型: 主题和队列有什么区别1.区别队列是一种数据结构,有完整而严格的定义。队列: 先进先出注: 多个生产者发送信息为所有消息合集,顺序为生产者发送消息的自然顺序。多个消费者时,任何一条消息只能被一个消费者收到多个消费者需要共享一个消息,演化出“发布-订阅模型”注:队列和发布-订阅模型最大区别就是一份消息数据能不能被消费多次的问题2. RabbitMQ的消息模型依然使用队...

2020-02-10 00:56:36 383

原创 消息队列_02(如何选择消息队列)

该如何选择消息队列1.基本标准开源流行与其他产品比较好的集成和兼容2.特征消息的可靠传递,确保消息不丢失Cluster:支持集群,某个节点宕机,也不丢消息性能:足够好的性能3.产品3.1 RabbitMQ3.1.1介绍Erlang语言编写,支持AMQP协议轻量级、迅捷最流行的消息中间之一支持灵活的的路由配置生产者(Producer)和队列之间增加Excha...

2020-02-10 00:49:31 103

原创 消息队列_01 (为什么需要消息队列)

为什么需要消息队列1.解决问题 主要功能就是收发消息,但不仅仅是解决应用之间的通信问题2.使用场景2.1 异步处理eg.秒杀系统流程:风险控制——库存锁定——生成订单——短信通知——更新统计数据使用消息队列服务器只需要先实现风控和库存锁定好处更快返回结果;减少等待,提升系统功能2.2 流量控制健壮框架设计思路: 使用消息队列隔离网关和后端服务,以达到流量控制和保护后端服...

2020-02-10 00:38:00 160 1

原创 消息队列_08(异步设计提升系统性能)

如何使用异步设计提升系统性能异步是一种程序设计的思想,使用异步模式设计的程序可以显著减少线程等待,从而在高吞吐量的场景中,极大提升系统的整体性能,显著降低时延。1.异步设计如何提升系统性能eg.实现转账的微服务Transfer(accountFrom,accountTo,amount),这个服务有三个参数:分别是转出账户、转入账户和转账金额。实现过程:从账户A转账100元到账户B中:1...

2020-02-10 00:02:46 155

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除