本文来自作者
龙辉
在
GitChat
上分享「值得关注的开源软件推荐」
「
文末高能
」
编辑 | 一雄
由于本文含有大量资料链接,请大家点击
「
阅读原文
」去官网查看详细内容
我们每天的学习、工作、生活大多数都基于开源软件完成,或许你也是这样的,只是没注意到。
-
一、关于这篇文章
-
二、开源软件很多很多
-
三、第一类:框架和编程驱动的应用层
-
四、第二类:数据驱动的大数据、人工智能层
-
五、第三类:云计算、基础设施层
-
六、第四类:操作系统、编译器、虚拟机、编程语言
-
七、45个开源软件特性、要点
-
八、资源汇总
一、关于这篇文章
文章标题《值得关注的开源软件推荐》这个话题不是很好理,先按着自己的思路试着写些东西。这篇文章有点流水账,大家多包涵。
我们知道值得关注的开源软件实在是太多太多,选择这个题目也让自己有点为难。不过,试着去理一下对自己来说还是有蛮多收获的,不管正确与否,或许也对大家有所启发和帮助。
本 Chat 所选的45个开源软件,它们可能不是最流行的,但具有一定的代表性,它们是众多开源软件中的很小一部分。
从这么多开源软件中进行筛选有不少困难,需要我们有个好的思路和方法去有步骤、系统化了解和学习,本 Chat 就是和大家一起交流和探讨这个话题。
希望这篇文章起到抛砖引玉的作用,这里我们只交流、讨论一些思路和方法,并不深入到某个具体项目,这个会留在以后的课程与大家一同学习交流。
开源软件在操作系统、云计算、大数据、编译器、数据库、移动、汽车工业等领域取得了巨大成功,已成主流,这篇文章就先围绕着这些内容展开。
二、开源软件很多很多
开源软件的重要性就不用多说了,它是IT工业的基础。它和我们每个人、每天的学习、工作、生活都息息相关,我们使用的互联网、物联网、车联网都广泛的依赖于它们。
先来看看,如何去寻找开源软件,我这里介绍一个可能是最有效的方式:通过 GitHub 上 Awesome 和 GitHub Topics 的方式去获得,它们已对一些流行热门的开源软件做了梳理和筛选,方便你的选择。
这里的开源软件数量足够你在整个职业生涯中去了解、学习和实践的,而且还在持续增加中。
这么多开源软件,我们怎么选?
这需要一个有层次、系统化的了解、学习的方法和步骤。
我们先来看看有层次、系统化的了解、学习、搭建软件堆栈和平台的重要性和必要性。
在我们的工作中,或许都有过这样的经历:前一个团队或核心成员使用的是这个框架或那个平台,新来的团队或核心成员因为自身情况将会使用不同的框架和系统重构或替代前面的产品和架构体系。
我自己就经历过用 Java 平台全面替代.NET平台的经历,其代价也是巨大的,这样的替换相信大家也都有碰到过。
若经常性的因为人员变动或其它因素而导致产品和体系架构总是变来变去,带来的研发成本就会不断上升,且因为没有在稳定框架和基础架构上的持续实践和积累,团队的技术沉淀没有,框架和平台价值的体现也就少的可怜,也不能吸引到优秀的人才聚在一起。
所以层次化、系统化的了解、学习、构建公司的技术体系和平台架构就显得尤为重要,这是公司技术委员会或团队 Leader 的必修课。
举个简单例子:大家可从 Anaconda 开始 Python 数据分析之旅,它减少了安装、维护各种 Python 软件包和版本的工作量和带来的各种不方便,毕竟它整合好了几百个 Python 软件包。
好了,找到或选型后,接下来就是学习和实践、不断积累的过程。
-
根据公司发展方向和战略目标,拟定多年计划,不要仅仅只解决眼前问题,要考虑框架、架构、平台的长期有效性和持续发展,不要深度锁定商业服务供应商,尽可能使用开源软件,并可以方便的替换其中部件和重构;
-
从 StackOverflow、知乎等专业网站通过搜索的方式迅速了解一下你所关注的开源软件的基本特性和大家讨论的热点;
-
以 Ecosystem 的方式去思考和组织你所关注的开源软件的知识体系,这里给个参考:Node.js ecosystem
-
在学习和实践的过程中,大家可借助印象笔记或 Wiki 等方式对不断学习和实践的开源软件做持续的整理。
我个人就是通过 Wiki 的方式不停收集、整理各种开源软件和相关资源的,这个过程持续了11年,有几千个条目,近4000万的浏览量。
本篇文章参考框架涉及的45个开源软件都有Wiki条目进行跟进和维护,不少条目都持续维护了很多年,接下来我们就对它们一一做个大致了解:
-
应用类:框架、企业应用、编辑器
-
数据类:数据科学、大数据、机器学习、汽车机器人
-
服务类:云计算、数据库、消息队列、服务器
-
系统类:操作系统、编译器、虚拟机、编程语言
类似这样的工作,你自己或团队都可以经常去理一下。
此外,要紧跟所关注开源软件的Conferencce技术大会,这是了解开源软件最新进展和成功应用的一个非常好的方法。我在这里也整理了一些开源软件历年大会幻灯片资料,很有参考价值,欢迎大家收藏。
三、第一类:框架和编程驱动的应用层
通过框架加快应用的开发和上线。
1. 框架:Django、Meteor、Qt
框架类开源软件太多太多,每种语言、不同应用场景都有很多不同的框架可供选择,这里选择了 Python、JavaScript、C++ 三种主流编程语言框架加以简要介绍。
这三个框架都是比较大而全的,覆盖某个领域的大部分应用场景和技术堆栈,它们带来的好处是快速的开发效率和生产力,但同时与会失去灵活性和自由度。
喜欢用很多小软件、小工具解决不同问题的用户通常不会选择这些大块头或者说全堆栈的软件平台。
Django 是个全堆栈的 Python 框架,有严格的开发计划和路线图。
注意这里的 long-term support (LTS),很多开源软件都采用这样的版本支持服务,如:Ubuntu 它在你的版本选择中非常重要。
Django 的内容和讨论的话题都很多,入门这块可从 Django book 2.0 的中文开始,它把 Django 重点、要点和内容组织的都很好。
这里我列举一些思路和路线供大家参考:
-
先动手构建一个最简单的 Django 项目;
-
使用 Django 内置的 Admin,再试试一些更好用的 Admin 解决方案;
-
看看成功 Django 项目长什么样的:Mezzanine;
-
浏览 Django 开发的开源网站
(https://www.djangosites.org/with-source/)
,有没有自己喜欢的,有的话先部署一个;
-
使用 Django REST Framework 构建 REST API;
-
基于 REST API 构建一个单页面 Web 应用(Single Page Application, SPA),这一架构可迅速创建响应式用户交互界面;
-
如何在 Django 使用其它 MVC 框架;
-
将 WebSockets、Tornado 和 Django 结合起来,提供实时 Web 特性;
-
Django 实时服务器除了 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 通过整合 JavaScript 语言,加速用户界面的构建。
QML 是种声明式语言(declarative language),它是一个用户界面规范和编程语言,混合 JSON 语法和 JavaScript 表达式。
Qt 应用目前主流的开发思路是:用 QML(Qt Quick) 构建交互界面,用 C++ 实现业务逻辑,这也是推荐 Qt 的一个重要因素。
Meteor 是基于 JavaScript 的框架,用于 Web 客户端、服务器端以及移动应用。
Meteor 应用会对数据的变化作出即时响应,因此你将获得即时响应体验,同时,一致的构建过程、前后端统一的包系统以及单个命令的应用部署过程,将在从设计到发布的每一环节上为你节省时间。
这是 Meteor 简单的堆栈和框架:
Meteor 带来的优势有:
Meteor 的更多了解可从七大原则入手:
-
Data on the Wire. Meteor 不发送 HTML,服务器端只负责发送数据,由客户端渲染;
-
One Language. 前后端都是 JavaScript 语言;
-
Database Everywhere. 前后端都可以直接创建存取修改数据库里的数据,且数据安全;
-
Latency Compensation. Meteor 在前端提前获取数据并模拟数据模型,使其看起来像是从服务器端立即返回了数据;
-
Full Stack Reactivity. 实时响应是 Meteor 的缺省配置。在所有层次,从数据库到模板,都会在需要时自动更新;
-
Embrace the Ecosystem. Meteor 完全开源并集成了很多现有的开源工具和框架。如 Angular,React。Meteor 有自己的 AtmosphereJS 包下载管理平台,也可使用 NPM;
-
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
OSGi 是 Java 模块化的非官方标准,很强大,也复杂。它是很多开源软件的基础架构。
如:Eclispe;也在工业界有很多应用,BMW汽车的应用控制系统就采用 OSGI 作为其底层架构, 这套系统主要用来控制汽车上的音箱、灯光等设备,总共由1000多个 Bundle 构成,但 BMW 汽车的应用控制系统启动时间却只需要3.5秒。
OSGi 在汽车工业领域的应用可作为大家了解 OSGi 的重点。
Adempiere 是一个很主流的开源 ERP/CRM 系统,也是一个完整的企业应用套件和堆栈。
Adempiere 衍生自 Compiere,因为 Compiere 越来越封闭和私有,就有了现在的 Adempiere,很多开源软件也都是这样产生的。
同时,Compiere 也失去了可能成为 No.1 开源 ERP/CRM 的机会。
说到这,也说说 Solaris 和 OpenSolaris,在 Sun 被 Oracle 后,因为 Oracle 的封闭,现在的它们也基本走向死亡,Oracle 同时也玩死了NetBeans 和 OpenOffice,基于 OpenOffice 的 LibreOffice 代表着未来。
类似的故事还有很多很多,当前是个开放开源的时代,封闭自嗨的基本都会走向衰败。就连很封闭的苹果和腾讯也在不断调整自己的开源、开放战略,并陆续推出一些开源软件。
好了,现在说说 Moqui。
Moqui 的作者是 Apache OFBiz 的设计者和开发者,在企业数据模型和流程上有非常深的造诣。
Moqui 基于 OFBiz 十多年来的项目实施经验以及作者的设计、开发和方法论,包括纯粹的关系数据层以及面向服务的逻辑层。
Moqui 框架的核心代码只有 OFBiz 核心框架代码的15%左右,提供了更多有意义的功能和更多的高级工具,使用Groovy和Java语言。
Mogui 是一个企业 ERP/CRM 的生态系统,一个类似地球:地核、地幔、地壳的的构造结构。
-
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 先了解到这,让大家对它有一个总体认识,后续我们再深入下去。
3. 编辑器:Emacs、Vim、Atom
编辑器是所有计算机系统上最普遍的应用之一。
除了开发者日常使用的一些大块头IDE外:Eclipse、Visual Studio、Xcode等,这类小巧、轻盈的编辑器也备受程序员喜爱,它们是Emacs、Vim、Atom。
这篇文章由Emacs和Markdown Model编写,在macOS(基于XNU/Dawnin)上完成,呵呵。
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 和 Facebook 的 Nuclide。
Visual Studio Code是我很喜欢的,它非常强大和易用,拥有庞大的插件库和资源。
四、第二类:数据驱动的大数据、人工智能层
大数据热了好多年,这几年是人工智能,它们的核心是数据和算法,这是一个数据驱动的时代,我们每天都在产生大量的数据,对数据来说,有个庞大的知识体系:数据科学。
4. 数据科学:Jupyter、Pandas、Anaconda
Juypter 是一款面向数据科学和人工智能的前端交互工具,基于 IPython 构建,是 IPython 的未来发展方向。
Anaconda Python 是自由使用的面向大规模数据处理、预测分析和科学计算的企业级 Python 发行版。Anaconda 以 Red Hat 和 Debian Linux 发行版的方式来分发 Python 企业版。
Anaconda 是个大的数据科学软件堆栈和平台,当然,你也可以选择自己去搭建。
使用 Python 进入数据科学领域的同学就可从 Anaconda 入手,主要是方便。它提供 GUI 和命令行两种方式,使用包管理工具 Conda,如安装pandas、Jupyter:
conda install pandas
conda install jupyter
Pandas是非常重要的数据科学Python软件包,基于NumPy构建,简化了以NumPy为中心的应用开发。NumPy的基础是数组和矢量计算,NumPy的ndarray是一种多维数组对象,利用数组进行数据处理。
Pandas的优势也体现在它的数据结构上,两个主要的数据结构:
写个简单的例子感受下
总之,进入数据科学领域的同学,这三个开源软件都绕不过。
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 实时大数据安全
CDH 除没有HDP 那样开放开源外,其它都很类似。Cloudera 有很强的商业化解决方案和服务能力,取得了很好的商业价值,应该是目前最赚钱的Hadoop 商业化公司,同时也开源了众多优秀的开源软件,如:Impala
HDP 和 CDH 文档都组织、整理的不错,可作为了解、学习大数据、Apache Hadoop 的一个重要资源。
ODPi: the open ecosystem of big data
在这里提一下ODPi项目,这是Linux基金会下的一个项目,成员包括HDP的开发商Hortonworks。
鉴于Linux基金会的成功运作和治理能力,ODPi可关注,以生态系统的思考方式去了解整个大数据市场,国内已有大数据公司来此占位。
ODPi 大数据生态系统
在 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在安全、身份和风险管理有众多成功案例。
6. 机器学习(深度学习):Caffe、MXNet、TensorFlow
选择 TensorFlow、Caffe(caffe2)、MXNet,一方面是软件很好,另外一个重要因素是背后有 Google、Facebook、Amazon 等巨头在推动,并在自己的产品服务线广泛部署,其可靠性、可伸缩性得到最大规模和严格的验证。
TensorFlow 在 GitChat 人工智能板块已有了最多的课程和介绍,它的重要性就不多说。
TensorFlow 官方文档中文版可作为你学习 TensorFlow 的重要参考,英文好的直接跳过。
编程语言入门有 Hello World,机器学习入门有 MNIST。MNIST 是一个入门级的计算机视觉数据集,它包含各种手写数字图片。
它也包含每一张图片对应的标签,告诉我们这个是数字几。你可从 MNIST 开始你的机器学习,熟悉神经网络和MNIST数据集,去构建一个深度卷积神经网络。
ps:一个小道消息:MS因为内斗严重很难发力,所以用CNTK,Torch,TensorFlow,MXNet,Caffe的都有,自家的CNTK很难形成规模。
相对于TensorFlow这种重量型的后端,MXNet的轻量化路线使得可以我们在花费Google brain 1/10的人力的情况下做到类似TensorFlow技术深度的系统。(MXNet开发者李沐)
那到底选择哪个深度学习框架呢?或许贾杨清同学的这段话会给你个答案,他是Caffe(Caffe2)的作者,同时也是TensorFlow的开发者和贡献者。
另外我还要强调的是我最近每个演讲都会提到的“unframework”,或者说 “unix philosophy” 的观点:framework 不重要,重要的是技术,这也是我一直主张把核心软件。
比如说 Gloo,NNPACK,FAISS 这些单独放出来,不放在框架里面的原因 - 每个框架都可以拿这些软件来优化,这才是做 community 的道理。
老实说,Caffe我也参加了,TensorFlow我也参加了,C2我也参加了,最重要的是大家开心,能学到技术,能用得方便。
说到机器学习、深度学习,我想表达自己的一个观点。当前,我们都在关心机器学习,其实,我们也应该更多关心一下如何让我们自己更高效的学习,成为一个学习机器。
当然,这里的学习机器是有更多思考和创造力的那种。未来是机器学习和学习机器相互学习、共同促进的世界,谁更聪明,谁就有更多支配和主导权,大家相辅相成,共同进化。
7. 汽车机器人:Automotive Grade Linux(AGL)、ROS、Apollo Auto
汽车、机器人是大数据和人工智能重要的应用领域,机器人装上人工智能的大脑将更多从事人的工作,未来很多工作将被人工智能机器人取代,而给机器人喂食的就是大数据。
首先,基于AGL的丰田佳美(Toyota Camry)将于2018亮相北美市场。
AGL 是 Linux 基金会项目,基于 Tizen 项目构建,最初由韩国三星主导,现在为 Linux 基金会项目。
美日韩三国高科技公司主要在推动这个项目,其System Architecture Team(SAT)包含5-10个核心成员:Denso, Fujitsu TEN, Microchip, Panasonic, Intel, Renesas/IoT.bzh, Toyota
这张图很重要,它把AGL、Tizen和GENIVI三者以AGL UCB的方式融合在了一起。
在汽车工业使用 LTS: Long Term Stable Kernel,这点很重要,这两份文档可参考。
不知道到百度阿波罗计划的Linux核心是如何评估选择的?
百度Apollo托管在GitHub的开源软件:
-
Apollo: An open autonomous driving platform
-
Apollo Platform: based on Robot Operating System(ROS)
-
Apollo Kernel: based on Linux Kernel 4.4.32
因为Apache v2, ROS, Linux Kernel,Apollo Auto也在这介绍一下。
百度Apollo开放平台被称为“汽车界安卓”,我想这个应该在成功后再被称。
Apollo1.5开放五大能力:
-
障碍物感知
-
决策规划
-
云端仿真
-
高精地图服务
-
端到端的深度学习(End-to-End)
金龙客车通过Apollo 1.0的成为首例商用车落地实例。
百度Apollo开放平台通过阿波罗基金专注于汽车行业及自动驾驶领域的人民币股权投资,简单讲就是砸钱和收购,快速形成一定规模。
目前,Apollo基金第一期20亿已到位并在快速运行,目前已完成数个项目的投资。也将在未来3年完成100亿&100+个项目的投资。总之就是有钱,自动驾驶创业的同学们这也是很快变现的方式。
我们都知道自动驾驶这件事是个非常复杂、非常庞大的工程,可有人一个人就干成了,天才黑客George Hotz自己开发了一套汽车自动驾驶系统,而且成立了公司Comma.ai专注这件事,点开网页看实测效果还是很不错的。
百度Apollo和comma.i项目对比 (截止2017.11.8上午10点)
我也知道这个对比没什么意思,只是出于对天才的仰视。
Robot Operating System(ROS)是一个应用广泛的机器人系统和开源软件框架,ROS的基本原理是无需改动就能够在不同的机器上复用代码。ROS提供了一个标准的操作系统环境,包括硬件抽象、底层设备控制、通用功能实现、进程间消息转发和软件包管理等。
ROS 提供了 C++ 和 Python 两种主要的编程接口,也可集成 Arduino,ROS 2.0 采用了DDS(数据分发服务)。
随着ROS 2.0的开发,ROS能够兼容除Linux之外更多的操作系统,如Windows、Android;能够支持从工业计算机到Adruino开发板等各类型的硬件;能够采集RGB-D摄像头、普通摄像头和各种类型的传感器数据;能够驱动类人形机器人、四轴飞行器等各类型的机器人。新版本的ROS在采用SOA架构的基础上,集成了MVC框架,更加有利于机器人人机交互界面的开发和机器人控制。
由于ROS极大的开放性和包容性,它能够兼容其他机器人开发工具、仿真工具和操作系统,使之融为一体。这使得ROS不断发展壮大,并成为应用和影响力最广泛的机器人软件平台。
学习ROS,掌握一把通往未来的钥匙。(ps: 这部分内容取自《ROS机器人程序设计》(原书第2版))
关于市场份额:作为一家拥有近37年历史的嵌入式操作系统开发商,QNX在车载信息娱乐系统或车联网系统占据超过50%的市场份额,QNX是仪表盘背后的隐形王者,大家可关注下。
五、第三类:云计算、基础设施层
如何支撑上层的数据分析和应用,需要有个强大的软件基础设施,我们以云计算、数据库、消息队列和Web Server来搭建这个基础设施。
云计算对所有的计算资源、存储资源、网络资源进行系统管理,用数据库进行各种各种类型数据的存储和处理。以消息队列作为数据传输和应用交互的机制,Web Server将各种服务以RESTful的方式部署。
8. 云计算:OpenStack、OpenShift、SaltStack
云计算数据中心是一项具有战略意义的基础设施,其重要性和普及知识就不多讲了。
这里主要简单介绍 IaaS、PaaS 两种主要的云计算服务模型,其代表有:OpenStack、OpenShift
OpenStack 是开源云平台的事实标准。
OpenStack 使用 Python 语言编写,使用了 Django、Tornado 和 Twisted 等框架,使用 AMQP 消息协议和 Redis 分布式 K/V 存储。
OpenStack可以说是Linux之外最大规模的开源项目,有大量公司和开发者参与构建这个开源云平台生态系统,也有很多OpenStack发行版可供用户选择,国内用户可关注这几家OpenStack供应商:
Google 加入 OpenStack 基金会推动着 Docker/Kubernetes 与混合云加速融合;EasyStack 联合创始人&CTO 刘国辉谈到:
“Google 加入 OpenStack 体现了对于数据中心控制平面的争夺已经结束,以容器为代表的应用形态与以虚拟化为代表的系统形态将会完美融合于 OpenStack 之上,并与软件定义网络和软件定义存储一起统治下一代数据中心。”
OpenStack、Ansible、SaltStack 等开源软件也极大奠定了 Python 在数据中心的地位。
OpenShift 是RedHat推出的基于 Docker 和 Kubernetes 构建的 PaaS 开源容器云平台。
OpenShift 能给用户带来什么?可参考红帽 OpenShift 的业务价值。
OpenShift 业务价值亮点有:
总结起来:加快产品、服务研发和交付时间,减少研发成本,增加企业收入,降低基础架构投资,获得更高的投资回报率。
为什么在这里把这个提出来说说,也是出于自己的一些经历。
在我们运作开源软件商业化服务时,开源软件需要有个好的商业包装。开源软件对我们开发人员很熟悉,但很多最终用户和客户却不了解,他们可能根本就不知道什么开源软件,你给他们大谈开源软件,他们会一脸茫然。若你把开源软件以类似这样的方式讲给他们听,效果可能会更好,也更容易成交业务,所以基于开源软件做商业化服务的同学很有必要建立起这样的思维模式,将好用、强大的开源软件做更好的商业包装。这方面的成功公司有很多,你可更多跟进Red Hat、Ubuntu、MongoDB、Hortonworks等开源软件公司,它们把开源和商业融合都做得相当出色。
此白皮书也可作为开源软件商业价值分析的参考,大家基于开源软件做商业化公司和运营时可参照这样的思路思考下去。
Docker容器和Kubernetes容器编排已成为企业交付软件和服务的行业标准,OpenShift可直接作为企业DevOps & CI/CD的基础设施, 成为部署微服务的多租户平台。
Red Hat也在积极推动区块链技术在OpenShift的应用部署,与BlockApps的合作,为其提供区块链平台的PaaS基础设施。
OpenShift 生态系统已初具规模,这可增强大家选型的信心。不过,因为OpenShift 的平台规模也比较大,定制化和扩展的难度也会加大。这也是我们常碰到的问题,选个大块头的开源平台堆栈,还是选择自由装配和维护各种小软件的融合方式。这是两种不同的思路,团队Leader和技术团队要仔细评估和做出平衡。
SaltStack 是 Python 开发的开源配置管理和自动化工具,SaltStack 提供了一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度快,服务器之间秒级通讯。
关于SaltStack,大家可从以下几点去加深了解:
-
理解Salt的动机,以及它们将影响运维人员的使用方式;
-
更好地使用云服务,包括EC2、Azure及OpenStack等,支持更大规模云计算平台部署;
-
学习新的RAET协议,并了解它如何改变自动化工作方式;
-
使用 ZeroMQ 消息队列,管理端 Master,客户端Minion,如何进行数据交换和消息传递的。
Ansible 基于 SSH 协议传输数据,Saltstack使用消息队列zeroMQ传输数据,MQ通讯和SSH通讯,速度相差大约几十倍。
我们推崇使用消息队列MQ来进行数据传输和通讯。
与Ansible的比较,SaltStack 与 Ansible 选择?供大家选型参考。
9. 数据库(数据仓库):Riak、OrientDB、Apache Kylin
Erlang驱动的数据库,在分布式、消息、并发、可伸缩、容错方面有天然优势,Riak数据库天生就拥有这些能力。
Riak数据库以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(对象模型、键值模型、文档模型、图模型)让其集多种数据库类型于一身,使其能应对多种应用场景,减少多种数据库部署运维带来的开销和成本,OrientDB这样的多模型设计是否也能像C++这样被大多数开发者所认可与接受?
strong text对象模型
| Relational Model | Object Model | OrientDB Object Model |
| ———— | :——- | :—— |
| Table | Class | Class or Cluster |
| Row | Object | Document or Vertex |
| Column| Object property | Document field or Vertex/Edge property |
| Relationship | Pointer | Link |
键/值模型
| Relational Model | Key/Value Model | OrientDB Key/Value Model |
| ———— | :——- | :—— |
| Table | Bucket | Class or Cluster |
| Row | Key/Value pair | Document |
| Column| not available | Document field or Vertex/Edge property |
| Relationship | not available | Link |
文档模型
| Relational Model | Document Model | OrientDB Document Model |
| ———— | :——- | :—— |
| Table | Collection | Class or Cluster |
| Row | Document | Document |
| Column| Key/value pair | Document field |
| Relationship | not available | Link |
图模型
| Relational Model | Graph Model | OrientDB Graph Mode |
| ———— | :——- | :—— |
| Table | Vertex and Edge Class | Class that extends “V” (for Vertex) and “E” (for Edges) |
| Row | Vertex | Vertex |
| Column| Vertex and Edge property | Vertex and Edge property |
| Relationship | Edge | Edge |
再说说 Kylin 是什么?
-
可扩展、超快OLAP引擎:Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计;
-
Hadoop ANSI SQL 接口:Kylin为Hadoop提供标准SQL,支持大部分查询功能;
-
交互式查询能力:通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能;
-
多维立方体(MOLAP Cube):用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体;
-
与BI工具无缝整合: Kylin提供与BI工具,如Tableau,的整合能力,即将提供对其他工具的整合。
Apache Kylin已成功部署于百度、美团、网易、京东、唯品会、中国移动、中国电信、国泰君安、华泰证券、联想、OPPO、魅族、去哪儿等公司,支撑着用户行为分析、流量日志分析、电商分析,广告效果分析,实时分析等基于数据仓库及多维分析(OLAP)技术的数据服务。是传统数据仓库、商业智能技术在互联网企业大规模应用的真实案例。
Apache 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。