早在2000年代中期,H-Store第一次在M.I.T.被咱们提出来,VoltDB是H-Store的商业化产品,它表示结构类似的数据会被连续存放到一块儿。在本文的后续描述中,咱们将使用V-H来缩写。
V-H的设计(始于2004年)强调了在每秒可观的低延迟(以毫秒为单位)的状况下,以每秒大规模事务(TPS)的方式实现最大性能。 这样作的理由是,随着更快的辅助存储(例如SSD和NVRAM)的出现,基于磁盘的DBMS的性能将会提升。
综上,必须设计基于RAM的DBMS,这样相对于传统的DBMS系统而言,才具备明显的性能优点。html
V-H采用了3个关键的技术聚焦点:数据库
2.1 聚焦单分区事务性服务器
多节点主内存DBMS必须跨各个节点对数据进行分区。多节点事务不可避免地涉及负载很大的分布式并发控制协议。正如在[Harding]所描述,分布式并发控制大大下降了操做执行速度。若是事务之间存在重大资源等待,吞吐量也会大大下降。为了不这种开销,V-H专一于优化所谓的单分区事务。
在这种状况下,应用程序设计人员应组织其数据,以便几乎全部事务都不会跨越多个节点上的数据。许多应用程序天然是“单个部分”,例如更新单个用户的余额,并检查其受权电话呼叫权限。换句话说,将用户账户划分为多个节点将使上述交易仅跨越一个分区。另外一方面,将资金从一个账户转移到另外一个账户一般不能成为单一分区,由于一般没法将两个账户都汇集在一个分区中。
总而言之,许多应用程序能够作成单个分区,而有些则不能。另外,几个很是大的应用程序都坚持认为全部事务都是单个分区的。所以,他们禁止将多分区事务做为应用程序体系结构的最佳实践,以使性能最大化。
V-H选择针对“单分区”事务进行优化,使其能够达到很高的运行性能。
尽管V-H也能够执行“多分区”事务,但它们的性能并不高。咱们应该在主要是单个分区的场景中使用VoltDB。网络
2.2 聚焦在存储过程架构
大多数OLTP用例主要包含重复性事务,所以,有一些大批量交易类型。由于执行单个事务须要服务器与客户端中的屡次通讯,因此使用ODBC / JDBC执行这些操做不是最佳选择。
NoSQL中单次访问接口的应用程序,其中值被一对一地检索到客户端处理,也会有相似的通讯开销,这不只会致使屡次客户端-服务器通讯开销,并且还会致使对网络带宽使用形成没必要要的压力。相反,若是使用存储过程接口,在这种状况下,事务执行代码(Java和SQL的混合)被移入DBMS,能够仅用一条通讯消息执行它。1980年代中期Sybase引入存储过程时,相比到ODBC / JDBC接口数据访问,大约有5倍的性能优点。
所以,V-H使存储过程接口以得到更高的运行性能。并发
2.3 聚焦在主动-主动数据复制分布式
基本上全部OLTP应用程序都须要高可用性(HA)。这要求每一个对象被复制屡次,而且崩溃时要求系统故障转移到备份。在正常处理期间,V-H必须确保处理全部副本都执行相关事务,或都不处理任何事务。只有这样,V-H才会实现“故障转移”而不会致使数据损坏。
执行副本更新有两种可行的策略:ide
2.3.1 主动-主动复制性能
即:事务在全部副本上执行,并在全部节点上本地提交。
在这种状况下,全部副本都是“活动的”,而且每一个具备副本的站点都将进行事务处理。
例如,AT&T将让东海岸和西海岸的客户与最近的集群进行对话,并在后台进行主动复制同步。测试
2.3.2 主动-被动复制
即将一个副本指定为主副本,并首先在其中执行每一个事务。日志记录写入此节点,而后经过网络移至备份节点。
在每一个备份中,日志都会前滚以使辅助数据库与主数据库同步。
鉴于有两种可行的策略,应选择哪种?
几年前,[Malvaiya]在VoltDB中实现了单副本崩溃恢复。他比较了两种策略:
1.在恢复时编写命令日志并从新运行命令
2.写入数据日志,并在恢复时将日志前滚。
他发现命令日志在执行期间的开销能够忽略不计,所以比数据记录方法快得多。[Yu]将此代码扩展到了复制,并实现了主动-主动和主动-被动复制。他发现主动-主动是性能优胜者,几乎是两倍。
因此VoltDB专一于主动-主动复制,这须要V-H偶然使用的肯定性的并发控制策略。相反,大多数V-H竞争对手使用不肯定的并发控制策略(例如,动态锁定,乐观并发控制,多版本并发控制)。所以,主动-主动不是这些系统的选择,它们也没有两倍速度优点。
整体而言,这三个决策使V-H能够比其余主要内存DBMS在事务处理上甚至能够快到一个数量级。在基准([Somagani],[Acme])测试中,V-H在合理大小的群集上每秒运行1M事务。到目前为止,这比咱们所知道的任何客户工做负载都要快。所以,V-H竞争者能够按订单运行这些工做负载,可是须要投入更多的硬件成本。
不过伴随5G应用的兴起,这种竞争格局将发生巨大变化。
5G有望提供更高的带宽,更高的密度(每平方公里最多一百万个设备)和毫秒级延迟。设备的这种密度迫使新的无线接入网(RAN)小区技术避免饱和现有网络。反过来,这将成倍增长数据库TPS的数量,以便:
更新网络中每一个设备的状态更改信息
对每一个新设备通讯都执行实时身份验证和受权策略此外,网络切片是5G要求,一部分网络专用于每一个用例,例如:工业物联网,视频,VR等。每种状况都须要即时决策,以实现负载平衡和服务质量保证,以增长用户数量(人员+物联网设备)。
为了演示更高TPS的需求,让咱们考虑一个典型的无线运营商示例:一个中等大小的运营商可能支持1000万部电话;较大的可能有1.5亿。典型的无线运营商具备大量事务交易型的应用程序。这里有一些例子:
计费和收费:当前的网络以6秒为增量计费,即每分钟10次。若是普通电话的占空比为10%,则小型网络每分钟有600万个计费事件,或每秒100,000个。对于较大的网络,该数目要高得多。随着时间的流逝,物联网设备的数量预计至少会翻两番。这样,计费将是一个很是高的TPS应用程序,而且在毫秒级的延迟下不会下降一致性要求。
新服务:物联网设备预计将继续在5G世界中启用新服务。这些将包括医疗警报应用程序,当人跌倒或摔倒时可链接到紧急人员救援。因为足球场中的订户很是集中,所以动态地旋转地理围栏子网以应对链接高峰。智能计量将实现个性化的客户体验和沟通,并促进对电网消耗,能源需求的分析,并符合新的法规要求。在风能和太阳能农场,5G还能够对IOT传感器进行连续监控和预测性维护。
总而言之,因为5G的特性,让不少应用的事务性操做需求飞速增加。
另外,大多数无线应用程序(例如计费)是单分区事务,能够充分发挥VoltDB的架构设计优点。对于这类应用程序,即使是中等大小的无线运营商,也必须每秒支持数百万个事务。大多数内存DBMS并不能支持这种数量的事务。
VoltDB是一个例外,咱们一些准测试也显示了架构理念上的领先性。若是您是KTPS应用程序(每秒数千个事务),那么有不少解决方案。但若是您期待MTPS(每秒数百万个事务),请尝试一下VoltDB。
做者:Michael Stonebraker
参考引用
[Harding] http://www.vldb.org/pvldb/vol10/p553-harding.pdf
[Malvaiya] http://hstore.cs.brown.edu/papers/voltdb-recovery.pdf
[Yu] http://www.cs.cmu.edu/~pavlo/blog/2013/12/fall-2013-research.html
[Somagani] https://www.voltdb.com/blog/2018/11/06/benchmarking-voltdb-on-the-cloud/
[Acme] https://www.voltdb.com/blog/2015/11/17/comparing-cloud-performance-ycsb/
若是您对VoltDB的工业物联网大数据低延迟方案、全生命周期的实时数据平台管理等感兴趣,欢迎私信,进入到咱们的官方交流群。