值得关注的开源软件介绍

原创
2018/07/20 09:41
阅读数 813

我们每天的学习、工作、生活大多数都基于开源软件完成,或许你也是这样的,只是没太注意。

  • 一、关于这篇文章
  • 二、开源软件很多很多
  • 三、第一类:框架和编程驱动的应用层
  • 四、第二类:数据驱动的大数据、人工智能层
  • 五、第三类:云计算、基础设施层
  • 六、第四类:操作系统、编译器、虚拟机、编程语言
  • 七、45个开源软件核心特性
  • 八、资源汇总

一、关于这篇文章

文章标题《值得关注的开源软件推荐》这个话题不是很好理,按着自己的思路试着写点东西。

我们知道值得关注的开源软件实在是太多太多,选择这个题目也让自己陷入困境。不过,试着去理一下对自己还是有蛮多收获,不管正确与否,或许也对大家也有所启发和帮助。

本Chat所选的45个开源软件,它们可能不是最流行的,但具有一定的代表性,它们是众多开源软件中的一小部分,可以说是沧海一粟,选择出来就是提供给大家学习参考。

从这么多开源软件进行筛选,需要我们有个好的思路和方法去有步骤、系统化了解和学习,本Chat就是和大家一起交流和探讨这个主题。希望这篇文章起到抛砖引玉的作用,我们只交流讨论一些思路和方法,不深入到某个具体项目,这个会留在以后的课程与大家一同学习。

开源软件在操作系统、云计算、大数据、编译器、数据库、移动、汽车工业等领域取得了最大成功,已成主流,所以这篇文章也围绕着这些内容展开。

二、开源软件很多很多

开源软件的重要性就不用说了,它是IT工业的基石。它和我们每个人、每天的学习、工作、生活都息息相关,我们使用的互联网、物联网、车联网都广泛的依赖于它们。

先来看看,如何去寻找开源软件,我这里介绍一个可能是最有效的方式:通过GitHub上AwesomeGitHub Topics的方式去获得,这里的开源软件量足够你在整个职业生涯中了解、学习和实践的,而且还在持续增加中。

这么多开源软件,我们怎么选?

这需要一个计划性,有步骤、系统化的了解、学习。

我们先来看看有层次、系统化的了解、学习、搭建软件堆栈和平台的必要性和重要。

在我们的工作中,我们或许都有过这样的经历:前一个团队或核心成员使用的是这个框架或那个平台,新来的团队或核心成员因为自身情况将使用不同的框架和系统重构或替代前面的产品和体系架构。我自己就经历过用Java平台全面替代.NET平台的经历,其代价是巨大的,这样的替换相信大家也都有碰到过。若经常性的因为人员变动而导致产品和体系的不停更换和变动带来的研发成本就会不断上升,且因为没有在稳定框架和基础架构上的持续积累和耕耘,团队的技术积累没有,且平台价值的体现就少的可怜。

所以层次化、系统化的了解、学习、构建公司的技术体系和平台架构就非常的重要。这个对公司的技术委员会或Leader就是个非常重要的功课。

如:大家可从Anaconda开始Python数据分析之路,可减少安装、维护各种包和版本的不方便。

OK,找到或选型后,接下来就是如何学习和实践,不断积累的额过程,我们都知道10年磨一剑存在。

  • [x] 根据公司发展方向和战略目标,拟定多年计划,不要仅仅只解决眼前问题,要考虑框架、架构、平台的长期有效性和进化,不要深度锁定商业服务供应商,尽可能用开源软件,并可以方便的替换部件和重构;
  • [x] 从知乎等网站通过搜索的方式迅速了解一下你所关注的开源软件的基本特性和大家的关注点。
  • [x] 以Ecosystem的方式去思考和组织你所关注的开源软件,这里有个参考:Node.js ecosystem
  • [X] 在学习和实践的过程中,大家可借助印象笔记或Wiki的方式对不断学习和持续整理开源软件的各种知识点。我个人就是通过Wiki的方式来不停收集、整理各种开源软件和各种资源的,这个过程持续了好几年,有几千个条目,近4000万的浏览量。

本篇文章的参考框架涉及的所有开源软件都有Wiki条目进行跟进和维护,有些条目持续维护了多年,接下来我们就对它们一一做个大致了解:

  • [ ] 应用类:框架、企业应用、编辑器
  • [ ] 数据类:数据科学、大数据、机器学习、汽车机器人
  • [ ] 服务类:云计算、数据库、消息队列、服务器
  • [ ] 系统类:操作系统、编译器、虚拟机、编程语言

类似这样的工作,你自己或团队都可以去经常理一下。

此外,要紧跟所关注开源软件的Conferencce技术大会,这是了解开源软件最新进展和成功应用的一个非常好的方法。我在这里也整理了一些开源软件历年大会幻灯片资料,很有参考价值,欢迎大家收藏。

三、第一类:框架和编程驱动的应用层

通过框架加快应用的开发和上线。

1、框架:Django、Meteor、Qt

框架的开源软件太多太多,不同语言、不同应用场景都有很多不同的框架可供选择,这里选择了Python、JavaScript、C++三种主流语言的编程框架加以简答介绍。

这三个框架都是比较大而全的,覆盖某个领域的大部分应用场景和技术,它们带来的好处是快速的开发效率和生产力,但同时与会失去灵活性和自由度。喜欢用很多小软件、小工具集成解决问题的用户他们通常不会选择这些大块头或者说全堆栈的软件和平台。

Python实时服务器除了Tornado,也可使用Erlang等语言编写,

Qt是一个跨平台的C++/JavaScript应用框架,是一个桌面、嵌入、移动应用的开发平台,支持Windows、Linux、macOS、Android、iOS、Windows 10操作系统。

2011年,诺基亚出售Qt业务给Digia,该公司将接手Qt商业授权和服务业务,诺基亚也将移交大约3500家商业客户。

Maya、Google Earth、Skype、Telegram、魔兽争霸官方对战平台、网易炉石盒子等都基于Qt构建。Qt在汽车、自动化、医疗、数字电视机顶盒、物联网、移动应用领域都有广泛应用。其中,Qt Automotive Suite值得更多关注。

Qt Automotive Suite

Qt通过整合JavaScript语言,加速用户界面的构建。

Qt目前主流的开发思路是:用QML(Qt Quick)构建交互界面,用C++实现业务逻辑。

QML是种声明式语言(declarative language),它是一个用户界面规范和编程语言,混合JSON语法和JavaScript表达式。

