性能提升利器之固态硬盘和序列化漫谈

摘要:假设我们已经构建了下一个杀手级应用,而且变得越来越受欢迎,突破负载极限,以我们目前的增长的速度,需要在3个月内将需要将性能提升10倍。我们该怎么做?

【编者按】当面对一个性能扩展问题时,很多人往往通过加大投资,购买硬件的方式来解决,期望找到一颗silver bullet,但是大多数情况下,结果没有达到预期,本文作者是Rackspace的主任兼首席工程师 Aaron Sullivan,他认为在面对性能提升问题时,不能冒然的加大投资,寻找silver bullet,而是应该有条不紊的寻找差距,准备一个全面的方案,包括所涉及到的应用程序、基础设施、团队,另外,你需要注意序列化,它是anti-silver bullet。


免费订阅“CSDN云计算”微信公众号,实时掌握第一手云中消息!

CSDN作为国内最专业的云计算服务平台,提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、Hadoop、Spark、机器学习、智能算法等相关云计算观点,云计算技术,云计算平台,云计算实践,云计算产业资讯等服务。


以下为译文:

我们都喜欢一个silver bullet(往往被比作药到病除的良方)。在过去的几年里,如果总结我在Rackspace公司里看到客户们使用SSD的经验,不外乎是两种情况。第一种情况是一个silver bullet——增加SSD创建了一个近乎奇迹般的性能改进。第二种情况是(最常见的)这颗bullet被射向了一个错误的目标——结果远远低于预期值。

在第二种情况中,文件系统、数据存储及进程经常变得不稳定。然而,这些令人泄气的结果通常由客户们错误的加速方式导致的。

导致令人失望的SSD结果的关键因素就是序列化,这是个普遍现象。尽管事实上大多数服务器拥有并行处理器(如多核、 multi-socket)、并行内存系统(例如NUMA,多通道内存控制器)、并行存储系统(如磁盘分条,NAND)和多线程软件,事务处理仍然必须按一定顺序执行。因此你软件和系统设计中的一些部分,需要循序渐进的进行。从步骤1到步骤2,然后到步骤3,这就是序列化。

不能仅仅因为软件或系统内部固有的并行设计,就认为这些部分不需要序列化。有些系统中的一部分能够同时接收和处理成千上万条离散请求,但却要等待其他序列化部分。软件开发人员和系统架构师已经能用各种各样的方法来处理这个问题。多层web体系架构的提出,从某种程度上来说就是针对这个问题的。最近,数据库分片也有助于解决这个问题。但是,使系统中的一些部分并行并不意味着所有部分都是并行的。此外,即使设计时着重强调了并行性,也不可能杜绝序列操作的存在。

这个问题到底可以追溯到多远?其实,在并行计算出现之初就已经出现了,至少可追溯到1960年代。在过去的十年中,在并行内存系统、分布式数据库和存储系统、多核CPU、GPU等上都做了特别的改进。这些改进往往紧随着一个新的硬件革新之后。因此,以SSD为例,改进并没有集中在SSD本身。我们全部的存储软件栈的概念都在改变,但是,同样的,你将看到,即使我们整个存储堆栈比今天快几千倍,序列化仍然是一个难题。我们总是想各种办法解决这个问题,但我们很少能让它消失。

并行化和序列化

下表提供了一个服务器和存储设备的并行和序列化示例,从软件应用程序到底下的存储介质。进程中的每个步骤都可以支持复杂的队列和并行机制。即便如此,对于任何给定的事务和群集事务,需要的步骤仍然必须要顺序执行。时间积累自每个步骤。


这一系列的步骤呈现的是一个服务器中的一个简化的,小的组件,在本例中是存储组件。但在工作中,一个服务器中还有各种各样的其他组件。某些其他组件,如一个数据库应用程序,往往是链式累积存储。我们可以针对数据库应用程序创建一系列类似步骤,数据库应用程序利用系统存储,我们可以将两个表合并。我们可以为web服务、缓存服务等构建类似的宏观层模型,许多(或全部)这些组件连接在一起来完成一个事务处理。

如上所述,每个事务涉及的组件增加了累计的时间基准。提高每个部分都需要一套不同的工具、方法和技巧。通常,当我们无法解决性能问题时,相对容易的方法是通过加大投资就可以获得相应的解决方案。我们买更多的服务器、更多的处理器、更快的磁盘、更快的网卡和交换机等等。有时,我们会幸运得到silver bullet。但是当我们不够幸运时,它会是什么样子呢。

