Apache RocketMQ

RocketMq源码随笔-刷盘

只谈情不闲聊 提交于 2021-01-18 18:57:34
RocketMq源码随笔-刷盘 引言 在rocketmq中有两种刷盘模式:同步刷盘和异步刷盘。 从类图上来看,有三个不同的实现思路。那下面逐一来看过。 适用情况如下 同步刷盘使用GroupCommitService。 异步刷盘且未开启TransientStorePool,使用FlushRealTimeService。 异步刷盘且开启TransientStorePool,使用CommitRealService。 欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。 <!--more--> GroupCommitService GroupCommitService是在同步刷盘的时候会使用到的。 该类有两个属性:requestsWrite和requestsRead。都是使用volatile关键字修饰的List对象。 putRequest 该方法用于将刷盘请求放入。首先是对requestWrite对象进行加锁处理,然后将请求放入其中后,解锁。解锁换成后,调用方法wakeup唤醒可能在休眠中的线程。 doCommit 这个方法是在run方法中被调用。真正实现了数据的磁盘刷写。下面来看下逻辑。 首先是在requestRead上进行加锁。 如果requestRead队列不为空,则进行子流程刷盘操作。 遍历requestRead列表,为每一个元素执行对应的逻辑,如下:

厉害了,Spring Cloud Alibaba 发布 GA 版本!

自古美人都是妖i 提交于 2021-01-16 07:37:13
🐎 小马哥 & Josh Long 🐲 喜欢写一首诗一般的代码,更喜欢和你共同 code review,英雄的相惜,犹如时间沉淀下来的对话,历久方弥新。 相见如故,@杭州。 4 月 18 日,Josh Long 来到了阿里巴巴西溪园区,我们向其演示了 Spring Cloud Alibaba 各个组件的功能和实现方式,Josh Long 看完意犹未尽,表示会在新的 Spring Tips 视频再次介绍 Spring Cloud Alibaba 中的其他组件。(点击文末阅读原文,访问上一期spring-tips-bootiful-alibaba) 画外音:首次遇见,@北京: 我和 Josh Long 的一天 一天后, Spring Cloud Alibaba 发布了首个 GA 版本,此次开发历时 267 天,汇集 26 位 contributor 的努力,覆盖 Spring Cloud Edgware、 Spring Cloud Finchley 和 Spring Cloud Greenwich 3 个版本。 Spring Cloud 联合创始人 Spencer Gibb 在 Spring 官网的博客页面宣布该发板消息。随后,Spring Cloud 官方 Twitter 也发布了此消息 Spring 贺电史: Spring Cloud Alibaba发布第二个版本,Spring

最终一致性案例一(一个支付服务的最终一致性实践案例)

。_饼干妹妹 提交于 2021-01-14 13:34:31
一、前言 “功夫贷”是一款线上贷款 APP,主要是给信用卡优质用户提供纯线上的信用贷款,以期限长、额度高、利息低为主要优势(类似的业务模式主要有宜人贷)。 和任何一种分期贷款一样,符合资质的用户,在功夫贷成功贷款之后,需要在约定还款日还款。目前还款主要有以下这几种方式: 用户在 APP 上主动还款; 系统定时通过后台任务扣款; 催收人员通过内部作业系统,手动发起扣款; 真正的扣款操作(从银行卡扣款)主要是通过第三方支付来完成,比如京东支付、通联等。不同的第三方支付,支持的银行列表和限额不同,费用和稳定性也不尽相同,我们会选择出个最优通道、以及多层级备用通道,为此研发了支付路由系统,同时这些服务商的业务限制 / 出错概率还不低,所以我们又要考虑业务上的一致性,这也是本文要介绍的主题。 扣款业务是比较复杂的,包括如下几个主要步骤: 对业务表 (扣款任务表 / 还款计划表等) 的数据库操作 调用第三方支付 清算入账 这多个子功能需要保证同时成功或者同时失败,其中既有外部第三方调用,又有内部微服务的调用,所以这是个比较典型的分布式事务的场景。由于外部的第三方支付服务有时不稳定、且部分交易可能很长时间才能确认成功。 因此 我们没考虑两阶段提交的分布式事务,而是选择了最终一致性,而为了保证在状态不一致这个时间窗口的准确性 (比如不能在该窗口对用户重复扣款),我们也额外多做了很多的考虑。 二

第三方支付一致性方案