Meteor是基于JavaScript的框架,用于Web客户端、服务器端以及移动应用。Meteor应用会对数据的变化作出即时响应,因此你将获得几乎不可能的及时响应体验,同时,一致的构建过程、前后端统一的包系统以及单个命令的应用部署过程,将在从设计到发布的每一步上为你节省时间。

Meteor带来的优势有:

  • 全栈通用、统一的单一语言;
  • 内置响应式支持;
  • 高代码重用;
  • 提供强大构建工具。

Meteor的了解就从七大原则入手:

  • [x] Data on the Wire. Meteor 不发送 HTML,服务器端只负责发送数据,由客户端渲染;
  • [x] One Language. 前后端都是 JavaScript 语言
  • [x] Database Everywhere. 前后端都可以直接创建存取修改数据库里的数据,且数据安全
  • [x] Latency Compensation. Meteor 在前端提前获取数据并模拟数据模型,使其看起来像是从服务器端立即返回了数据
  • [x] Full Stack Reactivity. 实时响应是 Meteor 的缺省配置。在所有层次,从数据库到模板,都会在必要时自动更新
  • [x] Embrace the Ecosystem. Meteor 完全开源并集成了很多现有的开源工具和框架。例如 Angular,React。Meteor 有自己的 AtmosphereJS 包下载管理应用,也可直接使用 NPM (目前是非官方支持)
  • [x] Simplicity Equals Productivity. Meteor 简单易上手,API 简洁优雅

除Meteor和Node.js外,Angular和React可能是大家关注最多的两个JavaScript框架和平台,它们背后是Google和Facebook在推动。鉴于React最近因为版权专利问题,我们先放一下。Angular2官方推荐语言是TypeScript。有关ECMAScript、JavaScript、TypeScript、CoffeeScript、ClojureScript标准、语言和框架的话题也很多很多,大家可去扩展这部分的知识体系。

这里贴一张Angular2学习路线图供大家参考。

此图来自:知乎

我想,这幅图对Angular2有用,对Meteor等其它框架的学习也有一定的参考价值。

说到选择哪个框架,涉及的就是各种比较,本篇所列举的45个开源软件和项目也是各种比较的一些总结,所以生活在开源软件的世界里,比较就是家常便饭。若是作为开源软件的开发者和维护者,要做的工作也是更多了,除版本编程基本攻扎实,维护和Bug修复外,不停的学习其它优秀的同类项目也是一门必修课,从别人身上学习优点,但又不能完全照搬,需考虑自己项目的个性和特性,又要兼顾通用功能和特性的整合,在保证项目代码和版本稳定的同时,又要不断调整和平衡新版本的需求和特新,又要很好兼容老版本,其过程想想都觉得难。所以一个成功的开源项目,除了独特的个性外,还要平衡和兼容好共性,在这里给开源软件开发者致个敬。

这节话题结束前,放一个Angular2 相比 Vue 有什么优势?项目对比的分析,是Vue作者写得,挺有趣,大家可看看。

2、应用:odoo、iDempiere、Moqui

在这里我们说说三个企业应用,三个开源ERP/CRM开源软件。

说到企业应用,首选Java语言。除了Java语言,这几年因为数据科学和机器学习的热潮,极大的推动了Python语言在企业的普及。此外,XML作为企业应用的数据表示、存储、转换的标准已被广泛采用,而且各行各业的XML规范已经成熟和稳定。

所以简单讲,企业应用 = Java + Python + XML/JSON + RESTful API (当然, .NET也是一个不错的选择)

odoo是近几年发展非常迅猛的开源ERP/CRM套件,使用Python、XML、PostgreSQL构建。之前,写了篇odoo:开源 ERP/CRM 入门与实践的文章,大家可看看你普及一下odoo的知识。

iDempiere = OSGi + Adempiere

Adempiere是一个很主流的开源ERP/CRM系统,也是一个完整的企业应用套件和堆栈。

Adempiere

Adempiere衍生自Compiere,以为Compiere越来越封闭和私有,就有了现在的Adempiere,很多开源软件也都是这样产生的,同时,Compiere也失去了成为No.1开源ERP/CRM的机会。

说到这,也说说Solaris和OpenSolaris,在Sun被Oracle后,因为Oracle的封闭,现在的它们也基本走向死亡,同时也玩死了NetBeans和OpenOffice,基于OpenOffice的LibreOffice代表着未来。

类似的故事还很多很多,当前是个开放开源的时代,封闭自嗨的基本都会走向衰败。就连很封闭的苹果和腾讯也在不断调整自己的开源、开放战略,并陆续推出一些开源项目。

好了,现在说说Moqui。

Moqui的作者是Apache OFBiz的设计者和开发者,在企业数据模型和流程上有非常深的造诣,他现在努力打造了Moqui。Moqui基于OFBiz十多年来的项目实施经验以及作者的设计、开发和方法论,包括纯粹的关系 数据层以及面向服务的逻辑层。Moqui框架的核心代码只有OFBiz核心框架代码的15%左右,并供了更多有意义的功能和更多的高级工具,使用Groovy和Java语言。 一个企业ERP/CRM的生态系统,一个类似地球的构造:地幔、地壳。

Moqui

  • [ ] Moqui Framework: 核心 Core,就像 Linux 的 Kernel 内核一样
  • [ ] Moqui Mantle,地幔业务构件: 一组通用普适的、可作为您各种场景业务系统的基础业务构件集合,包含:
  • 通用的数据模型,Universal Data Model (UDM)
  • 通用业务服务库,Universal Service Library (USL)
  • 通用业务过程/流程库,Universal Business Process Library (UBPL)
  • [ ] Moqui Crust,地壳(插件):主题皮肤、 综合的工具集、不同行业的应用支持、大公司规模支持、业务领域支持等

初步体验了Moqui,感觉使用它构建应用很快,大部分工作就是编写XML、脚本和构件,描述数据、业务和流程。介绍它是因为以往大多数企业应用都是硬编码实现,而Moqui采用XML去定义模型、服务和流程,提高了整个系统的可描述、可维护性。Moqui支持如下的几种类型的构件:

  • [ ] 实体 entities : 贯穿于整个业务系统中的关系数据模型(直接使用模型,无需复杂的对象关系映射)
  • [ ] 界面 screens 和 表单 forms : 用于基于 web 的应用界面或者其他用户接口(通用方式是基本构件᧿述存放在 XML 文件中,或者用户指定扩展存放于数据库中)
  • [ ] 界面转换 screen transitions : 用于配置页面到页面的流转以及设置页面跳转时,业务处理过程的必要输入
  • [ ] 服务 services : 远程调用的方式运行内部逻辑交互或者曝露外部的服务
  • [ ] ECA(事件-条件-行为 event-condition-action)规则 : 用于类似实体、服务操作以及 email 信息接收等系统级事件触发

