评估软件架构的性能?
我正在寻找可以帮助我评估软件架构性能的工具。对于这个特定的项目,我需要建模一个与面向消息的中间件(MOM)相当的适度规模的[分布式]系统。基于模型,我想测量系统在某些情况下的性能。此外,这些工具应该帮助我做出有关架构更改将如何影响系统性能的决策。
这是一个我希望能够回答的示例问题(与 MOM 类比):
如果持久层从 SQL 后端更改为具有最终一致性的某种新奇的 NoSQL 后端,整个系统的吞吐量(以消息/秒为单位测量)会如何变化?在[简化]模型中,需要使某些内容持久化(即写入数据库)的组件有一个延迟X毫秒的操作,直到持久化提供者确认为止。如果持久性后端发生变化并且确认是即时的,那么所述延迟将下降到 Y 毫秒。减少这种延迟将如何影响系统的吞吐量?
请注意,我主要对即用型软件产品或建模技术而不是研究材料感兴趣,但尽管如此,请随意提及值得注意的学术资源。
I'm looking for tools that help me evaluate the performance of a software architecture. For this specific project I need to model a [distributed] system of a modest size that is comparable to message oriented middleware (MOM). Based on a model I'd like to measure the system's performance under certain circumstances. Also, the tool(s) should help me making decisions as to how a change to the architecture would affect the performance of the system.
Here's an example question (staying with the MOM analogy) that I'd like to be able to answer:
How would the throughput (measured in messages/s) of the whole system change if the persistence layer was changed from an SQL back end to some fancy new NoSQL back end with eventual consistency? In a [simplified] model the component that needs to make something persistent (i.e. write to the DB) has an operation that is delayed by X ms until the persistence provider acknowledges. If the persistence back-end is changed and the acknowledgement is instant then the said delay would drop to Y ms. How would decreasing this delay affect the throughput of the system?
Note that I'm primarily interested in ready to use software products or modeling techniques rather than research material, but nevertheless feel free to mention noteworthy academic resources.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您给出的示例更多的是设计和实现方面的更改,而不是架构方面的更改。当然,NoSQL 实现可能会更快并增加总体吞吐量,但您要衡量的是实现性能。
我建议架构的性能更多地取决于所涉及组件的数量以及它们的排列方式 - 这取决于您在“架构”和“设计”(以及实现细节)之间划定界限。
Roger Sessions 花了很多时间研究 IT 系统中的复杂性的影响(面向服务的架构)特别的)。就我个人而言,我怀疑更复杂的架构可能效率不那么高,因此速度也不那么快的想法是有价值的。
我不确定您是否真的可以测试架构的“性能” - 从它仅存在于“纸面上”的角度来看。众所周知,纸面上看起来完美的飞机会杀死试飞员。
在软件方面,我知道各种建模系统都具有可以让您运行流程并定位瓶颈的功能;据我所知,唯一专门执行此操作的是 ProVision(但可能还有其他)。
The example you give is more of a change in the design and implementation - not the architecture. Sure, the NoSQL implementatin might be faster and increase thoughput overall but it's implementation performance that you'd be measuring.
I'd suggest that the performance of an architecture is based more on the number of components involved and how they are arranged - and it depends on where you draw the line between "architecture" and "design" (and implelentation detail).
Roger Sessions spent a lot of time looking at the impact of complexity in IT systems (Service Orientated Architecture in particular). Personally, I suspect there's merit in the idea that a more complex architecture might not be as efficient and therefore not as fast.
I'm not sure you can really test the "performance" of an architecture - from the point of view that it exists only "on paper". Aircraft that look perfect on paper have been known to kill test pilots.
In terms of software, I aware that various modelling systems have functionality that lets you run through a process and locate bottlenecks; the only one I know that specifically does this is ProVision (but there's probably others).
虽然主要用于网络研究,但 ns-3 模拟器 可用于对您的应用程序进行建模和模拟。这可能取决于您的应用程序以网络为中心的程度。 ns-3 有一个
Application
类作为其对象模型的一部分,旨在用于对 TCP/UDP 之上的所有内容进行建模。您可以编写一个非常简化的应用程序逻辑版本,它仅通过网络发送乱码,并为特定操作引入延迟。 ns-3 提供良好的可追溯性。Though primarily meant for networking research, the ns-3 simulator could be used to model and simulate your application. It probably depends on how network-centric your application is. ns-3 has an
Application
class as part of its object model that is meant to be used to model everything above TCP/UDP. You could write a very simplified version of your application logic that only sends gibberish over the network and introduces delays here and there for specific operations. ns-3 offers good traceability.像 SimPy 这样的模拟器框架对于建模和模拟系统的行为可能很有价值。与 ns-3 相比,您没有现成的部件,但您不限于以网络为中心的模拟。
通过这种方法,您可以自由地进行建模,但是如果您没有从良好的对象模型开始,则更改模型中的部分可能会非常耗时:使用“通道”等通用概念可能是个好主意用于组件之间的通信,而不是直接/显式连接组件。 OO 概念和最佳实践适用。
A simulator framework like SimPy could be of value to model and simulate the behavior of the system. In contrast to something like ns-3 you don't have ready-made parts available but you are not constricted to network-centric simulation.
With this approach you have all the freedom of the world for modeling, but changing parts in your model could be very time consuming if you don't start with a good object model: it's probably a good idea to use generic concepts like "channels" for communication between components rather than directly/explicitly connecting components. OO concepts and best practices apply.
这篇硕士论文评估了几项架构描述语言 (ADL) 及其评估架构性能的适用性。结论是,当前的 ADL 不支持在性能预测方面评估非功能属性。本论文还介绍了一款名为 SAPE(软件架构性能评估)的软件,顾名思义,该软件旨在帮助评估软件架构的性能方面。不过,这个软件似乎在网上找不到。
This master thesis evaluates several Architecture description languages (ADLs) and their applicability to evaluate the performance of an architecture. It concludes that current ADLs do not support the evaluation of non-functional attributes in terms of performance predictions. The thesis also introduces a software called SAPE (Software Architecture Performance Evaluation), that -- as its name already suggests -- is meant to help with the evaluation of the performance aspects of a software architecture. It seems this software is not available anywhere online though.
本文概述了几种推导方法来自[正式]软件架构规范的性能模型。大多数方法中使用的规范语言是 UML,性能模型 [quote:] 包括排队网络 (QN) 及其扩展,称为扩展排队网络 (EQN) 和分层排队网络 (LQN)、随机定时 Petri 网 (STPN) )、随机过程代数 (SPA) 和仿真模型。
This paper provides an overview of several approaches to derive performance models from [formal] software architecture specifications. The specification language used in most methologies is UML, the performance models [quote:] include queueing networks (QN) and their extensions called Extended Queueing Networks (EQN) and Layered Queueing Networks (LQN), Stochastic Timed Petri nets (STPN), Stochastic Process Algebras (SPA) and simulation models.
可能 OMNeT++ 是最接近我的想法的:
Probably OMNeT++ is what comes closest to what I had in mind: