软件系统的可伸缩性(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复制的问题等。
l??集群维护难度增大,维护成本更高。
4.??纵向伸缩scale up
1)?定义:纵向伸缩scale up,是指向上扩展,也就是通过增加当前服务器节点的处理能力来提升系统的整体处理能力。具体说来,包括通过升级现有服务器的配置,如增加内存,增加CPU,增加存储系统的硬件配置,或者更换更强的服务器和更高端的存储系统。
2)?scale up的优点:
l??处理的节点少,维护很简单,维护成本低。
l??系统集中在一台服务器,架构设计简单,开发容易。
3)??scale up的缺点
l??整个系统集中在一台服务器,为满足应用系统的需求,对服务器的硬件配置必然很高,而高端设备的服务器价格都很贵,成本自然很高。
l??应用系统业务需求量可能无限增加,但是单台服务器的处理能力总是很有限,所以很容易遇到无法解决的性能瓶颈。
l??整个系统集中在一台服务器,发生故障后影响是很大的。
5.??横向伸缩和纵向伸缩的综合分析
从横向伸缩和纵向伸缩的优缺点来看,scale up更适合短期处理问题,因为这样成本低,架构简单,技术上要求也简单,风险也小,特别是系统上线要求比较急,项目进度要求比较紧的情况下,scale up还是不错的选择。
但是对于一个需要长期运维的系统来说,scale up不能从根本上解决问题(除非业务量和数据量一直不上去,呵呵,这估计是大家都不希望看到的),因为业务量和数据量上去了,迟早会有性能瓶颈出现的,硬件技术的发展是有限的,很多时候都难以赶上业务的发展,如果数据量持续增加,可能隔不了多少时间,又要升级服务器,经常会更换硬件设备。然而scale out在这方面却有优势,服务器成本低,理论上是可无限扩展,当然技术上的复杂度是会不少,当时值得研究,解决起来也问题不大。
?
转自:?
http://blog.csdn.net/chuan122345/article/details/5250741
?