轉自 http://blog.csdn.net/unix21/article/details/50710091 php
代碼:https://github.com/alibabahtml
taobao-kernel
java
http://kernel.taobao.org/python
https://github.com/alibaba/taobao-kernelmysql
淘寶內核是淘寶內核開發團隊基於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去實現須要更長的時間,因此只能本身來作。linux
---------------------------------ios
AliJVMnginx
http://jvm.taobao.org/index.php?title=首頁git
阿里有幾萬臺Java應用服務器,上千名Java工程師、及上百個Java應用。爲此,核心系統研發部專用計算組的工做之一是專一於OpenJDK的優化及定製,根據業務、應用特色及開發者須要,提供穩定,高效和深度定製的JVM版本:TaobaoJVM。
AliJVM基於OpenJDK HotSpot VM,是國內第一個優化、定製且開源的服務器版Java虛擬機。目前已經在淘寶、天貓上線,所有替換了Oracle官方JVM版本,在性能,功能上都初步體現了它的價值。github
性能優化*Performance Tuning(針對淘寶x86平臺的專用優化)
定製*Customization(根據淘寶業務需求)
Bug修復*Bug fixing
其實從嚴格意義上來講,在提高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
Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了不少高級功能和特性。
------------------------------------------------
Dubbo
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機器集羣上,可爲外部提供高可靠和高併發的存儲訪問。高可擴展、高可用、高性能、面向互聯網服務。
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數據庫. 一個分佈式數據庫同步系統。
杭州和美國異地機房的需求,同時爲了提高用戶體驗,整個機房的架構爲雙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則是「多活」設計,即多個庫(3個,5個等)每一個均可以有部分讀寫流量,升級時先把要升級的庫的讀寫流量切走,升級後先進行數據對比,正常後逐步引入讀寫流量(白名單,1%,5%,10%......),一切正常並運行一段時間後再升級其餘的庫。
----------------------
RocketMQ
https://github.com/alibaba/RocketMQ
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
-----------------------
TDDL
淘寶分佈式數據層
https://github.com/alibaba/tb_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是關係型數據的分佈式處理系統,它能夠在分佈式的環境下像傳統數據庫同樣爲您提供海量數據服務。如下是快速啓動場景:
系統對外提供的數據庫名是dbtest,而且其中有兩張表tb1和tb2。
tb1表的數據被映射到物理數據庫dbtest1的tb1上。
tb2表的一部分數據被映射到物理數據庫dbtest2的tb2上,另一部分數據被映射到物理數據庫dbtest3的tb2上。
----------------------
beatles
https://github.com/cenwenchu/beatles
小規模即時流數據分析集羣,分析規則抽象於SQL,計算規則採用MapReduce模式。
--------------------------------
綜合
=========================