我们每天的学习、工作、生活大多数都基于开源软件完成,或许你也是这样的,只是没注意到。
一、关于这篇文章 文章标题《值得关注的开源软件推荐》这个话题不是很好理,先按着自己的思路试着写些东西。这篇文章有点流水账,大家多包涵。 我们知道值得关注的开源软件实在是太多太多,选择这个题目也让自己有点为难。不过,试着去理一下对自己来说还是有蛮多收获的,不管正确与否,或许也对大家有所启发和帮助。 所选的45个开源软件,它们可能不是最流行的,但具有一定的代表性,它们是众多开源软件中的很小一部分。 从这么多开源软件中进行筛选有不少困难,需要我们有个好的思路和方法去有步骤、系统化了解和学习,本Chat就是和大家一起交流和探讨这个话题。希望这篇文章起到抛砖引玉的作用,这里我们只交流、讨论一些思路和方法,并不深入到某个具体项目,这个会留在以后的课程与大家一同学习交流。 开源软件在操作系统、云计算、大数据、编译器、数据库、移动、汽车工业等领域取得了巨大成功,已成主流,这篇文章就先围绕着这些内容展开。 二、开源软件很多很多 开源软件的重要性就不用多说了,它是IT工业的基础。它和我们每个人、每天的学习、工作、生活都息息相关,我们使用的互联网、物联网、车联网都广泛的依赖于它们。 先来看看,如何去寻找开源软件,我这里介绍一个可能是最有效的方式:通过GitHub上Awesome和GitHub Topics的方式去获得,它们已对一些流行热门的开源软件做了梳理和筛选,方便你的选择。这里的开源软件数量足够你在整个职业生涯中去了解、学习和实践的,而且还在持续增加中。 这么多开源软件,我们怎么选? 这需要一个有层次、系统化的了解、学习的方法和步骤。 我们先来看看有层次、系统化的了解、学习、搭建软件堆栈和平台的重要性和必要性。 在我们的工作中,或许都有过这样的经历:前一个团队或核心成员使用的是这个框架或那个平台,新来的团队或核心成员因为自身情况将会使用不同的框架和系统重构或替代前面的产品和架构体系。我自己就经历过用Java平台全面替代.NET平台的经历,其代价也是巨大的,这样的替换相信大家也都有碰到过。若经常性的因为人员变动或其它因素而导致产品和体系架构总是变来变去,带来的研发成本就会不断上升,且因为没有在稳定框架和基础架构上的持续实践和积累,团队的技术沉淀没有,框架和平台价值的体现也就少的可怜,也不能吸引到优秀的人才聚在一起。 所以层次化、系统化的了解、学习、构建公司的技术体系和平台架构就显得尤为重要,这是公司技术委员会或团队Leader的必修课。 举个简单例子:大家可从Anaconda开始Python数据分析之旅,它减少了安装、维护各种Python软件包和版本的工作量和带来的各种不方便,毕竟它整合好了几百个Python软件包。 好了,找到或选型后,接下来就是学习和实践、不断积累的过程。
本篇文章参考框架涉及的45个开源软件都有Wiki条目进行跟进和维护,不少条目都持续维护了很多年,接下来我们就对它们一一做个大致了解:
类似这样的工作,你自己或团队都可以经常去理一下。 此外,要紧跟所关注开源软件的Conferencce技术大会,这是了解开源软件最新进展和成功应用的一个非常好的方法。我在这里也整理了一些开源软件历年大会幻灯片资料,很有参考价值,欢迎大家收藏。 三、第一类:框架和编程驱动的应用层 通过框架加快应用的开发和上线。 1. 框架:Django、Meteor、Qt 框架类开源软件太多太多,每种语言、不同应用场景都有很多不同的框架可供选择,这里选择了Python、JavaScript、C++三种主流编程语言框架加以简要介绍。 这三个框架都是比较大而全的,覆盖某个领域的大部分应用场景和技术堆栈,它们带来的好处是快速的开发效率和生产力,但同时与会失去灵活性和自由度。喜欢用很多小软件、小工具解决不同问题的用户通常不会选择这些大块头或者说全堆栈的软件平台。 Django是个全堆栈的Python框架,有严格的开发计划和路线图。 注意这里的long-term support (LTS),很多开源软件都采用这样的版本支持服务,如:Ubuntu 它在你的版本选择中非常重要。 Django的内容和讨论的话题都很多,入门这块可从Django book 2.0 的中文开始,它把Django重点、要点和内容组织的都很好。 这里我列举一些思路和路线供大家参考:
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的更多了解可从七大原则入手:
除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,感觉使用它构建应用很快,大部分工作就是编写XML、脚本和构件,描述数据、业务和流程。介绍它是因为以往大多数企业应用都是硬编码实现、数据、业务、编码紧耦合,而Moqui采用XML定义模型、服务和流程,提高了整个系统的可描述、可维护性。Moqui支持如下的几种类型的构件:
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,接触Emacs社区,让自己感受和学习更多的黑客文化,通过Emacs接触Emacs Lisp,这也是乐趣的开始! Vim比较适合前端开发,其它语言,如:Java,还是使用IDE比较好。 Vim主要特点有:
除了Vim外,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 >>> import pandas as pd>>> pd.show_versions() conda install jupyter Pandas是非常重要的数据科学Python软件包,基于NumPy构建,简化了以NumPy为中心的应用开发。NumPy的基础是数组和矢量计算,NumPy的ndarray是一种多维数组对象,利用数组进行数据处理。 Pandas的优势也体现在它的数据结构上,两个主要的数据结构:
写个简单的例子感受下 总之,进入数据科学领域的同学,这三个开源软件都绕不过。 5. 大数据:HDP、CDH、HPCC HDP和CDH都是Apache Hadoop分发版,HPCC是一个C++开发的大数据处理和分析平台。
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 包括以下核心组件:
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的开发者和贡献者。
说到机器学习、深度学习,我想表达自己的一个观点。当前,我们都在关心机器学习,其实,我们也应该更多关心一下如何让我们自己更高效的学习,成为一个学习机器。当然,这里的学习机器是有更多思考和创造力的那种。未来是机器学习和学习机器相互学习、共同促进的世界,谁更聪明,谁就有更多支配和主导权,大家相辅相成,共同进化。 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的开源软件:
因为Apache v2, ROS, Linux Kernel,Apollo Auto也在这介绍一下。 百度Apollo开放平台被称为“汽车界安卓”,我想这个应该在成功后再被称。 Apollo1.5开放五大能力:
金龙客车通过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(数据分发服务)。
关于市场份额:作为一家拥有近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刘国辉谈到:
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,大家可从以下几点去加深了解:
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公司在数据库对比选型上做了充分的工作,把几乎主流的开源数据库都对比了一下:
其实,每个选型的开源软件都可能涉及这样的广泛比较,所以工作量是比较大的,大家可参考。 多范式、多流派(面向对象、模版、函数式、过程式)的混合式语言设计方法帮助C++成为解决复杂、多样性问题的编程语言首选。 多模型数据库OrientDB(对象模型、键值模型、文档模型、图模型)让其集多种数据库类型于一身,使其能应对多种应用场景,减少多种数据库部署运维带来的开销和成本,OrientDB这样的多模型设计是否也能像C++这样被大多数开发者所认可与接受? strong text对象模型 键/值模型 文档模型 图模型 再说说Kylin是什么? 再说说Kylin是什么?
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。 由阿里巴巴捐赠给Apache基金会的RocketMQ也在健康的发展着,和Kafka很类似,大家下来可做些对比评估和选型。 此外,ZeroMQ大家也可多关注,上面介绍的SaltStack就使用ZeroMQ作为传输机制,且大量的开源软件中也包含了ZeroMQ的使用。 OpenMessaging项目由阿里巴巴发起,与雅虎、滴滴出行、Streamlio公司共同参与创立的分布式消息中间件、流处理领域的应用开发标准,目前已正式入驻Linux基金会。 消息队列是重要的基础设施,因为它解耦、连接各种数据、应用和服务,充分体现互联网连接一切的本质。 11. 服务器:Nginx、Jetty、Cowboy Nginx是轻量级、高性能 Web Server的首选,几乎部署在所有主流的互联网公司。 除了Nginx官方版本外,大家也可关注Nginx两个分发版本:
Apache Tomcat和Eclipse Jetty是Java Web Server的默认选择。
Cowboy是比较另类的,它使用Erlang开始,是一个小型、快速和模块化的HTTP服务器,常用Cowboy构建嵌入式Web Server。 个人很倾向使用Erlang开发通用的Web Server,因为Erang分布式、消息、并发、可伸缩、容错方面的天然优势,有兴趣的同学可尝试基于Cowboy构建。 六、第四类:操作系统、编译器、虚拟机、编程语言 好了,现在我们来到最底下的一层:系统层,它包含操作系统、编译器等核心软件,是每台计算设备不可或缺的组成部分。 12. 操作系统:GNU/Linux、XNU/Darwin、FreeBSD 首先简单回顾下UNIX/BSD操作系统的历史 我们只关心图中上面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的核心,由三个主要部分组成的一个分层体系结构:
macOS架构 Darwin和macOS macOS核心架构 GNU/Linux的分发版很多,除了两大主流Debian/Ubuntu和RedHat/CentOS外,大家可更多关注下:NixOS Linux 它包含几个很有特色的项目:
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是编译器领域的两大巨头。 GCC和LLVM的体系很庞大,其内容、细节和知识点太多太多,留在后续的课程我们学习交流,后面有推荐的编译器书籍大家可参考。 Babel 是一个通用的多用途 JavaScript 编译器。更确切地讲是源码到源码的编译器,通常也叫做“转换编译器(transpiler)”,简称转译。 Babel 能把用最新标准编写的 JavaScript 代码向下编译成当前可用的老版本,Babel 能够让你提前使用 JavaScript新标准。 Babel 插件体系让其拥有庞大的生态系统。 Babel 三个主要处理步骤是:解析(parse),转换(transform),生成(generate):
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的实现也有很多,大家可关注以下几个:
常见语言也有很多JVM实现版本:
此外,.NET平台也托管了很多编程语言:C#, F# ... JVM和.NET两大平台外,值得大家更多关注的是Erlang及其虚拟机生态系统。 这三类平台,个人倾向选择将其用于不同的领域,如:
15. 编程语言:Erlang、Clojure、F# 基于这三大虚拟机的三门主流语言:Erlang、Clojure、F#,它们也是函数式编程语言的代表。 JSR-335(Lambda Expressions for the Java TM Programming Language)中定义的Lambda对Java语言语法产生深远影响,函数式编程将成为主流。 在上面,Erlang被多次提到在Riak数据库、RabbitMQ消息中间件、Cowboy web server中的应用,Erlang的天然优势就是:分布式、消息、并发、可伸缩、容错。你可以在笔记本上轻松创建300万个进程。 Clojure 是一种运行在 Java平台上的 Lisp 方言,Lisp 是一门可编程的编程语言 (Lisp is a programmable programming language) Clojure将这门函数式编程语言带到了JVM生态系统。 Java、Scala、Clojure是JVM平台上三种主流的编程语言,它们的定位是怎么样:
先了解几个Clojue的成功应用:
此外,ClojureScript: Clojure to JavaScript compiler 大家多关注。 F# = Objects + Functional
F#(F sharp)是微软开发的基于.NET语言运行时的程序设计语言,采用 Apache v2 许可协议。这是一门函数式编程语言(FP,Functional programming),函数式编程语言最重要的基础是Lambda Calculus。 F#和OCaml是ML函数式编程语言的两种主要方言,有时F#和OCaml的程序是可以交互编译的。 F#支持高阶函数、柯里化、惰性求值、Continuations、模式匹配、闭包、列表处理和元编程。在早期,F#作为一门适合于金融和计算密集型的语言而闻名。现在,F#既用于算法密集型应用程序,也用于主流业务应用程序。在算法密集型应用程序中,正确性至关重要,而主流业务应用程序则在很大程度上受益于F#支持领域建模并让非法状态不可达。 F#在数据科学领域具有很大优势,基于Atom编辑器的数据编程。 好了,我们走马观花般的过了一遍这45个开源软件,主要让大家大致了解和认识一下它们。 最后,我们把这45个开源软件以核心特新和要点的方式再整理一下。 七、45个开源软件特性、要点 思考、总结、提炼单个开源软件的核心特性和要点,看看它能为团队带来什么帮助,能力有哪些? 1. Django
2. Meteor
3. Qt
4. odoo
5. iDempiere
6. Moqui
7. Emacs
8. Vim
9. Atom
10. Jupyter
11. Pandas
12. Anaconda
13. HDP
14. CDH
15. HPCC
16. Caffe(Caffe2)
17. MXNet
18. TensorFlow
19. Automotive Grade Linux(AGL)
20. ROS
21. Apollo Auto
22. OpenStack
23. OpenShift
24. SaltStack
25. Riak
26. OrientDB
27. Apache Kylin
28. RabbitMQ
29. Apache Kafka
30. Ejabberd
31. Nginx
32. Jetty
33. Cowboy
34. GNU/Linux
35. XNU/Darwin
36. FreeBSD
37. GCC
38. LLVM
39. Babel
40. JVM
41. .NET Core
42. Erlang VM(BEAM)
43. Erlang
44. Clojure
45. F
八、资源汇总
文档和链接
参考书籍
还有一些图书,就不罗列了。 内容有些多,还是篇流水账,感谢大家耐心阅读。 |
|
来自: Bladexu的文库 > 《IT文集》