Disruptor

高性能队列——Disruptor

余生长醉 提交于 2021-02-16 23:39:10
背景 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。 目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor以获取高性能。在美团技术团队它也有不少应用,有的项目架构借鉴了它的设计机制。本文从实战角度剖析了Disruptor的实现原理。 需要特别指出的是,这里所说的队列是系统内部的内存队列,而不是Kafka这样的分布式队列。另外,本文所描述的Disruptor特性限于3.3.4。 Java内置队列 介绍Disruptor之前,我们先来看一看常用的线程安全的内置队列有什么问题。Java的内置队列如下表所示。 队列 有界性 锁 数据结构 ArrayBlockingQueue bounded 加锁 arraylist LinkedBlockingQueue optionally-bounded 加锁 linkedlist ConcurrentLinkedQueue unbounded 无锁 linkedlist

蚂蚁金服分布式链路跟踪组件 SOFATracer 数据上报机制和源码分析 | 剖析

旧巷老猫 提交于 2021-02-12 08:29:40
SOFA S calable O pen F inancial A rchitecture 是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所 需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 TraceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的,这些链路数据可用于故障的快速发现,服务治理等。 本文为《剖析 | SOFATracer 框架》第二篇。《剖析 | SOFATracer 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号:<SOFA:TracerLab/> , 目前领取已经完成,感谢大家的参与。 SOFATracer: https://github.com/alipay/sofa-tracer 0、前言 在《 蚂蚁金服分布式链路跟踪组件 SOFATracer 总览|剖析 》一文中已经对 SOFATracer 进行了概要性的介绍。从对 SOFATracer 的定义可以了解到,SOFATracer 作为一个分布式系统调用跟踪的组件,是通过统一的 TraceId 将调用链路中的各种网络调用情况以数据上报的方式记录下来,以达到透视化网络调用的目的。 本篇将针对SOFATracer的数据上报方式进行详细分析,以帮助大家更好的理解

蚂蚁金服分布式链路跟踪组件 SOFATracer 总览 | 剖析

前提是你 提交于 2021-02-12 08:20:29
2019新春支付宝红包技术大揭秘在线峰会将于03-07日开始,点击 这里 报名届时即可参与大牛互动。 SOFA Scalable Open Financial Architecture 是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 TraceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的,这些链路数据可用于故障的快速发现,服务治理等。 本文为《剖析 | SOFATracer 框架》第一篇。《剖析 | SOFATracer 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:TracerLab/ ,文章尾部有参与方式,欢迎同样对源码热情的你加入。 0. 前言 在单体应用时代,我们不需要花费时间去关心调用链路这个东西。 但是链路跟踪不仅仅是在分布式场景下才会有,即使是单体应用,同样也会存在调用链路。 例如,我们把应用中的每个服务接口作为一个链路节点,那么从请求进来到返回响应,把这个过程中多历经的所有的方法接口串联起来,就能组成一条完整的链路,如下图所示: 对于单体应用而言,如果访问一个资源没有成功,那么我们可以很快的锁定是哪一台机器,然后通过查询这台机器上的日志就能定位问题。

Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案

对着背影说爱祢 提交于 2021-01-18 06:30:43
Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案 参考文章: (1)Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案 (2)https://www.cnblogs.com/daoqidelv/p/7043696.html 备忘一下。 来源: oschina 链接: https://my.oschina.net/u/4428122/blog/4909871

为什么大厂面试,都喜欢考算法?

