开发人员必知的 5 种开源框架

作者:John Esposito

软件侵吞着世界已经四年多了,但开发人员看待软件的方式稍有不同。我们一直在致力于解决实际问题,而很少思考软件开发的基石。当问题变得更庞大、解决方案更复杂时,一些实用的、不怎么产生泄漏的抽象工具就显得越来越重要。

简单地来说,在那些追求生产效率的开发者眼中,框架 正在吞食着世界。那究竟是哪些框架、各自又在吞食着哪一部分呢?

开源界的开发框架实在太多了,多到近乎疯狂的地步。我从2015年各种领域的榜单中选取了最受欢迎的5种框架。对于前端框架(我所擅长的领域),我只选取那些真正的客户端框架,这是因为现今的浏览器和移动设备已经具备非常好的性能,越来越多的单页应用(SPA)正在避免和服务端交换数据。

  1. 展现层:Bootstrap

我们从技术栈的顶端开始看——展现层,这一开发者和普通用户都会接触到的技术。展现层的赢家毫无疑问仍是Bootstrap。Bootstrap的流行度非常之惊人,远远甩开了它的老对手Foundation,以及新星Material Design Lite。在BuiltWith上,Bootstrap占据主导地位;而在GitHub上则长期保持Star数Fork数最多的记录。

如今,Bootstrap仍然有着非常活跃的开发社区。8月,Bootstrap发布了v4内测版,庆祝它的四岁生日。这个版本是对现有功能的简化和扩充,主要包括:增强可编程性;从Less迁移至Sass;将所有HTML重置代码集中到一个模块;大量自定义样式可直接通过Sass变量指定;所有JavaScript插件都改用ES6重写等。开发团队还开设了官方主题市场,进一步扩充现有的主题生态

  1. 网页MVC:AngularJS

随着网页平台技术越来越成熟,开发者们可以远离仍在使用标记语言进行着色的DOM对象,转而面对日渐完善的抽象层进行开发。这一趋势始于现代单页应用(SPA)对XMLHttpRequest的高度依赖,而其中流行的SPA框架当属AngularJS

AngularJS有什么特别之处呢?一个词:指令(directive)。一个简单的ng-就能让标签“起死回生”(从静态的标记到动态的JS代码)。依赖注入也是很重要的功能,许多Angular特性都致力于简化维护成本,并进一步从DOM中抽象出来。其基本原则就是将声明式的展现层代码和命令式的领域逻辑充分隔离开来,这种做法对于使用过POM或ORM的人尤为熟悉(我们之中还有人体验过XAML)。这一思想令人振奋,解放了开发者,甚至让人第一眼看上去有些奇怪——因为它赋予了HTML所不该拥有的能力。

有些遗憾的是,AngualrJS的“杀手锏”双向绑定(让视图和模型数据保持一致)将在Angular2中移除,已经临近公测。虽然这一魔法般的特性即将消失,却带来了极大的性能提升,并降低了调试的难度(可以想象一下在悬崖边行走的感觉)。随着单页应用越来越庞大和复杂,这种权衡会变得更有价值。

  1. 企业级Java:Spring Boot

Java的优点是什么?运行速度快,成熟,完善的类库,庞大的生态环境,一处编译处处执行,活跃的社区等等——除了痛苦的项目起始阶段。即便是最忠实的Java开发者也会转而使用Ruby或Python来快速编写一些只会用到一次的小型脚本(别不承认)。然而,鉴于以上种种原因,Java仍然是企业级应用的首选语言。

这时,Spring Boot出现了,它是模板代码的终结者,有了它,你就能在一条推文中写出一个Java应用程序来:

https://twitter.com/rob_winch/status/364871658483351552

1
2
3
4
5
6
7
8
9
// spring run app.groovy
@Controller
class ThisWillActuallyRun {
@RequestMapping("/")
@ResponseBody
String home() {
"Hello World!"
}
}

