现在计算机技术发展现象是:无论硬件技术如何发展都满足不了软件需求;无论处理器变得能跑多快,都无法满足软件对计算能力的需要。按照摩尔定律(Moore‘s Law)处理器(CPU)每平方面积上包含的半导体晶体管数量每18个月将会增加一倍。发展到现在,所有CPU厂商都再也无法按照摩尔定律在一定面积上成倍增加半导体了,大家也都只能朝着增加CPU内核数量上努力了。多核CPU已然成为现代计算机技术发展趋势。现代软件对计算能力的需求暴增主要归咎于现代社会中数据应用的普及和泛滥。这种数据量级单凭增加处理器和存储能力是无法应付的,必须通过分布式计算模式来有效处理。
无论我们如何通过垂直拓展(Scale Up)增加CPU、内存、硬盘始终都无法解决数据通道(Bus)的无限扩张。只有通过水平拓展(Scale Out),即分布拓展通过增加计算机服务器然后用分布计算技术把计算任务切细分派给各分散独立的服务器进行处理;这也就是大数据技术的核心。
可以预见的是,我们将来面对的是:分布式数据、高并发处理、并行运算、NOSQL及超大型互动复杂的网络平台编程。作为一个算是老资格的程序员,经历了从BIOS到云平台应用开发全过程,面对这些新的硬件环境和软件要求还是觉着力有不及。我自己分析了一下;如果依赖自己目前所掌握的技术和经验,用java或者C#这几种面向对象编程语言(OOP)再加上现有的资源库去面对分布式(distributed)、并行运算(parallelism)、高并发(concurrency)软件的开发,感觉还是力犹不及,像Mission Impossible。
通过一段时间的调研,发现Scala能够比较简单地解决心目中的难题。Scala是一种JVM编程语言,与java在bytecode层面相等(不只兼容)。我觉着可以说Scala是java的升级,一方面保持bytecode的兼容,另一方面从功能上又简化解决了许多以前java编程中遇到的难题。有关Scala编程语言方面的资料还是比较容易找到的。它到底是一个什么样的编程语言、功能如何强大、特点如何,这些自不用我多说。Scala是面向对象编程(OOP)和泛函编程(FP)的完美混合体。Scala针对多核CPU并行运算及高并发处理这方面主要是通过泛函编程范畴(Functional Programming Paradigm)来实现的。我发现在国内互联网上有关Scala泛函编程的教材非常匮乏,Scala语言教程倒是比较容易找到。我下面一系列的文章就不会描述那些Scala编程语言的语法语意,而是以展示如何从OOP编程思维转换到泛函编程模式为主。
之所以选择了Scala主要还是它是我在寻找解决方案时第一个碰巧遇到的一个新的编程语言,能够解决一直以来思考的那些在java开发工作中所遇到的问题。后来为了进一步了解泛函编程又看了其它一些编程语言资料,包括Haskell, Clojure,Erlang等。不过最终还是选择了Scala,基于以下理由:
1、Scala是JVM编程语言,与java高度兼容,可以充分利用现有的java程序资源
2、Scala是OOP和FP混合体,有些问题可以通过OOP形式来解决,是良好的OOP到FP编程模式的转换过渡
3、新发布的java 8中新增了许多Scala的特长(Features)。将来这两款编程语言是不是会逐步接近,越来越相似或者在某些方面进行合并?当java能解决所有问题时我们可能又回归到java编程;又可以充分利用java经验和资源积累了。
4、Scala构建工具SBT是Maven后的强大工具。可以完整构建大型软件系统及实现团队开发管理
5、已经有一些知名企业使用Scala开发了自己的平台如Tweeter, Gilt, Foursquare等。大型的成功项目最著名的是 Spark