阿里巴巴的Github代碼託管地址:https://github.com/alibabajavascript
經過寫這篇文章從開源中國站上面看了不少,也從那裏將開源軟件的基本的介紹和下載地址拷貝到了文章當中,整體給個人一個感覺就是阿里的開源實在太強大了,多到須要花大量的時間去了解。今天寫這篇文章主要是對阿里開源的項目比較陌生,經過本文也有了一個大致的認知。每一個人天天有24小時,可是大部分時間咱們並不能集中精力學習作事,而時間對於咱們而言都是很寶貴的,緣由就是人的精力是有限的,不能像機器同樣學習和頻繁地機械運動。惰性乃人之常情,若是不寫此文我想我明天可能就會忘記阿里的這一堆東東,讓他們掉入頭腦的「黑洞」,爲拯救記憶和再也不留下遺憾,本文仍是很必要寫的。經過梳理,也大體看到了阿里發展過程當中技術更新的軌跡。阿里不少的中間件和開源方案也是值得借鑑的,因此在不少時候咱們不只要低下頭來作事,還要時不時地看看天空。php
如下文章從開源中國彙總而來:http://www.oschina.net/project/alibabacss
Druid是一個JDBC組件,它包括三部分:(1) DruidDriver 代理Driver,可以提供基於Filter-Chain模式的插件體系;(2)DruidDataSource 高效可管理的數據庫鏈接池;(3)SQLParser ;html
Druid能夠作什麼?前端
1) 能夠監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,可以詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。 java
2) 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫鏈接池。 node
3) 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是很差的行爲,容易致使安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。 python
4) SQL執行日誌,Druid提供了不一樣的LogFilter,可以支持Common-Logging、Log4j和JdkLog,你能夠按須要選擇相應的LogFilter,監控你應用的數據庫訪問狀況。 mysql
擴展JDBC,若是你要對JDBC層有編程的需求,能夠經過Druid提供的Filter-Chain機制,很方便編寫JDBC層的擴展插件。react
以下是一個基於Druid內置擴展StatFilter的監控實現:
Git地址:http://git.oschina.net/wenshao/druid
FastDFS是一個開源的分佈式文件系統,她對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。
Github地址:https://github.com/happyfish100/fastdfs
Rax 是阿里開源的一個通用的 JavaScript 庫,主要有 React 兼容的 API 。 使用 React 的就應該已經知道如何使用 Rax。
特性:快速:快速的虛擬 DOM;微型:min + gzip 以後僅 8.0kb;通用:跨瀏覽器、Weex 和 Node.js。
Github地址:https://github.com/alibaba/rax
fastjson 是一個性能很好的 Java 語言實現的 JSON 解析器和生成器,來自阿里巴巴的工程師開發。
主要特色:快速FAST (比其它任何基於Java的解析器和生成器更快,包括jackson);強大(支持普通JDK類包括任意Java Bean Class、Collection、Map、Date或enum);零依賴(沒有依賴其它任何類庫除了JDK)。
Git地址:https://git.oschina.net/wenshao/fastjson
七天學會NodeJS是阿里巴巴國際站前端技術部編寫的開源文檔,用於學習 Node.js。
Github地址:https://github.com/nqdeng/7-days-nodejs
Dubbo 是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可經過高性能的 RPC 實現服務的輸出和輸入功能,能夠和 sprig框架無縫集成。
主要核心部件:
Remoting: 網絡通訊框架,實現了 sync-over-async 和 request-response 消息機制.
RPC: 一個遠程過程調用的抽象,支持負載均衡、容災和集羣功能
Registry: 服務目錄框架用於服務的註冊和服務事件發佈和訂閱
Dubbo工做原理
Provider
暴露服務方稱之爲「服務提供者」。
Consumer
調用遠程服務方稱之爲「服務消費者」。
Registry
服務註冊與發現的中心目錄服務稱之爲「服務註冊中心」。
Monitor
統計服務的調用次調和調用時間的日誌服務稱之爲「服務監控中心」。
Github地址:https://github.com/alibaba/dubbo
AliSQL是基於MySQL官方版本的一個分支,由阿里雲數據庫團隊維護,目前也應用於阿里巴巴集團業務以及阿里雲數據庫服務。該版本在社區版的基礎上作了大量的性能與功能的優化改進。尤爲適合電商、雲計算以及金融等行業環境。
阿里雲數據庫資深專家丁奇介紹,AliSQL版本在強度和廣度上都經歷了極大的考驗。最新的AliSQL版本不只從其餘開源分支好比:Percona,MariaDB,WebScaleSQL等社區汲取精華,也沉澱了阿里巴巴多年在MySQL領域的經驗和解決方案。AliSQL增長更多監控指標,並針對電商秒殺、物聯網大數據壓縮、金融數據安全等場景提供個性化的解決方案。
「在通用基準測試場景下,AliSQL版本比MySQL官方版本有着70%的性能提高。在秒殺場景下,性能提高100倍。」丁奇表示。
阿里雲資深總監李津表示,「AliSQL的發展獲得了衆多智慧的支持。咱們但願將過去幾年沉澱的技術積累回饋到社區,幫助更多使用MySQL的我的和企業,這是社區良性發展的道路。咱們也歡迎更多的開發者和技術團隊加入AliSQL開源項目,使之在業內發揮更大的價值。」
和 Oracle 數據庫的性能比較:
Github地址:https://github.com/alibaba/AliSQL
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 技術體系
工程化管理和監控等
輕量:體積小巧,語法簡單,方便接入和上手
可擴展:業務方可去中心化橫向定製組件和功能模塊
高性能:高速加載、高速渲染、體驗流暢
【Apache RocketMQ】RocketMQ捐贈給Apache那些不爲人知的故事
Apache基金會宣佈接收阿里消息中間件RocketMQ爲孵化項目
RocketMQ 是一款分佈式、隊列模型的消息中間件,具備如下特色:
可以保證嚴格的消息順序
提供豐富的消息拉取模式
高效的訂閱者水平擴展能力
實時的消息訂閱機制
億級消息堆積能力
Metaq3.0 版本更名,產品名稱改成RocketMQ
Github地址:https://github.com/alibaba/RocketMQ
宙斯是一個完整的Hadoop的做業平臺。從Hadoop任務的調試運行到生產任務的週期調度 宙斯支持任務的整個生命週期。
從功能上來講,支持:
Github地址:https://github.com/alibaba/zeus
OceanBase是一個支持海量數據的高性能分佈式數據庫系統,實現了數千億條記錄、數百TB數據上的跨行跨表事務,由淘寶核心系統研發部、運維、DBA、廣告、應用研發等部門共同完成。在設計和實現OceanBase的時候暫時摒棄了不緊急的DBMS的功能,例如臨時表,視圖(view),研發團隊把有限的資源集中到關鍵點上,當前 OceanBase主要解決數據更新一致性、高性能的跨表讀事務、範圍查詢、join、數據全量及增量dump、批量數據導入。
目前OceanBase已經應用於淘寶收藏夾,用於存儲淘寶用戶收藏條目和具體的商品、店鋪信息,天天支持4~5千萬的更新操做。等待上線的應用還包括CTU、SNS等,天天更新超過20億,更新數據量超過2.5TB,並會逐步在淘寶內部推廣。
Tair是由淘寶網自主開發的Key/Value結構數據存儲系統,在淘寶網有着大規模的應用。您在登陸淘寶、查看商品詳情頁面或者在淘江湖和好友「搗漿糊」的時候,都在直接或間接地和Tair交互。
Tair是一個Key/Value結構數據的解決方案,它默認支持基於內存和文件的兩種存儲方式,分別和咱們一般所說的緩存和持久化存儲對應。
Tair除了普通Key/Value系統提供的功能,好比get、put、delete以及批量接口外,還有一些附加的實用功能,使得其有更廣的適用場景,包括:
Version支持>
原子計數器
Item支持
Tsar是淘寶的採集工具,主要用來收集服務器的系統信息(如cpu,io,mem,tcp等)以及應用數據(如squid haproxy nginx等),tsar支持實時查看和歷史查看,方便了解應用和服務器的信息!
它相似於sar,能監控和收集服務器和關鍵應用的信息,支持實時終端顯示和集中式數據庫存儲查詢,還能向Nagios發送報警信息。Tsar模塊化的設計利於經過開發新模塊來擴展新的功能,很是方便。
Github地址:https://github.com/alibaba/tsar
Sea.JS 是一個遵循 CommonJS 規範的模塊加載框架,可用來輕鬆愉悅地加載任意 JavaScript 模塊。
SeaJS 支持的標準模塊遵循 Modules/Wrappings 規範的 define 形式,可運行於 Web 瀏覽器以及 node.JS 等環境中。
Github地址:https://github.com/seajs/seajs
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
Metamorphosis (MetaQ) 是一個高性能、高可用、可擴展的分佈式消息中間件,相似於LinkedIn的Kafka,具備消息存儲順序寫、吞吐量大和支持本地和XA事務等特性,適用於大吞吐量、順序消息、廣播和日誌數據傳輸等場景,在淘寶和支付寶有着普遍的應用,現已開源。
整體結構:
內部結構:
主要特色:
生產者、服務器和消費者均可分佈
消息存儲順序寫
性能極高,吞吐量大
支持消息順序
支持本地和XA事務
客戶端pull,隨機讀,利用sendfile系統調用,zero-copy ,批量拉數據
支持消費端事務
支持消息廣播模式
支持異步發送消息
支持http協議
支持消息重試和recover
數據遷移、擴容對用戶透明
消費狀態保存在客戶端
支持同步和異步複製兩種HA
支持group commit
更多……
Github地址:https://github.com/alibaba/RocketMQ
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
官方網站: 連接
Macaca是一套完整的自動化測試解決方案。
特性:
支持移動端和PC端
支持Native, Hybrid, H5 等多種應用類型
提供客戶端工具和持續集成服務
客戶端:
客戶端工具的安裝、使用詳見 macaca-cli。
持續集成:
reliable 是分佈式持續集成服務,可與 macaca 無縫融合。
部署和使用詳見 reliable-slave,reliable-master。
Github地址:https://github.com/alibaba/macaca
Velocity.js 是velocity模板語法的javascript實現。Velocity 是基於Java的模板引擎,普遍應用在阿里集 體各個子公司。Velocity模板適用於大量模板使用的場景,支持複雜的邏輯運算,包含 基本數據類型、變量賦值和函數等功能。Velocity.js 支持 Node.js 和瀏覽器環境。
Features
支持客戶端和服務器端使用
語法是富邏輯的,構成門微型的語言
語法分析和模板渲染分離
基本徹底支持velocity語法
瀏覽器使用支持模板之間相互引用,依據kissy模塊加載機制
三個Helper,友好的數據模擬解決方案
Github地址:https://github.com/shepherdwind/velocity.js
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
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
Dexposed 是阿里巴巴無線事業部第一個重量級 Andorid 開源軟件,基於 ROOT 社區著名開源項目 Xposed 改造剝離了 ROOT 部分,演化爲服務於所在應用自身的 AOP 框架。它支撐了阿里大部分 App 的在線分鐘級客戶端 bugfix 和線上調試能力。
Dexposed 的 AOP 是實現了純非侵入式,沒有任何註釋處理器,weaver 或者字節碼重寫程序。Dexposed 的集成很是簡單,就像加載一個 JNI 庫同樣,只須要在初始化的時候插入一行代碼。
經典用例
典型的 AOP 編程
儀表化 (測試,性能監控等等)
在線熱修復(重要,關鍵,安全漏洞等等)
SDK hooking,更好的開發體驗
Github地址:https://github.com/alibaba/dexposed
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
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
Ant Design 是螞蟻金服開發和正在使用的一套企業級的前端設計語言和基於 React 的前端框架實現。
特性
企業級金融產品的交互語言和視覺體系。
豐富實用的 React UI 組件。
基於 React 的組件化開發模式。
背靠 npm 生態圈。
基於 webpack 的調試構建方案,支持 ES6。
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。
淘寶前端團隊開源項目React Web,經過與React Native一致的API構建Web應用。
Github:https://github.com/taobaofed/react-web
Reliable 是分佈式架構的持續集成系統,由Macaca 團隊的成員開發。適用於集成構建、集成構建等場景。她是典型的主從結構,分爲reliable-master 與 reliable-slave 兩部分。
特色:
集羣負載,合理調配
提供插件機制,易擴展
部署很是簡單
便於接入 Gitlab、Github 等社區化系統
同時,她與 Macaca 無縫融合。
使用 Macaca + Reliable 爲本身的團隊和公司搭建一個開源的自動化集成平臺是個不錯的選擇。
Github地址:https://github.com/reliablejs/reliable-master
apns4j 是 Apple Push Notification Service 的 Java 實現!
Github地址:https://github.com/teaey/apns4j
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
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
issy 是淘寶一個開源的 JavaScript 庫,包含的組件有:日曆、圖片放大鏡、卡片切換、彈出窗口、輸入建議等
願景:小巧靈活,簡潔實用,使用起來讓人感受愉悅。
支持的瀏覽器:IE 6+, Firefox 3.5+, Safari 4+, Chrome 2+, Opera 10+
Github地址:https://github.com/kissyteam/kissy
nginx因爲出色的性能,在世界範圍內受到了愈來愈多人的關注,在淘寶內部它更是被普遍的使用,衆多的開發以及運維同窗都迫切的想要了解nginx模塊的開發以及它的內部原理,可是國內卻沒有一本關於這方面的書,源於此咱們決定本身來寫一本。本書的做者爲淘寶核心系統服務器平臺組的成員,本書寫做的思路是從模塊開發逐漸過渡到nginx原理剖析。書籍的內容會按期在這裏更新,歡迎你們提出寶貴意見,無論是本書的內容問題,仍是字詞錯誤,都歡迎你們提交issue(章節標題的左側有評註按鈕),咱們會及時的跟進。
Github地址:https://github.com/taobao/nginx-book
淘寶根據本身的業務特色開發了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
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做爲數據節點,負責數據實際發生的負載均衡和數據冗餘,同時管理二級元數據幫助客戶端獲取真實的業務數據。
httpsender是一款輕量級的http壓力測試工具,由淘寶的測試工程師用Java語言開發完成。它能夠指定併發鏈接數發送指定數目的請求,還能夠自定義請求的header頭。請求的URL支持經過正則表達式指定範圍,同時也支持從文件隨機或順序讀取。它還具有驗證數據是否完整和錯亂等較高級的功能。默認應用環境爲Linux。
下載地址:
http://dl.dbank.com/c0vxx27aa5
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
taocode(淘蝌蚪)是淘寶網推出的開源平臺。平臺自己也是開源的。
TaoCode的定位:大的方面來講,是平臺+社區
1).平臺化
a) 完善項目管理過程工具平臺
b) 提供更多代碼級工具
c) 提供更多文檔化工具
2).社區化
a). 提供更好的交流平臺
b). 增長更多的持續性生態化平臺功能
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
由原來的項目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具備以下特性:
一、tbschedule的目的是讓一種批量任務或者不斷變化的任務,可以被動態的分配到多個主機的JVM中,不一樣的線程組中並行執行。全部的任務可以被不重複,不遺漏的快速處理。
二、調度的Manager能夠動態的隨意增長和中止。
三、能夠經過JMX控制調度服務的建立和中止。
四、能夠指定調度的時間區間。
Mock.js 是一款模擬數據生成器,旨在幫助前端攻城師獨立於後端進行開發,幫助編寫單元測試。提供瞭如下模擬功能:
根據數據模板生成模擬數據
模擬 Ajax 請求,生成並返回模擬數據
基於 HTML 模板生成模擬數據
Github地址:https://github.com/nuysoft/Mock
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
淘寶有幾萬臺Java應用服務器,上千名Java工程師、及上百個Java應用。爲此,核心系統研發部專用計算組的工做之一是專一於OpenJDK的優化及定製,根據業務、應用特色及開發者須要,提供穩定,高效和深度定製的JVM版本:Taobao JVM。
TaobaoJVM 基於 OpenJDK HotSpot VM,是國內第一個優化、定製且開源的服務器版Java虛擬機。目前已經在淘寶、天貓上線,所有替換了Oracle官方JVM版本,在性能,功能上都初步體現了它的價值。
開放是淘寶的重要基因之一,在服務於淘寶的同時,咱們很是願意將咱們的工做成果分享給全部Java技術的應用方,但願共同交流,學習,進步,持續爲JVM發展和社區的繁榮作出貢獻。
專用計算組職責:
針對特定領域問題,以計算性能、效能爲導向的優化。
異構計算推廣及實踐。
JVM優化、定製及相關工具開發。JVM相關故障,問題排查及解決。
協助優化特定應用。
SimpleImage是阿里巴巴的一個Java圖片處理的類庫,能夠實現圖片縮略、水印等處理。
SimpleImage中的ImageRender是圖片處理的基類,它是一個抽象類,咱們看到,該類中定義了一個抽象方法render(),同時持有一個對ImageRender類的引用。
ReadRedner能夠理解成一個組件,不是一個裝飾者,由於ReadRender是全部渲染操做的第一步。
其餘的子類DrawTextRender(水印處理),ScaleRender(縮略處理),WriterRender(輸出)都是裝飾者。
Github地址:https://github.com/alibaba/simpleimage
名字說明:
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
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操做系統。
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作搜索工具等
示例代碼:
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的、事務型數據庫:
支持索引類型:本地索引、全局索引
支持分區(分區可再分區、合併、移動部署),可線性拓展
支持數據類型:int6四、int3二、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
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