修改驱动,使用Erlang+VoltDB实现每秒87.7万事务

问题描述

游戏公司Eonblast Corporation的CEO Henning Diedrich,。带来了Erlang与VoltDB的连接驱动,将TPS提升至87.7万TPS(用例中相当于350万QPS),以下为译文:Henning Diedrich首次接触VoltDB是为了给大型网络游戏服务器寻找更好的数据库,在其经历了扩展MySQL的“悲惨遭遇”后,Henning看上了VoltDB,因为VoltDB比MySQL更适合复杂游戏世界的需求,最起码Henning认为VoltDB比其它任何数据库都适合。当然Henning同样在寻找比Java更适合程序服务器的语言,如同各位所想,Erlang捕获了Henning的“芳心”。这样一来对Henning来说,就万事具备只欠Erlang上的VoltDB“驱动”了。驱动的建立Henning的动作不可谓不快,3年后应VoltDB的要求,2010年其捐献了该驱动的第一个版本。这个驱动使用起来已**近完美,唯一欠缺的就是(集群)主机间使用的是同步连接。而在2012年VoltDB决定建立一个更大更犀利的版本, 现已在GitHub上开源。下面将介绍新的异步驱动所具备的特性:纯Erlang,完全并行的微进程(microprocess),极其的快速、稳定并适合 VoltDB 3,继承并整合了先前版本。新驱动的可**及一致的高吞吐量保障建立在多年Erlang MySQL驱动和 Emysql开发经验之上,而连接池和调用队列更是采用了最初为Electonic Arts设计的核心建模,其可**性毋庸置疑。这些因素保障了新的Erlang驱动可以承受峰值访问,并为VoltDB服务器节点分配负载。至于基准脚本的建立,Henning借鉴了之前他为VoltDB建立 Node.js的经验。有了之前的这些经验,Henning很清楚让云集群能更好运行需要什么样的数据以及必须详细的地方。驱动内部结构的实现基本上完成了预期的要求:程序的微进程将调用驱动中的函数给一个专用的连接器发送消息,它将处理所有的连接工作。请求发送以后,初始化进程将被阻塞在一个同步的接收块(当然,它不会阻塞你其它的所有进程)或者根据需要继续运行,已经有理由选择异步模式了?结果从服务器送到进程中的mailbox中。(本段中所说的同步只是针对驱动,而对VoltDB的调用使用的仍然是异步模式,驱动只是简单的让进程在接受块中等待)在这里你有很多的选择,比如:存在让你建立专用进程去处理请求发送的模式,从而保护你的初始化进程不会被驱动中其它活动打断。对那些你不会在意成功与否的写**作在发起后你就可以弃之不理,甚至是阻止接收这些**作失败后的返回消息。基准应用程序基准基于VoltDB的投票用例,这个例子在每个VoltDB都存在;原始的用例设置中,有一个页面用于显示结果,每400毫秒修改一次。你可以从VoltDB安装目录下examples/voter中找到它。基准需要一些准备工作:数据库需要写入6个选手的姓名,然后向服务器每个核心发送100万的写入事务,每个事务都会给选手中随机的一个送去一票。最终显示每个参赛者所得的票数,通过使用VoltDB的materialized view和ad-hoc查询。(在VoltDB术语中,ad-hoc属于常规查询)基准源在驱动的主目录之下的 etc/bench中,同样你还可以在其中发现一个详细的 README.md,其中阐述了基准运行的多个途径。你可以使用以下的代码在本地**,当然会很慢:$ git clone git://github.com/VoltDB/voltdb.git voltdb$ git clone git://github.com/VoltDB/voltdb-**-erlang.git erlvolt$ cd voltdb/examples/voter && ./run.sh &$ cd && cd erlvolt && make clean all bench通常会在屏幕上显示如下结果:metal:~ hd$ cd voltdb-3-com/examples/voter && ./run.sh & 10817 metal:~ hd$ Initializing VoltDB... _ __ ____ ____ ____ | | / /___ / / /_/ __ / __ ) | | / / __ / / __/ / / / __ | | |/ / /_/ / / /_/ /_/ / /_/ / |___/____/_/__/_____/_____/ -------------------------------- Build: 3.0 voltdb-3.0-95-gfffab2b Community Edition Connecting to VoltDB cluster as the leader... Initializing initiator ID: 0, SiteID: 0:5 WARN: Running without redundancy (k=0) is not recommended for production use. ** completed initialization. metal:erlvolt hd$ cd && cd erlvolt && make clean all bench clean erlc -W -I ../include +debug_info -o ../ebin erlvolt.erl erlc -W -I ../include +debug_info -o ../ebin erlvolt_app.erl erlc -W -I ../include +debug_info -o ../ebin erlvolt_conn.erl erlc -W -I ../include +debug_info -o ../ebin erlvolt_conn_mgr.erl erlc -W -I ../include +debug_info -o ../ebin erlvolt_profiler.erl erlc -W -I ../include +debug_info -o ../ebin erlvolt_sup.erl erlc -W -I ../include +debug_info -o ../ebin erlvolt_wire.erl erlc -W -I ../../include +debug_info -o ../../ebin bench.erl Erlvolt Bench 0.9 (** 'VSD') ------------------------------------------------------------------------------------------------------------------------------------- ** 'VSD', voter, 100,000 calls, steady, 200 workers, delay n/a, direct, queue n/a, slots n/a, limit n/a, verbose, "n/a" stats/sec Hosts: localhost:21212 connect ... preparation ... Start at: 2013-02-06 18:56:20 ..................... Starting: 2013-02-06 18:56:20 calls ... .................................. cool down ... check writes ... ok results ... votes: 100,000 (6 con**ants) .....Edwina Burnam: 16,817 ....Jessie Alloway: 16,808 ...Tabatha Gehling: 16,669 .....Alana Bregman: 16,613 ....Jessie Eichman: 16,556 ......Kelly Clauss: 16,537 close pool ... ** 'VSD', voter, 100,000 calls, steady, 200 workers, delay n/a, direct, queue n/a, slots n/a, limit n/a, verbose, "n/a" stats/sec ------------------------------------------------------------------------------------------------------------------------------------- ** 'VSD' overall: 14,357 T/sec throughput, 0.00% fails, total transactions: 100,000, fails: 0, total time: 6.965sec Erlvolt 0.3.3, bench started 2013-02-06 18:56:20, ended 2013-02-06 18:56:26, database: +100,000 new votes 更进一步的介绍,比如在云中进行最棒的基础**,查看etc/bench/README.md,或者在驱动根目录下查看这个页面:doc/BENCHMARK-README.html。**基准**结果**当在单核心(-smb +S 1)上运行时,使用一个12-node VoltDB服务器集群,Erlang驱动会跑出每个核心上2.65万TPS(事务/秒)。如果将全配的16核心的集群实例作为客户端节点,每台机器上都会达到26万TPS。使用8个节点连接到1个12节点的VoltDB集群,每个客户端节点将达到平均的10.9689万TPS,整个集群将达到87.7517万TPS。鉴于这个基准**的是驱动而不是服务器,Henning Diedrich并未对服务器集群做出调整。当然随着集群继续增大时,每个客户端核心的性能可能会受到EC2的网络限制。当然基准只有在服务器未过载的情况下才会体现出效果,而通过“backpressure”也可以最大程度上的防止系统过载。****环境**Henning将一个20节点的Amazon EC2 cc2.xlarge拆分成8个Erlang客户端和12个VoltDB服务器节点。M3.2xlarge提供了如下特性:Cluster Compute Eight Extra Large Instance (cc2.8xlarge)60.5GiB内存88个EC2计算单元(2×Intel Xeon E5-2670,8核)3370 GB的实例存储I/O性能:10 G的以太网**节点配置如下:**Ubuntu ** 12.04 LTS for Cluster Instances AMIOracle Java JDK 1.7Erlang R15B03VoltDB Enterprise Edition 3.0 RC(该基准在免费的Volt 3.0 Community Edition版本上也可以完美运行)**事务相关**客户端通过调用Voter的vote()方法进行储存,这个过程肯定不会只执行一个写**作,取决于你的逻辑, 可分为4-6个**作:检索调用者(投票者)的位置(一个查询**作)检查调用者是否超过了他的投票次数(一个查询**作)验证调用者投票的对象是否有效(一个查询**作)如果上面全部有效,则投票生效(一个**入**作)基于以上这些,每个**入同时引起两处不同的materialized view的改变,这样的话**87.7万的TPS造成了350万的QPS**。**观察结果和注意点**Henning认为这里最值得关注的数字就是单CPU核心上的2.65 TPS,整合了10万次的**作。这可以让你对你需要的硬件数量进行估算,当然还要切记的是服务器的性能一般比EC2实例要高的多。当然这里没有选用8台主机而是使用EC2实例,也是基于EC2实例性能的透明性。原文链接:877,000 TPS with Erlang and VoltDB(编译/仲浩 审校/王旭东)

