阿里巴巴開源產品列表

轉載地址:http://blog.csdn.net/unix21/article/details/50710091

代碼:https://github.com/alibaba


taobao-kernel

http://kernel.taobao.org/

https://github.com/alibaba/taobao-kernel

淘寶內核是淘寶內核開發團隊基於RHEL6官方內核自己定製的內核,他與RHEL6系列內核的主要區別包括:
1. 修改了一些編譯腳本和錯誤,使得這個內核可以在RHEL5系列的系統中編譯和使用,從而能夠讓廣大用戶既能夠擁有RHEL5系列的穩定,同時享受到2.6.32系列內核諸多新功能和優化,並省去了重新安裝操作系統的麻煩。
2. 修復了一些Redhat內核中的bug。在使用Redhat系列內核時,經常會遇到一些內核bug等,我們秉承公開的原則會及時向Redhat反饋(通過bugzilla的方式,詳細見【1】),但是Redhat代碼更新的過程很漫長,導致我們的問題無法及時得到解決,也沒有立即可用的版本,於是我們會把這些修復加入淘寶內核中(patches.taobao目錄下的部分patches),等Redhat合併了fix以後再從淘寶內核中摘除。
3. 增加了一些我們認爲對淘寶業務有很大收益的特性比如netoops,bigalloc等(patches.taobao目錄下的部分patches),這些特性如果等待Redhat去實現需要更長的時間,所以只能自己來做。

———————————

AliJVM

http://jvm.taobao.org/index.php?title=首頁

阿里有幾萬臺Java應用服務器,上千名Java工程師、及上百個Java應用。爲此,核心系統研發部專用計算組的工作之一是專注於OpenJDK的優化及定製,根據業務、應用特點及開發者需要,提供穩定,高效和深度定製的JVM版本:TaobaoJVM。
AliJVM基於OpenJDK HotSpot VM,是國內第一個優化、定製且開源的服務器版Java虛擬機。目前已經在淘寶、天貓上線,全部替換了Oracle官方JVM版本,在性能,功能上都初步體現了它的價值。

性能優化*Performance Tuning(針對淘寶x86平臺的專用優化)
定製*Customization(根據淘寶業務需求)
Bug修復*Bug fixing

基於OpenJDK深度定製的淘寶JVM(TaobaoVM)

其實從嚴格意義上來說,在提升Java虛擬機性能的同時,卻嚴重依賴物理CPU類型。也就是說,部署有TaobaoVM的服務器中,CPU全都是清一色的Intel CPU,且編譯手段採用的是Intel C/CPP Compiler進行編譯,以此對GC性能進行提升。除了優化編譯效果外,TaobaoVM還使用了crc32指令實現JVM intrinsic降低JNI的調用開銷

在提升Java虛擬機性能的同時,卻嚴重依賴物理CPU類型。也就是說,部署有TaobaoVM的服務器中,CPU全都是清一色的Intel CPU,且編譯手段採用的是Intel C/CPP Compiler進行編譯,以此對GC性能進行提升。除了優化編譯效果外,TaobaoVM還使用了crc32指令實現JVM intrinsic降低JNI的調用開銷

除了在性能優化方面下足了功夫,TaobaoVM還在HotSpot的基礎之上大幅度擴充了一些特定的增強實現。比如創新的GCIH(GC invisible heap)技術實現off-heap,這樣一來就可以將生命週期較長的Java對象從heap中移至heap之外,並且GC不能管理GCIH內部的Java對象,這樣做最大的好處就是降低了GC的回收平率以及提升了GC的回收效率,並且GCIH中的對象還能夠在多個Java虛擬機進程中實現共享。其他擴充技術還有利用PMU hardware的Java profiling tool和診斷協助功能等。

———————————

TProfiler

TProfiler是一個可以在生產環境長期使用的性能分析工具

https://github.com/alibaba/TProfiler

TProfiler是一個可以在生產環境長期使用的性能分析工具.它同時支持剖析和採樣兩種方式,記錄方法執行的時間和次數,生成方法熱點 對象創建熱點 線程狀態分析等數據,爲查找系統性能瓶頸提供數據支持.

TProfiler在JVM啓動時把時間採集程序注入到字節碼中,整個過程無需修改應用源碼.運行時會把數據寫到日誌文件,一般情況下每小時輸出的日誌小於50M.

字節碼修改:



運行實現原理


-——————————–

Jstom

https://github.com/alibaba/jstorm

jstorm可以看作是storm的java增強版本,除了內核用純java實現外,還包括了thrift、Python、facet ui。從架構上看,其本質是一個基於zk的分佈式調度系統。


更多參考此文:Jstom簡介

————————————————

tengine

http://tengine.taobao.org/

Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。


————————————————

Dubbo

http://dubbo.io/   

DUBBO是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA服務化治理方案的核心框架,每天爲2,000+個服務提供3,000,000,000+次訪問量支持,並被廣泛應用於阿里巴巴集團的各成員站點。

用戶指南和使用背景

隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分佈式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。

阿里內部並沒有採用Zookeeper做爲註冊中心,而是使用自己實現的基於數據庫的註冊中心,即:Zookeeper註冊中心並沒有在阿里內部長時間運行的可靠性保障,此Zookeeper橋接實現只爲開源版本提供,其可靠性依賴於Zookeeper本身的可靠性。


Dubbo與Zookeeper、SpringMVC整合和使用(負載均衡、容錯)

Zookeeper作爲Dubbo服務的註冊中心,Dubbo原先基於數據庫的註冊中心,沒采用Zookeeper,Zookeeper一個分佈式的服務框架,是樹型的目錄服務的數據存儲,能做到集羣管理數據 ,這裏能很好的作爲Dubbo服務的註冊中心,Dubbo能與Zookeeper做到集羣部署,當提供者出現斷電等異常停機時,Zookeeper註冊中心能自動刪除提供者信息,當提供者重啓時,能自動恢復註冊數據,以及訂閱請求。

———————

Druid

http://www.oschina.net/p/druid/

Druid是一個JDBC組件,它包括三部分: 

DruidDriver 代理Driver,能夠提供基於Filter-Chain模式的插件體系。 
DruidDataSource 高效可管理的數據庫連接池。 
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層的擴展插件。 

在線文檔

—————————–

fastjson

http://www.oschina.net/p/fastjson

fastjson 是一個性能很好的 Java 語言實現的 JSON 解析器和生成器,來自阿里巴巴的工程師開發。


主要特點:
快速FAST (比其它任何基於Java的解析器和生成器更快,包括jackson)
強大(支持普通JDK類包括任意java Bean Class、Collection、Map、Date或enum)
零依賴(沒有依賴其它任何類庫除了JDK)

——————————

FastDFS

http://bbs.chinaunix.net/forum-240-1.html

FastDFS是一個開源的分佈式文件系統,對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。
FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用。
存儲節點存儲文件,完成文件管理的所有功能:存儲、同步和提供存取接口,FastDFS同時對文件的meta data進行管理。

http://www.oschina.net/p/fastdfs

https://sourceforge.net/projects/fastdfs/


———————–

TFS

https://github.com/alibaba/tfs

TFS是淘寶針對海量非結構化數據存儲設計的分佈式系統,構築在普通的Linux機器集羣上,可爲外部提供高可靠和高併發的存儲訪問。高可擴展、高可用、高性能、面向互聯網服務。

http://tfs.taobao.org/  


TFS爲淘寶提供海量小文件存儲,通常文件大小不超過1M,滿足了淘寶對小文件存儲的需求,被廣泛地應用在淘寶各項應用中。它採用了HA架構和平滑擴容,保證了整個文件系統的可用性和擴展性。同時扁平化的數據組織結構,可將文件名映射到文件的物理地址,簡化了文件的訪問流程,一定程度上爲TFS提供了良好的讀寫性能。
TFS的總體結構
一個TFS集羣由兩個!NameServer節點(一主一備)和多個!DataServer節點組成。這些服務程序都是作爲一個用戶級的程序運行在普通linux機器上的。
在TFS中,將大量的小文件(實際數據文件)合併成爲一個大文件,這個大文件稱爲塊(Block), 每個Block擁有在集羣內唯一的編號(Block Id), Block Id在!NameServer在創建Block的時候分配, !NameServer維護block與!DataServer的關係。Block中的實際數據都存儲在!DataServer上。而一臺!DataServer服務器一般會有多個獨立!DataServer進程存在,每個進程負責管理一個掛載點,這個掛載點一般是一個獨立磁盤上的文件目錄,以降低單個磁盤損壞帶來的影響。

————————

canal和outer

canal

canal 是阿里巴巴MySQL數據庫binlog的增量訂閱&消費組件。
定位: 基於數據庫增量日誌解析,提供增量數據訂閱&消費,目前主要支持了mysql

原理相對比較簡單:
canal模擬mysql slave的交互協議,僞裝自己爲mysql slave,向mysql master發送dump協議
mysql master收到dump請求,開始推送binary log給slave(也就是canal)
canal解析binary log對象(原始爲byte流)


——–

otter 基於Canal開源產品,獲取數據庫增量日誌數據。準實時同步到本機房或異地機房的mysql/oracle數據庫. 一個分佈式數據庫同步系統。


分佈式數據庫同步系統otter(解決中美異地機房)

杭州和美國異地機房的需求,同時爲了提升用戶體驗,整個機房的架構爲雙A,兩邊均可寫,由此誕生了otter這樣一個產品。

1.  異構庫同步
   a.  mysql ->  mysql/oracle.  (目前開源版本只支持mysql增量,目標庫可以是mysql或者oracle,取決於canal的功能)
2.  單機房同步 (數據庫之間RTT < 1ms)
   a. 數據庫版本升級 b. 數據表遷移 c. 異步二級索引
3.  跨機房同步 (比如阿里巴巴國際站就是杭州和美國機房的數據庫同不,RTT > 200ms,亮點)
4.  雙向同步
    a.  避免迴環算法  (通用的解決方案,支持大部分關係型數據庫) b.  數據一致性算法   (保證雙A機房模式下,數據保證最終一致性,亮點)
5.  文件同步
    a.  站點鏡像  (進行數據複製的同時,複製關聯的圖片,比如複製產品數據,同時複製產品圖片).

——————-

DataX

https://github.com/alibaba/DataX

DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具/平臺,實現包括 MySQL、Oracle、HDFS、Hive、OceanBase、Hbase、OTS、ODPS 等各種異構數據源之間高效的數據同步功能。DataX是一個在異構的數據庫/文件系統之間高速交換數據的工具,實現了在任意的數據處理系統(RDBMS/Hdfs/Local filesystem)之間的數據交換,由淘寶數據平臺部門完成。 


—————–

LVS

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。

http://www.linuxvirtualserver.org/   https://github.com/alibaba/LVS

—————

Tair

http://code.taobao.org/p/tair/src/

Tair是淘寶自主開發的一個分佈式key/value存儲系統。


tair 是淘寶自己開發的一個分佈式 key/value 存儲引擎. tair 分爲持久化和非持久化兩種使用方式. 非持久化的 tair 可以看成是一個分佈式緩存. 持久化的 tair 將數據存放於磁盤中. 爲了解決磁盤損壞導致數據丟失, tair 可以配置數據的備份數目, tair 自動將一份數據的不同備份放到不同的主機上, 當有主機發生異常, 無法正常提供服務的時候, 其於的備份會繼續提供服務.
tair 的總體結構
tair 作爲一個分佈式系統, 是由一箇中心控制節點和一系列的服務節點組成. 我們稱中心控制節點爲config server. 服務節點是data server. config server 負責管理所有的data server, 維護data server的狀態信息. data server 對外提供各種數據服務, 並以心跳的形式將自身狀況彙報給config server. config server是控制點, 而且是單點, 目前採用一主一備的形式來保證其可靠性. 所有的 data server 地位都是等價的.



tair 的分佈採用的是一致性哈希算法, 對於所有的key, 分到Q個桶中, 桶是負載均衡和數據遷移的基本單位. config server 根據一定的策略把每個桶指派到不同的data server上. 因爲數據按照key做hash算法, 所以可以認爲每個桶中的數據基本是平衡的. 保證了桶分佈的均衡性, 就保證了數據分佈的均衡性.

—————————————–

OceanBase

OceanBase是阿里巴巴集團研發的可擴展的關係數據庫,實現了數千億條記錄、數百TB數據上的跨行跨表事務。

http://code.taobao.org/p/OceanBase/wiki/index/

OceanBase的目標是支持數百TB的數據量以及數十萬TPS、數百萬QPS的訪問量。無論是數據量還是訪問量,即使採用非常昂貴的小型機甚至是大型機,單臺關係數據庫系統都無法承受。而經過對在線業務數據的分析,我們發現雖然其數據量十分龐大,例如幾十億條、上百億條甚至更多記錄,但最近一段時間(例如一天)的修改量往往並不多,通常不超過幾千萬條到幾億條,因此,OceanBase決定採用單獨的更新服務器來記錄最近一段時間的修改增量,而以前的數據保持不變。每次查詢都需要把基準數據和增量數據融合後返回給客戶端。
OceanBase將寫事務集中在獨立的更新服務器上,可以避免複雜的分佈式事務,高效地實現跨行跨表事務。更新服務器上的修改增量通過定期合併操作融合多臺基準數據服務器中,從而避免其成爲瓶頸,實現了良好的擴展性。

揭祕阿里服務互聯網金融的關係數據庫——OceanBase


OceanBase則是“多活”設計,即多個庫(3個,5個等)每個都可以有部分讀寫流量,升級時先把要升級的庫的讀寫流量切走,升級後先進行數據對比,正常後逐步引入讀寫流量(白名單,1%,5%,10%……),一切正常並運行一段時間後再升級其他的庫。

———————-

RocketMQ

https://github.com/alibaba/RocketMQ

阿里RocketMQ Quick Start

RocketMQ單機支持1萬以上的持久化隊列,前提是足夠的內存、硬盤空間,過期數據數據刪除(RocketMQ中的消息隊列長度不是無限的,只是足夠大的內存+數據定時刪除)


RocketMQ與Kafka對比(18項差異)【深度比較非常好】

Kafka無限消息堆積,高效的持久化速度吸引了我們,但是同時發現這個消息系統主要定位於日誌傳輸,對於使用在淘寶交易、訂單、充值等場景下還有諸多特性不滿足,爲此我們重新用Java語言編寫了RocketMQ,定位於非日誌的可靠消息傳輸(日誌場景也OK),目前RocketMQ在阿里集團被廣泛應用在訂單,交易,充值,流計算,消息推送,日誌流式處理,binglog分發等場景。

數據可靠性,性能對比,單機支持的隊列數,消息投遞實時性,消費失敗重試,消息順序,定時消息,分佈式事務消息,消息查詢,消息回溯,消費並行度,消息軌跡,開發語言友好性,Broker端消息過濾,消息堆積能力


RocketMQ支持異步實時刷盤,同步刷盤,同步複製,異步複製
Kafka使用異步刷盤方式,異步複製/同步複製


Kafka單機寫入TPS約在百萬條/秒,消息大小10個字節
RocketMQ單機寫入TPS單實例約7萬條/秒,單機部署3個Broker,可以跑到最高12萬條/秒,消息大小10個字節。


Kafka單機超過64個隊列/分區,Load會發生明顯的飆高現象,隊列越多,load越高,發送消息響應時間變長。Kafka分區數無法過多的問題
RocketMQ單機支持最高5萬個隊列,Load不會發生明顯變化


Kafka使用短輪詢方式,實時性取決於輪詢間隔時間,0.8以後版本支持長輪詢。
RocketMQ使用長輪詢,同Push方式實時性一致,消息的投遞延時通常在幾個毫秒。


Kafka消費失敗不支持重試。
RocketMQ消費失敗支持定時重試,每次重試間隔時間順延
例如充值類應用,當前時刻調用運營商網關,充值失敗,可能是對方壓力過多,稍後再調用就會成功,如支付寶到銀行扣款也是類似需求。
這裏的重試需要可靠的重試,即失敗重試的消息不因爲Consumer宕機導致丟失。


消息查詢對於定位消息丟失問題非常有幫助,例如某個訂單處理失敗,是消息沒收到還是收到處理出錯了。對於定位消息丟失問題非常有幫助,例如某個訂單處理失敗,是消息沒收到還是收到處理出錯了。


消息回溯最典型業務場景如consumer做訂單分析,但是由於程序邏輯或者依賴的系統發生故障等原因,導致今天消費的消息全部無效,需要重新從昨天零點開始消費,那麼以時間爲起點的消息重放功能對於業務非常有幫助。

———————–

Tsar

tsar是淘寶自己開發的一個採集工具,主要用來收集服務器的系統信息(如cpu,io,mem,tcp等),以及應用數據(如squid haproxy nginx等)。
收集到的數據存儲在磁盤上,可以隨時查詢歷史信息,輸出方式靈活多樣,另外支持將數據存儲到mysql中,也可以將數據發送到nagios報警服務器。

http://code.taobao.org/p/tsar/wiki/index/

https://github.com/alibaba/tsar

淘寶開發的系統監控工具 Tsar 開源

———————–

TDDL

淘寶分佈式數據層

https://github.com/alibaba/tb_tddl

http://www.oschina.net/p/tddl

數據到了百億級別的時候,任何一個庫都無法存放了,於是分成2個、4個、8個、16個、32個……直到1024個、2048個。
這時候,數據查詢的中間件對上層來說,必須像查詢一個數據庫一樣來查詢數據,還要像查詢一個數據庫一樣快(每條查詢在幾毫秒內完成),TDDL就承擔了這樣一 個工作。在外面有些系統也用DAL(數據訪問層) 這個概念來命名這個中間件。


剖析淘寶TDDL(TAOBAO DISTRIBUTE DATA LAYER)

TDDL 必須要依賴 diamond 配置中心( diamond 是淘寶內部使用的一個管理持久配置的系統,目前淘寶內部絕大多數系統的配置)。

———————–

Diamond

淘寶分佈式配置管理服務Diamond  原文地址:http://codemacro.com/2014/10/12/diamond/

zookeeper的一種應用就是分佈式配置管理(基於ZooKeeper的配置信息存儲方案的設計與實現)。百度也有類似的實現:disconf。
Diamond則是淘寶開源的一種分佈式配置管理服務的實現。Diamond本質上是一個Java寫的Web應用,其對外提供接口都是基於HTTP協議的,在閱讀代碼時可以從實現各個接口的controller入手。


Diamond中的數據是簡單的key-value結構。應用方訂閱數據則是基於key來訂閱,未訂閱的數據當然不會被推送。數據從類型上又劃分爲聚合和非聚合。因爲數據推送者可能很多,在整個分佈式環境中,可能有多個推送者在推送相同key的數據,這些數據如果是聚合的,那麼所有這些推送者推送的數據會被合併在一起;反之如果是非聚合的,則會出現覆蓋。


數據的來源可能是人工通過管理端錄入,也可能是其他服務通過配置管理服務的推送接口自動錄入。
Diamond服務是一個集羣,是一個去除了單點的協作集羣。


Diamond服務集羣每一個實例都可以對外完整地提供服務,那麼意味着每個實例上都有整個集羣維護的數據。
雖然Diamond去除了單點問題,不過問題都下降到了mysql上。但由於其作爲配置管理的定位,其數據量就mysql的應用而言算小的了,所以可以一定程度上保證整個服務的可用性。


由於Diamond服務器沒有master,任何一個實例都可以讀寫數據,那麼針對同一個key的數據則可能面臨衝突。這裏應該是通過mysql來保證數據的一致性。每一次客戶端請求寫數據時,Diamond都將寫請求投遞給mysql,然後通知集羣內所有Diamond實例(包括自己)從mysql拉取數據。當然,拉取數據則可能不是每一次寫入都能拉出來,也就是最終一致性。


Diamond中沒有把數據放入內存,但會放到本地文件。對於客戶端的讀操作而言,則是直接返回本地文件裏的數據。

———————-

Cobar

基於MySQL的分佈式數據庫服務中間件

https://github.com/alibaba/cobar

Cobar是提供關係型數據庫(MySQL)分佈式服務的中間件,它可以讓傳統的數據庫得到良好的線性擴展,並看上去還是一個數據庫,對應用保持透明。


產品在阿里巴巴穩定運行3年以上。
接管了3000+個MySQL數據庫的schema。
集羣日處理在線SQL請求50億次以上。
集羣日處理在線數據流量TB級別以上。

關係型數據的分佈式處理系統 Cobar

Cobar是關係型數據的分佈式處理系統,它可以在分佈式的環境下像傳統數據庫一樣爲您提供海量數據服務。以下是快速啓動場景:

系統對外提供的數據庫名是dbtest,並且其中有兩張表tb1和tb2。
tb1表的數據被映射到物理數據庫dbtest1的tb1上。
tb2表的一部分數據被映射到物理數據庫dbtest2的tb2上,另外一部分數據被映射到物理數據庫dbtest3的tb2上。

Cobar使用文檔(可用作MySQL大型集羣解決方案)

———————-

beatles

https://github.com/cenwenchu/beatles

小規模即時流數據分析集羣,分析規則抽象於SQL,計算規則採用MapReduce模式。

——————————–

綜合

淘寶開放平臺技術歷程

=========================

參考:http://www.oschina.net/project/alibaba

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章