各种各样的技术都可以用于高性能事务处理,Fowler的文章中的技术只是最前沿的许多技术之一。我认为最好讨论基本原理以及LMAX如何解决大量基本原理,而不是列出一堆可能不适用于任何人的情况的技术。
对于大型事务处理系统,您希望尽可能执行以下所有操作:
最小化在最慢的存储层中花费的时间。从现代服务器上最快到最慢的服务器有:CPU / L1-> L2-> L3-> RAM->磁盘/ LAN-> WAN。从顺序最快的现代磁盘到最慢的RAM的跃迁都超过1000倍。随机访问甚至更糟。
最小化或消除等待时间。这意味着共享尽可能少的状态,并且,如果必须共享状态,则尽可能避免显式锁定。
分散工作量。在过去的几年中,CPU的速度并没有提高很多,但是它们却变得越来越小,并且8核在服务器上非常普遍。除此之外,您甚至可以将工作分散到多台计算机上,这是Google的方法。这样做的好处是它可以扩展包括I / O在内的所有内容。
根据Fowler的说法,LMAX对每种方法采用以下方法:
保留所有在内存中的状态,在所有的时间。如果整个数据库都可以容纳在内存中,则大多数数据库引擎实际上都会执行此操作,但是它们不想让任何事情碰上机会,这在实时交易平台上是可以理解的。为了在不增加大量风险的情况下实现这一目标,他们必须构建一堆轻量级的备份和故障转移基础架构。
对输入事件流使用无锁队列(“中断器”)。与传统的持久消息队列相反,传统的持久消息队列肯定不是无锁的,实际上通常涉及痛苦缓慢的分布式事务。
不多。LMAX是基于工作负载相互依赖的基础而将这一特性丢在总线下的;一个的结果改变了另一个的参数。这是一个重要的警告,也是Fowler明确指出的警告。他们这样做使一些使用并发的,以提供故障转移功能,但所有的业务逻辑都在处理单线程。
LMAX 不是实现大规模OLTP的唯一方法。因此,即便是在自己的权利相当辉煌,你就不会需要以决绝的性能水平使用出血边缘技术。
在上述所有原则中,#3可能是最重要和最有效的,因为坦率地说,硬件很便宜。如果您可以将工作负载正确地分配到六个核心和几十个计算机上,那么常规并行计算技术将无处不在。您会惊讶地发现,只有一堆消息队列和一个循环分发程序,您可以实现多少吞吐量。它的效率显然不如LMAX(实际上甚至不接近LMAX),但是吞吐量,延迟和成本效益是独立的问题,在这里我们专门讨论吞吐量。
如果您具有与LMAX相同的特殊需求-特别是与业务现实相对应的共享状态,而不是仓促的设计选择-那么我建议您尝试一下它们的组件,因为我对此了解不多否则就适合那些要求。但是,如果我们只是在谈论高可伸缩性,那么我敦促您对分布式系统进行更多研究,因为它们是当今大多数组织(Hadoop和相关项目,ESB和相关体系结构,CQRS以及Fowler还在使用的规范方法)提及等等)。
SSD也将成为游戏规则的改变者。可以说,它们已经是。现在,您可以拥有对RAM的访问时间相似的永久存储,尽管服务器级SSD仍然非常昂贵,但是一旦采用率提高,它们最终将降低价格。 已经对其进行了广泛的研究,其结果令人难以置信,并且随着时间的推移只会越来越好,因此,整个“将一切都保留在内存中”的概念比以前重要得多。因此,我将再次尝试尽可能地关注并发。