阿里巴巴的Github代碼托管地址:https://github.com/alibaba
通過寫這篇文章從開源中國站上面看了很多,也從那里將開源軟件的基本的介紹和下載地址拷貝到了文章當中,總體給我的一個感受就是阿里的開源實在太強大了,多到需要花大量的時間去了解。今天寫這篇文章主要是對阿里開源的項目比較陌生,通過本文也有了一個大體的認知。每個人每天有24小時,但是大部分時間我們並不能集中精力學習做事,而時間對於我們而言都是很寶貴的,原因就是人的精力是有限的,不能像機器一樣學習和頻繁地機械運動。惰性乃人之常情,如果不寫此文我想我明天可能就會忘記阿里的這一堆東東,讓他們掉入頭腦的“黑洞”,為拯救記憶和不再留下遺憾,本文還是很必要寫的。通過梳理,也大致看到了阿里發展過程中技術更新的軌跡。阿里很多的中間件和開源方案也是值得借鑒的,所以在很多時候我們不僅要低下頭來做事,還要時不時地看看天空。
以下文章從開源中國匯總而來:http://www.oschina.net/project/alibaba
1.JDBC連接池、監控組件 Druid
Druid是一個JDBC組件,它包括三部分:(1) DruidDriver 代理Driver,能夠提供基於Filter-Chain模式的插件體系;(2)DruidDataSource 高效可管理的數據庫連接池;(3)SQLParser ;
Druid可以做什么?
1) 可以監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。
2) 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫連接池。
3) 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
4) SQL執行日志,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的數據庫訪問情況。
擴展JDBC,如果你要對JDBC層有編程的需求,可以通過Druid提供的Filter-Chain機制,很方便編寫JDBC層的擴展插件。
如下是一個基於Druid內置擴展StatFilter的監控實現:

Git地址:http://git.oschina.net/wenshao/druid
2.分布式文件系統 FastDFS
FastDFS是一個開源的分布式文件系統,她對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等。
Github地址:https://github.com/happyfish100/fastdfs
3.通用 React 兼容渲染引擎 Rax
Rax 是阿里開源的一個通用的 JavaScript 庫,主要有 React 兼容的 API 。 使用 React 的就應該已經知道如何使用 Rax。
特性:快速:快速的虛擬 DOM;微型:min + gzip 之后僅 8.0kb;通用:跨瀏覽器、Weex 和 Node.js。
Github地址:https://github.com/alibaba/rax
4.Java的JSON處理器 fastjson
fastjson 是一個性能很好的 Java 語言實現的 JSON 解析器和生成器,來自阿里巴巴的工程師開發。
主要特點:快速FAST (比其它任何基於Java的解析器和生成器更快,包括jackson);強大(支持普通JDK類包括任意Java Bean Class、Collection、Map、Date或enum);零依賴(沒有依賴其它任何類庫除了JDK)。
Git地址:https://git.oschina.net/wenshao/fastjson
5.七天學會NodeJS文檔
七天學會NodeJS是阿里巴巴國際站前端技術部編寫的開源文檔,用於學習 Node.js。
Github地址:https://github.com/nqdeng/7-days-nodejs
6.服務框架 Dubbo
Dubbo 是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 sprig框架無縫集成。
主要核心部件:
-
Remoting: 網絡通信框架,實現了 sync-over-async 和 request-response 消息機制.
-
RPC: 一個遠程過程調用的抽象,支持負載均衡、容災和集群功能
-
Registry: 服務目錄框架用於服務的注冊和服務事件發布和訂閱
Dubbo工作原理

-
Provider
-
暴露服務方稱之為“服務提供者”。
-
-
Consumer
-
調用遠程服務方稱之為“服務消費者”。
-
-
Registry
-
服務注冊與發現的中心目錄服務稱之為“服務注冊中心”。
-
-
Monitor
-
統計服務的調用次調和調用時間的日志服務稱之為“服務監控中心”。
-
Github地址:https://github.com/alibaba/dubbo
7.開源數據庫AliSQL
AliSQL是基於MySQL官方版本的一個分支,由阿里雲數據庫團隊維護,目前也應用於阿里巴巴集團業務以及阿里雲數據庫服務。該版本在社區版的基礎上做了大量的性能與功能的優化改進。尤其適合電商、雲計算以及金融等行業環境。
阿里雲數據庫資深專家丁奇介紹,AliSQL版本在強度和廣度上都經歷了極大的考驗。最新的AliSQL版本不僅從其他開源分支比如:Percona,MariaDB,WebScaleSQL等社區汲取精華,也沉淀了阿里巴巴多年在MySQL領域的經驗和解決方案。AliSQL增加更多監控指標,並針對電商秒殺、物聯網大數據壓縮、金融數據安全等場景提供個性化的解決方案。
“在通用基准測試場景下,AliSQL版本比MySQL官方版本有着70%的性能提升。在秒殺場景下,性能提升100倍。”丁奇表示。
阿里雲資深總監李津表示,“AliSQL的發展得到了眾多智慧的支持。我們希望將過去幾年沉淀的技術積累回饋到社區,幫助更多使用MySQL的個人和企業,這是社區良性發展的道路。我們也歡迎更多的開發者和技術團隊加入AliSQL開源項目,使之在業內發揮更大的價值。”
和 Oracle 數據庫的性能比較:

Github地址:https://github.com/alibaba/AliSQL
8.跨平台移動開發工具 Weex
2016年4月21日,阿里巴巴在Qcon大會上宣布開源跨平台移動開發工具Weex,Weex能夠完美兼顧性能與動態性,讓移動開發者通過簡捷的前端語法寫出Native級別的性能體驗,並支持iOS、安卓、YunOS及Web等多端部署。
對於移動開發者來說,Weex主要解決了頻繁發版和多端研發兩大痛點,同時解決了前端語言性能差和顯示效果受限的問題。開發者可通過Weex官網申請內測。(http://alibaba.github.io/weex/)
開發者只需要在自己的APP中嵌入Weex的SDK,就可以通過撰寫HTML/CSS/JavaScript來開發Native級別的Weex界面。Weex界面的生成碼其實就是一段很小的JS,可以像發布網頁一樣輕松部署在服務端,然后在APP中請求執行。
與現有的開源跨平台移動開放項目如Facebook的React Native和微軟的Cordova相比,Weex更加輕量,體積小巧。因為基於web conponent標准,使得開發更加簡潔標准,方便上手。Native組件和API都可以橫向擴展,方便根據業務靈活定制。Weex渲染層具備優異的性能表現,能夠跨平台實現一致的布局效果和實現。對於前端開發來說,Weex能夠實現組件化開發、自動化數據綁定,並擁抱Web標准。
突出特點:
-
致力於移動端,充分調度 native 的能力
-
充分解決或回避性能瓶頸
-
靈活擴展,多端統一,優雅“降級”到 HTML5
-
保持較低的開發成本和學習成本
-
快速迭代,輕量實時發布
-
融入現有的 native 技術體系
-
工程化管理和監控等
-
輕量:體積小巧,語法簡單,方便接入和上手
-
可擴展:業務方可去中心化橫向定制組件和功能模塊
-
高性能:高速加載、高速渲染、體驗流暢
9.消息中間件 Apache RocketMQ
【Apache RocketMQ】RocketMQ捐贈給Apache那些鮮為人知的故事
Apache基金會宣布接收阿里消息中間件RocketMQ為孵化項目
RocketMQ 是一款分布式、隊列模型的消息中間件,具有以下特點:
-
能夠保證嚴格的消息順序
-
提供豐富的消息拉取模式
-
高效的訂閱者水平擴展能力
-
實時的消息訂閱機制
-
億級消息堆積能力
-
Metaq3.0 版本改名,產品名稱改為RocketMQ
Github地址:https://github.com/alibaba/RocketMQ
10.淘寶Hadoop作業平台 宙斯Zeus
宙斯是一個完整的Hadoop的作業平台。從Hadoop任務的調試運行到生產任務的周期調度 宙斯支持任務的整個生命周期。
從功能上來說,支持:
- Hadoop MapReduce任務的調試運行
- Hive任務的調試運行
- Shell任務的運行
- Hive元數據的可視化查詢與數據預覽
- Hadoop任務的自動調度
Github地址:https://github.com/alibaba/zeus
11.淘寶分布式數據庫 OceanBase
OceanBase是一個支持海量數據的高性能分布式數據庫系統,實現了數千億條記錄、數百TB數據上的跨行跨表事務,由淘寶核心系統研發部、運維、DBA、廣告、應用研發等部門共同完成。在設計和實現OceanBase的時候暫時摒棄了不緊急的DBMS的功能,例如臨時表,視圖(view),研發團隊把有限的資源集中到關鍵點上,當前 OceanBase主要解決數據更新一致性、高性能的跨表讀事務、范圍查詢、join、數據全量及增量dump、批量數據導入。
目前OceanBase已經應用於淘寶收藏夾,用於存儲淘寶用戶收藏條目和具體的商品、店鋪信息,每天支持4~5千萬的更新操作。等待上線的應用還包括CTU、SNS等,每天更新超過20億,更新數據量超過2.5TB,並會逐步在淘寶內部推廣。
12.分布式key/value存儲系統 Tair
Tair是由淘寶網自主開發的Key/Value結構數據存儲系統,在淘寶網有着大規模的應用。您在登錄淘寶、查看商品詳情頁面或者在淘江湖和好友“搗漿糊”的時候,都在直接或間接地和Tair交互。
Tair是一個Key/Value結構數據的解決方案,它默認支持基於內存和文件的兩種存儲方式,分別和我們通常所說的緩存和持久化存儲對應。
Tair除了普通Key/Value系統提供的功能,比如get、put、delete以及批量接口外,還有一些附加的實用功能,使得其有更廣的適用場景,包括:
-
Version支持>
-
原子計數器
-
Item支持
13.系統信息采集和監控工具 Tsar
Tsar是淘寶的采集工具,主要用來收集服務器的系統信息(如cpu,io,mem,tcp等)以及應用數據(如squid haproxy nginx等),tsar支持實時查看和歷史查看,方便了解應用和服務器的信息!
它類似於sar,能監控和收集服務器和關鍵應用的信息,支持實時終端顯示和集中式數據庫存儲查詢,還能向Nagios發送報警信息。Tsar模塊化的設計利於通過開發新模塊來擴展新的功能,非常方便。
Github地址:https://github.com/alibaba/tsar
14.模塊加載框架 SeaJS
Sea.JS 是一個遵循 CommonJS 規范的模塊加載框架,可用來輕松愉悅地加載任意 JavaScript 模塊。
SeaJS 支持的標准模塊遵循 Modules/Wrappings 規范的 define 形式,可運行於 Web 瀏覽器以及 node.JS 等環境中。
Github地址:https://github.com/seajs/seajs
15.阿里巴巴分布式數據庫同步系統 otter
otter 基於數據庫增量日志解析,准實時同步到本機房或異地機房的mysql/oracle數據庫. 一個分布式數據庫同步系統。
工作原理:

原理描述:
1. 基於Canal開源產品,獲取數據庫增量日志數據。 什么是Canal, 請點擊
2. 典型管理系統架構,manager(web管理)+node(工作節點)
a. manager運行時推送同步配置到node節點
b. node節點將同步狀態反饋到manager上
3. 基於zookeeper,解決分布式狀態調度的,允許多node節點之間協同工作.
Github地址:https://github.com/alibaba/otter
16.分布式消息中間件 Metamorphosis
Metamorphosis (MetaQ) 是一個高性能、高可用、可擴展的分布式消息中間件,類似於LinkedIn的Kafka,具有消息存儲順序寫、吞吐量大和支持本地和XA事務等特性,適用於大吞吐量、順序消息、廣播和日志數據傳輸等場景,在淘寶和支付寶有着廣泛的應用,現已開源。
總體結構:

內部結構:

主要特點:
-
生產者、服務器和消費者都可分布
-
消息存儲順序寫
-
性能極高,吞吐量大
-
支持消息順序
-
支持本地和XA事務
-
客戶端pull,隨機讀,利用sendfile系統調用,zero-copy ,批量拉數據
-
支持消費端事務
-
支持消息廣播模式
-
支持異步發送消息
-
支持http協議
-
支持消息重試和recover
-
數據遷移、擴容對用戶透明
-
消費狀態保存在客戶端
-
支持同步和異步復制兩種HA
-
支持group commit
-
更多……
Github地址:https://github.com/alibaba/RocketMQ
17.HTML5 互動游戲引擎 Hilo
Hilo 是阿里巴巴集團開發的一款HTML5跨終端游戲解決方案,ta可以幫助開發者快速創建HTML5游戲。
主要特性
-
Hilo 支持多種模塊范式的包裝版本,包括AMD,CMD,COMMONJS,Standalone多種方式接入。另外,你可以根據需要新增和擴展模塊和類型;
-
極精簡的模塊設計,完全面向對象;
-
多種渲染方式, 提供DOM,Canvas,Flash,WebGL等多種渲染方案(目前已經申請專利);
-
全端瀏覽器的支持和高性能方案,獨有的Flash渲染方案,即使在低版本IE瀏覽器下也可以跑起來“酷炫”游戲; DOM渲染方案能顯著解決低性能手機瀏覽器遇到的性能問題;
-
物理引擎支持——Chipmunk,支持自擴展物理實現;骨骼動畫支持——DragonBones,同時內建骨骼動畫系統——Tahiti(目前內部使用);
-
案例豐富,框架成熟,已經經歷多屆阿里巴巴雙十一,年中大促互動營銷活動考驗;

Github:https://github.com/hiloteam/Hilo
18.自動化測試解決方案 Macaca
官方網站: 鏈接
Macaca是一套完整的自動化測試解決方案。
特性:
-
支持移動端和PC端
-
支持Native, Hybrid, H5 等多種應用類型
-
提供客戶端工具和持續集成服務
客戶端:
客戶端工具的安裝、使用詳見 macaca-cli。
持續集成:
reliable 是分布式持續集成服務,可與 macaca 無縫融合。
部署和使用詳見 reliable-slave,reliable-master。
Github地址:https://github.com/alibaba/macaca
19.JavaScript 模板引擎 Velocity.js
Velocity.js 是velocity模板語法的javascript實現。Velocity 是基於Java的模板引擎,廣泛應用在阿里集 體各個子公司。Velocity模板適用於大量模板使用的場景,支持復雜的邏輯運算,包含 基本數據類型、變量賦值和函數等功能。Velocity.js 支持 Node.js 和瀏覽器環境。
Features
-
支持客戶端和服務器端使用
-
語法是富邏輯的,構成門微型的語言
-
語法分析和模板渲染分離
-
基本完全支持velocity語法
-
瀏覽器使用支持模板之間相互引用,依據kissy模塊加載機制
-
三個Helper,友好的數據模擬解決方案
Github地址:https://github.com/shepherdwind/velocity.js
20.Oracle數據遷移同步工具 yugong
yugong 是阿里巴巴推出的去Oracle數據遷移同步工具(全量+增量,目標支持MySQL/DRDS)
08年左右,阿里巴巴開始嘗試MySQL的相關研究,並開發了基於MySQL分庫分表技術的相關產品,Cobar/TDDL(目前為阿里雲DRDS產品),解決了單機Oracle無法滿足的擴展性問題,當時也掀起一股去IOE項目的浪潮,愚公這項目因此而誕生,其要解決的目標就是幫助用戶完成從Oracle數據遷移到MySQL上,完成去IOE的第一步.
整個數據遷移過程,分為兩部分:
-
全量遷移
-
增量遷移

過程描述:
-
增量數據收集 (創建oracle表的增量物化視圖)
-
進行全量復制
-
進行增量復制 (可並行進行數據校驗)
-
原庫停寫,切到新庫
架構

說明:
-
一個Jvm Container對應多個instance,每個instance對應於一張表的遷移任務
-
instance分為三部分
a. extractor (從源數據庫上提取數據,可分為全量/增量實現)
b. translator (將源庫上的數據按照目標庫的需求進行自定義轉化)
c. applier (將數據更新到目標庫,可分為全量/增量/對比的實現)
Github地址:https://github.com/alibaba/yugong
21.企業級流式計算引擎 JStorm
JStorm 是參考 Apache Storm 實現的實時流式計算框架,在網絡IO、線程模型、資源調度、可用性及穩定性上做了持續改進,已被越來越多企業使用。JStorm 可以看作是 storm 的java增強版本,除了內核用純java實現外,還包括了thrift、python、facet ui。從架構上看,其本質是一個基於zk的分布式調度系統
JStorm 的性能是Apache Storm 的4倍, 可以自由切換行模式或 mini-batch 模式:


Github地址:https://github.com/alibaba/jstorm
22.非侵入式運行期 AOP 框架 Dexposed
Dexposed 是阿里巴巴無線事業部第一個重量級 Andorid 開源軟件,基於 ROOT 社區著名開源項目 Xposed 改造剝離了 ROOT 部分,演化為服務於所在應用自身的 AOP 框架。它支撐了阿里大部分 App 的在線分鍾級客戶端 bugfix 和線上調試能力。
Dexposed 的 AOP 是實現了純非侵入式,沒有任何注釋處理器,weaver 或者字節碼重寫程序。Dexposed 的集成非常簡單,就像加載一個 JNI 庫一樣,只需要在初始化的時候插入一行代碼。
經典用例
-
典型的 AOP 編程
-
儀表化 (測試,性能監控等等)
-
在線熱修復(重要,關鍵,安全漏洞等等)
-
SDK hooking,更好的開發體驗
Github地址:https://github.com/alibaba/dexposed
23.自動化測試解決方案 UI Recorder
UI Recorder是一款零成本的整體自動化測試解決方案,一次自測等於多次測試,測一個瀏覽器等於測多個瀏覽器!
以下是本產品的特點:
-
自測 = 自動化測試:對於開發人員來講,自測是開發流程中缺一不可的過程,我們要實現的目標就是自測過程中即可同步的錄制出自動化腳本,實現真正的零成本自動化
-
無干擾錄制:所作操作均無需交互干擾,鼠標、鍵盤、alert彈框、文件上傳,完全按照正常自測流程操作即可(以下操作除外:懸停事件、斷言、變量)
-
本地生成腳本:錄制的腳本存儲在用戶本機,用戶可以自行在錄制的基礎上進行修改定制,更自由更開放
-
豐富的斷言:支持以下斷言類型,val、text、displayed、enabled、selected、attr、css、url、title、cookie、localStorage、sessionStorage
-
支持數據Mock:我們支持Faker變量功能,支持強大的數據Mock
-
支持公共用例: 用例之間允許相互引用,可以將某些公用的操作步驟錄制為公用用例,以進一步提升錄制效率
-
支持執行截圖:每次執行后,允許生成截圖日志,以方便出問題時排查診斷
視頻教程:http://v.youku.com/v_show/id_XMTY4NTk5NjI4MA==.html
Github地址:https://github.com/alibaba/uirecorder
24.Android 應用熱修復工具 AndFix
AndFix 是阿里巴巴開源的 Android 應用熱修復工具,幫助 Anroid 開發者修復應用的線上問題。Andfix 是 "Android hot-fix" 的縮寫。
AndFix 支持 Android 2.3 - 6.0,ARM 和 x86 架構,dalvik 運行時和 art 運行時。AndFix 的分支是 .apatch 文件。
AndFix 方法體取代實現規則:

Bug 修復過程:

Gitbub地址:https://github.com/alibaba/AndFix
25.設計語言&前端框架 Ant Design
Ant Design 是螞蟻金服開發和正在使用的一套企業級的前端設計語言和基於 React 的前端框架實現。

特性
-
企業級金融產品的交互語言和視覺體系。
-
豐富實用的 React UI 組件。
-
基於 React 的組件化開發模式。
-
背靠 npm 生態圈。
-
基於 webpack 的調試構建方案,支持 ES6。
26.分布式SQL引擎 Lealone
Lealone 為 HBase 提供一個分布式SQL引擎,嘗試將BigTable(HBase)和 RDBMS (H2數據庫) 結合的項目。
Lealone 發音 ['li:ləʊn] 這是我新造的英文單詞,靈感來自於在淘寶工作期間辦公桌上那些叫綠蘿的室內植物,一直想做個項目以它命名。 綠蘿的拼音是lv luo,與Lealone英文發音有點相同, Lealone是lea + lone的組合(lea 草地/草原, lone 孤獨的),也算是現在的心境:思路遼闊但又孤獨。 反過來念更有意思。
應用場景:
-
使用Lealone的分布式SQL引擎,可使用類似MySQL的SQL語法和標准JDBC API讀寫HBase中的數據, 支持各種DDL,支持觸發器、自定義函數、視圖、Join、子查詢、Order By、Group By、聚合。
-
對於Client/Server架構的傳統單機RDBMS的場景,也可使用Lealone。
-
如果應用想不經過網絡直接讀寫數據庫,可使用嵌入式Lealone。
27.淘寶 React 框架 React Web
淘寶前端團隊開源項目React Web,通過與React Native一致的API構建Web應用。

Github:https://github.com/taobaofed/react-web
28.基於 Node.js 的自動化持續集成 Reliable
Reliable 是分布式架構的持續集成系統,由Macaca 團隊的成員開發。適用於集成構建、集成構建等場景。她是典型的主從結構,分為reliable-master 與 reliable-slave 兩部分。
特點:
-
集群負載,合理調配
-
提供插件機制,易擴展
-
部署非常簡單
-
便於接入 Gitlab、Github 等社區化系統
同時,她與 Macaca 無縫融合。
使用 Macaca + Reliable 為自己的團隊和公司搭建一個開源的自動化集成平台是個不錯的選擇。
Github地址:https://github.com/reliablejs/reliable-master
29.Java APNS Apple Push Notification Service開源庫 apns4j
apns4j 是 Apple Push Notification Service 的 Java 實現!
Github地址:https://github.com/teaey/apns4j
30.Linux 內核的阿里巴巴分支 Ali-Kernel
Alibaba Kernel起源於亞洲最大的電子商務網站——阿里巴巴。它基於 RHEL6 源代碼,包含了阿里巴巴所需的一些更新和新功能。更多的信息和文檔,請參閱http://kernel.taobao.org
特征:
-
rhel6u2內核的所有功能,源代碼版本是 2.6.32-220.23.1.
-
netoops使你能夠從panic server收集數據, https://lwn.net/Articles/414031/.
-
支持ext4的bigalloc和內聯數據. https://lwn.net/Articles/469805/
-
overlayfs能夠在一個fs上部署另一個fs. 請參閱 http://lwn.net/Articles/447650/.
-
支持嵌入式緩存.
-
支持用於容器的中央處理器的計算.
-
dio 覆蓋后面加上的快速 SSDs 的支持.
-
完善 JIT 使你能夠跟蹤一個java程序的性能.
-
使內存管理策略有所不同.
Github地址:https://github.com/alibaba/ali_kernel
31.淘寶Web服務器 Tengine
Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平台。
從2011年12月開始,Tengine成為一個開源項目,Tengine團隊在積極地開發和維護着它。Tengine團隊的核心成員來自於淘寶、搜狗等互聯網企業。Tengine是社區合作的成果,我們歡迎大家參與其中,貢獻自己的力量。
以下沿引項目主頁上的特性介紹:
-
繼承Nginx-1.2.8的所有特性,100%兼容Nginx的配置;
-
動態模塊加載(DSO)支持。加入一個模塊不再需要重新編譯整個Tengine;
-
更多負載均衡算法支持。如會話保持,一致性hash等;
-
輸入過濾器機制支持。通過使用這種機制Web應用防火牆的編寫更為方便;
-
動態腳本語言Lua支持。擴展功能非常高效簡單;
-
支持管道(pipe)和syslog(本地和遠端)形式的日志以及日志抽樣;
-
組合多個CSS、JavaScript文件的訪問請求變成一個請求;
-
可以對后端的服務器進行主動健康檢查,根據服務器狀態自動上線下線;
-
自動根據CPU數目設置進程個數和綁定CPU親緣性;
-
監控系統的負載和資源占用從而對系統進行保護;
-
顯示對運維人員更友好的出錯信息,便於定位出錯機器;
-
更強大的防攻擊(訪問速度限制)模塊;
-
更方便的命令行參數,如列出編譯的模塊列表、支持的指令等;
-
可以根據訪問文件類型設置過期時間;
Github地址:https://github.com/alibaba/tengine
32.Web常用UI庫 kissy
issy 是淘寶一個開源的 JavaScript 庫,包含的組件有:日歷、圖片放大鏡、卡片切換、彈出窗口、輸入建議等

願景:小巧靈活,簡潔實用,使用起來讓人感覺愉悅。
支持的瀏覽器:IE 6+, Firefox 3.5+, Safari 4+, Chrome 2+, Opera 10+
Github地址:https://github.com/kissyteam/kissy
33.Bug管理系統 BugFree-禪道
34.Nginx開發從入門到精通
nginx由於出色的性能,在世界范圍內受到了越來越多人的關注,在淘寶內部它更是被廣泛的使用,眾多的開發以及運維同學都迫切的想要了解nginx模塊的開發以及它的內部原理,但是國內卻沒有一本關於這方面的書,源於此我們決定自己來寫一本。本書的作者為淘寶核心系統服務器平台組的成員,本書寫作的思路是從模塊開發逐漸過渡到nginx原理剖析。書籍的內容會定期在這里更新,歡迎大家提出寶貴意見,不管是本書的內容問題,還是字詞錯誤,都歡迎大家提交issue(章節標題的左側有評注按鈕),我們會及時的跟進。
Github地址:https://github.com/taobao/nginx-book
35.分布式數據層 TDDL
淘寶根據自己的業務特點開發了TDDL(Taobao Distributed Data Layer 外號:頭都大了 ©_Ob)框架,主要解決了分庫分表對應用的透明化以及異構數據庫之間的數據復制,它是一個基於集中式配置的 jdbc datasource實現,具有主備,讀寫分離,動態數據庫配置等功能。
TDDL所處的位置(tddl通用數據訪問層,部署在客戶端的jar包,用於將用戶的SQL路由到指定的數據庫中):

淘寶很早就對數據進行過分庫的處理, 上層系統連接多個數據庫,中間有一個叫做DBRoute的路由來對數據進行統一訪問。DBRoute對數據進行多庫的操作、數據的整合,讓上層系統像操作 一個數據庫一樣操作多個庫。但是隨着數據量的增長,對於庫表的分法有了更高的要求,例如,你的商品數據到了百億級別的時候,任何一個庫都無法存放了,於是 分成2個、4個、8個、16個、32個……直到1024個、2048個。好,分成這么多,數據能夠存放了,那怎么查詢它?這時候,數據查詢的中間件就要能 夠承擔這個重任了,它對上層來說,必須像查詢一個數據庫一樣來查詢數據,還要像查詢一個數據庫一樣快(每條查詢在幾毫秒內完成),TDDL就承擔了這樣一 個工作。在外面有些系統也用DAL(數據訪問層) 這個概念來命名這個中間件。
下圖展示了一個簡單的分庫分表數據查詢策略:

主要優點:
1.數據庫主備和動態切換
2.帶權重的讀寫分離
3.單線程讀重試
4.集中式數據源信息管理和動態變更
5.剝離的穩定jboss數據源
6.支持mysql和oracle數據庫
7.基於jdbc規范,很容易擴展支持實現jdbc規范的數據源
8.無server,client-jar形式存在,應用直連數據庫
9.讀寫次數,並發度流程控制,動態變更
10.可分析的日志打印,日志流控,動態變更
TDDL必須要依賴diamond配置中心(diamond是淘寶內部使用的一個管理持久配置的系統,目前淘寶內部絕大多數系統的配置,由diamond來進行統一管理,同時diamond也已開源)。
TDDL動態數據源使用示例說明:http://rdc.taobao.com/team/jm/archives/1645
diamond簡介和快速使用:http://jm.taobao.org/tag/diamond%E4%B8%93%E9%A2%98/
TDDL源碼:https://github.com/alibaba/tb_tddl
TDDL復雜度相對較高。當前公布的文檔較少,只開源動態數據源,分表分庫部分還未開源,還需要依賴diamond,不推薦使用。
Github地址:https://github.com/alibaba/tb_tddl
36.分布式文件系統TFS
TFS(Taobao FileSystem)是一個高可擴展、高可用、高性能、面向互聯網服務的分布式文件系統,其設計目標是支持海量的非結構化數據。
目前,國內自主研發的文件系統可謂鳳毛麟角。淘寶在這一領域做了有效的探索和實踐,Taobao File System(TFS)作為淘寶內部使用的分布式文件系統,針對海量小文件的隨機讀寫訪問性能做了特殊優化,承載着淘寶主站所有圖片、商品描述等數據存儲。
文章首先概括了TFS的特點:最近,淘寶核心系統團隊工程師楚材(李震)在其官方博客上撰文(《TFS簡介》,以下簡稱文章)簡要介紹了TFS系統的基本情況,引起了社區的關注。
完全扁平化的數據組織結構,拋棄了傳統文件系統的目錄結構。
在塊設備基礎上建立自有的文件系統,減少EXT3等文件系統數據碎片帶來的性能損耗。
單進程管理單塊磁盤的方式,摒除RAID5機制。
帶有HA機制的中央控制節點,在安全穩定和性能復雜度之間取得平衡。
盡量縮減元數據大小,將元數據全部加載入內存,提升訪問速度。
跨機架和IDC的負載均衡和冗余安全策略。
完全平滑擴容。
當前,TFS在淘寶的應用規模達到“數百台PCServer,PB級數據量,百億數據級別”,對於其性能參數,楚材透漏:
TFS在淘寶的部署環境中前端有兩層緩沖,到達TFS系統的請求非常離散,所以TFS內部是沒有任何數據的內存緩沖的,包括傳統文件系統的內存緩沖也不存在......基本上我們可以達到單塊磁盤隨機IOPS(即I/O per second)理論最大值的60%左右,整機的輸出隨盤數增加而線性增加。
TFS的邏輯架構圖1如下所示:

圖1. TFS邏輯架構圖(來源:淘寶核心系統團隊博客)
楚材結合架構圖做了進一步說明:
-
TFS尚未對最終用戶提供傳統文件系統API,需要通過TFSClient進行接口訪問,現有JAVA、JNI、C、PHP的客戶端
-
TFS的NameServer作為中心控制節點,監控所有數據節點的運行狀況,負責讀寫調度的負載均衡,同時管理一級元數據用來幫助客戶端定位需要訪問的數據節點
-
TFS的DataServer作為數據節點,負責數據實際發生的負載均衡和數據冗余,同時管理二級元數據幫助客戶端獲取真實的業務數據。
37.http壓力測試工具 httpsender
httpsender是一款輕量級的http壓力測試工具,由淘寶的測試工程師用Java語言開發完成。它可以指定並發連接數發送指定數目的請求,還可以自定義請求的header頭。請求的URL支持通過正則表達式指定范圍,同時也支持從文件隨機或順序讀取。它還具備驗證數據是否完整和錯亂等較高級的功能。默認應用環境為Linux。
下載地址:
http://dl.dbank.com/c0vxx27aa5
38.輕量級分布式數據訪問層 CobarClient
Cobar Client是一個輕量級分布式數據訪問層(DAL)基於iBatis(已更名為MyBatis)和Spring框架實現。

主要特性:
-
可以支持垂直和水平數據切分數據庫集群的訪問;
-
支持雙機熱備的HA解決方案, 應用方可以根據情況選用數據庫特定的HA解決方案(比如Oracle的RAC),或者選用CobarClient提供的HA解決方案.
-
小數據量的數據集計(Aggregation), 暫時只支持簡單的數據合並.
-
數據庫本地事務的支持, 目前采用Best Efforts 1PC模式的事務管理.
-
數據訪問操作相關SQL的記錄, 分析等.(可以采用國際站現有Ark解決方案,但CobarClient提供擴展的切入接口)
Github地址:https://github.com/alibaba/cobarclient
39.淘蝌蚪開源平台 taocode
![]()
taocode(淘蝌蚪)是淘寶網推出的開源平台。平台本身也是開源的。
TaoCode的定位:大的方面來說,是平台+社區
1).平台化
a) 完善項目管理過程工具平台
b) 提供更多代碼級工具
c) 提供更多文檔化工具
2).社區化
a). 提供更好的交流平台
b). 增加更多的持續性生態化平台功能
40.關系型數據的分布式處理系統 Cobar
Cobar是關系型數據的分布式處理系統,它可以在分布式的環境下像傳統數據庫一樣為您提供海量數據服務。以下是快速啟動場景:
-
系統對外提供的數據庫名是dbtest,並且其中有兩張表tb1和tb2。
-
tb1表的數據被映射到物理數據庫dbtest1的tb1上。
-
tb2表的一部分數據被映射到物理數據庫dbtest2的tb2上,另外一部分數據被映射到物理數據庫dbtest3的tb2上。
如下圖所示:
產品約束
-
使用JDBC時,推薦使用5.1以上版本Driver進行連接
-
不支持跨庫的關聯操作:join、分頁、排序、子查詢。
-
不支持rewriteBatchedStatements=true參數設置。默認為false
-
不支持useServerPrepStmts=true參數設置。默認為false
-
BLOB, BINARY, VARBINARY字段不能使用。若特殊需求需要這三種字段,禁止使用PreparedStatement的setBlob()或setBinaryStream()方法設置參數。
-
不支持SAVEPOINT操作。
-
不支持SET語句的執行,事務和字符集設置語句除外
-
對於拆分表(一個表的數據被映射到多個MySQL數據庫),不能更新已有記錄的拆分字段(分庫字段)值
-
只支持MySQL數據節點。
-
對於拆分表,插入操作須給出列名,必須包含拆分字段。
Github地址:https://github.com/alibaba/cobar
41.異步任務處理系統TBSchedule
由原來的項目taobao-pamirs-schedule 更名為 TBSchedule
Console Demo地址: www.tbschedule.com
Console下載: trunk/console/ScheduleConsole.war
技術支持: 忌少 jishao@taobao.com
推薦項目: QLExpress 簡介高效的腳本引擎
pom引用:
com.taobao.pamirs.schedule tbschedule 3.2.10
對於互聯網和電子商務領域而言,由於存在大數據、高並發的特點,相對比較消耗時間的業務邏輯都會從用戶行為中被剝離開來進行異步處理,一來可以提高用戶體驗,二來也可以增大系統的可擴轉性,因此得到大量的應用了。由於業務的需要我們選擇了淘寶p9的架構師玄難大師寫的tbschedule來作為我們的異步任務處理系統,至今有接近一年的運維與使用實踐,由於最近有業務需要一個任務分配系統,直接使用tbschedule是不滿足要求的,在考慮具體實現的時候決定再次通讀一次tbschedule的源代碼,在對tbschedule的源代碼又再次研讀一番之后有了一些新的認識和思考。
tbschedule具有如下特性:
1、tbschedule的目的是讓一種批量任務或者不斷變化的任務,能夠被動態的分配到多個主機的JVM中,不同的線程組中並行執行。所有的任務能夠被不重復,不遺漏的快速處理。
2、調度的Manager可以動態的隨意增加和停止。
3、可以通過JMX控制調度服務的創建和停止。
4、可以指定調度的時間區間。
42.模擬數據生成器 Mock.js
Mock.js 是一款模擬數據生成器,旨在幫助前端攻城師獨立於后端進行開發,幫助編寫單元測試。提供了以下模擬功能:
-
根據數據模板生成模擬數據
-
模擬 Ajax 請求,生成並返回模擬數據
-
基於 HTML 模板生成模擬數據
Github地址:https://github.com/nuysoft/Mock
43.在線分析查詢系統 mdrill
1:mdrill是阿里媽媽-adhoc-海量數據多維自助即席查詢平台下的一個子項目。
2:mdrill旨在幫助用戶在幾秒到幾十秒的時間內,分析百億級別的任意維度組合的數據。
3:mdrill是一個分布式的在線分析查詢系統,基於hadoop,lucene,solr,jstorm等開源系統作為實現,基於SQL的查詢語法。 mdrill是一個能夠對大量數據進行分布式處理的軟件框架。mdrill是快速的高性能的,他的底層因使用了索引、列式存儲、以及內存cache等技 術,使得數據掃描的速度大為增加。mdrill是分布式的,它以並行的方式工作,通過並行處理加快處理速度。
4:mdrill在adhoc項目中,mdrill使用了10台機器,存儲了400億的數據,每次掃描30億的行數,響應時間在20秒~120秒左右(取決不同的查詢條件)。
據越來越多,傳統的關系型數據庫支撐不了,分布式數據倉庫又非常貴。幾十億、幾百億、甚至幾千億的數據量,如何才能高效的分析?
mdrill是由阿里媽媽開源的一套數據的軟件,針對TB級數據量,能夠僅用10台機器,達到秒級響應,數據能實時導入,可以對任意的維度進行組合與過濾。
mdrill作為數據在線分析處理軟件,可以在幾秒到幾十秒的時間,分析百億級別的任意組合維度的數據。
在阿里10台機器完成每日30億的數據存儲,其中10億為實時的數據導入,20億為離線導入。目前集群的總存儲1000多億80~400維度的數據。
特性如下:
1.滿足大數據查詢需求:adhoc每天的數據量為30億條,隨着日積月累,數據會越來越大,mdrill采用列存儲,索引,分布式技術,適當的分區等滿足用戶對數據的實時在線分析的需求。
2.支持增量更新:離線形式的mdrill數據支持按照分區方式的增量更新。
3.支持實時數據導入:在僅有10台機器的情況下,支持每天10億級別(高峰每小時2億)的實時導入。
4.響應時間快:列存儲、倒排索引、高效的數據壓縮、內存計算,各種緩存、分區、分布式處理等等這些技術,使得mdrill可以僅在幾秒到幾十秒的時間分析百億級別的數據。
5.低成本:目前在阿里adhoc僅僅使用10台48G內存的PC機,但確存儲了超過千億規模的數據。
6.全文檢索模式:強大的條件設置,任意組合,無論難易秒級預覽,每天160億的數據隨意篩選。
Github地址:https://github.com/alibaba/mdrill
44.淘寶定制JVM TaobaoJVM
淘寶有幾萬台Java應用服務器,上千名Java工程師、及上百個Java應用。為此,核心系統研發部專用計算組的工作之一是專注於OpenJDK的優化及定制,根據業務、應用特點及開發者需要,提供穩定,高效和深度定制的JVM版本:Taobao JVM。
TaobaoJVM 基於 OpenJDK HotSpot VM,是國內第一個優化、定制且開源的服務器版Java虛擬機。目前已經在淘寶、天貓上線,全部替換了Oracle官方JVM版本,在性能,功能上都初步體現了它的價值。
開放是淘寶的重要基因之一,在服務於淘寶的同時,我們非常願意將我們的工作成果分享給所有Java技術的應用方,希望共同交流,學習,進步,持續為JVM發展和社區的繁榮做出貢獻。
專用計算組職責:
-
針對特定領域問題,以計算性能、效能為導向的優化。
-
異構計算推廣及實踐。
-
JVM優化、定制及相關工具開發。JVM相關故障,問題排查及解決。
-
協助優化特定應用。
45.Java 圖片處理類庫 SimpleImage-圖片水印、縮略圖
SimpleImage是阿里巴巴的一個Java圖片處理的類庫,可以實現圖片縮略、水印等處理。
SimpleImage中的ImageRender是圖片處理的基類,它是一個抽象類,我們看到,該類中定義了一個抽象方法render(),同時持有一個對ImageRender類的引用。
ReadRedner可以理解成一個組件,不是一個裝飾者,因為ReadRender是所有渲染操作的第一步。
其他的子類DrawTextRender(水印處理),ScaleRender(縮略處理),WriterRender(輸出)都是裝飾者。
Github地址:https://github.com/alibaba/simpleimage
46.php圖片裁剪 Tclip 終於有美女可看了放松一下
名字說明:
T,頭像之意。
clip,讀[klip],譯為裁剪。
Tclip,是一個頭像自動識別,php圖片裁剪項目。
概要:
用於圖片裁剪。有以下特點:
1.能進行人臉識別。圖片中有人臉,將自動視為人臉區域為重要區域,將不會被裁剪掉。
2.自動識別其它重要區域。如果圖片中未識別出人臉,則會根據特征分布計算出重區域。
總而言之,自動識別圖片中的重要區域,並且在圖片裁剪時保留重要區域。
可以在php圖片裁剪中使用,也提供了命令行方式進行圖片裁剪。
目前已經用於一淘玩客 http://wanke.etao.com 進行php圖片裁剪。
效果演示:
原圖:
如果按照從中間截取為 400 * 225 大小大圖片。效果如下:
使用tclip裁剪圖片效果如下:
原圖:
如果按照從中間截取,效果如下:
在php中使用裁剪圖片效果如下:
php圖片裁剪在線演示 http://demo.bo56.com/tclip
安裝步驟:
源碼下載
opencv2 下載地址 http://www.bo56.com/tclip人臉識別圖片裁剪/ (建議opencv2.4.4版本)
安裝opencv2
此擴展依賴於opencv2.0 之上版本。因此安裝前先安裝opencv。opencv的安裝步驟如下
-
yum install gtk+ gtk+-devel pkgconfig libpng zlib libjpeg libtiff cmake
-
下載 opencv2 安裝包
-
解壓安裝包
-
cd 進入安裝包文件夾內。
-
cmake CMakeLists.txt
-
make && make install
-
vim /etc/profile
-
在 unset i 前增加
-
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
-
保持退出后,執行如下命令
-
source /etc/profile
-
echo "/usr/local/lib/" > /etc/ld.so.conf.d/opencv.conf
-
ldconfig
安裝php圖片裁剪tclip擴展
-
cd 到源代碼目錄中的php_ext文件夾
-
phpize
-
./configure
-
make
-
cp modules/tclip.so 到 extension 目錄
-
修改php.ini。加入 extension=tclip.so
-
重啟fpm
安裝命令行
如果想使用命令行方式,可以進行如下安裝
-
cd 進入安裝包soft文件夾內
-
chmod +x ./tclip.sh
-
./tclip.sh
使用方法說明
第一種:在php中圖片裁剪使用格式:
tclip(文件原路徑,裁剪后的圖片保存路徑,裁剪后的圖片寬度,裁剪后的圖片高度)
示例:
$source_file = "/tmp/a.jpg";
$dest_file = "/www/a_dest.jpg";
$width = 400;
$height = 200;
tclip($source_file, $dest_file, $width, $height);
第二種:命令行
參數說明:
-s 原圖路徑
-d 裁剪后的圖片保存路徑
-w 裁剪后的圖片寬度
-h 裁剪后的圖片高度
./tclip -s a.jpg -d a_dest.jpg -w 400 -h 200
Github地址:https://github.com/exinnet/tclip
47.自動化測試任務調度平台 TOAST
TOAST(Toast Open Automation System for Test) 是一淘廣告技術測試團隊開發的一套自動化測試任務調度平台。

軟件版本:v1.0 beta
支持系統:32/64位 Linux
Agent支持系統:32/64位 Win/Linux
自動化任務調度
TOAST提供一套通用的自動化任務調度平台,支持任務的串/並行運行,並且能夠收集、分析和統計運行結果。
自動化測試用例管理
TOAST提供了簡單的測試用例管理,通過自動化任務運行結果映射,實現測試用例和用例運行結果的關聯。同時也可以通過API實現用例和結果的錄入。
測試環境管理
TOAST提供了簡單的機器監控和管理功能,通過TOAST Agent能夠監控機器的CPU、內存、I/O、網絡及應用的實時狀態,兼容Window和Linux操作系統。
48.redis的java客戶端 Tedis
Tedis是另一個redis的java客戶端,Tedis的目標是打造一個可在生產環境直接使用的高可用Redis解決方案。
特性:
-
高可用,Tedis使用多寫隨機讀做HA確保redis的高可用
-
高性能,使用特殊的線程模型,使redis的性能不限制在客戶端
-
多種使用方式,如果你只有一個redis實例,並不需要tedis的HA功能,可以直接使用tedis-atomic;使用tedis的高可用功能需要部署多個redis實例使用tedis-group
-
兩種API,包括針對byte的底層api和面向object的高層api
-
多種方便使用redis的工具集合,包括mysql數據同步到redis工具,利用redis做搜索工具等
示例代碼:
- Group tedisGroup = new TedisGroup(appName, version);
- tedisGroup.init();
- ValueCommands valueCommands = new DefaultValueCommands(tedisGroup.getTedis());
- // 寫入一條數據
- valueCommands.set(1, "test", "test value object");
- // 讀取一條數據
- valueCommands.get(1, "test");
Github地址: https://github.com/justified/tedis
49.分布式關系數據庫 Alibaba Wasp
Wasp 是類Google MegaStore & F1的分布式關系數據庫。
最近幾年隨之Bigtable和NoSQL的興起,社區產品HBase逐步走向NoSQL系統的主流產品,優勢明顯然而缺點也明顯,大數據平台下的業務由 SQL向NoSQL的遷移比較復雜而應用人員學習成本頗高,並且無法支持事務和多維索引,使得許多業務無法享用來自NoSQL系統中線性拓展能力。 Google內部MegaStore就作為Bigtable的一個補充而出現,在Bigtable的上層支持了SQL,事務、索引、跨機房災備,並成為大 名鼎鼎的Gmail、APPEngine、Android Market的底層存儲。近期Google在MegaStore的基礎上升級了F1的系統,因此我們決定以MegaStore&F1為理論模型進 行探索如何在HBase系統上不犧牲線性拓展能力的同時又能提供跨行事務、索引、SQL的功能。通過簡單的用戶入口SQL,用戶可以不需要關注hbase 的schema設計,極大的簡化了用戶的數據遷移和學習成本。理論設計詳情見MegaStore及F1。
Wasp是分布式的、支持SQL的、事務型數據庫:
-
支持索引類型:本地索引、全局索引
-
支持分區(分區可再分區、合並、移動部署),可線性拓展
-
支持數據類型:int64、int32、string、double、float、datetime
-
SQL語法特性:select、update、delete、insert、create table、delete table、create index、drop index等
-
支持跨行事務,支持NoSQl之上的索引與實體的ACID
-
支持MVCC
-
JDBC訪問接口
-
易用的監控:Ganglia - metrics
未來的規划
-
SQL分析性統計型函數
-
資源隔離
-
權限
Github地址:https://github.com/alibaba/wasp
50.dubbo 的 spring boot 自動配置 spring-boot-starter-dubbo
spring-boot-starter-dubbo是 dubbo 的 spring boot starter,它可以無縫地對接 spring boot和dubbo ,方便大家使用 dubbo 組件。
spring-boot-starter-dubbo 支持的 jdk 版本為 1.6 或者 1.6+。
spring-boot-starter-dubbo 很簡單,也很方便使用,它同時集成了dubbo 的 provider 和 consumer 的功能。
-
當在 provider 端使用 spring-boot-starter-dubbo 時,可以選擇不用 web 容器或者使用 web 容器;當不用 web 容器時,它作為 dubbo 的 provider 會提供簡單的 RPC 服務;而當使用 web 容器時,它在提供 RPC 服務的同時,還會提供服務的上下線功能。
-
當在 consumer 端使用 spring-boot-starter-dubbo 時,需要使用 web 容器,它會提供 health監控,但是不會提供服務的上下線功能了。
Github地址:https://github.com/xionghuiCoder/spring-boot-starter-dubbo