不打扰是莪最后的温柔 提交于 2021-01-14 10:58:08
一、前言 “功夫贷”是一款线上贷款 APP,主要是给信用卡优质用户提供纯线上的信用贷款,以期限长、额度高、利息低为主要优势(类似的业务模式主要有宜人贷)。 和任何一种分期贷款一样,符合资质的用户,在功夫贷成功贷款之后,需要在约定还款日还款。目前还款主要有以下这几种方式: 用户在 APP 上主动还款; 系统定时通过后台任务扣款; 催收人员通过内部作业系统,手动发起扣款; 真正的扣款操作(从银行卡扣款)主要是通过第三方支付来完成,比如京东支付、通联等。不同的第三方支付,支持的银行列表和限额不同,费用和稳定性也不尽相同,我们会选择出个最优通道、以及多层级备用通道,为此研发了支付路由系统,同时这些服务商的业务限制 / 出错概率还不低,所以我们又要考虑业务上的一致性,这也是本文要介绍的主题。 扣款业务是比较复杂的,包括如下几个主要步骤: 对业务表 (扣款任务表 / 还款计划表等) 的数据库操作 调用第三方支付 清算入账 这多个子功能需要保证同时成功或者同时失败,其中既有外部第三方调用,又有内部微服务的调用,所以这是个比较典型的分布式事务的场景。由于外部的第三方支付服务有时不稳定、且部分交易可能很长时间才能确认成功。 因此 我们没考虑两阶段提交的分布式事务,而是选择了最终一致性,而为了保证在状态不一致这个时间窗口的准确性 (比如不能在该窗口对用户重复扣款),我们也额外多做了很多的考虑。 二

林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠

我们两清 提交于 2021-01-13 14:38:13
来源| 阿里巴巴云原生公众号 1 月 7 日消息,中国计算机学会(CCF)在官网宣布,将 2020 年“CCF 杰出工程师奖”授予给了阿里巴巴集团研究员林昊,以表彰其设计开发了阿里巴巴中间件服务框架 HSF(High Speed Framewok)。此次获奖是中国计算机学会对林昊及阿里中间件技术的双重认可。 中国计算机学会(CCF)是国内计算机领域备受瞩目的年度会议之一,“CCF 杰出工程师奖”设立于 2016 年,每次获奖人数不超过两名,授予在计算机工程技术及应用领域有突出成就和重要贡献者。 林昊自 2007 年加入阿里以来,带队见证并参与了阿里巴巴在中间件等基础技术上的演进与发展,其带头研发的 HSF 高性能架构从分布式应用层面以及统一的发布、调用方式层面为电商系统提供支持,方便开发者开发分布式应用以及调用公用功能模块,无需考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。在过去 12 年的时间里,HSF 支撑了 618、造物节、双11、双12、年货节等阿里巴巴历次大促活动的顺利进行,交易量逐年创造新高,在 2020 年 双11 更是创下了每秒处理 58.3 万笔订单创建峰值的傲人记录,是阿里巴巴经济体不可缺少的技术基石。 “ 此次获奖是中国计算机学会对阿里中间件技术的认可 ,”颁奖现场林昊发表获奖感言,“

QPS、TPS、并发用户数、吞吐量关系

六眼飞鱼酱① 提交于 2021-01-13 00:03:31
来源:https://juejin.cn/post/6844904084504313863 QPS 「QPS」 Queries Per Second 是每秒查询率 ,是 「一台服务器」 每秒能够相应的查询次数,是对一个特定的查询服务器 「在规定时间内」 所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。 TPS 「TPS」 Transactions Per Second 也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数, 「QPS和TPS区别」 个人理解如下: TPS即每秒处理事务数,包括 用户请求服务器 服务器自己的内部处理 服务器返回给用户 这三个过程,每秒能够完成N个这三个过程,TPS也就是N; QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。 「例子」 例如:访问一个页面会请求服务器3次,一次访问,产生一个“T”,产生3个“Q” 例如:一个大胃王一秒能吃10个包子,一个女孩子0.1秒能吃1个包子,那么他们是不是一样的呢?答案是否定的,因为这个女孩子不可能在一秒钟吃下10个包子,她可能要吃很久

浅谈:分布式事务

妖精的绣舞 提交于 2021-01-12 20:04:08
在如今的分布式盛行的年代,分布式事务永远都是绕不开的一个话题,今天就谈谈分布式事务相关的一致性与实战解决方案。 一、为什么需要分布式事务 由于近十年互联网的发展非常迅速,很多网站的访问量越来越大,集中式环境已经不能满足业务的需要了,只能按照业务为单位进行数据拆分(包含:垂直拆分与水平拆分),以及按照业务为单位提供服务,从早期的集中式转变为面向服务加构的分布式应用环境。 举一个经典的例子,阿里的淘宝网站随着访问量越来越大,只能按照商品、订单、用户、店铺等业务为单位进行数据库拆分,以及按照业务为单位提供服务接口。 这个时候,为了完成一个简单的业务功能,比如:购买商品后扣款,有可能需要横跨多个服务,涉及用户订单、商品库存、支付等多个数据库,而这些操作又需要再同一个事务中完成,这就涉及到了分布式事务。 本质上来说,分布式事务就是为了保证不同资源服务器的数据一致性。 二、分布式的一致性理论 最早加州大学伯克利分校Eric Brewer教授提出一个分布式系统特性的CAP理论。 1、CAP理论的不可能三角 (1)一致性(Consistency) (2)可用性(Availability) (3)分区容错性(Partition tolerance) 在分布式系统中,是不存在同时满足一致性Consistency、可用性Availability和分区容错性Partition Tolerance三者的。