时间: 2024-09-12 13:08:14

修改驱动,使用Erlang+VoltDB实现每秒87.7万事务的相关文章

每秒处理10万订单的支付架构 乐视集团

作者:梁阳鹤,乐视网boss平台技术部架构师,主要负责乐视集团支付,乐视会员系统,商业运营平台等系统架构工作.开源数据访问层框架mango作者. 责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN 高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qshuguang2008申请入群,备注姓名+公司+职位. 稿件:309933706@qq.com  随着乐视硬件抢购的不断升级,乐视集团支付面临的请求压力百倍乃至千倍的暴增.作

【Movidius发布最新一代VPU】集成DNN加速器,每秒超过1万亿次运算

英特尔周一宣布推出其新一代Movidius视觉处理单元(VPU),可为边缘设备(如无人机,VR耳机,智能相机,可穿戴设备和机器人)提供更好的处理能力. Movidius是芯片巨头英特尔的子公司,专注开发视觉芯片,为机器和PC增强视觉功能.Movidius最新的这款VPU是Myriad X系统级芯片,配备了专门的神经计算引擎,能够支持边缘设备的深度学习推理(inferences). Myriad X专为高速和低功耗运行深度神经网络而设计.英特尔方面表示,这款深度神经网络加速器可以让DNN推理实现每