没有让人不快的XML配置,无需生成别扭的代码。这怎么可能?很简单,Spring Boot在背后做了很多工作,读上面的代码就能看出,框架会自动生成一个内嵌的servlet容器,监听8080端口,处理接收到的请求。这些都无需用户配置,而是遵从Spring Boot的约定。

Spring Boot有多流行?它是目前为止fork数和下载量最高的Spring应用(主框架除外)。2015年,在谷歌上搜索Spring Boot的人数首次超过搜索Spring框架的人

  1. 数据处理:Apache Spark

很久很久以前(2004年),谷歌研发出一种编程模型(MapReduce),将分布式批处理任务通用化了,并撰写了一篇著名的论文。之后,Yahoo的工程师用Java编写了一个框架(Hadoop)实现了MapReduce,以及一个分布式文件系统,使得MapReduce任务能够更简便地读写数据。

将近十年的时间,Hadoop主宰了大数据处理框架的生态系统,即使批处理只能解决有限的问题——也许大多数企业和科学工作者已经习惯了大数据量的批处理分析吧。然而,并不是所有大型数据集都适合使用批处理。特别地,流式数据(如传感器数据)和迭代式数据分析(机器学习算法中最为常见)都不适合使用批处理。因此,大数据领域诞生了很多新的编程模型、应用架构、以及各类数据存储也逐渐流行开来(甚至还从MapReduce中分离出了一种新的集群管理系统)。

在这些新兴的系统之中,伯克利AMPLab研发的Apache Spark在2015年脱颖而出。各类调研和报告(DZoneDatabricksTypesafe)都显示Spark的成长速度非常之快。GitHub提交数从2013年开始就呈线性增长,而谷歌趋势则在2015年呈现出指数级的增长

Spark如此流行,它究竟是做什么的呢?答案很简单,非常快速的批处理,不过这点是构建在Spark的一个杀手级特性之上的,能够应用到比Hadoop多得多的编程模型中。Spark将数据表达为弹性分布式数据集(RDD),处理结果保存在多个节点的内存中,不进行复制,只是记录数据的计算过程(这点可以和CQRS实用主义Kolmogorov复杂度相较)。这一特点可以让迭代算法无需从底层(较慢的)分布式存储层读取数据。同时也意味着批处理流程无需再背负Nathan Marz在Lambda架构中所描述的“数据卡顿”之恶名。RDD还能让Spark模拟实时流数据处理,通过将数据切分成小块,降低延迟时间,达到大部分应用对“准实时”的要求。

  1. 软件交付:Docker

严格意义上说,Docker并不是符合“框架”的定义:代码库,通用性好,使用一系列特殊约定来解决大型重复性问题。但是,如果框架指的是能够让程序员在一种舒适的抽象层之上进行编码,那Docker将是框架中的佼佼者(我们可以称它为“外壳型框架”,多制造一些命名上的混乱吧)。而且,如果将本文的标题改为“开发人员必知的5样东西”,又不把Docker包含进来,就显得太奇怪了。

为什么Docker很出色?首先我们应该问什么容器很受欢迎(FreeBSD Jail, Solaries Zones, OpenVZ, LXC)?很简单:无需使用一个完整的操作系统来实现隔离;或者说,在获得安全性和便利性的提升时,无需承担额外的开销。但是,隔离也有很多种形式(比如最先想到的chroot,以及各种虚拟内存技术),而且可以非常方便地用systemd-nspawn来启动程序,而不使用Docker。然而,仅仅隔离进程还不够,那Docker有什么过人之处呢?

两个原因:Dockefile(新型的tar包)增加了便携性;它的格式成为了现行的标准。第一个原因使得应用程序交付变得容易(之前人们是通过创建轻型虚拟机来实现的)。第二个原因则让容器更容易分享(不单是DockerHub)。我可以很容易地尝试你编写的应用程序,而不是先要做些不相关的事(想想apt-get给你的体验)。

关于作者

John Esposito

John Esposito是DZone的主编,最近刚刚完成古典学博士学位的学习,养了两只猫。之前他是VBA和Force.com的开发者、DBA、网络管理员。(但说真的,Lisp是最棒的!)