Mouqi应用中通用部分以及构件之间的关系:

Mouqi add-ons

Mouqi先了解到这,让大家对它有一个总体认识,后续我们再深入下去。

3、编辑器:Emacs、Vim、Atom

编辑器是所有计算机系统上最普遍的应用之一。

除了开发者日常使用的一些大块头IDE外:Eclipse、Visual Studio、Xcode等,这类小巧、轻盈的编辑器也备受程序员喜爱,它们是Emacs、Vim、Atom。

这篇文章由Emacs和Markdown Model编写,在macOS(基于XNU/Dawnin)上完成。

  • [ ] Emacs:神一般的编辑器,一个不折不扣的“操作系统”,一个终极工具!
  • [ ] Vim:改进的vi,命令行编辑器的标准。
  • [ ] Atom:用户友好的编辑器,非常照顾IDE用户的鼠标使用习惯。

Emacs和Vim减少鼠标使用,强迫使用键盘,熟练使用键盘编程是进阶和高效的必由之路,想想看在整个工作中,没碰过鼠标,全部用键盘完成是不是感觉有点酷。

Vim有自己的语言Vimscript,Emacs有Emacs lisp。

Emacs的设计目标就是,你装了个Unix或者Linux系统,不需要装任何其它软件,只要装一个Emacs就够了,它能帮助你完成所有的任务。也就是说,除了编程,你还可以用它写论文、做幻灯片、浏览网页、收发邮件、聊天、听歌、看照片、玩游戏……目前,好像除了直接在Emacs里看电影还不行,其它的都实现了。(ps:这一段是直接引用,无比赞同)

通过使用Emacs,接触Emacs社区,让自己感受和学习更多的黑客文化,通过Emacs接触Emacs Lisp,这也是乐趣的开始!

Vim比较适合前端开发,其它语言,如:Java,还是使用IDE比较好。

Vim主要特点有:

  • Vim有多种模式:普通模式,插入模式,可视模式,命令行模式;
  • 使用Vim的主要精力在定位操作
  • 常见定位命令如:上下左右的操作,k 上行、j 下行、h 左、l 右;
  • 定位后就是操作,vim操作命令是原子性的,可随意组合操作命令,如:daw(delete a word)、caw(change a word)。

除了Vim外,Vi家族还有几个其它的克隆项目:

  • nvi:新vi,vi官方的伯克利版本
  • elvis
  • vile:类Emacs的Vi

Atom 是一款基于 Electron framework、node.js 构建的跨平台编辑器。它是 Emacs 和 Vim 之外推荐的开源编辑器,非常适合前端、web开发,也支持广泛的编程语言。

