課程簡(jiǎn)介
本序列課程主要和大家一起探討在隨需應(yīng)變,快速響應(yīng)的互聯(lián)網(wǎng)大背景下,面對(duì)用戶多分布廣泛、高并發(fā)大流量、安全環(huán)境惡劣易受網(wǎng)絡(luò)攻擊等特殊環(huán)境下,如何在使用廉價(jià)服務(wù)器的情況下,構(gòu)建出一個(gè)即可滿足業(yè)務(wù)的高性能需求,又能達(dá)到5個(gè)9、6個(gè)9的高可用性,還能解決快速迭代需求,穩(wěn)定高效的互聯(lián)網(wǎng)系統(tǒng)中臺(tái)架構(gòu)及其設(shè)計(jì)實(shí)踐方案。
本課程由技術(shù)棧的選型開始引入主題,結(jié)合相應(yīng)的業(yè)務(wù),并且考慮相關(guān)配合團(tuán)隊(duì)的水平、人員組成情況等序列因素,主要從選型比較、解決重點(diǎn)/難點(diǎn)問(wèn)題、實(shí)現(xiàn)策略、實(shí)施方案的優(yōu)勢(shì)優(yōu)點(diǎn)、成本對(duì)比、實(shí)施過(guò)程的經(jīng)驗(yàn)教訓(xùn)、實(shí)施案例及其感想、后期的改進(jìn)與維護(hù)升級(jí)等具體的方面進(jìn)行一個(gè)完整的陳述,重點(diǎn)講述組件之間在分布式的情況下,如何通過(guò)各司其職的配合,從而實(shí)現(xiàn)高性能,高可用,高伸縮。
具體技術(shù)方面,本課程主要以自我實(shí)現(xiàn)中臺(tái)為主,使用開源為輔的策略,包括但不局限于:java的IOC、ORM,Restful等框架、JOB調(diào)度系統(tǒng)、ID生成器、HTTP服務(wù)器、DFS分布式文件系統(tǒng)、緩存與存儲(chǔ)系統(tǒng)、分布式協(xié)調(diào)器、配置服務(wù)、通訊協(xié)議、日志監(jiān)控等。
最后我們將討論這些系統(tǒng)是如何與業(yè)務(wù)有機(jī)的結(jié)合案例與當(dāng)時(shí)如此實(shí)施的指導(dǎo)思想,并且大家一起探討實(shí)施過(guò)程中如何通過(guò)項(xiàng)目實(shí)現(xiàn)“快速響應(yīng)”的控制,從而達(dá)到另外一種層面(對(duì)于項(xiàng)目及源碼的控制層面)的高可用性,這一點(diǎn)往往是被嚴(yán)重忽略的。
目標(biāo)收益
1. 掌握如何從頭到尾設(shè)計(jì)一個(gè)穩(wěn)定、快速、能滿足業(yè)務(wù)需要的系統(tǒng)架構(gòu)方案
2. 掌握如何從無(wú)到有的實(shí)現(xiàn)一個(gè)看似不可能自己實(shí)現(xiàn)的中臺(tái)組件
3. 掌握如何有機(jī)的選擇與使用開源或者自主開發(fā)的中臺(tái)組件,將其有機(jī)的整合在一起,從而讓業(yè)務(wù)在分布式的情況下達(dá)到高性能,高可用,高伸縮.
4. 掌握如何控制系統(tǒng)邊界、如何控制因需求追加而導(dǎo)致的軟件復(fù)雜度,如何更好的讓各組件各司其職.
5. 掌握如果控制整個(gè)龐大的系統(tǒng)的一切,包括:團(tuán)隊(duì)、“開發(fā)人員”、“需求人員”等等
6. 了解一般常用開源軟件的優(yōu)缺點(diǎn),面對(duì)業(yè)務(wù)如何舍取,以及如何二次開發(fā)或者新開發(fā)一個(gè)替換它。
7. 了解linux下高性能中臺(tái)組件的開發(fā)方法。
培訓(xùn)對(duì)象
CTO、高級(jí)工程師、架構(gòu)師、中間件開發(fā)人員
對(duì)系統(tǒng)架構(gòu)感興趣的開發(fā)人員
課程大綱
Albianj技術(shù)棧 數(shù)據(jù)聚合與日志統(tǒng)計(jì) |
選型比較:1. spring 2. mycat 3. sharing jdbc 4. 各種公司(51)之類的開發(fā)的技術(shù)棧 突出解決的問(wèn)題:大部分的phper轉(zhuǎn)java 業(yè)務(wù)更改頻繁且時(shí)間要求高 要求down機(jī)時(shí)間短,有指標(biāo) 指導(dǎo)思想:控制項(xiàng)目,控制時(shí)間,控制復(fù)雜度。最關(guān)鍵是控制人 高性能高可用擴(kuò)展海量數(shù)據(jù): 1. 自帶分布式事務(wù)解決方案 2. Bundle機(jī)制解決分離同進(jìn)程不同業(yè)務(wù) 3. 無(wú)限平行擴(kuò)展,擴(kuò)容自主化 4. 自帶分庫(kù)分表(數(shù)據(jù)路由)解決海量數(shù)據(jù)問(wèn)題 5. 自帶加密組件,解決安全問(wèn)題 6. 自帶漏斗,令牌環(huán)等算法解決防刷,重復(fù)提交等問(wèn)題 7. 自帶數(shù)據(jù)庫(kù)調(diào)優(yōu)模板,解決批量數(shù)據(jù)提交問(wèn)題 |
scher系統(tǒng) |
選型比較:quartz corn4j 突出解決的問(wèn)題:job調(diào)度 job之間不能相互影響,并且可以方便的kill有問(wèn)題的job v1版本的quartz為啥有問(wèn)題 指導(dǎo)思想:開發(fā)人員最簡(jiǎn)單,易使用 復(fù)雜配置全部scher自帶 進(jìn)程單位分開,互不干涉 高性能高可用擴(kuò)展海量數(shù)據(jù):1. 分布式模式解決了job的高擴(kuò)展與高性能 2. arbiter解決了job的高可用問(wèn)題 3. 自研分配算法解決了job的負(fù)載均衡問(wèn)題 4. chunk機(jī)制解決了job的數(shù)量與業(yè)務(wù)交叉問(wèn)題 |
精衛(wèi)系統(tǒng) |
選型比較:當(dāng)時(shí)沒(méi)有參照,從scher引申而來(lái) 突出解決的問(wèn)題:無(wú)法與scher在一起,容易造成相互影響 job需要和scher兼容 指導(dǎo)思想:讓他單身吧,不要被scher影響 高性能高可用獲取海量資源: 1. 分布式模式解決了job的高擴(kuò)展與高性能 2. arbiter解決了job的高可用問(wèn)題 3. 自研分配算法解決了job的負(fù)載均衡問(wèn)題 4. chunk機(jī)制解決了job的數(shù)量與業(yè)務(wù)交叉問(wèn)題 |
配置服務(wù) |
選型比較:zookeeper 突出解決的問(wèn)題:配置文件上線麻煩 秒更或者短時(shí)間(3s)之內(nèi) 指導(dǎo)思想:防止泄露,不停機(jī)更新配置 高性能高可用高擴(kuò)展海量數(shù)據(jù): 1. dispatcher解決了高可用高擴(kuò)展問(wèn)題 2. 全局pull模式解決服務(wù)器高性能問(wèn)題 3. 版本號(hào)解決了高可用問(wèn)題 4. sharingmemory解決了業(yè)務(wù)機(jī)高可用問(wèn)題 |
DFS分布式文件系統(tǒng) |
選型比較:1. mfs 2. fastdfs 3. TFS 4. ceph 突出解決的問(wèn)題:頻繁的更改 全部是小文件,99.9999是3-5k 數(shù)量超級(jí)大 指導(dǎo)思想:解決特殊業(yè)務(wù)(小文件太多)的問(wèn)題 比如無(wú)人干預(yù)運(yùn)行 高性能高可用獲取海量數(shù)據(jù): 1. event nio編程解決高性能問(wèn)題 2. 角色設(shè)計(jì)解決高擴(kuò)展高可用性問(wèn)題 3. 無(wú)鎖編程解決單臺(tái)服務(wù)器負(fù)債問(wèn)題 4. 合并隨機(jī)寫解決性能問(wèn)題 5. chunkfile機(jī)制解決磁盤碎片與存儲(chǔ)海量數(shù)據(jù)問(wèn)題 6. 軟負(fù)債解決高可用性 7. GISSOP算法解決同步數(shù)據(jù)完整性問(wèn)題 |
http服務(wù) |
選型比較:沒(méi)有現(xiàn)成的,唯一的可能就是寫ngx或者類似于這樣的插件 突出解決的問(wèn)題:1.圖片,音頻,視頻 2. 需要鏈接我們的DFS 指導(dǎo)思想:這個(gè)純粹是好玩,并且想玩一下JNI,興趣孜然 高性能高可用擴(kuò)展海量數(shù)據(jù): 1. C網(wǎng)絡(luò)編程解決高性能問(wèn)題 2. JNI解決JAVA與C之間的通訊問(wèn)題 3. JAVA解決業(yè)務(wù)的多變問(wèn)題 |
id生成器 |
選型比較:twrrite snowflow UUID 突出解決的問(wèn)題:分庫(kù)分表需要使用 主鍵與排序 人肉眼可識(shí)別 指導(dǎo)思想:易排錯(cuò),內(nèi)部人員能第一時(shí)間看懂 高性能高可用獲取海量數(shù)據(jù):1. ID服務(wù)器橫向擴(kuò)展 2. 多主模式解決性能與高可用問(wèn)題 3. 事件編程解決10K,100K的鏈接高并發(fā)問(wèn)題 4. ID實(shí)現(xiàn)分庫(kù)分表路由功能 |
lest KV存儲(chǔ) |
選型比較:redis 突出解決的問(wèn)題:有持久化 qps單機(jī)可以到3w以上 支持版本化與同步 指導(dǎo)思想:持久化,無(wú)人干預(yù),可以接受相比redis有10-20%左右的性能差距 高性能高可用獲取海量數(shù)據(jù):1. 多主設(shè)計(jì)解決了高可用、高性能問(wèn)題 2. 路徑算法解決了高性能問(wèn)題 3. voctorlocker算法解決版本問(wèn)題 4.list和map的存儲(chǔ)機(jī)制解決了內(nèi)存數(shù)據(jù)平行化存儲(chǔ)問(wèn)題 5.bsearch算法解決了獲取數(shù)據(jù)的性能問(wèn)題 |
lax分布式協(xié)調(diào)器 |
選型比較:zookeeper 突出解決的問(wèn)題:機(jī)房網(wǎng)絡(luò)不穩(wěn)定,選舉就是噩夢(mèng) 性能不高,擴(kuò)展不方便 指導(dǎo)思想:zookeeper太龐大,太不好用,低網(wǎng)絡(luò)要求太高, 沒(méi)有主從,沒(méi)有主從,沒(méi)有主從 高性能高可用獲取海量數(shù)據(jù):1. 無(wú)主無(wú)投票機(jī)制解決了網(wǎng)絡(luò)環(huán)境下的高可用問(wèn)題 2. 隨機(jī)算法解決了分布式下的碰撞問(wèn)題 3. 多寫機(jī)制解決了高擴(kuò)展問(wèn)題 |
通訊協(xié)議 |
選型比較:messagepack bufferprotocol之類的 突出解決的問(wèn)題:不喜歡編譯型 有一個(gè)支持任何語(yǔ)言的查找模型 指導(dǎo)思想:對(duì)開發(fā)人員無(wú)感知 高性能高可用獲取海量數(shù)據(jù):1. 無(wú)編譯解決易用性問(wèn)題 2. 無(wú)數(shù)量限制解決了傳輸數(shù)據(jù)量問(wèn)題 3. 二進(jìn)制協(xié)議解決了高性能問(wèn)題 |
總結(jié)陳詞 | 系統(tǒng)設(shè)計(jì)總結(jié),討論人、團(tuán)隊(duì)、業(yè)務(wù)、架構(gòu)、系統(tǒng)、bug之間的關(guān)系 |
Albianj技術(shù)棧 數(shù)據(jù)聚合與日志統(tǒng)計(jì) 選型比較:1. spring 2. mycat 3. sharing jdbc 4. 各種公司(51)之類的開發(fā)的技術(shù)棧 突出解決的問(wèn)題:大部分的phper轉(zhuǎn)java 業(yè)務(wù)更改頻繁且時(shí)間要求高 要求down機(jī)時(shí)間短,有指標(biāo) 指導(dǎo)思想:控制項(xiàng)目,控制時(shí)間,控制復(fù)雜度。最關(guān)鍵是控制人 高性能高可用擴(kuò)展海量數(shù)據(jù): 1. 自帶分布式事務(wù)解決方案 2. Bundle機(jī)制解決分離同進(jìn)程不同業(yè)務(wù) 3. 無(wú)限平行擴(kuò)展,擴(kuò)容自主化 4. 自帶分庫(kù)分表(數(shù)據(jù)路由)解決海量數(shù)據(jù)問(wèn)題 5. 自帶加密組件,解決安全問(wèn)題 6. 自帶漏斗,令牌環(huán)等算法解決防刷,重復(fù)提交等問(wèn)題 7. 自帶數(shù)據(jù)庫(kù)調(diào)優(yōu)模板,解決批量數(shù)據(jù)提交問(wèn)題 |
scher系統(tǒng) 選型比較:quartz corn4j 突出解決的問(wèn)題:job調(diào)度 job之間不能相互影響,并且可以方便的kill有問(wèn)題的job v1版本的quartz為啥有問(wèn)題 指導(dǎo)思想:開發(fā)人員最簡(jiǎn)單,易使用 復(fù)雜配置全部scher自帶 進(jìn)程單位分開,互不干涉 高性能高可用擴(kuò)展海量數(shù)據(jù):1. 分布式模式解決了job的高擴(kuò)展與高性能 2. arbiter解決了job的高可用問(wèn)題 3. 自研分配算法解決了job的負(fù)載均衡問(wèn)題 4. chunk機(jī)制解決了job的數(shù)量與業(yè)務(wù)交叉問(wèn)題 |
精衛(wèi)系統(tǒng) 選型比較:當(dāng)時(shí)沒(méi)有參照,從scher引申而來(lái) 突出解決的問(wèn)題:無(wú)法與scher在一起,容易造成相互影響 job需要和scher兼容 指導(dǎo)思想:讓他單身吧,不要被scher影響 高性能高可用獲取海量資源: 1. 分布式模式解決了job的高擴(kuò)展與高性能 2. arbiter解決了job的高可用問(wèn)題 3. 自研分配算法解決了job的負(fù)載均衡問(wèn)題 4. chunk機(jī)制解決了job的數(shù)量與業(yè)務(wù)交叉問(wèn)題 |
配置服務(wù) 選型比較:zookeeper 突出解決的問(wèn)題:配置文件上線麻煩 秒更或者短時(shí)間(3s)之內(nèi) 指導(dǎo)思想:防止泄露,不停機(jī)更新配置 高性能高可用高擴(kuò)展海量數(shù)據(jù): 1. dispatcher解決了高可用高擴(kuò)展問(wèn)題 2. 全局pull模式解決服務(wù)器高性能問(wèn)題 3. 版本號(hào)解決了高可用問(wèn)題 4. sharingmemory解決了業(yè)務(wù)機(jī)高可用問(wèn)題 |
DFS分布式文件系統(tǒng) 選型比較:1. mfs 2. fastdfs 3. TFS 4. ceph 突出解決的問(wèn)題:頻繁的更改 全部是小文件,99.9999是3-5k 數(shù)量超級(jí)大 指導(dǎo)思想:解決特殊業(yè)務(wù)(小文件太多)的問(wèn)題 比如無(wú)人干預(yù)運(yùn)行 高性能高可用獲取海量數(shù)據(jù): 1. event nio編程解決高性能問(wèn)題 2. 角色設(shè)計(jì)解決高擴(kuò)展高可用性問(wèn)題 3. 無(wú)鎖編程解決單臺(tái)服務(wù)器負(fù)債問(wèn)題 4. 合并隨機(jī)寫解決性能問(wèn)題 5. chunkfile機(jī)制解決磁盤碎片與存儲(chǔ)海量數(shù)據(jù)問(wèn)題 6. 軟負(fù)債解決高可用性 7. GISSOP算法解決同步數(shù)據(jù)完整性問(wèn)題 |
http服務(wù) 選型比較:沒(méi)有現(xiàn)成的,唯一的可能就是寫ngx或者類似于這樣的插件 突出解決的問(wèn)題:1.圖片,音頻,視頻 2. 需要鏈接我們的DFS 指導(dǎo)思想:這個(gè)純粹是好玩,并且想玩一下JNI,興趣孜然 高性能高可用擴(kuò)展海量數(shù)據(jù): 1. C網(wǎng)絡(luò)編程解決高性能問(wèn)題 2. JNI解決JAVA與C之間的通訊問(wèn)題 3. JAVA解決業(yè)務(wù)的多變問(wèn)題 |
id生成器 選型比較:twrrite snowflow UUID 突出解決的問(wèn)題:分庫(kù)分表需要使用 主鍵與排序 人肉眼可識(shí)別 指導(dǎo)思想:易排錯(cuò),內(nèi)部人員能第一時(shí)間看懂 高性能高可用獲取海量數(shù)據(jù):1. ID服務(wù)器橫向擴(kuò)展 2. 多主模式解決性能與高可用問(wèn)題 3. 事件編程解決10K,100K的鏈接高并發(fā)問(wèn)題 4. ID實(shí)現(xiàn)分庫(kù)分表路由功能 |
lest KV存儲(chǔ) 選型比較:redis 突出解決的問(wèn)題:有持久化 qps單機(jī)可以到3w以上 支持版本化與同步 指導(dǎo)思想:持久化,無(wú)人干預(yù),可以接受相比redis有10-20%左右的性能差距 高性能高可用獲取海量數(shù)據(jù):1. 多主設(shè)計(jì)解決了高可用、高性能問(wèn)題 2. 路徑算法解決了高性能問(wèn)題 3. voctorlocker算法解決版本問(wèn)題 4.list和map的存儲(chǔ)機(jī)制解決了內(nèi)存數(shù)據(jù)平行化存儲(chǔ)問(wèn)題 5.bsearch算法解決了獲取數(shù)據(jù)的性能問(wèn)題 |
lax分布式協(xié)調(diào)器 選型比較:zookeeper 突出解決的問(wèn)題:機(jī)房網(wǎng)絡(luò)不穩(wěn)定,選舉就是噩夢(mèng) 性能不高,擴(kuò)展不方便 指導(dǎo)思想:zookeeper太龐大,太不好用,低網(wǎng)絡(luò)要求太高, 沒(méi)有主從,沒(méi)有主從,沒(méi)有主從 高性能高可用獲取海量數(shù)據(jù):1. 無(wú)主無(wú)投票機(jī)制解決了網(wǎng)絡(luò)環(huán)境下的高可用問(wèn)題 2. 隨機(jī)算法解決了分布式下的碰撞問(wèn)題 3. 多寫機(jī)制解決了高擴(kuò)展問(wèn)題 |
通訊協(xié)議 選型比較:messagepack bufferprotocol之類的 突出解決的問(wèn)題:不喜歡編譯型 有一個(gè)支持任何語(yǔ)言的查找模型 指導(dǎo)思想:對(duì)開發(fā)人員無(wú)感知 高性能高可用獲取海量數(shù)據(jù):1. 無(wú)編譯解決易用性問(wèn)題 2. 無(wú)數(shù)量限制解決了傳輸數(shù)據(jù)量問(wèn)題 3. 二進(jìn)制協(xié)議解決了高性能問(wèn)題 |
總結(jié)陳詞 系統(tǒng)設(shè)計(jì)總結(jié),討論人、團(tuán)隊(duì)、業(yè)務(wù)、架構(gòu)、系統(tǒng)、bug之間的關(guān)系 |