假设我们已经构建了下一个杀手级应用,它变得越来越受欢迎,突破负载极限。以我们增长的速度,在3个月内,我们将需要将性能提升10倍。我们该怎么做?

我们可能会把我们的系统复制到世界各地的重要战略位置,以减少网络延迟,我们可以将我们所有的服务器和交换机从1 Gb /秒升级到10 Gb /秒。我们可能将SSD添加到我们系统的各个部分。假设这些改进减少了70%相关网络处理时间以及99.9%(a~ 1000 倍改善)的存储时间。但在我们的应用程序中,这些只让我们的性能提高了83%。这甚至还达不到原来的双倍性能,我们已经做了大量投资。此时,你可能会想,“我们使存储提速那么多,怎么在图上如此不明显。为什么1000倍的存储性能改进和庞大的网络开销只让我们加速了83%?”

答案在图中,10倍改进总体需要累计执行时间(图表的左纵轴)从3.0到0.3。


获得10倍的改进需要将我们整个环境做出巨大改进。我们进一步假设网络不能加快。下图所示的是其他因素改变及合成之后达到的10倍性能提升的例子。


注意,我们通过四个步骤来实现这种显著的性能提升。首先,我们在web层和缓存层做了一个可测量的改进,使它速度加倍。第二,我们对数据库层也做了同样的改进,也使它速度加倍。这让我们得到了一个3.16 倍的总体性能改进。由于这还不够,第三步:我们也重新设计了整个平台,并通过努力改善了所有的这三个平台,使它们比基线提升3倍的速度。这使我们的性能提高4.2倍。

那么怎样才能达到的10倍加速吗?假设我们聘请了一群技术大牛来帮助我们来完成此次改进……

因此,第四步,技术大牛带来了一些令人惊异的新技术、代码、工具、和理念。我们使web、缓存和数据库层得到了比原先设计时20倍的加速。我们还利用SSD做了另一个1000倍的改进。他们没有透露更多的内容,其中一个人信誓旦旦的说,我们需要的就是更快的SSD(有时这些技术大牛也是silver-bullet的受害者)。最后,我们并没有达到10倍,除非我们靠的足够近。

现在,让我们回到现实。如果我们真的需要这种全面的大规模的速度提升,还是先让我们考虑一下自己的开发团队是否能满足这些惊人的要求。我们需要10倍的开发者技能吗?10倍的提高来自于一个人吗?需要10倍员工吗?10倍的测试资源吗?这是不现实的,至少不是马上需要。在合适的地方、合适的时间进行投资是非常重要的。

在这一过程中,我们需要有条不紊地分析我们的差距,找到最谨慎的方式来弥补。根据我的经验,谨慎并不激动人心,但它非常有效。

当面对一个扩展的问题时,很多人常常以为他们可以通过添加硬件的方式来解决它——这正是虚构的silver bullet。如果你认为有一个简单的解决方案,碰巧有一些SSD,无论如何,不妨试试! 如果还不够的,准备一个全面的方案。包括所涉及到的你的应用程序、基础设施、团队。一定要保持一颗开诚布公的心态,你可能需要全面的改进来达到你的目标。你觉得可以的时候你可以雇佣超级明星,你需要注意序列化,它是anti-silver bullet。

原文链接: Performance At Scale: SSDs, Silver Bullets, And Serialization

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看本机IP的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 打开网络和共享中心 2.更改适配器设置 3. 右键选择 状态 4.选择详情 5.找到IP

来自前苹果高管Heidi Roizen的经验之谈

摘要:Heidi Roizen曾是T/Maker的联合创始人兼CEO;此后Heidi Roizen加入苹果公司担任开发者关系的高级副总裁。本文她分享了8条箴言,希望能为各位开发者带来启迪,体会生活与工作上的人生感悟。 【编者按】Heidi Roizen曾是T/Maker的…

解决:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408,

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.只是想启动elasticsearch,报错如题: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c…

Docker CEO Ben Golub:Docker借助开源、天时走向成功

摘要:Docker CEO Ben Golub接受了Gigaom专访,他表示,Docker正是借助开源、天时走向了成功。而作为Docker前身,现任CTO Hykes在运作dotCloud过程中,发现多平台的需求越来越受到用户关注,于是Docker孕育而生。…

果断Mark!Searchcode——源代码搜索利器

摘要:Searchcode是一款免费的源代码/文档搜索引擎,汇聚Github、Codeplex、Sourceforge等多家开源站点,拥有超过20万个项目、180亿行源代码,能以特殊字符、语言、仓库和源方式从90多种语言找到函数、API的真实代码。 Searchcode是…

elasticsearch 安装( 阿里云ECS )、远程访问、启动报错处理

附另 2 文章: elasticsearch-head 安装 kibana 安装 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 从网上下载到 linux 版本的 tar 包:elasticsearch-6.7.…

解决:git: command not found、apt-get: command not found、git 安装

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 运行 git 失败,因为没有安装 git。 于是就安装:apt-get install git,于是得到后一个报错。 原来 a…

为什么程序员要尽量少写代码

软件开发的一个最基本的事实是写代码,但是最大的误区之一就是把写代码当做工作。当我作为一个程序员第一次参加工作的时候,就犯了这样的错误。老实说,写代码真的是一件特有意思的事,它的强大功能,它的多种作用等等都让…

elasticsearch-head 安装

elasticsearch 安装( 阿里云ECS )、远程访问、启动报错处理 kibana 安装 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 首先安装好 git、node.js、npm、cnpm yum -y install g…

C语言探秘:C代码在内存中的分布

估计会有很多初学者跟我有一样的疑惑,这些编写好的代码是放在磁盘中,但是运行将会被copy至内存中去运行。但他们在内存中是怎么分布呢。在 “linux下c编程圣经”(apue)UNIX环境高级编程一书中阐述了这一点。在这里结合网上资料以及…

kibana 安装

附另 2 文章: elasticsearch-head 安装 elasticsearch 安装( 阿里云ECS )、远程访问、启动报错处理 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 我的 elasticsearch 是…

“4K”时代将来临!标准/技术一网打尽

第1页:4K 分辨率与 DCI 数字电影院在今年的 CES(电子消费大展)上,除了让人眼花缭乱新手机等移动设备外,还有一个领域让人感到相当瞩目,这就是所谓的 4K 电视产品。 4K 电视的卖点当然是高分辨率&#xff0c…

Image Processing Wavefronts for HEVC Parallelism

Unlike H.264/AVC, where parallelism was an afterthought, the current HEVC draft contains several proposals aiming at making the codec better “parallelizable”. H.264/AVC supports slices, which were introduced mainly to prevent loss of quality in the case …

Windows 9信息曝光:统一开发接口、整合Cortana到任务栏

摘要:2014年微软全球合作伙伴大会在美国华盛顿正式拉开序幕,会上,微软首席运营商Kevin Turner透露了微软下一代操作系统Windows 9的一些信息:统一开发接口、语音助手Cortana将被整合到任务栏、桌面小工具回归等。 北京时间7月15日…

解决: Error while compiling statement: FAILED: ParseException line 23:13 extraneous input ‘(‘ expectin

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. hive 执行sql,报错: Error while compiling statement: FAILED: ParseException line 23:13 extraneous inp…

程序员可以只关心技术么?

摘要:不少程序员爱维护喜欢的技术,虽然他们说的有道理,但程序员价值的实现并不取决于技术。模式不一样,程序员价值也不一样,而这也暗含了程序员生涯的两个进阶模式,读完此文,相信你会重新思考个…

Intellij IDEA中分屏显示方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 今天才发现IDEA中还有split view的功能,上网查的时候查到了很多莫名其妙的东西。 实际上对想分屏显示的文件 右键->Spli…

ROW_NUMBER() OVER() 函数用法详解 (分组排序,多例子)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 语法格式:row_number() over(partition by 分组列 order by 排序列 desc) row_number() over()分组排序功能: …

解决:您需要来自xxx的权限才能对此文件夹进行更改(电脑系统取得管理员权限)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.莫名的一个项目工程代码就打不开了。提示信息为: 2. 删除也不行,更新也不行,火大,我惹…

解决:Can not deserialize instance of com.xxx.xx.XXModel out of START_ARRAY toke

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. json数据解析报错: Can not deserialize instance of com.xxx.xxx.model.XXXModel out of START_ARRAY token 2. 需要一…