![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式计算
文章平均质量分 86
vectorX
github账号 100101001
展开
-
实践篇 11 | 万金油的string,为什么不好用了
string类型的内存空间消耗问题。一个图片存储系统,需要快速记录图片ID和图片在存储系统中保存的ID(存储对象id) 根据图片ID查找图片存储id图片数量巨大,用10位数表示图片ID和存储对象ID,如图片ID:1101000051,存储系统中对象ID:3301000051photo_id: 1101000051photo_obj_id: 3301000051键-单值模式,单值指的是键值对的值不是集合。和string类型提供的“一键一值”的保存形式刚好。且String..转载 2021-08-21 19:06:14 · 253 阅读 · 0 评论 -
实践篇 12 | 有一亿个 keys 要统计,应该用哪种集合
在 web 和 移动应用的业务场景中,我们经常要保存这样的信息:单key对应的数据集合。手机APP的用户日登录信息:一天对应一系列的用户ID或移动设备ID 电商网站上商品用户评论列表:一个商品对应一系列的评论 用户在手机APP上的签到打卡信息:一天对应一系列的用户签到记录 应用网站上的网页访问信息:一个网页对应一系列用户的访问点击。我们知道,redis集合类型的特点是一个键对应一系列的数据,所以非常适合用来存取这些数据。但是在这些场景中,除了记录信息,我们往往还需要对集合中数据进..转载 2021-08-21 04:29:12 · 312 阅读 · 0 评论 -
10 | 如何实现高性能的异步网络传输
异步的线程模型,与同步模型的最大区别是,同步模型会阻塞线程等待资源,而异步模型不会阻塞线程,它是等资源准备好后,再通知业务代码来完成后续的资源处理逻辑。这种异步设计的方法,可以很好解决IO等待问题。我们开发的绝大多数业务系统都是IO密集型系统。跟IO密集型系统相对的另一种系统是计算密集型系统。IO密集型系统大部分时间都在执行IO操作,这个IO操作主要包括网络IO和磁盘IO,以及与计算机连接的一些外围设备的访问。与之相对的计算密集型系统,大部分时间都是在使用CPU执行计算操作。我们开发的业..转载 2021-08-20 02:06:34 · 310 阅读 · 0 评论 -
10 | 如何使用异步设计提升系统性能
对开发者来说,异步是一种程序设计的思想,使用异步模式设计的程序可显著减少线程等待,从而在高吞吐的场景中,极大提升系统的整体性能,显著降低延时。因此,像消息队列这种需要超高吞吐量和超低时延的中间件系统,在其核心流程中,一定会大量采用异步的设计思想。接下来,我们一起来通过一个非常简单的例子学习,如何使用异步设计,提升系统性能。异步设计如何提升系统性能?假设我们要实现一个转账的微服务,Transfer(accountFrom, accountTo, amount),这个服务有三..转载 2021-08-11 00:58:47 · 415 阅读 · 0 评论 -
09 | 学习开源代码该如何入手?
对于开源软件,在使用其作为系统重要组成部分,真正用于生产时,仅知道如何使用不行必须掌握原理和细节,以找到最佳使用姿势;在出问题时,基于其原理和一些现象去排查问题原因。掌握开源软件最佳方式是学习源码,但面对上千个源码文件,几十万行代码,无从下手。因此这里来聊一聊,如何下手学习开源软件代码。通过文档来了解开源项目学习源码最佳的方式是先看它的文档。通过文档可以迅速了解整体结构,功能特性,关键技术,实现原理,生态系统等。掌握这些整体的只是,再看源码,可以避免盲人摸..转载 2021-08-10 00:24:44 · 315 阅读 · 0 评论 -
07 | 消息积压了该如何处理?
消息积压的直接原因是系统中,某个部分存在性能问题,来不及处理上游消息。优化性能来避免消息积压消息队列本身的处理能力要远大于业务系统的处理能力。主流产品的单节点,消息收发性能在每秒几万到几十万条,还可以通过水平拓展broker实例数量成倍提升。由于业务代码逻辑远比消息队列复杂,单节点可以达到 百/千 QPS 已经算性能很好了。因此对于优化性能,关注点在消息收发两端,业务代码如何与消息队列配合去达到最优性能。1. 发送端性能优化优先检查发送消息前,业务...转载 2021-08-08 20:50:15 · 660 阅读 · 0 评论 -
06 | 如何处理消费过程中的重复消息
在消息传递过程中,出现传递失败情况,发送方会重试,重试会导致产生重复消息。因此使用消息队列的业务系统若没对重复消息处理,就可能会导致系统数据出错。比如消费订单消息,统计下单金额的服务,就会出现重复统计,导致统计结果出错。可能有人会问,如果消息队列本身能保证消息不重复,应用程序实现不就简单了。那有消息队列能保证这点么?消息重复的情况必然存在在MQTT协议中,给出了三种传递消息时能够提供的服务质量标准。质量从低到高,At most once:最多一次,无消息可靠性,允许丢..转载 2021-08-07 02:11:46 · 167 阅读 · 0 评论 -
05 | 如何保证消息不丢失
对大部分业务系统来说,丢消息意味着数据丢失,是不可接受的。丢消息也成为大部分用消息队列的同学最头痛的问题。目前主流消息队列产品都提供了完善的消息可靠性机制,保证消息的不丢。检测消息丢失的方法丢消息还不知道,是用消息队列的最尴尬情况。一般而言,新系统刚上线,各方面不稳定,需要磨合期,这个时候特别要监控系统中是否有消息丢失的情况。IT基础设施较完善的公司,都有分布式的链路追踪系统,使用类似追踪系统可以很方便地追踪每条消息。而没有,则可以利用消息的有序性进行验证。在Pr..转载 2021-08-06 03:06:25 · 432 阅读 · 0 评论 -
04 | 利用事务消息实现分布式事务
消息队列中的事务,主要解决生产者和消费者的数据一致性问题。以电商为例,用户在电商APP上购物,加商品到购物车,再几件商品一起下单,支付。这个过程中,订单系统会通过消息队列发订单消息给购物车模块,其消费订单消息从购物车中移除下单商品。因为购物车删商品不是下单必须流程的缘故,因此会有上述的异步删购物车数据的操作。订单系统 ===== 创建 ====> 订单库 ====发送订单创建消息 ==> 消息队列 ====> 购物车系统...转载 2021-08-04 23:38:25 · 173 阅读 · 0 评论 -
消息模型: 主题和队列有什么区别
消息模型的演进1. 消息队列,最初架构上,就是一个严格FIFO的结构。消费者 <——接收—— 队列 <——发送—— 生产者消费者出队操作,删除数据,生产者入队操作。服务端存储消息的地方叫队列。若有多个生产者,则多生产者自然顺序投递消息到队列。若有多消费者,他们之间则是竞争关系。若希望消息给每个消费者,即每个消费者都要获取全量消息,比如订单给风控,客服等。不能采用生产者根据消费者数量复制消息到多队列的做法,浪费存储资源且生产和消费就耦合了。2...转载 2021-08-04 02:01:50 · 389 阅读 · 0 评论 -
01 | 为什么要消息队列
以巧克力工厂类比,工厂三个操作环节磨粉,做酱,凝固;使用传送带可提高(通信)效率;使用仓储存储半成品可解决(通信缓存)传送带物品无人接收;一、异步处理> 对于一个电商秒杀请求,如下5步操作1. 风险控制2. 锁库存3. 出订单4. 短信通知5. 更新统计数据APP => 网关 => 后端服务(5步[风控 => 库存 => 订单 => 短信 => 统计])APP => 网关 => 后端服务(2步[风控转载 2021-08-03 01:56:36 · 99 阅读 · 0 评论 -
基于分布式文件系统Hadoop的数据仓库Hive
Hadoop+Hive的架构图什么是数据仓库?它与数据库的区别在哪里?简而言之,数据库是面向事务的设计,数据仓库是面向主题设计的。数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。数据库是为捕获数据而设计,数据仓库是为分析数据而设计,它的两个...原创 2018-11-30 10:13:45 · 513 阅读 · 1 评论