基于Atom和Electron framework构建的还有微软的Visual Studio Code(https://code.visualstudio.com/)和Facebook的Nuclide

Visual Studio Code是我很喜欢的,它非常强大和易用,拥有庞大的插件库和资源。

四、第二类:数据驱动的大数据、人工智能层

大数据热了好多年,这几年是人工智能,它们的核心是数据和算法,这是一个数据驱动的时代。

4、数据科学:Jupyter、Pandas、Anaconda

Juypter是一款面向数据科学和人工智能前端交互工具,基于IPython构建,是IPython的未来发展方向。

Anaconda Python 是自由使用的面向大规模数据处理、预测分析和科学计算的企业级Python发行版。Anaconda 以 Red Hat 和 Debian Linux 发行版的方式来分发 Python。使用Python进入数据科学领域的同学可从Anaconda入手。它提供GUI和命令行的两种方式方供用户使用,使用包管理工具conda,如安装pandas、Jupyter:

conda install pandas

>>> import pandas as pd
>>> pd.show_versions()

conda install jupyter

Jupyter

5、大数据:HDP、CDH、HPCC

HDP和CDH都是Apache Hadoop分发版,HPCC是一个C++开发的大数据处理和分析平台。

  • HDP:100%开源,零锁定;
  • Hortonworks解决方案包含HDF和HDP:
  • Hortonworks DataFlow(HDF)收集、组织、整理和传送来自设备、传感器、点击流、日志等的实时数据。
  • Hortonworks Data Platform(HDP)用于创建安全的企业数据湖,为企业提供实现快速创新、运用实时商业洞察力所需的分析信息。

HDP是一个开源大数据的生态系统

Apache Metron实时大数据安全

ODPi: the open ecosystem of big data 在这里提以下ODPi项目,这个Linux基金会下的一个项目,成员包括HDP的开发商Hortonworks。

鉴于Linux基金会的成功运作和治理能力,ODPi可关注,以生态系统的思路去思考整个大数据市场下,国内已有大数据公司来此占为。

ODPiODPi大数据生态系统

在Apache Hadoop & Spark统治的大数据市场,HPCC显得弥足珍贵,值得更多关注。

HPCC 包括以下核心组件:

  • Thor (the Data Refinery Cluster)
  • Roxie (Rapid Online XML Inquiry Engine, the Query Cluster)
  • ECL (Enterprise Control Language)
  • ECL IDE
  • ESP (Enterprise Services Platform)

HPCC

HPCC在安全、身份和风险管理哟众多成功案例。

6、机器学习(深度学习):Caffe、MXNet、TensorFlow

TensorFlow在GitChat人工智能板块已有了最多的介绍,它的重要性就不多说。

TensorFlow官方文档中文版可作为你学习TensorFlow的重要参考。

选择TF、Caffe(caffe2)、MXNet,一方面是是软件很好,另外一个重要的因素是背后是Google、Facebook、Amazon等巨头在背后支撑,并在自己的产品服务线广泛部署,其可靠性、可伸缩性得到最大规模和严格的历练。

编程语言入门有Hello World,机器学习入门有MNIST。MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。它也包含每一张图片对应的标签,告诉我们这个是数字几。

ps:一个小道消息:MS因为内斗严重很难发力,所以用CNTK,Torch,TensorFlow,MXNet,Caffe的都有,自家的CNTK很难形成规模。

相对于TensorFlow这种重量型的后端,MXNet的轻量化路线使得可以我们在花费Google brain 1/10的人力的情况下做到类似TensorFlow技术深度的系统。(李沐)

说到深度学习、机器学习,我想表达自己的一个观点。当前,我们都在关心机器学习,其实,我们也应该关心,如何让我们更高效的学习,成为一个学习机器。当然,这里的学习机器是有更多思考和创造力的那种。未来是个机器学习和学习机器相互学习、促进的过程,你更聪明,谁就有更多支配和主导权,大家相辅相成,共同进化。

7、汽车机器人:Automotive Grade Linux(AGL)、ROS、Apollo Auto

AGL在丰田佳美(Toyota Camry)首次亮相。

AGL是Linux基金会项目,基于Tizen项目构建,由最初由韩国三星主导,现在为Linux基金会项目。

AGL Unified Code Base(UCB) 4.0

美日韩三国高科技公司主要在推动这个项目,其System Architecture Team(SAT)包含5-10个核心成员:Denso, Fujitsu TEN, Microchip, Panasonic, Intel, Renesas/IoT.bzh, Toyota

UCB核心功能:

  • AGL Application Framework
  • ConnMan network management for pairing multiple devices
  • Vehicle bus messaging with built-in security to prevent unwanted intrusions
  • Audio routing and mixing
  • Multiple display capability (front and rear seat)
  • IP Network Manager with WiFi and LTE
  • Linux Security Module
  • Linux-based distribution using Yocto Project
  • Device Profiles for Telematics, IC, ADAS

在汽车工业使用LTS: Long Term Stable Kernel,这点很重要,这两份文档可参考。 http://docs.huihoo.com/automotivelinux/summit/2017/Using-Long-Term-Stable-Kernel-for-automotive.pdf Linux Kernel selection guide for production use

不知道到百度阿波罗计划的Linux核心是如何评估选择的?

这张图很重要,它把AGL、Tizen和GENIVI三者以AGL UCB的方式融合在了一起。 AGL UCB

现在是个数据时代,我们每天都在产生大量的数据,对数据来说,有个庞大的知识体系:数据科学,首先我们对数据科学有个初步认识和印象。 数据科学

  • Apollo
  • Apollo Platform based on Robot Operating System(ROS)
  • Apollo Kernel based on Linux Kernel 4.4.32

因为Apache v2, ROS, Linux Kernel,Apollo Auto也介绍一下。

ps:天才黑客自己开发了一套汽车自动驾驶系统。

关于市场份额:作为一家拥有近37年历史的嵌入式操作系统开发商,QNX在车载信息娱乐系统或车联网系统占据超过50%的市场份额,QNX是仪表盘背后的隐形王者。(http://blackberry.qnx.com/cn/solutions/industries/automotive/index)

我们从大数据、机器学习、自动驾驶汽车三个重要的数据科学领域入手,和大家交流了。

五、第三类:云计算、基础设施层

云计算数据中心是一项具有战略意义的基础设施,其重要性和普及知识这里就不多讲了。

这里主要简单介绍IaaS、PaaS两种主要的服务模型,其代表有:OpenStack、OpenShift

IaaS,PaaS

8、云计算:OpenStack、OpenShift、SaltStack

OpenStack是开源云平台的事实标准。

OpenStack使用Python语言编写,使用了Django、Tornado和Twisted等框架,使用AMQP消息协议和Redis分布式K/V存储。

OpenStack可以说是Linux之外最大规模的开源项目,有大量公司和开发者参与构建这个开源云平台生态系统,也有很多OpenStack发行版可供用户选择。

Google加入OpenStack基金会推动着Docker/Kubernetes与混合云加速融合;EasyStack联合创始人&CTO刘国辉谈到,”Google加入OpenStack体现了对于数据中心控制平面的争夺已经结束,以容器为代表的应用形态与以虚拟化为代表的系统形态将会完美融合于OpenStack之上,并与软件定义网络和软件定义存储一起统治下一代数据中心。“

OpenStack+K8S

国内用户可关注这几家OpenStack供应商:

OpenStack、Ansible、SaltStack等开源软件也极大奠定了Python在数据中心的定位。

OpenShift是RedHat推出的基于Docker和Kubernetes构建的PaaS开源容器平台。

OpenShift能给用户带来什么?可参考红帽OpenShift的业务价值

OpenShift业务价值亮点有:

  • 5年平均投资回报率:531%
  • 每年每100名开发人员实现的年度平均效益:129 万美元
  • 应用程序开发生命周期加快:66%
  • 开发每个应用程序所需的IT员工时间减少:35%
  • 每个组织增加的收入:742万美元
  • 每个应用程序的IT基础架构和开发平台成本降低:38%

OpenShift

总结起来:加快产品、服务研发和交付时间,减少研发成本,增加企业收入,降低基础架构投资,获得很高的投资回报率。

为什么在这里把这个提出来讲,也是出于自己的一些经历,开源软件对我们开发人员很熟悉,但很多最终用户和客户却不了解。

开源软件也需要好的商业包装,因为你的最终客户可能根本就不知道什么开源软件,你给TA大谈开源软件,TA可能一脸茫然。若你把开源软件以类似这样的方式讲给TA听,效果可能会更好,也更容易成交业务,所以基于开源软件做商业化服务的同学有必要建立起这样的思维模式,将好用、强大的开源软件做更好的商业包装。这方面的成功公司有很多,你可更多跟进Red Hat、Ubuntu、MongoDB、Hortonworks等开源软件公司,它们把开源和商业融合都做得相当出色。

此白皮书也可作为开源软件商业价值分析的参考,大家基于开源软件做商业化公司和运营时可按照这样的思路思考下去。

Docker容器和Kubernetes容器编排已成为企业交付软件和服务的行业标,OpenShift可直接作为企业DevOps & CI/CD的基础设施, 成为部署微服务的多租户平台。

Red Hat也在积极推动区块链技术在OpenShift的应用部署,与BlockApps的合作,为其提供区块链平台的PaaS基础设施。

BlockApps on OpenShift

BlockApps

OpenShift生态系统已初具规模,这可增强大家选型的信心。不过,因为OpenShift的平台规模也比较大,定制化和扩展的难度也会加大。这也是我们常碰到的问题,选个大块头的开源平台堆栈,还是选择自由装配和维护各种小软件的融合方式。这是两种不同的思路,团队Leader和技术团队要仔细评估和做出平衡。

SaltStack是 Python开发的开源配置管理和自动化工具,SaltStack提供了一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度快,服务器之间秒级通讯。

关于SaltStack,大家可从以下几点去加深了解:

  • 理解Salt的动机,以及它们将影响运维人员的使用方式;
  • 更好地使用云服务,包括EC2、Azure及OpenStack等,支持更多规模云计算平台部署;
  • 学习新的RAET协议,并了解它如何改变自动化工作方;
  • 使用ZeroMQ消息队列软件,管理端Master,客户端Minion,如何进行数据交换和消息传递的。

Ansible基于SSH协议传输数据,Saltstack使用消息队列zeroMQ传输数据,MQ通讯和SSH通讯,速度相差大约40倍。

我们推崇使用消息队列MQ来进行数据传输和通讯。

与Ansible的比较,SaltStack 与 Ansible 选择?可供大家选型参考。

9、数据库(数据仓库):Riak、OrientDB、Apache Kylin

Erlang驱动的数据库,在分布式、消息、并发、可伸缩、容错方面有天然优势。

Riak Core、Riak KV、Riak TS、Riak S2提供了构建分布式系统、键值存储、时序存储、对象存储的核心基础设施。

Riak公司在数据库对比选型上做得功课很充分,把主流的开源数据库都对比了一下

  • Riak Compared to Cassandra
  • Riak Compared to Couchbase
  • Riak Compared to CouchDB
  • Riak Compared to HBase
  • Riak Compared to MongoDB
  • Riak Compared to Neo4j
  • Riak Compared to DynamoDB

每个选型的开源软件都可能涉及这样的广泛比较,所以工作量和功课是比较多的,大家可参考。

多范式的C++语言(面向对象、模版、函数式、过程式)成为解决复杂、多样性问题的首选。

多模型数据库OrientDB(对象模型、键值模型、文档模型、图模型)让其集多种数据库类型与一身,使其能应对多种应用场景,减少多种数据库部署带来的运营运维成本。

Apache Kylin已成功部署于百度、美团、网易、京东、唯品会、中国移动、中国电信、国泰君安、华泰证券、联想、OPPO、魅族、去哪儿等公司,支撑着用户行为分析、流量日志分析、电商分析,广告效果分析,实时分析等基于数据仓库及多维分析(OLAP)技术的数据服务。是传统数据仓库、商业智能技术在互联网企业大规模应用的真实案例。

再说说Kylin是什么?

  • 可扩展超快OLAP引擎:Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计;
  • Hadoop ANSI SQL 接口:Kylin为Hadoop提供标准SQL支持大部分查询功能;
  • 交互式查询能力:通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能;
  • 多维立方体(MOLAP Cube):用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体;
  • 与BI工具无缝整合: Kylin提供与BI工具,如Tableau,的整合能力,即将提供对其他工具的整合。

Apache Kylin有健康发展的生态系统

Kylin

在这边文章中,会很多提交生态系统。这个大家多重视,有助于大家建立其层次、系统化的思考方式。

10、消息队列(即时通讯):RabbitMQ、Kafka、ejabberd

在介绍RabbitMQ之前,说说 Advanced Message Queuing Protocol (AMQP,高级消息队列协议)

AMQP的愿景是:从任何发布者到任何感兴趣的消费者之间的信息,通过一条软件总线实时动态的连接起来。

RabbitMQ就是要实现AMQP愿景的开源软件,AMQP的就如同电话交换机的架构,而选择Erlang也在意料和情理之中。Erlang是一门消息编程语言,它为通信而生。

除AMQP标准外,Extensible Messaging and Presence Protocol(XMPP)是开放即时通信标准,其代表产品是Erlang开发的Ejabberd,可以说Erlang支撑起了AMQP和XMPP两大标准的开源软件实现。Erlang是消息队列、即时通信的首选。

XMPP是个有着18年历史的开放的消息标准,被广泛应用于物联网、即时通信、社交网络和实时Web领域,支持众多的开发语言和操作系统。

Apache Kafka 是一个高吞吐量的分布式消息系统,使用 Scala 开发,它已是企业应用和大数据生态系统中的核心组件,它是消息、数据、实时流的中心Hub。

Kafka

由阿里巴巴捐赠给Apache基金会的RocketMQ也在健康的发展着,和Kafka很类似,大家下来可做些对比评估和选型。

此外,ZeroMQ大家也可更多关注,上面介绍的SaltStack就使用ZeroMQ作为传输机制,且在大量的开源软件中也包含ZeroMQ的使用。

OpenMessaging项目由阿里巴巴发起,与雅虎、滴滴出行、Streamlio公司共同参与创立的分布式消息中间件、流处理领域的应用开发标准,目前已正式入驻Linux基金会。

消息是重要的基础设施,因为它解耦、连接各种数据、应用和服务,充分体现互联网连接一切的本质。

11、服务器:Nginx、Jetty、Cowboy

如何支撑上次的数据分析和应用,需要有个强大的软件基础设施,我们以云计算、数据库、消息队列和Web Server来搭建这个基础设施。 云计算对所有的计算资源、存储资源、网络资源进行系统管理,用数据库进行各种各种类型数据的存储和处理。以消息队列作为数据传输和应用交互的机制,Web Server将各种服务以RESTful的方式部署。

可关注的Nginx两个分发版本:

Apache Tomcat和Eclipse Jetty基本是Java Web Server的首选。

  • Jetty更轻量、更容易定制;Jetty架构基于Handler,扩展更容易,而Tomcat是基于容器设计,不易扩展;
  • Google GAE选择Jetty,定制足够小的Java Web Server支撑GAE业务;
  • Apache Tomcat和Eclipse Jetty背后是两大开源基金会的合作与竞争。

六、第四类:操作系统、编译器、虚拟机、编程语言

好,现在我们来到最底的一层:系统层,它包含操作系统、编译器等核心软件,是每台计算设备不可或缺的组成。

12、操作系统:GNU/Linux、XNU/Darwin、FreeBSD

首先简单回顾下UNIX/BSD操作系统的历史

UNIX-like

我们就关心上面BSD和GNU家族的东东,下面的都是商业的UNIX操作系统,我们就不考虑了。

BSD家族最具代表性的就是FreeBSD,它是GNU/Linux之外最可靠的选择。它强大、稳定、坚如磐石,也是苹果操作系统的重要组成部分。

苹果最近开源了XNU项目 XNU是XNU is Not Unix的首字母缩写,类似GNU是GNU's Not Unix的缩写,我们暂且也以GNU/Linux的方式来称呼XNU/Darwin。

OpenDarwin以前有发布过,但因为一些原因关停,这里有网站存档

XNU是个混合内核,包含两部分:BSD和Mach。macOS剥离Cocoa、Carbon等东西,剩下的叫Darwin,它包含POSIX兼容、UNIX线程、进程实现。

XNU内核是macOS和iOS的核心,由三个主要部分组成的一个分层体系结构:

  • 内核的内环是Mach层,源自卡纳基-梅隆大学开发的Mach内核;
  • BSD层;
  • I/O Kit。

GNU/Linux的分发版很多,除了两大主流Debian/Ubuntu和RedHat/CentOS外,大家可更多关注下:NixOS Linux 包含几个很有特色的项目:

  • Nix:包管理器,也可用于macOS平台。
  • NixOps:云部署工具
  • Hydra:基于Nix的持续构建系统
  • Disnix:分布式服务部署工具集

GNU/Linux驱动的Android移动操作系统现在已成为主导,基于它的生态系统会逐渐放大。此外,以OpenWrt、ROS为代表的嵌入式、机器人操作系统也在GNU/Linux的生态系统的驱动下逐渐壮大。

OpenWrt是适合于嵌入式设备的一个Linux发行版,国内主流的路由器:如极路由、小米路由器、魅族路由器、魔豆路由器等都基于OpenWrt构建。相比Android系统,OpenWrt被认为是更加适合智能设备和机器人的软件平台,被誉为下一个时代的Android,值得更多关注。

在操作系统环节,我想提一下虚拟化和容器技术。

虚拟机技术在操作系统、程序设计语言和计算机体系结构中占据了重要位置,它是系统与进程的通用平台。

在“进程级“ 虚拟机技术可用于实现动态二进制翻译、平台无关的网络计算等能力;而在“系统级",可以在同一个硬件平台或一个服务器集群上同时提供多个操作系统环境。

可以说,Solaris Zone是操作系统虚拟化做得最出色的解决方案,只可惜。

最近阿里巴巴宣布开源它的容器技术:Pouch

13、编译器:GCC、LLVM、Babel

GCC(GNU Compiler Collection,GNU编译器集合)是最重要的开源软件。因为其它几乎所有开源软件都在某种层次上依赖于它,核心编程语言是C语言。

LLVM(Low Level Virtual Machine)底层虚拟机,是一个开源(BSD)编译器的基础设施,使用C++编写。

GCC和LLVM是编译器领域的两大巨头,

Babel 是一个通用的多用途 JavaScript 编译器。更确切地讲是源码到源码的编译器,通常也叫做“转换编译器(transpiler)”,简称转译。

Babel 能把用最新标准编写的 JavaScript 代码向下编译成可以在当前可用的版本,Babel 能够让你提前使用 JavaScript新标准。

Babel 插件体系让其拥有庞大的生态系统。

Babel 三个主要处理步骤是:解析(parse),转换(transform),生成(generate):

  • 解析代码并输出抽象语法树(AST)含词法分析和语法分析;
  • 转换接收AST并对其进行遍历,对节点进行添加、更新及移除等操作, 这是最复杂的过程,同时也是插件将要介入工作的部分;
  • 代码生成把AST转换成字符串形式的代码。

Babel是下一代JavaScript编译器,说到Babel,也会提及TypeScript。TypeScript是JavaScript超集,是JavaScript的强类型版本,通过TypeScript Compiler API,开发者可以自己实现编译器。

可简单理解为:TypeScript = Type + ES6

Babel Handbook可作为你学习Babel的入门参考。

14、虚拟机(运行时):JVM、.NET Core、BEAM(Erlang)

在操作系统章节我们提到过虚拟机,这一节我们也将了解编一些有关程语言虚拟机的技术。

虚拟机技术极大的丰富和繁荣了编程语言的生态系统,我们知道JVM平台有很多编程语言,有超过200种编程语,它们共同繁荣了JVM生态系统。

JVM

JVM的实现也有很多,大家可关注以下几个:

  • HotSpot Oracle官方实现
  • IBM最近开源了OpenJ9Java虚拟机项目。
  • Kaffe
  • Jikes RVM Java开发的虚拟机,可作为研究项目。

常见语言也有很多JVM实现版本:

  • Erlang: Erjang A JVM-based Erlang VM (多关注)
  • JavaScript: Rhino
  • Python: Jython
  • Ruby: JRuby
  • PHP: Caucho Quercus

此外,.NET平台也有托管了很多编程语言:C#, F# ...

JVM和.NET两台平台外,值得大家更多关注的是Erlang及其虚拟机生态系统。

这三类平台,个人倾向选择将其用于不同的领域,如:

  • JVM平台更多用于企业应用,如:电商ERP、大数据平台等;
  • .NET平台更多用于泛娱乐、游戏等,想想当前最火的王者荣耀就基于.NET的Unity平台构建,且微软几十年个人电脑操作和使用的广泛普及;
  • Erlang平台主攻消息、通信、电信基础设施、软件基础架构。

15、编程语言:Erlang、Clojure、F#

基于这三大虚拟机的三门主流语言:Erlang、Clojure、F#,它们也是函数式编程语言的代表。

Erlang可以在笔记本上轻松创建300万个进程。 300Erlang进程

最后,我们把这45个开源软件以核心特新和要点的方式再过一遍。

JSR-335(Lambda Expressions for the Java TM Programming Language)中定义的Lambda对Java语言语法产生深远影响,函数式编程将成为主流。

七、45个开源软件核心特性

思考、总结、提炼单个开源软件的核心特性,看看它为团队带来什么帮助,能力有哪些。

1、Django

  • Django和Flask是使用最广泛的Python Web框架;
  • Django提供Web一站式解决方案:会话、缓存、ORM、验证、表单处理、后台管理等,但系统耦合度高,替换内置功能比较麻烦,学习曲线较陡;
  • Django和Flash都基于WSGI,这是同步阻塞接口,不能使用异非阻塞的编程模式,你可考虑使用Klein微框架,用法很像Flask,可以异步方式编写Web应用。

2、Meteor

  • 一个面向Web和App的应用框架和构建平台
  • Meteor 7大原则;
  • 超过12000个包的生态系统。

3、Qt

  • Qt核心:元对象系统、属性系统、对象模型、对象树、信号槽(Signal/Slot),Qt的Signal/Slot很好解决了对象间通讯的问题,被其它语言框架借鉴;
  • Qt使用QML定义用户界面,使用C++编写业务逻辑;
  • Qt在在汽车行业有广泛应用,是GENIVI汽车联盟的推荐技术。

4、odoo

  • odoo不仅仅是开源ERP/CRM;
  • 还是一套伴随企业成长可扩展的商业运营支撑系统;
  • 一个巨大的应用生态系统,有近12500个Apps可供选用。

5、iDempiere

  • iDempiere = OSGi + Adempiere;
  • OSGi是Java模块化一个领先的解决方案;
  • Adempiere是一个世界级的集成的ERP/CRM开源软件

6、Moqui

  • Apache OFBiz作者的又一力作;
  • 快速的企业应用原型系统开发;
  • 一个框架、一个生态系统。

7、Emacs

  • Emacs是迄今为止功能最为强大的文本编辑器,Emacs是一种信仰,是神一般的编辑器;
  • Emacs是模块化的,遵循do one thing, and do it well原则,需要什么就安装什么,你可以像搭积木的方式搭建自己的环境和系统;
  • Everything Emacs,你可以在Emacs完成你几乎所有的工作:编程、写作、浏览网页、收发邮件、日程、娱乐游戏、它是个人操作系统。

8、Vim

  • Vim模式:普通模式,插入模式,可视模式,命令行模式;
  • Vim的使用主要放在定位操作上;
  • 常见定位命令如:上下左右的操作,k 上行、j 下行、h 左、l 右;定位后就是操作,vim操作命令是原子性的,可随意组合操作命令,如:daw(delete a word)、caw(change a word)。

9、Atom

  • Atom由GitHub开发维护;
  • Atom使用的Electron framework已由一个庞大的神态系统;
  • 微软Visual Studio Code和Facebook Nuclide都基于Atom/Electron框架构建。

10、Jupyter

  • Jupyter is the new front end for data science and AI.
  • Jupyter的操作过程可存档、传播、分享;
  • Jupyter的核心是IPython,Jupyter是未来。

11、Pandas

  • 在数据科学领域,Pandas是一个非常重要的Python软件包;
  • Pandas基于NumPy构建,让以NumPy为中心的应用变得更简单;
  • Pandas使用的两个主要数据结构:Series和DataFrame;

12、Anaconda

  • Anaconda是一个企业级Python发行版,面向大规模数据处理、预测分析和科学计算;
  • Anaconda 以 Red Hat 和 Debian Linux 发行版的方式来分发 Python;
  • Anaconda 包含近500个最流行的科学、数学、工程和数据分析的Python软件包。

13、HDP

  • Hortonworks公司拥有最多的Apache大数据相关项目开发者和贡献者,开发、发行100%开源的大数据平台;
  • Hortonworks Data Platform (HDP)和Hortonworks DataFlow (HDF)是两大产品;
  • 通过整合、交付统一的 Apache Spark 和 Hadoop,将 Spark 驱动的敏捷分析工作流程与 Hadoop 的海量数据集和经济性相结合,企业可以使用行业最佳安全性、管制和运营能力来部署 Apache Spark。

14、CDH

  • CDH可能是商业化运作最好的大数据平台和解决方案;
  • 开发维护了多个流行,是HDP最主要的竞争对手;
  • Impala一个C++开发的Hadoop实查询引擎值得关注。

15、HPCC

16、Caffe(Caffe2)

  • Caffe2 是贾扬清对Caffe的重新思考和重构,目前在Facebook,是Caffe2的核心开发者;
  • Caffe2对移动端的良好支持,15行代码Support WatchOS build 确实够简单;
  • Caffe2可在手机与树莓派上训练和部署模型。

17、MXNet

  • 比TensorFlow更加轻量、高效小巧,更适合自定义需求高的公司和研究者;
  • MXNet允许用户自由把图计算和过程计算混合起来使用;
  • MXNet正在Apache基金会孵化,相信很快孵化成顶级项目。

18、TensorFlow

  • TensorFlow体格庞大,代码量大,抽象层多,深度自定义会很困难;
  • TensorFlow也是一个商业行为,因为背后是Google,它带来的可行度和高质量;
  • 一个事实:Google内部版的TensorFlow和Google Cloud深度绑定优化与开源的TensorFlow在速度和性能上会又巨大差异,美国的大厂都或多或少的在拒绝TF;

19、Automotive Grade Linux(AGL)

  • Automotive Grade Linux(AGL) 是 Linux基金会发布的开源Linux车载系统,AGL 基于 Tizen 构建;
  • AGL + Tizen IVI + GENIVI = AGL UCB(Unified Code Base));
  • Qt Automotive Suite based on GENIVI or Automotive Grade Linux。

20、ROS

  • ROS是一个广泛使用的机器人操作系统和软件框架,ROS的基本原理是无需改动就能在不同的机器人上复用代码;
  • 随着ROS 2.0的开发,ROS能够兼容除Linux之外的更多操作,如Windows、Android;能够支持从工业计算机到Adruino开发板等各种硬件;
  • 百度无人车阿波罗平台就是基于ROS构建的。

21、Apollo Auto

  • 百度 Apollo(阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统,采用Apache v2许可协议;
  • 阿波罗平台基于ROS构建;
  • 阿波罗核心核心基于Linux Kernel 4.4.32构建。

22、OpenStack

23、OpenShift

  • OpenShift is Enterprise-Ready Kubernetes;
  • Docker容器和Kubernetes容器编排已成为企业交付软件和服务的行业标,OpenShift可直接作为企业DevOps & CI/CD的基础设施, 成为部署微服务的多租户平台;
  • OpenShift是BlockApps区块链平台的PaaS基础设施。

24、SaltStack

  • SaltStack提供了一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度快,服务器之间秒级通讯;
  • SaltStack使用ZeroMQ,带来极高的通讯效率;
  • SaltStack或许是构建、管理、运营云计算基础设施的最佳方式,它支持广泛的云平台。

25、Riak

  • Riak 是使用 Erlang 开发的开源(Apache V2) 分布式 NoSQL 键/值(K/V) 存储数据库系统;
  • Riak Core、Riak KV 键值存储、Riak TS 时序存储、Riak S2 对象存储的完整产品线;
  • Riak拥有Erlang语言带来的分布式、消息、并发、可伸缩、容错方面的天然优势。

26、OrientDB

  • OrientDB 是一个Java开发的开源(Apache v2)NoSQL文档和图形数据库,也通过 OrientDB SQL 支持 SQL;
  • OrientDB是一个拥有对象模型 键/值模型 文档模型 图模型的多模型数据库;
  • 多范式编程语言(面向对象、模板、函数式编程、过程式 )C++带来极高的生产力,多模型数据库OrientDB能否也带来类似效果。

27、Apache Kylin

  • Apache Kylin:商业数据仓库、OLAP引擎的替代品;
  • Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计,Kylin为Hadoop提供标准SQL支持大部分查询功能,通过Kylin,用户可以与Hadoop数据进行亚秒级交互;
  • 一个开源数据仓库、商业智能生态系统。

28、RabbitMQ

  • RabbitMQ是Advanced Message Queuing Protocol (AMQP)标准的Erlang语言实现;
  • RabbitMQ是部署最广泛的开源消息代理;
  • 可以把ZeroMQ看作RabbitMQ这类消息队列系统的补充,而不是替代品。

29、Apache Kafka

  • Apache Kafka:下一代分布式消息系统;
  • Apache Kafka 是一个高吞吐量的分布式消息系统,使用 Scala 开发,最初被用于 LinkedIn;
  • Apache Kafka 解耦企业应用的复杂性,是信息和流数据的交换枢纽。

30、Ejabberd

31、Nginx

  • epoll(freebsd的kqueue)网络IO模型是Nginx高性能的根本理由;
  • 与Apache相比较,最核心的区别在于Apache是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程;
  • 对于后端动态服务来说,比如Java和PHP。这类服务器(如JBoss和PHP-FPM)的IO处理能力往往不高。Nginx有个好处是它会把Request在读取完整之前buffer住,这样交给后端的就是一个完整的HTTP请求,从而提高后端的效率,而不是断断续续的传递(互联网上连接速度一般比较慢)。同样,Nginx也可以把response给buffer住,同样也是减轻后端的压力。(此条信息来自:知乎叔度

32、Jetty

  • Eclipse Jetty,一个更轻量、更易扩展和定制的Java Web Server;Jetty架构基于Handler,扩展更容易,而Tomcat是基于容器设计,不易扩展;
  • Google GAE选择Jetty,定制足够小的Java Web Server支撑GAE业务;
  • Apache Tomcat和Eclipse Jetty背后是两大开源基金会的合作与竞争。

33、Cowboy

  • Cowboy适合构建嵌入式应用,它没有配置文件,也不会生成日志,一切都由Erlang控制。

34、GNU/Linux

Linux基金会有众多的开源项目,如AGL

35、XNU/Darwin

  • XNU/Darwin与FreeBSD都有着BSD的血统;

36、FreeBSD

  • FreeBSD TCP/IP协议栈实现;
  • Facebook的WhatsApp是一个FreeBSD + Erlang 的公司,大量的路由器、交换机、防火墙、金融系统在使用FreeBSD,SONY PS4游戏机操作系统基于FreeBSD构建;
  • 苹果与FreeBSD的关系应该是最密切的。

37、GCC

  • GCC:最重要的开源软件(从1987的1.0到2017年7.2历经30年,对整个自由、开源软件贡献卓著),后来者LLVM(14岁)很出色,前途无量;
  • GCC的基本语言是C语言,整个编译系统由C编程程序开始,然后逐渐加入其它语言的支持;
  • C++是C语言的直接扩展,它是GCC的第一个附加语言。C++能够完成的所有事情C语言都可以做到,所以编译器的后端保持不变,只需在前端加入一个新的语法语义分析器就可以了。一旦产生中间语言,编译程序的其它部分就和C语言完全一样了,其它语言的处理方式也类似。

38、LLVM

39、Babel

  • Babel 下一代 JavaScript 编译器(转译器);
  • 简单讲,Babel 就是把一个版本的 JavaScript 转变为其他版本的 JavaScript;
  • The Super Tiny Compiler可能是最小的编译器,可感受和普及下JavaScript编译器的知识;

40、JVM

  • JVM是最大规模的编程语言虚拟机生态系统,有超过200多种编程语言运行在JVM上;
  • Android Dalvik VM不是一个Java虚拟机,它没有遵循JVM规范,不能直接运行Java Class文件,它执行的Dex(Dalvik Executable)可通过Class文件转换而来;
  • 由John Rose领导的the Da Vinci Machine Project正致力于让JVM成为动态语言的最佳归宿。

41、.NET Core

  • .NET Core 是一个通用目的、模块化、跨平台的 .NET 开源实现;
  • 核心项目:.NET Core Libraries (CoreFX)、.NET Core Runtime (CoreCLR)、.NET Compiler Platform (Roslyn);
  • .NET Core 会包含 .NET Framework 的类库,但与 .NET Framework 不同的是 .NET Core 采用包 (Packages) 的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework 大包式安装的作法截然不同,同时各包也有独立的版本线 (Version line),不再硬性要求应用程序跟随主线版本。

42、Erlang VM(BEAM)

  • Elixir是一门运行在Erlang VM上的编程语言;
  • 可在Erlang VM创建自己的语言
  • 可关注下Erjang A JVM-based Erlang VM值得关注。

43、Erlang

  • Erlang的世界观是一切都是进程(一个Erlang进程包括PCB进程控制块和堆栈就几K),进程通过消息传递相互通讯;
  • Erlang是参与者模型(Actor model)最佳实践;
  • Erlang可在一台笔记本上轻松跑出几百万个进程。

44、Clojure

  • Clojure 是一种运行在 Java 平台上的 Lisp 方言;
  • Clojure is about Data, Scala is about Types, Java is about Objects;
  • ClojureScript: Clojure to JavaScript compiler。

45、F#

  • F#和OCaml 是ML函数式编程语言的两种主要方言;
  • F# = Objects + Functional ,F#混合面向对象和函数式编程,对应JVM平台的是Scala语言;
  • 支持高阶函数、柯里化、惰性求值、Continuations、模式匹配、闭包、列表处理和元编程,F#作为一门适合于金融和计算密集型的语言而闻名。

八、资源汇总

以开源软件介绍的顺序汇集文档、链接、书籍资源

文档和链接

参考书籍

  • 《轻量级Django》Lightweight Django中文版
  • 《Meteor实战》
  • 《数据模型资源手册 (卷3): 数据模型通用模式》
  • 《C++ Primer(中文版)(第5版)》
  • 《学习GNU Emacs(第二版)》
  • 《学习Vi编辑器(第六版)》
  • 《机器学习》周志华
  • 《深度学习》
  • 《ROS机器人程序设计》
  • 《OpenStack最佳实践:测试与CI/CD》
  • 《SRE Google运维解密》
  • 《精通SaltStack》
  • 《七周七数据库》
  • 《RabbitMQ实战:高效部署分布式消息队列》
  • 《Kafka: The Definitive Guide》 PDF电子书
  • 《虚拟机--系统与进程的通用平台》《Virtual Machines -- Versatile Platforms for Systems and Processes》
  • 《深入理解Java虚拟机(第2版)》
  • 《虚拟机的设计与实现 C/C++》
  • 《自制编译器》
  • 《七周七语言》
  • 《七周七并发模型》

还有一些图书,就不罗列了。 book

内容有些多,感谢大家耐心阅读。

更多互动和深入交流请加入我们

知识星球

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部