在阅读有关框架(.net. ruby on rails、django、spring 等)的信息时,我一直看到某某某某做或不能很好地扩展。
当有人说一个框架“扩展性很好”是什么意思,说一个框架“不能很好地扩展”是什么意思?
谢谢你。
在阅读有关框架(.net. ruby on rails、django、spring 等)的信息时,我一直看到某某某某做或不能很好地扩展。
当有人说一个框架“扩展性很好”是什么意思,说一个框架“不能很好地扩展”是什么意思?
谢谢你。
当您针对并发用户绘制一些资源使用情况(内存、时间、磁盘空间、网络带宽)时,您将获得一个描述应用程序如何在不同比例因子下工作的函数。
小规模——少数用户——使用少量资源。
大规模——大量用户——使用大量资源。
关键问题是“缩放有多接近线性?” 如果它是线性扩展的,那么服务 2000 个并发用户的成本是服务 1000 个用户的 2 倍,是服务 500 个用户的 4 倍。这是一个可扩展的工具/框架/语言/平台/操作系统。它是可预测的,并且预测是线性的。
如果它不是线性扩展的,那么服务 4,000 名用户的成本是服务 2,000 名用户的 1,000 倍,而服务 500 名用户的成本是服务 500 名用户的 100 倍。这没有很好地扩展。随着使用量的增加,出现了问题;它似乎不可预测,也不是线性的。
这意味着一个特定的框架确实(或不)满足更多用户对其提出的日益增长的需求。例如,如果您有一个用 VBScript 编写的应用程序,它可能无法很好地处理 Facebook 的 40,000,000 名用户。
这篇博文解释了 Twitter 在大约一年前经历的一些可扩展性难题。它可以为您的问题的答案提供更多见解。
有时缺乏可扩展性被用来诋毁语言或框架,所以要小心。坚持显示真实指标的研究。这也适用于我在上一段中的 VBScript 示例。
如果一个框架或应用程序可以很好地扩展,这意味着它可以处理更大的负载。随着您的网站变得越来越受欢迎,每天有更多的访问者和更多的点击量,一个可扩展的框架将处理较大的负载,就像它处理较小的负载一样。一个可扩展的框架在每小时收到 200,000 次点击时的行为与每小时获得 1 次点击时的行为相同。不仅命中,而且部署在多个服务器上,可能在负载平衡之后,可能与几个不同的数据库服务器一起部署。一个可扩展的框架可以很好地处理这些不断增长的需求。
例如,去年推特几乎在一夜之间爆发。它是使用 Ruby On Rails 开发的,并且在关于 Rails 是否可以很好地扩展的持续争论中成为热门话题。
用“句柄扩展”代替“规模”
在我的脑海里有几个元素。第一个是显而易见的——性能扩展。您的框架可以用于构建高容量、高吞吐量的系统,还是仅用于构建较小的应用程序。它会在硬件上垂直扩展(例如并行库)还是水平扩展(例如网络农场)。
第二个是它可以扩展到更大的团队或企业。也就是说,它是否适用于大型代码库?大型开发团队?它有良好的工具支持吗?部署有多容易?你能推广到数十、数百甚至数千名用户吗?一直到很容易雇用有这种技能的人。想想尝试组建一个 20 或 50 人的开发团队,他们都在这个框架上工作。这会很容易还是几乎不可能?
恕我直言,说一个框架“扩展性很好”通常意味着传闻链中的某个人能够使用它来处理大量的音量。
在并行编程中,可伸缩性通常用于描述算法在并行化时如何执行。具有 1:1 加速的算法是一种罕见的野兽,但在两倍的硬件/cpu 上性能会翻倍,在硬件/cpu 的三倍上会翻倍,等等......
以我的经验,只要有足够的专业知识,几乎任何框架都可以扩展。
框架越容易使用,专业知识不足的开发人员遇到可伸缩性问题的机会就越大。
这意味着一些受人尊敬的公司正在认真对待它并且没有任何问题。
扩展意味着通过使用更多硬件来满足更多需求是多么容易。
示例:您有一个用某种语言编写的网站,每天有 1000 次访问。您会出现在一些著名杂志中,并且您的用户数量会增加。突然间,你每天有 1000000 次访问,那是 1000 倍。如果您可以多使用 1000 台服务器来满足不断增长的资源需求,那么您的网站可以很好地扩展。另一方面,如果您添加了 2000 台服务器,但用户仍然无法连接,因为您的数据库每天只能处理 1000 个请求,那么您的网站就不能很好地扩展。