自从看了scala以后,一直在想着scalable program的事情。在google上搜索scalable programming,首先映入眼帘的就是wikipedia的scalability这个词条。

那么,scalability是什么?

wikipedia上给出的定义是“scalability is the ability of a system, network, or process, to handle a growing amount of work in a capable manner or its ability to be enlarged to accommodate that growth.”在这句话里面,我认为它提到了scalability出现的两种情况。

一是“handle a growing amount of work in a capable manner”,另一个是“to be enlarged to accommodate that growth”。

前者考虑的是如何制定行之有效的策略来满足因工作量/负载增长而出现的scalability的需求,后者考虑的是scalability的需求出现后,怎么满足/容纳这样的工作/负载强度(计算资源or存储能力上)。前者指的更多的应该是高并发下的算法负载,是否会因为并发数太高而导致算法失效或性能退化等。后者考虑更多的也许是硬件资源,如CPU计算能力、存储能力和网络带宽等。

在诸如存储、路由、网络这些领域,scalability对系统而言都是很重要的属性。就拿存储来说,如果通过增加存储设备的数量,就可以在一定比例上提高存储的容量的话,那么这个存储系统就可以认为是scalable的。但是,这种scalable是否有一个scalability的上限呢?虽然可以一直通过增加设备的数量来增强某个硬件方面的能力,但是这样的可扩展性是否存在退化的趋势,即当数量不断增加时候,可扩展性反而没有原来那么好了。如下图所示:

scalability该如何衡量呢?用什么样的公式计算,什么样的标准来做判断呢?硬件设备的scalability是否天生难逃退化的命运,怎样减缓这种退化趋势呢?

按照wikipedia上的说法,对于“软”性的元素(比如算法、路由协议、程序等),scalable意味着在高并发下它们依旧可行。这个比较容易理解,就像数据库的索引,低并发时候一条条数据查找也是可以的,但是高并发时,这个方法似乎就耗费太多时间了,所以可能需要更优的算法好让在高并发情况下,算法也可以在规定时间内做出相应,给出计算结果。

如果说,高并发是软性元素需要scalability的梗,那么硬件需要scalability的梗是否也是这个呢?

常见的硬性元素有计算能力、存储能力、带宽等。存储需要scalability的原因显然不止高并发这一项,大数据存储就是很好的另一个理由。计算能力也是一样,不一定高并发才需要计算的scalability,在时间和计算能力直接需要权衡时,也会喜欢计算是拥有scalability的,比如对某项计算,只要这一个星期能算法就可以,那么一台PC可能就足够了,但是对于同一个任务,如果需要一个小时内得出结果,那么就需要更多的设备并行计算以更快求解(假设该任务可以并行化的话)。那么,带宽呢?带宽要如何做到scalable?多插根网线?显然不是这样,这也是我想不明白的地方。openstack通过将compute、storage、network整合到一个平台上来进行资源的按需使用,它的network又是如何做到整合在一起的呢?我这个服务器带宽不够时,怎么获得更多带宽?是否还是得依靠电信商?

上面说的都是比较笼统的元素,比如存储设备、带宽、算法什么的。当scalable真切的跟我们程序员的工作结合到一起的时候,我认为它还包含一门语言的可塑性、可修改性和可再造性。对一个项目而言,理论上说做了详设以后,用什么语言实现都是可以的。但问题是,在显示生活中,我们往往是在一个既定的框架上进行开发,更甚者,我们是在修改一个已经存在的系统。这种情况下,这个框架/系统所使用的语言的可塑性就很重要了。有没有一种办法可以避免牵一发而动全身?有没有一种语言可以在增加模块间交流的情况下却不改变接口?数据结构能否从算法中解耦?太多疑问。

想要需求不变是不可能的。所以,对系统进行修改、更新是不可避免的。那么,对系统的更改为什么导致了复杂性的增加?是因为业务本身变得复杂,还是因为使用的语言本身也导致了系统复杂性的增加?业务复杂性的增加或许可以通过业务重组等方式来进行改进,那么由于编程语言的固有特性和不可变性带来的系统额外的复杂性增加是否有避免的方法呢?什么样的语言可以灵活的做出各种变化呢?语言又有哪些变化需要应对呢?在系统更改的过程中,究竟是什么东西被改变和增加,这些东西里面有没有一些是由于编程语言额外造成的?怎样才算是灵活的语言,需要满足那些需求?