妖精的绣舞 提交于 2020-12-17 12:00:35
“ 语言只是工 具,而算法才是程序的灵魂 。”这句话,我估计你已经听到过无数次。 可一旦具体到日常工作中,我们还是会遇到各类的 「困扰」 : 像数据结构和算法这种脱离实际工作的知识,是不是除了面试,这辈子也用不着?那还有学的必要吗? 哪怕不懂算法,只要把 Java API、开发框架用得熟练,同样能让代码“飞”起来,为什么还要花精力去学? 先不急着解答你的问题,我先问你, 作为一名开发工程师,你真的愿意做一辈子的 「CRUD boy 」 ? 大部分程序员整天都在重复「增删改查」,哪怕是在所谓的“业务开发”中,也只不过是利用已经封装好的现成的接口、类库来堆砌或者翻译业务逻辑。 确实,这很少能用到数据结构或者算法之类的知识。 但是, 不需要自己实现,并不代表什么都不需要了解和掌握! 举个例子,假如你不懂这些类库背后的原理,不懂时间、空间复杂度分析,那又何谈能用好、用对?存储某个业务数据时,又怎么选择用 ArrayList,还是 LinkedList ?调用了某个函数后,又该如何去评估代码的性能和资源的消耗? 清醒一点, 初级程序员才比招式,高级程序员只看内功。 仅仅是一个简单的 ArrayList或Linked List 的选择,就可能带来成千上万倍的性能差别。 这时候,数据结构和算法的价值就完全凸显出来。只要你理解背后的数据结构,可以迅速看出这些类的本质区别。届时根本用不上死记硬背

连载:阿里巴巴大数据实践—数据服务

荒凉一梦 提交于 2020-11-03 16:42:55
阿里数据人都在用的内部技术经验 关注 数智化转型俱乐部 ,数智化不迷路 摘要 服务架构的每次升级,均在性能、稳定性、扩展性等方面有所提升,从而能更好地服务于用户 数据部门产出的海量数据,如何能方便高效地开放出去,是我们一直想要解决的难题。在没有数据服务的年代,数据开放的方式简单、粗暴,一般是直接将数据导出给对方。这种方式不仅低效,还带来了安全隐患等诸多问题。 为此,我们在数据服务这个方向上不断探索和实践。最早的数据服务雏形诞生于2010年,至今已有7个年头。在这期间,随着我们对业务的理解不断加深,同时也得益于新技术的持续涌现,对数据服务架构也进行了多次升级改造。服务架构的每次升级,均在性能、稳定性、扩展性等方面有所提升,从而能更好地服务于用户。 1.服务架构的演进 阿里数据服务架构演 进过程如图6.1所示。 基于性能、扩展性和稳定性等方面的要求,我们不断升级数据服务的架构,依次经历了内部代号为DWSOA、OpenAPI、SmartDQ和OneService的四个阶段。 阿里数据服务架构演进过程 其中, 第四个阶段是统一的数据服务层(即OneService) 。大家心里可能会有疑问:SQL并不能解决复杂的业务逻辑啊。确实,SmartDQ其实只满足了简单的查询服务需求。我们遇到的场景还有这么几类:个性化的垂直业务场景、实时数据推送服务、定时任务服务

美腻了!Java资深架构师带你深度学习字节跳动的亿级流量+高并发

戏子无情 提交于 2020-10-23 10:49:18
随着软件行业的飞速发展,互联网公司对开发者的技能要求也越来越高。而高并发、网络编程、微服务、海量数据的处理等技能,是每一个开发者进阶时的必学知识。为了帮助初级开发者快速掌握这些实用技术,字节跳动架构师总结了一份以“理论+范例”的形式对各个知识点进行了详细的讲解,力争让读者在实践中快速掌握相关知识的PDF。 这份PDF可以划分为三大部分:并发的底层核心技术(第2~6章),互联网应用框架(第7~13章),数据处理(第14~18章)等三部分对高并发系列技术做了系统讲解,几乎所有的知识点都配有详细的案例代码、运行流程的解读及运行结果的截图。 这份PDF作为字节跳动架构师的经典之作,不仅是作者知识的总结,同时还加入了作者自身很多的实战经验!这份PDF现在免费公开,让更多的人接触到了高并发架构,不禁让人肃然起敬,这份PDF的免费获取方式在文末! 并发的底层核心技术篇 第1章高并发概述+第2章系统分析与大型互联网架构设计 第3章高并发相关JVM与JDK新特性案例讲解 本章讲解JVM的底层模型,并介绍JVM对解决高并发问题提供的支持。最后为了让读者能更好地理解本书中的案例代码,还会阐述JDK 8中新增的Lambda和Stream等新特性的使用。 第4章实战解析多线程并发包 第5章分布式网络编程核心技术-远程调用 当单服务器的负载超限时,通常会搭建集群服务或将系统拆分成分布式的结构

