通常情况下,我们需要为 Kubernetes 平台找到一种易于使用、可靠的块存储。因此,本文将对几个开源存储解决方案进行基准测试,以了解它们在各种条件下的性能。本次对比也是在不同硬件配置条件下对DRBD(https://en.wikipedia.org/wiki/Distributed_Replicated_Block_Device) 进行测试以及与 Ceph (https://ceph.io/en/) 的测试结果比较。然而,软件定义存储市场在不断发展和演变。新的项目不断的涌现,包括最近发布的 Mayastor (https://github.com/openebs/mayastor) 和 Vitastor (https://vitastor.io/) 。本文也包含了这两种新兴存储。fio -name=randwrite_fsync -ioengine=libaio -direct=1 -randrepeat=0 -rw=randwrite -bs=4k -numjobs=1 -iodepth=1 -fsync=1
fio -name=randwrite_jobs4 -ioengine=libaio -direct=1 -randrepeat=0 -rw=randwrite -bs=4k -numjobs=4 -iodepth=128 -group_reporting
fio -name=randwrite -ioengine=libaio -direct=1 -randrepeat=0 -rw=randwrite -bs=4k -numjobs=1 -iodepth=128
fio -name=write -ioengine=libaio -direct=1 -randrepeat=0 -rw=write -bs=4M -numjobs=1 -iodepth=16
fio -name=randread_fsync -ioengine=libaio -direct=1 -randrepeat=0 -rw=randread -bs=4k -numjobs=1 -iodepth=1 -fsync=1
fio -name=randread_jobs4 -ioengine=libaio -direct=1 -randrepeat=0 -rw=randread -bs=4k -numjobs=4 -iodepth=128 -group_reporting
fio -name=randread -ioengine=libaio -direct=1 -randrepeat=0 -rw=randread -bs=4k -numjobs=1 -iodepth=128
fio -name=read -ioengine=libaio -direct=1 -randrepeat=0 -rw=read -bs=4M -numjobs=1 -iodepth=16






如上所见,与 LVMThin 和 ZFS 相比,经典 LVM 几乎没有开销,但它支持的功能并不多。如果我们要进行快照,我们必须使用 LVMThin 或 ZFS,因为它们支持 COW (https://en.wikipedia.org/wiki/Copy-on-write)并且可以在不影响性能的情况下拍摄快照。LVMThin 的顺序读/写操作很好,但是随机读/写操作有很多不足之处。如果整个卷都用零填充(因此,磁盘空间得到预分配)并达到“原始”磁盘性能的一半,则性能结果会更好。ZFS 结果明显更差。我们试图通过调整块大小来调整它。不幸的是,它对结果几乎没有影响(我们测试了 512、4K、32K 和 512K 块大小;默认值为 8K)。较小的块大小略微提高了性能,但延迟也显着增加。更大的块大小增加了顺序读写速度,但这不是我们的目标。然后我们决定将 ZFS 搁置一旁,并尝试使用 LVMThin 进行同样的操作。las,更改块大小对测试结果几乎没有影响。最终,我们选择了默认设置的 LVM 或 LVMThin。LINSTOR 可以使用 LUKS 加密卷,我们很好奇这种加密在性能损失方面的成本是多少。事实证明,对 LUKS 的影响很小:对于偶尔的随机读/写或顺序操作,性能几乎没有变化,而对于一系列随机操作,性能仅减半。您可以在图表中看到:







该图显示 DRBD 显着降低了随机读/写速度,使顺序操作几乎没有开销。启用二个副本会稍微降低操作速度并增加没有并行性的测试的延迟。但这很有意义:我们同时写入两个副本并等待每个副本的操作完成。在无盘客户端的情况下,两个副本都在远程服务器上,因此客户端需要连接到它们,因此速度下降和延迟增加。此时可以得出以下结论:



结果让我吃惊。Local Mayastor在随机写操作上排名第一,Vitastor排名第二,其次是local DRBD、Ceph、diskless DRBD。本地 DRBD 在读取测试中表现最好,结果良好且延迟最低。



如上所见,所有四种解决方案都完美地利用了千兆以太网通道。然而,结果还有很多不足之处。Mayastor 的表现比其他人一点。DRBD 在读方面非常出色,但写作速度依然是很糟糕。fio -name=test -filename=/dev/xvda -ioengine=libaio -direct=1 -rw=randrw -rwmixread=75 -bs=4k -numjobs=1 -iodepth=64 -size=4G




最后两张图显示了节点上的总资源消耗,但这个信息很难客观,所以不要想当然。如需更详细的分析,我建议查看 Grafana 图。Grafna 对应的图表如下:











我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0
我正在寻找一个用ruby演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent
我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject
我以为它们存储在cookie中-但不,检查cookie没有任何结果。session也不存储它们。那么,我在哪里可以找到它们?我需要这个来直接设置它们(而不是通过flashhash)。 最佳答案 它们存储在inyoursessionstore.自rails2.0以来的默认设置是cookie存储,但请检查config/initializers/session_store.rb以检查您是否使用默认设置以外的东西。 关于ruby-on-rails-闪存消息存储在哪里?,我们在StackOverf
如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:
对于我正在编写的Rails3应用程序,我正在考虑从本地文件系统上的XML、YAML或JSON文件中读取一些配置数据。重点是:我应该把这些文件放在哪里?Rails应用程序中是否有用于存储此类内容的默认位置?附带说明一下,我的应用程序部署在Heroku上。 最佳答案 我经常做的是:如果文件是通用配置文件:我在目录/config中创建一个YAML文件,每个环境有一个上层key如果我为每个环境(大项目)创建一个文件:我为每个环境创建一个YAML并将它们存储在/config/environments/然后我在加载YAML的地方创建了一个初始化