关于Scalability的一些思考与疑问相关推荐

  1. 论文进展-关于小样本学习的一些思考和疑问

    车辆重识别部分的实验目前已经基本接近尾声,在吴潇学姐的指导下,相对于对比的模型,mAp和CMC两个指标都有了一定的提升,但是回到小样本学习的问题上来,我又产生了不少的疑惑,将目前的进展记录于此,希望能 ...

  2. 《独辟蹊径品内核:Linux内核源代码导读(china-pub首发)》的前言

    我觉得作者讲的学习方法很好值得看看. 下面是本书作者所写: 几乎每一个操作系统内核的学习者在初学阶段都会感觉到难以入门.这是由于内核涉及到知识面非常广泛,需要学习者从根本上掌握大量的知识,这包括:程序 ...

  3. Linux内核学习四库全书

    关于内核学习我建议不要上来就读内核而是先了解内核的构成和特性,然后通过思考发现疑问这时再去读内核源码.即先了解概貌在读局部细节.而且内核分成好多部分,不要只是按照顺序去读,应该针对某一部分比如内存管理 ...

  4. 复盘Spring中定时任务和异步线程池

    ​ 项目中最近使用了多个定时任务处理业务需求,于是在实现业务逻辑过程中,产生了上图一些思考和疑问,现在利用空余时间进行一次复盘. 项目搭建 项目搭建环境:JDK1.8+SpringBoot 主启动类: ...

  5. 设计模式之-简单工厂模式

    前言 为了理解和学习简单工厂模式,我们先看一段简单计算器的代码 class Program{static void Main(string[] args){Console.Write("请输 ...

  6. 复盘SpringBoot中定时任务和异步线程池

    作者:溪~源 blog.csdn.net/xuan_lu/article/details/110568508 项目中最近使用了多个定时任务处理业务需求,于是在实现业务逻辑过程中,产生了上图一些思考和疑 ...

  7. 微商加粉方法,微商加粉,究竟难在哪?

    做微商的也许都知道,加粉是每个菜鸟必问的疑问.在各式各样的微商训练课和自媒体账号里边有各式各样的关于加粉的技巧和文章,许多大咖也在教学各式各样的办法.   但仍有很多的微商仍是在忧愁加粉疑问,本来大多 ...

  8. 网站建设:颜色与线条的选择

    网站类型不同,设计时所使用的颜色也会不同,而且颜色直接影响着人们的感受,科泉网络经过调查发现,红色系标志着剧烈.兴奋,灰色系标志着平平和低沉.旅行和园林类型的网站运用绿色系比较多,蓝色则被誉为是公司色 ...

  9. 网站页面的颜色和线条搭配

    网站类型不同,设计时所使用的颜色也会不同,而且颜色直接影响着人们的感受,科泉网络经过调查发现,红色系标志着剧烈.兴奋,灰色系标志着平平和低沉.旅行和园林类型的网站运用绿色系比较多,蓝色则被誉为是公司色 ...

最新文章

  1. IOS Singleton单例模式用法
  2. 解决WAMP搭建PHP环境后后局域网其他机器无法访问的问题
  3. 远程连接oracle01017,连接Oracle远程数据库错误:ORA-12541,ORA-12514,ORA-01017的解决方法!...
  4. Tableau实战系列浏览 Tableau 环境(六) -工作簿和工作表
  5. 如何在Linux下统计高速网络中的流量
  6. aix服务器端口配置文件,aix配置(IP,子网掩码,DNS)网络接口的三种方式
  7. Windows7系统自带的备份与还原功能使用介绍
  8. base.dispose(disposing) 未将对象引用到实例_程序员深入理解asp.net c#值类型和引用类型...
  9. Zebra项目:分析、实施与测试
  10. Java中printmax的调用形式_媒体类型和响应式设计
  11. 数据大屏可视化展示系统有什么作用
  12. python输入的字符串转换为对应的数字类型_Psychopy | 第1期:数据类型及运算符
  13. Lucene.net试用
  14. 前端基础知识复习之html
  15. word退出时,提示”更改会影响共用模板normal.dotm“的处理办法
  16. 红外遥控器-VS1838B/HS0038红外接收方案(包含原理图+PCB+BOM表+程序)
  17. 【成功的忙人】在北京30套房的小哥:人一闲,就废了!
  18. 仿苹果 html,高仿Mac桌面(HTML5+CSS3+Bootstrap)
  19. javascript html 去除,javascript去除html标签
  20. 删除docker container

热门文章

  1. nrf52832芯片资料_蓝牙大举进军智能楼宇、智慧工业等新兴领域,主流BLE芯片哪家强...
  2. ROS入门笔记(十三):分布式通信
  3. linux java ssl_linux系统下安装ssl证书(tomcat)
  4. cadence 常见pcb电阻_高速PCB培训手记
  5. 编辑器扩展_开发者必备,可扩展编辑器tui.editor和TOAST UI组件家族
  6. aspose条件格式无法读取_分析 Pandas 源码,解决读取 Excel 报错问题
  7. Virtualenv --使用文档
  8. vue中如何在方法中动态的删除集合中的元素!?
  9. 安卓学习笔记22:常用控件 - 可展开列表视图
  10. 列表视图案例1——阅读古诗