真香!阿里P8耗时半年著作660页Java高并发与网络编程实战总结

笑着哭i 提交于 2020-10-16 13:19:16
随着软件行业的飞速发展,互联网公司对开发者的技能要求也越来越高。而高并发、网络编程、微服务、海量数据的处理等技能,是每一个开发者进阶时的必学知识。 这份阿里大佬的实战总结笔记由核心技术、应用框架和数据处理三部分组成。 核心技术介绍了与高并发相关的架构设计及多线程、NIO、网络编程等底层技术 应用框架讲解了目前流行的一些高并发及分布式框架技术,如Disruptor Spring Boot、Spring Cloud等,这些技术也是目前在国内外互联网企业中被广泛应用的; 数据处理部分重点介绍了如何优化数据,如何使用关系型数据库、非关系型数据库及大数据领域的MapReduce技术处理海量数据,从而为高并发场景提供一套完善的存储方案。 总览 因为篇幅限制,下面小编会展示目录和详细内容截图,有需要获取完整文档的朋友帮忙点赞后,私信我【文档资料】就可以了(一定要记得关注我,不然没办法回复陌生人私信)。 第1章高并发概述 第2章系统分析与大型互联网架构设计 第3章高并发相关JVM与JDK新特性案例讲解 第4章实战解析多线程并发包 第5章分布式网络编程核心技术—远程调用 第6章NIO案例解析与高性能聊天室实战 第7章高性能NIO框架Netty实例详解 第8章主流RPC框架解析与跨语言调用案例 第9章实战解析高并发框架Disruptor 第10章手把手开发微服务构建框架Spring Boot

高并发

北战南征 提交于 2020-10-03 07:43:10
应用级缓存 HTTP缓存 Last-Modified、E-Tag 多级缓存 连接池线程池 对象池,复用对象减少创建对象、垃圾回收的开销 连接池,Redis连接池、HTTP连接池、数据库连接池,复用TCP连接来减少创建和释放连接来提升性能 线程池,复用线程提升性能 池化通过复用提升性能。 异步并发 异步Future、异步Callback、异步编排CompletableFuture、异步Web服务实现、请求缓存、请求合并 扩容 单机垂直、水平扩容,应用拆分,数据库拆分,数据库分库分表,数据异构(全局表、ES搜索、异构表) 队列 缓冲队列(Log4j BufferWriter、AsyncAppender),任务队列(线程池LinkedBlockingQueue, Disruptor RingBuffer),消息队列,请求队列,数据总线队列 来源: oschina 链接: https://my.oschina.net/u/2939155/blog/4436688

浅谈常见数据结构和算法的应用系列(一)

痴心易碎 提交于 2020-08-14 07:01:55
近来有小伙伴问我:刷leetcode真的有用吗,觉得收益很小,越刷越迷茫了… 诚然每个人刷题的目的不一样,233酱还不是为了能水几篇文章… 当然不止。我觉得刷题是一件有意思的事,就像小猫小狗咬自己尾巴,玩弄的不亦乐乎。比喻可能不太恰当,是有种沉迷小游戏的感觉。 可是在艰难打野的过程中,我们不要忘了,最重要的是: 了解每种技能包的特点,适合解决的问题和场景。在特定实战场景下能够使用特定的技能包,自创技能包。这才是武功的至高境界。 装X结束,浅谈开始。。 数据结构是指:一种数据组织、管理和存储的格式,它可以帮助我们实现对数据高效的访问和修改。 数据结构 = 数据元素 + 元素之间的结构。 如果说数据结构是造大楼的骨架,算法就是具体的造楼流程。流程不同,效率资源不同。我会两者结合简单探讨下他们的特点和应用。 常见的数据结构可分为: 线性结构、树形结构 和 图状结构 。 常见的算法有: 递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法 等。 本文从 线性数据结构、递归 和 排序算法 谈起。 线性结构 线性结构:是指数据排成像一条线一样的结构。每个元素结点最多对应一个前驱结点和一个后继结点。如数组, 链表,栈 ,队列等。 数组 数组是是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用 元素的下标位置