本文來自作者 龍輝 在 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、AnacondaJuypter 是一款面向數據科學和人工智慧的前端交互工具,基於 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、HPCCHDP和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 KylinErlang驅動的資料庫,在分布式、消息、並發、可伸縮、容錯方面有天然優勢,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。
由阿里巴巴捐贈給 Apache 基金會的 RocketMQ 也在健康的發展著,和 Kafka 很類似,大家下來可做些對比評估和選型。
此外,ZeroMQ 大家也可多關注,上面介紹的 SaltStack 就使用 ZeroMQ 作為傳輸機制,且大量的開源軟體中也包含了 ZeroMQ 的使用。
OpenMessaging 項目由阿里巴巴發起,與雅虎、滴滴出行、Streamlio 公司共同參與創立的分布式消息中間件、流處理領域的應用開發標準,目前已正式入駐Linux基金會。
消息隊列是重要的基礎設施,因為它解耦、連接各種數據、應用和服務,充分體現網際網路連接一切的本質。
11. 伺服器:Nginx、Jetty、CowboyNginx是輕量級、高性能 Web Server的首選,幾乎部署在所有主流的網際網路公司。
除了Nginx官方版本外,大家也可關注Nginx兩個分發版本:
Apache Tomcat 和 Eclipse Jetty 是 Java Web Server 的默認選擇。
Jetty 更輕量、更容易定製;Jetty 架構基於 Handler,擴展更容易,而Tomcat 是基於容器設計,不易擴展;
Google GAE 選擇 Jetty,定製足夠小的 Java Web Server 支撐 GAE 業務;
Apache Tomcat 和 Eclipse Jetty 背後是兩大開源基金會的合作與競爭。
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
它包含幾個很有特色的項目:
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、BabelGCC(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及其虛擬機生態系統。
這三類平臺,個人傾向選擇將其用於不同的領域,如:
JVM平臺更多用於企業應用,如:電商ERP、大數據平臺等;
.NET平臺更多用於泛娛樂、遊戲等,當前最火的王者榮耀就基於.NET的Unity平臺構建,且微軟幾十年個人電腦作業系統的使用和廣泛普及;
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平臺上三種主流的程式語言,它們的定位是怎麼樣:
Clojure is about Data, Scala is about Types, Java is about Objects.
先了解幾個Clojue的成功應用:
Apache Storm 是 Twitter 開源的大數據實時處理引擎,採用 Clojure、Java 語言開發,大概一半 Clojure、一半 Java;在進程之間,Storm 採用 ZeroMQ 進行通信;
花旗信用實時風險估值系統 Java/Clojure 後端(1500節點分布計算)花旗投資信用部實時風險計算系統,邏輯使用 Clojure;
沃爾瑪: 「Our Clojure system just handled its first Walmart black Friday and came out without a scratch.」 - Walmart Labs
此外,ClojureScript: Clojure to JavaScript compiler 大家多關注。
F# = Objects + Functional
Mixed OO/Functional Programming Has Won
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. DjangoDjango 和 Flask 是使用最廣泛的 Python Web 框架;
Django 提供 Web 一站式解決方案:會話、緩存、ORM、驗證、表單處理、後臺管理等,但系統耦合度高,替換內置功能比較麻煩,學習曲線較陡;
Django 和 Flask 都基於 WSGI,這是同步阻塞接口,不能使用異非阻塞的編程模式,你可考慮使用 Klein 微框架,用法很像 Flask,可以異步方式編寫 Web 應用。
2. Meteor3. QtQt核心:元對象系統、屬性系統、對象模型、對象樹、信號槽(Signal/Slot),Qt 的 Signal/Slot 很好解決了對象間通訊的問題,被其它語言框架借鑑;
Qt 使用 QML 定義用戶界面,使用 C++ 編寫業務邏輯;
Qt 在在汽車行業有廣泛應用,是 GENIVI 汽車聯盟的推薦技術。
4. odoo5. iDempiere6. MoquiApache OFBiz 作者的又一力作;
快速的企業應用原型系統開發;
一個框架、一個生態系統。
7. EmacsEmacs 是迄今為止功能最為強大的文本編輯器,Emacs 是一種信仰,它是神一般的編輯器;
Emacs 是模塊化的,遵循 do one thing, and do it well 原則,需要什麼就安裝什麼,你可以像搭積木的方式搭建自己的環境和系統;
Everything Emacs,你可以在 Emacs 完成你幾乎所有的工作:編程、寫作、瀏覽網頁、收發郵件、日程、娛樂遊戲、它是個人作業系統。
8. Vim9. Atom10. Jupyter11. Pandas在數據科學領域,Pandas 是一個非常重要的 Python 軟體包;
Pandas 基於 NumPy 構建,讓以 NumPy 為中心的應用變得更簡單;
Pandas 使用的兩個主要數據結構:Series和DataFrame。
12. AnacondaAnaconda 是一個企業級 Python 發行版,面向大規模數據處理、預測分析和科學計算;
Anaconda 以 Red Hat 和 Debian Linux 發行版的方式來分發 Python;
Anaconda 包含近500個最流行的科學、數學、工程和數據分析的Python軟體包。
13. HDPHortonworks 公司擁有最多的 Apache 大數據相關項目開發者和貢獻者,開發、發行100%開源的大數據平臺;
Hortonworks Data Platform (HDP )和 Hortonworks DataFlow (HDF)是兩大產品;
通過整合、交付統一的 Apache Spark 和 Hadoop,將 Spark 驅動的敏捷分析工作流程與 Hadoop 的海量數據集和經濟性相結合,企業可以使用行業最佳安全性、管制和運營能力來部署 Apache Spark。
14. CDHCDH可能是商業化運作最好的大數據平臺和解決方案;
開發維護了多個流行大數據開源軟體,是HDP最主要的競爭對手;
Impala 一個 C++ 開發的 Hadoop 實查詢引擎,值得關注。
15. HPCC16. Caffe(Caffe2)17. MXNet比 TensorFlow 更加輕量、高效小巧,更適合自定義需求高的公司和研究者;
MXNet 允許用戶自由把圖計算和過程計算混合起來使用;
MXNet 正在 Apache 基金會孵化,相信很快孵化成頂級項目。
18. TensorFlowTensorFlow體格龐大,代碼量大,抽象層多,深度自定義會很困難;
TensorFlow也是一個商業行為,背後是Google,它帶來的可行度和高質量;
一個事實:Google內部版的TensorFlow和Google Cloud深度綁定優化與開源的TensorFlow在速度和性能上會又巨大差異,美國的大廠都或多或少的在拒絕它。
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. ROS21. Apollo Auto22. OpenStack23. OpenShiftOpenShift is Enterprise-Ready Kubernetes;
Docker容器和Kubernetes容器編排已成為企業交付軟體和服務的行業標準,OpenShift可直接作為企業DevOps & CI/CD的基礎設施, 成為部署微服務的多租戶平臺;
OpenShift是BlockApps區塊鏈平臺的PaaS基礎設施。
24. SaltStackSaltStack提供了一種全新的基礎設施管理方式,部署輕鬆,在幾分鐘內可運行起來,擴展性好,很容易管理上萬臺伺服器,速度快,伺服器之間秒級通訊;
SaltStack使用ZeroMQ,帶來極高的通訊效率;
SaltStack或許是構建、管理、運營雲計算基礎設施的最佳方式,它支持廣泛的雲平臺。
25. RiakRiak 是使用 Erlang 開發的開源(Apache V2) 分布式 NoSQL 鍵/值(K/V) 存儲資料庫系統;
有 Riak Core、Riak KV 鍵值存儲、Riak TS 時序存儲、Riak S2 對象存儲的完整產品線;
Riak擁有Erlang語言帶來的分布式、消息、並發、可伸縮、容錯方面的天然優勢。
26. OrientDBOrientDB 是一個Java開發的開源(Apache v2)NoSQL文檔和圖形資料庫,也通過 OrientDB SQL 支持 SQL;
OrientDB是一個擁有對象模型 鍵/值模型 文檔模型 圖模型的多模型資料庫;
多範式程式語言(面向對象、模板、函數式編程、過程式 )C++帶來極高的生產力,多模型資料庫OrientDB能否也帶來類似效果。
27. Apache Kylin28. RabbitMQ29. Apache Kafka30. Ejabberd31. Nginxepoll(freebsd的kqueue)網絡IO模型是Nginx高性能的根本理由;
與Apache相比較,最核心的區別在於Apache是同步多進程模型,一個連接對應一個進程;Nginx是異步的,多個連接可以對應一個進程;
對於後端動態服務來說,比如Java和PHP。這類伺服器(如JBoss和PHP-FPM)的IO處理能力往往不高。Nginx有個好處是它會把Request在讀取完整之前buffer住,這樣交給後端的就是一個完整的HTTP請求,從而提高後端的效率,而不是斷斷續續的傳遞(網際網路上連接速度一般比較慢)。同樣,Nginx也可以把response給buffer住,同樣也是減輕後端的壓力。(此條信息來自:知乎叔度。
32. JettyEclipse Jetty,一個更輕量、更易擴展和定製的Java Web Server;Jetty架構基於Handler,擴展更容易,而Tomcat是基於容器設計,不易擴展;
Google GAE選擇Jetty,定製足夠小的Java Web Server支撐GAE業務;
Apache Tomcat和Eclipse Jetty背後是兩大開源基金會的合作與競爭。
33. CowboyCowboy適合構建嵌入式應用,它沒有配置文件,也不會生成日誌,一切都由Erlang控制。
Cowboy支持的協議有:HTTP/2、HTTP/1.1、WebSocket、HTTP/1.0、SPDY/3.1、SPDY/3;
Erlang很適合開發Web server,可基於Cowboy做擴展和定製;
34. GNU/LinuxLinux基金會不僅僅有Linux項目,還有眾多其它的開源項目,如AGL;
可更多關注類似Robot Operating System(ROS)這樣的機器人作業系統和嵌入式系統;
相比Android系統,OpenWrt被認為是更加適合智能設備和機器人的軟體平臺。
35. XNU/DarwinXNU是XNU is Not Unix的首字母縮寫,GNU是GNU’s Not Unix的縮寫;
XNU/Darwin與FreeBSD都有著BSD的血統,蘋果會持續投資和推動FreeBSD項目?
更深入的學習、研究iOS和macOS,就從Hack XNU開始吧。
36. FreeBSD37. GCCGCC:最重要的開源軟體(從1987的1.0到2017年7.2歷經30年,對整個自由、開源軟體貢獻卓著),後來者LLVM(14歲)很出色,前途無量;
GCC的基本語言是C語言,整個編譯系統由C編程程序開始,然後逐漸加入其它語言的支持;
C++是C語言的直接擴展,它是GCC的第一個附加語言。C++能夠完成的所有事情C語言都可以做到,所以編譯器的後端保持不變,只需在前端加入一個新的語法語義分析器就可以了。一旦產生中間語言,編譯程序的其它部分就和C語言完全一樣了,其它語言的處理方式也類似。
38. LLVMFreeBSD從10.0開始,使用LLVM替換GCC作為默認的編輯器,除了一些技術的考量外,GCC的GPL v3與FreeBSD項目的不兼容性,LLVM/Clang的許可協議是BSD,兼容FreeBSD;
Azul Systems推出Falcon,一個基於LLVM的新的Java即時編譯器;
Clang是LLVM的前端,用來編譯C,C++,Objective-C。
39. BabelBabel 下一代 JavaScript 編譯器(轉譯器);
簡單講,Babel 就是把一個版本的 JavaScript 轉變為其他版本的 JavaScript;
The Super Tiny Compiler可能是最小的編譯器,先感受和普及下JavaScript編譯器的知識。
40. JVMJVM是最大規模的程式語言虛擬機生態系統,有超過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)43. ErlangErlang 的世界觀是一切都是進程(一個 Erlang 進程包括 PCB 進程控制塊和堆棧只有幾K),進程通過消息傳遞相互通訊;
Erlang是參與者模型(Actor model)最佳實踐;
可在一臺筆記本上輕鬆跑出幾百萬個Erlang進程。
44. ClojureClojure 是一種運行在 Java 平臺上的 Lisp 方言;
Clojure is about Data, Scala is about Types, Java is about Objects;
ClojureScript: Clojure to JavaScript compiler。
45. FF#和OCaml是ML函數式程式語言的兩種主要方言;
F# = Objects + Functional
,F#混合面向對象和函數式編程,可「對應」JVM平臺的Scala語言;
F#支持高階函數、柯裡化、惰性求值、Continuations、模式匹配、閉包、列表處理和元編程,F#作為一門適合於金融和計算密集型的語言而聞名。
八、資源匯總以開源軟體介紹的順序匯集文檔、連結、書籍資源
文檔和連結GitHub 上的 Awesome 資源 尋找開源軟體
GitHub Topics 尋找開源軟體
各種技術大會、程式語言、應用的幻燈片資料匯總
Django Book: 一本免費的自由Book
Qt 5.7 License changes, The Qt Automotive Suite, The Qt Company in Japan
odoo 培訓參考資料
Moqui 應用開發指南
一年成為 Emacs 高手 (像神一樣使用編輯器)
Vimer的程序世界
spf13-vim : Steve Francia’s Vim Distribution
Vimcasts 各種Vim技巧
中文文案排版指北
Awesome Atom
OpenWrt中文網站
Top 8 Meteor Open Source Projects
Node.js, Meteor, React.js, AngularJS, JavaScript 和 HTML5 生態系統
Awesome Meteor
iDempiere維基
An Introduction to Data Science
Jupyter文檔
Pandas文檔
中文 Python 筆記
Deep Learning on HDP
Cloudera官方中文文檔
ECL程式設計師指導手冊、 更多文檔
ODPi Runtime Specification
Deep Learning Tutorial, ICML, Atlanta, 2013-06-16 Yann LeCun編寫,200頁幻燈片
TensorFlow 官方文檔中文版
MXNet設計和實現簡介
AWS 上的 Apache MXNet
Automotive Grade Linux大會幻燈片
Open Source in Every Car with Automotive Grade Linux
Next-generation ROS: Building on DDS
百度Apollo Auto @ GitHub
Tizen Experts
OpenStack文檔
OpenShift 3 Technical Architecture
OpenShift 3 and The Next Generation of PaaS
Using OpenShift & PaaS to accelerate DevOps & Continuous Delivery
中國SaltStack用戶組 中文文檔
SaltConf
From NoSQL to Mo』SQL
From Relational to Riak
OrientDB文檔
Apache Kylin Introduction
架構師特刊:Apache Kylin實踐
用Spring和RabbitMQ技術應對消息傳送挑戰
Building a Distributed Data Ingestion System with RabbitMQ
Using RabbitMQ to stream data events across PostgreSQL Databases
Apache Kafka文檔
Worktile中的實時消息推送服務實現
Nginx架構圖
Languages, and about languages, on the BEAM
Jetty:The Definitive Reference
Cowboy 2.0
GNU Manuals Online 我們收集整理了一些GNU項目文檔資源
Awesome macOS
OpenDarwin存檔資源 OpenDarwin項目已關停11年
LI, Xin.FreeBSD開發者
LLVM and Clang: Next Generation Compiler Technology
HotSpot Synchronization: A Peek Under the Hood
An Introduction to JVM Performance
.NET Core Documentation、.NET Core API Reference
Erlang VM(BEAM)文檔資料
Languages, and about languages, on the BEAM
Awesome Erlang
Awesome Elixir
為什麼我們仍需要Lisp(Clojure)-Loretta%20He.pdf)
Awesome Clojure
Clojure Cookbook
F# for fun and profit
F#幻燈片資源
F# Programming維基圖書
參考書籍《輕量級Django》Lightweight Django中文版
《Python Web開發實踐》
《Meteor實戰》
《JavaScript高級程序設計(第3版)》
《數據模型資源手冊 (卷3): 數據模型通用模式》
《C++ Primer(中文版)(第5版)》
《學習GNU Emacs(第二版)》
《學習Vi編輯器(第六版)》
《利用Python進行數據分析》
《Hadoop: The Definitive Guide (4th Edition)》
《數據挖掘概念與技術(原書第3版)》
《機器學習》周志華
《深度學習》
《ROS機器人程序設計》
《視覺SLAM十四講:從理論到實踐》
《概率機器人: Probabilistic Robotics中文版》
《OpenStack設計與實現》
《OpenStack最佳實踐:測試與CI/CD》
《Docker:容器與容器雲(第2版)》
《SRE Google運維解密》
《精通SaltStack》
《七周七資料庫》
《PostgreSQL修煉之道:從小工到專家》
《RabbitMQ實戰:高效部署分布式消息隊列》
《Kafka: The Definitive Guide》 PDF電子書
《程式語言原理(第10版)》
《七周七語言》
《七周七並發模型》
《七周七資料庫》
《OS X與iOS內核編程》
《編譯原理(第2版)》著名的龍書中文版
《自製編譯器》
《虛擬機—系統與進程的通用平臺》《Virtual Machines — Versatile Platforms for Systems and Processes》
《深入理解Java虛擬機(第2版)》
《虛擬機的設計與實現 C/C++》
《Erlang程序設計(第2版)》
《Scala程序設計(第2版)》
《響應式架構:消息模式Actor實現與Scala、Akka應用集成》
《Clojure編程:Java世界的Lisp實踐》
《Real World OCaml(中文版)》
還有一些圖書,就不羅列了。
近期熱文
《3分鐘了解入門「機器學習」該學習什麼?(上)》
《3分鐘了解入門「機器學習」該學習什麼?(下)》
《正則表達式從入門到實戰》
《如何用 Node.js 爬蟲?》
《兩款敏捷工具,治好你碎片化交付硬傷》
福利
「閱讀原文」看交流實錄,你想知道的都在這裡