如果我引用维基百科中关于优化的一段话:
在计算机科学中,程序优化或软件优化是对软件系统进行修改以使其某些方面更有效地工作或使用较少资源的过程。一般来说,计算机程序可以被优化以使其执行得更快,或者能够以更少的内存存储或其他资源进行操作,或者获得更少的功率。
关于规模:
应用程序可伸缩性是指在系统的扩展版本上运行应用程序的性能提高。
有什么关系呢?他们最终都提高了系统的性能。他们是一样的吗?如果是,为什么他们的名字不同?
发布于 2014-03-15 15:28:59
优化是在执行相同操作的同时,使现有事物更有效的过程。这意味着相同操作所需的处理时间更短。这可能意味着占用更少的记忆。这可能意味着占用更少的磁盘空间。优化有时涉及到权衡,比如使用更多的内存来换取更快的处理。
使事物可伸缩意味着做更多相同的事情。此外,这意味着以有效的方式做更多同样的事情。在你的口袋里寻找一些物品是快速和容易的。在你的房子里寻找同样的东西是很困难的。在世界上任何地方寻找同样的物品是非常困难的。可伸缩性是这类事情变得更难的程度。“更多”或更好的可伸缩性意味着在世界各地搜索比在口袋中搜索要困难一些。
与优化一样,可伸缩性可以有多种目标。有时,可伸缩性目标是处理时间,如搜索示例。有时是数据库大小。有时是内存消耗。有时候,它就像能够在屏幕上显示更多的东西一样简单,而不会让用户抓狂。
因此,简而言之,优化是使单个操作更有效的行为。使事物具有可伸缩性是使该操作能够以更有效的方式进行更多的操作。
或者,如果您可以将操作对一系列输入的行为看作一条曲线:优化是降低曲线的一个点;使某些东西具有可伸缩性就是降低曲线的斜率。
发布于 2014-03-15 15:27:44
它们是不同的。
可伸缩性通常是指当预期吞吐量比预期吞吐量大几个数量级时。
例如,如果我写了一个网站来跟踪我的财务状况,并且我想优化它的速度,我可能会决定将所有的数据保存在内存中。这意味着我的网站可以更快地响应--它不需要从磁盘上获取数据(让我们暂时忘记,当我的服务器被重新启动时会发生什么)。
对于一个用户来说,这可能是高度优化的。然而,它缺乏可伸缩性;当我的网站达到1,000,000用户时,将所有数据保存在内存中不再是一种选择。
当一个系统被划分到多个服务器上时,大多数的可伸缩性问题就会出现。
在大量情况下,情况会有所不同:数据库可能不再适合单个服务器;您是分割数据库,还是复制它?如果您将网站拆分到多个服务器上,是否使用多个相同的服务器,是否将静态数据与动态数据分离,是否在内容分发网络(CDN)上保留特定的大型资产?这会对你的网站产生什么影响?您使用负载平衡开关还是负载平衡DNS?
如果服务器发生故障会发生什么?如果您有一台服务器,不管它是如何优化的,它意味着中断;这对于1、5或10个用户来说是可以的,但对于Google呢?谷歌在任何时候都会关闭服务器。这不再是“驱动器失败了,系统管理员来修复它”的问题,而是“将其添加到列表中;失败的驱动器替换工程师将在几分钟内翻动他的手推车”。谷歌可能不值得使用RAID,因为它们有“廉价的冗余服务器阵列”。
发布于 2014-03-15 16:33:21
优化是一个内部因素,其中可伸缩性是一个外部因素。
想一想,如果你学到了一项新的技能,能让你做某件事的速度比以前快一倍,那么你已经优化了自己做特定动作的能力;然而,如果你要求你的朋友加入并帮助你去做这件事--为了加速这个过程,那就是扩大。
因此,从根本上说,优化可以提高流程的效率,在使用与以前完全相同的资源的同时完成更多的任务,但可伸缩性只是增加了资源,以便完成更多的任务。
https://softwareengineering.stackexchange.com/questions/232487
复制相似问题