Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

软件系统的可伸缩性(scalability)设计总结

来源: 未知 分享至:

1. 可伸缩性(scalability)常见问题

有时由于硬件设备的限制(硬件设备的能力成为性能瓶颈),单纯软件上的性能优化已经无法提升系统性能?

这时需要改造系统的架构体系,提升系统的扩展能力,组合多个只具备低处理能力的硬件设备,从而达到一个具有高处理能力的系统。

2. 对可伸缩性(scalability)的理解

可伸缩性,这个词多很多人我想都不陌生,因为无论是技术类的图书还是技术类的网文,或者技术人员之间的交流,或者技术类的设计文档,需求文档等都经常出现这个词。但是大家可能对其都有大致的理解,也就是系统通过增加或减少服务器从而提升或降低系统性能的难易程度。但是其具体含义从专业的角度给一个详细的解释,估计每个人说法不一,有的人可能会说得很模糊,主要自身的工作中,以前未接触过类似的工作,或没有认真研究过这些问题。

1) 我对可伸缩性(scalability)的理解:

可伸缩性是指,当用户数和数据量增加时,软件系统维持高服务质量的能力。例如当业务量小的时候,软件系统运行在一台服务器上,当业务量大的时候,可以通过增加服务器,或增加单台服务器上锁运行的软件系统的个数了来提高其性能,从而达到不需要对软件系统本身进行编程级的修改或变更。

2) 可伸缩性(scalability)与可扩展性(extensibility)的区别:

这里提到可扩展性(extensibility),主要是发现有不少人多这两个概念的理解上存在误区,有不少朋友甚至把这两个概念等同起来。下边说说我的理解。

可伸缩性前面已经说了,不再赘述。这里说说可扩展性(extensibility),为适应新需求或需求变化为软件增加功能的能力。说得具体一点就是,设计良好的代码允许更多的功能在必要的时候可以被很容易的插入到适当的位置,而不需要修改很多的程序。理论上来说,可扩展性越好,程序员为增加新需求或需求变化所做的处理越容易,做的工作越少,成本也就越低。特别是对于做产品的公司来说,因为自己要维护产品,而且产品一般要不断更新,不断添加新功能,因此可扩展性的设计尤其重要。

可扩展性可以通过软件框架来实现:动态加载的插件(如osgi技术)、顶端有抽象接口的认真设计的类层次结构、有用的回调函数构造以及功能很有逻辑并且可塑性很强的代码结构,面向接口编程,模块时间通过分离关注点,进行低耦合的设计,这些措施都可以实现。

但是任何事物都有两面性,由于考虑可扩展性设计,有时为了满足未来可能的需求变化和需求增加,可能造成软件工程的过度设计开发,从而成本变高,也因此可能导致项目延期,从而错过市场。

3) 可伸缩性包括横向伸缩scale out和纵向伸缩scale up

3. 横向伸缩scale out

1)定义:横向伸缩scale out,是指系统向外扩展,也就是通过增加系统的处理节点的方式来提高系统的整体处理能力,特别是提高其性能。具体说就是增加机器来提升系统的性能。

2) scale out的优点

l 服务器陈本低,仅仅通过价格便宜的PC Server搭建出一个处理能力非常强大的计算集群

l 基本上不存在用户量或数据量增加就再次遇到系统性能增加的瓶颈,因为理论上来说,通过增加PC Server或服务器主机的个数时没有限制的。

l 单个服务器节点出现故障对系统整体的影响也比较小。

3) scale out的缺点:

l 因为服务器节点增多,造成系统架构整体复杂度提高,比如会有很多架构方面的问题需要解决,比如session复制的问题等。


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史