`
hzbook
  • 浏览: 251720 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
多核应用架构关键技术—软件管道与SOA(预订中,估价)

本文节选自《多核应用架构关键技术--软件管道与SOA》 第2章“管道定律”第2.6~2.9节

 

2.6  软件管道规则

让我们来看看软件管道的规则:

  • 规则1:输入等于输出。
  • 规则2:下游组件或处理过程的能力(处理事务速率)要等于或超过上游组件或过程的输入速率。如果不是这种情况,你就必须优化下游的组件或过程,或者使用管道分配器来支持并发处理与控制负载。
  • 规则3:管道分配器的处理速率必须远远超过下游处理速率。

在接下来的章节中,我们会看到每个规则的细节之处,你会了解到一些用来分析软件管道系统的简单公式。

2.7  规则1

输入等于输出。

当然,上面是对管道定律自身的描述,你也可以将你从管道定律学来的所有知识设计软件管道系统。为了在你的设计中使用规则1,需要进行如下的操作:

  • 确定输入事务的供应是充足的。这是使用软件管道之前首先需要调整的。
  • 识别系统中哪个组件或过程的处理速率最慢,那么该组件/过程控制了这个系统的吞吐率与性能,所以你必须对它进行优化。
  • 识别不能承担负载的外部系统或应用程序。这些系统/应用程序会成为瓶颈,正如你处理最慢的组件/过程那样,你需要对它们进行优化处理。
  • 预测并去除系统中的任何瓶颈点。为了达到目标你需要做如下工作:找到你系统中的所有组件,分析它们的特点,一旦需要,就对它们进行优化。

规则1的公式是:

输入率()= 输出率()

不管你处理多少事务,输入率与输出率总是相同的。换句话说,软件管道系统或任何软件系统,不能接受超过它所能处理()的事务(潜在的输出率),这可表达为:

可获得的输入率()=潜在的输出率()

例如,如果可获得的输入率是每秒10个事务(transactions per second,TPS),不管下游的处理速率有多快,它的处理能力不会超过10 TPS。

让我们来看看输出端。如果可获得的输入率是1 000 TPS或者更多,你可能很容易断定潜在的输出率也是1 000 TPS。然而,如果下游的处理能力仅仅为500 TPS怎么办?你是让它们排队等待,还是丢掉这500 TPS的处理能力,当然这种举措不理想。

下一节,我们将会展示如何使用软件管道规则2来解决由下游较慢的处理过程带来的潜在系统瓶颈问题。

2.8  规则2

任何下游组件或过程的能力(事务处理速率)必须大于或等于任何上游组件或过程的输入速率。如果不是这种情况,你必须优化下游组件或过程,或者使用软件管道分配器来支持并发处理并控制负载。

如果你要最大化系统性能或者不得不满足服务等级协议(service-level agreements,SLA)与商业需求,那么这个规则是你成功的关键。你可以使用它分析软件管道系统的每一点,来识别存在的或者潜在的系统瓶颈。你也可以使用它来决定你是否需要更多的处理能力,如果你确实需要,你也可以通过使用管道分配器来增加并发处理能力。

规则2的公式是:

输入率()必须"输出率()

换句话说,下游的任何组件或过程的处理速率必须能够适应任何上游组件或过程所提供事务的输入率。如果不是这种情况,你必须使用多个管道或其他的优化方法来增加处理速率。

考虑如图2.5所示的组件处理流程。

在这个示例中,步骤B是系统的瓶颈。当事务离开步骤A到达步骤B时,事务会发生排队与积压的情况。这会减少进入步骤C的事务流,导致步骤C并没有被充分利用。此外,如果到达步骤B,没有缓存保存排队等候的事务,你可能会失去这些事务——对于像银行业务这样关键的任务应用来说这是不可接受的。

为了均衡事务流,你必须增加步骤B的吞吐性能。你可以使用管道分配器或者其他优化方法。如果你不能解决上述问题,整个系统只能具有步骤B的处理能力——500 TPS。


图2.5  下游组件带来系统瓶颈

如果将步骤B进行分配是安全的,你可以简单地为它创建两个管道,使它的性能加倍,如图2.6所示,这将解决上述问题并可均衡事务流。


图2.6  使用管道来增加处理能力

如果你没有充足的硬件资源来处理增加的事务量,创建两个管道不会使得步骤B的处理能力加倍。为了实际解决这个问题,你可能不得不添加硬件。拥有两个管道与充足的硬件资源,你可以利用并发的处理能力来加倍步骤B的处理能力。

然而如果你想要一个真正有效的解决方案,这里缺少了关键的一个环节:管道分配器。在多个管道实施并发处理需要一种分配事务的方法。在软件管道架构中,管道分配器就是完成这个工作的组件,将事务分配到多个硬件系统中或分配到一个系统的多个处理器上。

如图2.7所示,管道分配器分配事务,对步骤B的负载进行均衡处理。图2.7也展示了增添的硬件资源。


图2.7  使用管道分配器与附加的硬件资源增加系统处理能力

你可以从第1章回忆起管道分配器分配输入的消息到各个管道的过程。为了确定将每个消息向何处发送,它将会检验消息的内容,然后向匹配的、可处理该事务的管道发送。这种方法分配了负载,使你更多地控制了事物流。此外,分配器支持一些如同FIFO次序或优先级等关键业务需求。

另一个使用管道分配器的优点是能够可伸缩性。你可以赋予每个管道一个指定的硬件资源;分配器分配事务到每个管道中,每个管道独立且并发地执行各自的事务。如果硬件不足,这个管道就会成为系统瓶颈,你可以为这个管道添加资源。因为管道之间完全独立,添加更多的硬件资源也给管道带来了线性或近线性的扩展能力。

再进一步考虑,若分配器负担过多的管道,最终管道分配器自身会成为系统瓶颈。下一节,我们将展示如何使用规则3来避免这个问题。

2.9  规则3

管道分配器的处理速率要远远超过下游处理速率。

为了有效地实现管道分配器,你必须关注规则3。分配工作总是给系统带来一定的负担,因此管道分配器执行工作要比实际处理情况快很多才行。

规则3的公式是:

分配速率()>>处理速率()

换句话说,分配速率一定要比下游的处理速率快很多。如果不是,管道分配器自身将成为系统瓶颈,它会让整个软件管道架构失去意义。

在图2.8中,管道分配器为了避免成为系统瓶颈,必须拥有至少2000 TPS的吞吐能力。如果它能处理2000 TPS并且供给四个500TPS的管道,这样系统会工作的很不错。

图2.8  负载均衡良好的系统不存在瓶颈

然而,如果分配器含有复杂的路由事务逻辑,仅仅能处理1000 TPS那将会发生什么?如图2.9所示,管道分配器成了系统瓶颈。如果这样的情况发生,实现管道没有任何的好处,管道分配器浪费了宝贵的资源。

图2.9  拥有负载逻辑的管道分配器会成为系统的瓶颈

如果你分配了太多的管道可能导致相反的问题。假设分配器可以处理2000 TPS,然而将步骤B的四个管道扩展为八个管道,如图2.10所示。
这种情况下,每个管道只能处理250 TPS,但是每个管道的处理能力是500 TPS。所以,这也是浪费了资源而且你没能对系统进行优化。
为了避免上述两种问题,使用下面的公式来决定对于系统中给定部分管道的最优化个数。

管道数量()=分配器TPS/处理TPS()


图2.10  过多的管道会浪费系统资源

是理论下游执行管道的最大数目。你也可以认为这是对特定的处理过程做进一步的划分。是分配速率(管道分配器的处理速率),是下游处理速率(分配器供给的下游管道和组件的TPS总和)。对于系统某部,的比率是有效管道的理想数值。

当然,真实系统可能会出现一定的错误,因此你应做出一定冗余量,将管道数量提高10%到20%,确保系统有容错能力和足够流量。采用这种方式管道数量公式对于你的系统采用合适的管道数量和如何进行优化有着指导意义。

让我们看一个具体的例子。如果一个管道分配器的处理速率是1000 TPS,下游管道的处理速率为100 TPS,那么最大的管道数量是10。

这个系统将会比没有软件管道的系统快10倍。特别的是,在给定的时间内,这个系统将处理10倍于原来的事务数量。

管道数量公式向你展示重要的一点:系统必须以下游管道处理事务的速率向下游管道提供事务。否则,管道就会成为一个简单等待的没有任何收益的资源。

因此,最坏的场景是如果分配器评估和分配一个事务的时间比管道执行该事务的时间还长,你就不能从并发处理过程得到一点点的好处。事实上,分配器为处理过程带来一定不必要的消耗。当设计一个软件管道应用时,你的目的是最小化分配器带来的延迟(增加分配速率)并且尽可能多地为下游管道分派工作。

附加的一点是:第1章中提到你可以创建多层分配器与管道,任何管道都可以向分配器发送事务,为了从软件管道架构获得更多的益处,应用规则3与管道数量公式对于你的整个系统来说都很重要。

 

本书作者:

Cory Isaacson是Prelude Innovations公司(一个特别关注先进软件技术产品孵化和推荐的公司)的CEO。他积极参与领导信息技术工作20多年。Cory担任WebSphere Advisor杂志的技术编辑与专栏作家,在数百场的公众活动和研讨会上发表演说,并撰写关于架构和实用性技术的大量文章。Cory为数百个顶级架构师和专业开发人员(他们负责商业服务、娱乐、电信与软件行业的强大商业应用的开发与实现)提供指导。

最近Cory担任Rogue Wave Software公司的总裁,3年来担任公司管理,建立新产品战略,并在2007年中期被一家私人控股公司成功收购。Cory关注的重点是有效地解决诸如SOA、可视化和支持实际业务应用的商品化资源的新技术开发和部署的挑战性问题。Cory具有高性能的事务处理应用的专业知识,帮助先进IT企业对数据与业务数量上的急剧增长做出响应,同时还解除了经营成本的压力。最近,Cory一直是在多核架构上为了改善应用程序性能而使用并行处理和可伸缩的数据库技术的积极倡导者。

Cory在美国加州圣巴巴拉大学获得学士学位。

内容简介:

《多核应用架构关键技术--软件管道与SOA》 介绍软件管道如何工作,它们能完成什么样的任务,如何使用软件管道优化周期来应用它们。通过并行处理方法,扩展保证关键任务处理有序的应用程序。解决现存应用程序的性能问题,并且解决现存处理过程中的瓶颈问题。一个完整的、容易采用的管道参考框架。详细的代码示例反映了经过验证的管道模式。 本书适用于开发多核环境下软件的人员。

分享到:
评论
2 楼 hzbook 2012-07-03  
Devin.Chenzx 写道
书中的源代码 和网址现在不能访问!你们那里有备份么?

抱歉,华章官网上也没有,给您的阅读带来了不便,请见谅
1 楼 Devin.Chenzx 2012-04-07  
书中的源代码 和网址现在不能访问!你们那里有备份么?

相关推荐

    Linux系统管道和有名管道的通信机制

    认清管道和有名管道的读写规则是在程序中应用它们的关键,本文在详细讨论了管道和有名管道的通信机制的基础上,用实例对其读写规则进行了程序验证,这样做有利于增强读者对读写规则的感性认识,同时也提供了应用...

    海底管道系统规范 2021 本规范是最新的准入适用文件

    《规范》内容共分8章,包括入级范围与条件、检验与发证、设计、材料、建造、运行与弃置、焊接及无损检测,涵盖了我社对海底管道系统在全生命周期内的检验规则和要求。 《海底管道系统规范》2021于2021年10月1日起...

    软件工程知识点

    软件:计算机程序、方法、规则、相关的文档资料,以及计算机程序运行时所需要的数据。 软件是计算机系统中的逻辑成分,具有无形性。其主要内容包括:程序、配置文件、系统 文档、用户文档等。 2.软件分类 (1)按...

    21种软件架构风格整理

    2. 管道/过滤器风格 调用/返回风格 3.主程序/子程序风格 4.面向对象风格 5.层次化风格 风格变种:12.客户机/服务器风格 两层C/S架构 三层C/S架构 风格变种:13.浏览器/服务器风格 独立组件风格 6. 事件驱动风格 ...

    系统架构师备考知识点梳理

    (三)主程序-子程序 和 管道-过滤器 这两种架构风格的特点 (四)面向对象和基于规则 四、信息系统安全性 (一)信息系统面临的安全威胁 (三)授权侵犯 五、软件设计模式 (一)MVC (三)什么是面向服务架构(SOA...

    趣味记忆5大经典的软件架构风格

    管道/过滤器 (2)调用/返回风格:主程序/子程序;面向对象风格;层次结构 (3)独立构件风格:进程通讯;事件系统 (4)虚拟机风格:解释器;基于规则的系统 (5)仓库风格:数据库系统;超文本系统;黑板系统

    Web 威胁传播途径

    防病毒形式越来越严峻• 没有任何一款桌面端杀毒没有任何一款桌面端...恶意程序借由正常管道入侵,电脑极易遭受感染即使在HTTP协议設定阻止特定文件扩展名进入的规则, 仍旧无法判断恶意程序會利用何种方式伪装潜入。

    拓普康扫描仪教程GLS-1500 快速操作入门

    作为新的高科技产品,三维激光扫描仪已经成功的在文物保护、城市建筑测量、地形测绘、采矿业、变形监测、工厂、大型结构、管道设计、飞机船舶制造、公路铁路建设、隧道工程、桥梁改建等领域里应用。三维激光扫描仪,...

    databazel:Bazel为机器学习工作流构建规则

    在数据管道,工具类的境界luigi和airflow同样的方式创建的DAG来描述对数据做计算。 我认为,“我们需要构建软件来运行我们的数据分析工作流,但是我们使用不同的工具来描述DAG来构建两者。为什么?”。 由于时间太...

    Stata 9 很好的统计软件

    另外一个获取庞大资源的管道就是Statalist,它是一个独立的listserver,每月交替提供使用者超过1000个讯息以及50个程序。  Stata 的统计功能  Stata 的统计功能很强,除了传统的统计分析方法外,还收集了近 20 ...

    cloudrail-rules

    我们的CD流程用于将Cloudrail的软件部署到我们的生产环境中,其中还包括一个步骤,其中规则代码已同步到此存储库,每个人都可以看到。有什么结构? 实际规则位于目录下,其中大多数上下文感知规则位于特定目录下

    IC卡智能水表技术规范.doc

    二、IC卡智能水表质量要求: 1、整表符合GB/T778-1996《冷水水表》和CJ3064- 1997《居民饮用水计量仪表安全规则》或GB/T 778-2007 《封闭满管道中水流量的测量饮用水冷水水表和热水水表》和CJ/266- 2008《饮用水...

    devsecops-example:GSA DevSecOps管道的示例实施

    虽然可以将WordPress配置为将文件保存在其他位置(),但在这里它被用作没有该选项的部分(旧版)软件的替代品。 这只是GSA DevSecOps原理/组件的示例实现-即使您不使用WordPress,或者您的体系结构也不完全相同,...

    match-interface:匹配界面

    匹配命令行界面(CLI) Match CLI接受get_tables , get_headers等命令,以显示有关管道中的表,标头,匹配项,规则和端口的信息。 CLI会将命令打包到netlink消息中,然后将其发送到以执行。 有关支持的命令的更多...

    基础设施即代码黑客马拉松:基础设施即代码和软件定义的网络黑客马拉松

    基础设施即代码和软件定义网络这种形式的比赛- 后端收集网络信息:网络拓扑,流量工程属性,性能等。我们使用BGP-LS,PCEP和NETCONF收集这些信息。 业务应用程序将抽象的网络信息公开给IDE(C#),操作员可以编写...

    基于CFD的固体颗粒对流量计振动管的磨损分析* (2011年)

    流过流量计振动管的固体颗粒的轨迹是不规则的,固体颗粒与流量计振动管...利用cFD流体力学计算软件对管道流体所含固体颗粒对流量计振动管的磨损进行分析与计算,预测流量计的使用寿命,对工程实践有一定的指导意义。

    Nucleus OS源码结构以及参考手册

    3.3.3 管道 3.4 任务同步 3.4.1 信号量(semaphores) 3.4.2 事件集 3.5 定时器 …… 2、Nucleus_PLUS源码分析.pdf 内容 第一章.介绍手册的目的 关于Nucleus PLUS Nucleus PLUS 结构 第二章.实现约定组件 ...

    password_pwncheck:针对违反列表(HIBP)和其他规则的Kerberos Windows AD Linux PAM密码更改检查

    无论是由于软件,使用或其他方式产生的,与之有关或与之有关的合同,侵权或其他形式的任何索赔,损害或其他责任,作者或版权所有者概不负责。软件。 安装 该代码非常新颖-可以正常工作,并且已经过测试工作,但是...

    simple-quality-gate

    它旨在用于CI管道上的步骤,如果代码规则失败,则管道将失败。 当前,它有五个指标可用于Java项目: 块大小 文件大小 每个块的圈复杂度 每类的圈复杂度 方法的参数数量 对于本项目,“块”的概念是类内部方括号...

    go-mysql-transfer是一款MySQL数据库实时增量同步工具.rar

    从而在数据库和接收端之间形成一个高性能、低延迟的增量数据同步更新管道。 特性 1、简单,不依赖其它组件,一键部署 2、集成多种接收端,如:Redis、MongoDB、Elasticsearch、RocketMQ、Kafka、RabbitMQ、...

Global site tag (gtag.js) - Google Analytics