全链路压测探索实践之路

℡╲_俬逩灬. 提交于 2021-01-12 18:05:31
去年双十一,为了应对零点的峰值流量冲击,我们在八月下旬启动了全链路压测第一次实践。由于从零开始,因此单独搭建了一套和生产1:1的环境,2个月的时间,光环境成本就高达几百万。 经过双十一,压测团队从中汲取了不少的经验和教训。双十一之后,在CTO的指导下和支持下,由基架和性能测试团队快速的投入了全链路压测平台的研发当中。 并且趁着核心系统重构,快速的接入落地,对后续的系统稳定性保障工作,迈出了坚定地一步。 流程导图 梳理阶段 1、系统服务梳理 全链路压测是一个很复杂的工程,其中涉及到多个服务。对整个业务系统进行梳理,确认流量传递的上下游和范围,是首先要做的事情。 2、核心链路梳理 什么是核心链路?现在来看,依然是一个艰难的选择。压测团队在梳理核心链路时,主要从如下几方面来评估: 1)是否是高频访问业务; 2)是否是强依赖的核心环节; 3)是否直接影响生产的交易业务; 4)参考生产实际的QPS指标为维度; 3、外部依赖梳理 确定核心链路后,要对其外部依赖进行进行梳理(比如第三方支付)。由于全链路压测在生产环境进行,因此需要对外部依赖进行mock处理,避免对生产服务造成影响。 4、中间件梳理 为了避免压测流量对生产造成影响,产生脏数据,需要对整个流量传递过程中涉及的中间件进行梳理,让压测流量透传落影子库。 压测流量模拟在请求网关接口时候在header中带上:x-infr-flowtype

字节跳动着么缺人?不卡学历,不卡经验,只要求...

て烟熏妆下的殇ゞ 提交于 2021-01-06 21:19:58
由于国内用户对电商购物的热衷,再加上这些年,商家推出的各种优惠补贴策略和高效快捷的物流,也让大家足不出门享受到了真正的实惠。 但,对于一个 java 程序员 来讲,我更关注的是 系统架构层面 ,从原本的定时秒杀,到现在的各种 活动预热、拼团、定金膨胀、百亿补贴、跨店满减、以及更复杂的组合优惠 ,让用户一时摸不到头脑,虽然扰乱了用户购买的节奏,但也一直保持着持续升温的状态。 那么从 技术层面来分析 的话,这次优惠的复杂程度会造成原本就会有的 集中式秒杀 ,变成了 持续式高并发请求 ,这让我们的技术架构更为复杂,尤其是对 后台系统 而言, 复杂的链路调用 ,更多缓存逻辑和业务叠加给程序员们增加了额外的挑战。 当然像淘宝、京东、拼多多这种体量的用户群,在双十一之前早就做好了应对方案 对于在做 二三线电商 的小伙伴或想要了解淘宝、京东内部架构的小伙伴,我总结了以下几点技术总结: 技术总结: 电商高并发系统架构,SpringCloud Alibaba是如何应对双十一 抗住淘宝双十一的三大利器:Sentinel、Nacos、RocketMQ Sentinel在淘宝双十一洪峰时限流底层实现原理 Alibaba Sentinel对比 Netflix Hystrix区别与优势 Nacos在淘宝中如何抗住百万服务注册发现与配置下发 RocketMQ在双十一秒杀时如何抗住亿级订单数据

RocketMQ 简介

若如初见. 提交于 2021-01-06 14:31:39
文章首发于公众号《程序员果果》 地址 : http://blog.itwolfed.com/blog/97 简介 RocketMQ是由阿里捐赠给Apache的一款低延迟、高并发、高可用、高可靠的分布式消息中间件。经历了淘宝双十一的洗礼。RocketMQ既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。 核心概念 Topic :消息主题,一级消息类型,生产者向其发送消息。 Message :生产者向Topic发送并最终传送给消费者的数据消息的载体。 消息属性 :生产者可以为消息定义的属性,包含Message Key和Tag。 Message Key :消息的业务标识,由消息生产者(Producer)设置,唯一标识某个业务逻辑。 Message ID :消息的全局唯一标识,由消息队列RocketMQ系统自动生成,唯一标识某条消息。 Tag :消息标签,二级消息类型,用来进一步区分某个Topic下的消息分类 Producer :也称为消息发布者,负责生产并发送消息至Topic。 Consumer :也称为消息订阅者,负责从Topic接收并消费消息。 分区 :即Topic Partition,物理上的概念。每个Topic包含一个或多个分区。 消费位点 :每个Topic会有多个分区,每个分区会统计当前消息的总条数