54__算法实战(三):剖析高性能队列Disruptor背后的数据结构和算法
Disruptor 你是否听说过呢?它是一种内存消息队列。从功能上讲,它其实有点儿类似 Kafka。不过,和 Kafka 不同的是,Disruptor 是线程之间用于消息传递的队列。它在 Apache Storm、Camel、Log4j 2 等很多知名项目中都有广泛应用。
Disruptor 你是否听说过呢?它是一种内存消息队列。从功能上讲,它其实有点儿类似 Kafka。不过,和 Kafka 不同的是,Disruptor 是线程之间用于消息传递的队列。它在 Apache Storm、Camel、Log4j 2 等很多知名项目中都有广泛应用。
你好,我是倪朋飞。
上一节,我带你学习了,如何使用 USE 法来监控系统的性能,先简单回顾一下。
系统监控的核心是资源的使用情况,这既包括 CPU、内存、磁盘、文件系统、网络等硬件资源,也包括文件描述符数、连接数、连接跟踪数等软件资源。而要描述这些资源瓶颈,最简单有效的方法就是 USE 法。
上一节课中,我们讲了组合模式。组合模式并不常用,主要用在数据能表示成树形结构、能通过树的遍历算法来解决的场景中。今天,我们再来学习一个不那么常用的模式,享元模式(Flyweight Design Pattern)。这也是我们要学习的最后一个结构型模式。
你好,我是七牛云许式伟。
保障业务的 7x24 小时不间断服务并不容易,所以我们花费了非常长的篇幅来探讨这件事情。我们需要系统性的、结构化的解决方案,它的涉及面非常广,需要基础架构、中间件、SRE 工作平台等多个层次、多个工种之间的紧密配合。
从今天开始,我们进入了专栏的第 5 部分 —— 寻路:路在何方?这是一条关于方向、角色和自我定位的探索,那就让我们开始一起走走这条程序江湖路吧。
大约三年前吧,读到一篇文章《为何我工作十年,内心仍无比恐慌》,来自一位腾讯产品总监的演讲分享。文中分析了一个让其感到恐慌与焦虑的深层次原因:好像不会什么技能,技能门槛低。
前面,我讨论了 Sidecar 边车模式,这是一个非常不错的分布式架构的设计模式。因为这个模式可以有效地分离系统控制和业务逻辑,并且可以让整个系统架构在控制面上可以集中管理,可以显著地提高分布式系统的整体控制和管理效率,并且可以让业务开发更快速。
上一讲,我们学习了一个精妙的想法,Disruptor 通过缓存行填充,来利用好 CPU 的高速缓存。不知道你做完课后思考题之后,有没有体会到高速缓存在实践中带来的速度提升呢?
微服务是最近几年才兴起的概念。简单点讲,就是把复杂的大应用,解耦拆分成几个小的应用。这样做的好处有很多。比如,这样有利于团队组织架构的拆分,毕竟团队越大协作的难度越大;再比如,每个应用都可以独立运维,独立扩容,独立上线,各个应用之间互不影响。不用像原来那样,一个小功能上线,整个大应用都要重新发布。
你好,我是倪朋飞。
上一节,我们一起学习了,应用程序监控的基本思路,先简单回顾一下。
应用程序的监控,可以分为指标监控和日志监控两大块。
在跨多个不同应用的复杂业务场景中,你还可以构建全链路跟踪系统。这样,你就可以动态跟踪调用链中各个组件的性能,生成整个应用的调用拓扑图,从而加快定位复杂应用的性能问题。
上一节,我们讲了存储虚拟化,这一节我们来讲网络虚拟化。
网络虚拟化有和存储虚拟化类似的地方,例如,它们都是基于 virtio 的,因而我们在看网络虚拟化的过程中,会看到和存储虚拟化很像的数据结构和原理。但是,网络虚拟化也有自己的特殊性。例如,存储虚拟化是将宿主机上的文件作为客户机上的硬盘,而网络虚拟化需要依赖于内核协议栈进行网络包的封装与解封装。那怎么实现客户机和宿主机之间的互通呢?我们就一起来看一看。