平台终端吞吐量每秒达到2万设备,每秒插入2万条数据技术方案

问题描述 平台终端吞吐量每秒达到2万设备,每秒插入2万条数据技术方案 5C 目前由于平台要处理2万设备,每秒能处理2万条数据,之前使用ActiveMQ,不能达到需求了,之前测试rabbitMQ,Redis 之类,在测试机子上面都不能达到需求,本地测试 模拟1000个线程并发处理,一个线程处理1000插入数据,始终未能达到!不知道大家有没什么好的解决方案能达到这种需求的? 解决方案 单机很难达到这样的吞吐量,需要使用负载平衡了. 解决方案二: 同多台机器分布式处理吧. 解决方案三: hadoop等

CYQ.Data 批量添加数据性能测试(每秒千、万)

今天有网友火晋地同学进了CYQ.Data官方群了,他正在折腾了一个各大ORM性能测试的比较的软件,如下图 折腾的种类也不少:   感觉这软件折腾的不错~~~值的期待~~~ 另外,他指出CYQ.Data 在他的软件里表现不佳~~~~ 所以我要了他的测试实例看看是怎么写的测试代码: 测试的过程,大体是开了N个线程,循环N次执行这样的函数. 找到表现不佳的原因,并解决: 中间纷纷绕绕的讲了一些各大ORM测试的实例编写不同问题,不过有一句,倒引起了我的注意,说平均400毫秒左右. 于是我本地测试了一下,

[聚能聊精彩回顾]每秒17.5万笔交易量,需要怎样的数据库技术支撑

话题发起人:德哥 PG社区校长,阿里云数据库专家 今年的双十一1,207亿的交易总额,开场订单交易的创建达每秒17.5万笔,支付每秒12万笔 ,又创新高.在这些庞大的数据背后的IT系统是如何支撑的呢? 我们且先聊聊数据库在这里的技术升级吧. 我抛砖引玉一下,发了4篇相关技术文章 <聊一聊双十一背后的技术 - 物流, 动态路径规划> <聊一聊双十一背后的技术 - 强奸式秒杀技术实现> <基于 阿里云 RDS PostgreSQL 打造实时用户画像推荐系统> <Pos

Mt.Gox曾每秒遭遇15万次攻击 传仍余10万比特币

据国外http://www.aliyun.com/zixun/aggregation/31646.html">媒体报道,比特币交易所MT.Gox在破产前的一个月面临着大规模的黑客进攻,每秒承受15万次的分布式拒绝服务攻击(DDoS),这一攻击规模蔚为壮观. 同时,就在今天MT.Gox CEO马克·卡普斯的个人博客MagicalTux.net显然被黑客骇入.如果泄露的信息是准确的,这家交易所拥有951116.21905382比特币.位于东京的Mt Gox比特币交易所已经在二月申请破产保护,当

Lwan —— 每秒处理32万请求的高性能Web服务器

Lwan 是一个高性能和可伸缩的 Web 服务器软件,支持 glibc/Linux 平台. Lwan 开发了将近 3 年时间,目前还是个人研究的成果.主要是为了构建一个坚固.轻量级高性能的 Web 服务器. 特点: 占用内存低 (1万个空闲连接只占用 ~500KiB) 最小化的内存分配和拷贝 最小化的系统调用 精确的 HTTP 请求解析 使用最高效的方法来处理文件服务 大于 16k 的文件不需要进行核心和用户层的拷贝 更小的文件使用内存映射缓冲向量 I/O 发送 处理压缩小文件时考虑Header

AT&T:杰克逊逝世当日短信发送量每秒6.5万条

7月3日消息,AT&T发布了一份备忘录披露了有关苹果发布3GS版iPhone的各种记录.这份备忘录还提到在迈克尔·杰克逊在6月25日逝世的那一天,AT&T网络中的短信数量达到了每秒6.5万条. AT&T的备忘录称: 1.本周事实:6月25日,在迈克尔·杰克逊逝世的这一天,我们网络中发送短信的高峰期曾达到每秒6.5万条,超过了"美国偶像"投票和新年前夜的短信量.在新年前夜,我们的数百万用户都通过短信向朋友和家人发出祝福. 2. 2009年苹果发布新款iPhone的

1分钟秒光3万台360安全路由7月29日继续抢购

短短60秒竟然3万台一扫而光!消费者除了失望还有疑惑,为什么别人能秒到,自己就秒空?不过不用灰心,因为7月22日上午10:00-10:01,京东商城的360安全路由被217万预约用户冲击,3万台路由仅1分钟便告售罄.不过,喜大普奔的是7月29日10时将进行下一轮售卖,更多信息可关注官方微博@360安全路由.360安全路由之所以被消费者1分钟妙光3万台,主要是因为其在外观.做工.用料.规格.安全.健康.便捷操作等方面做到了极致,纵观目前智能路由市场,可以和360安全路由平起平坐的产品还没有第二款.