Albianj2分布式業(yè)務(wù)層數(shù)據(jù)層框架
Albianj是一套分布式統(tǒng)一框架。主要面向海量數(shù)據(jù)處理、海量數(shù)據(jù) 訪問、并解決互聯(lián)網(wǎng)開發(fā)中經(jīng)常會碰到的數(shù)據(jù)海量增長問題,也一并解決 互聯(lián)網(wǎng)開發(fā)團(tuán)隊 中,因開發(fā)人員的水平參差不齊而導(dǎo)致的代碼質(zhì)量不可控問題。它主要有簡單小巧的IoC, ORM,數(shù)據(jù)路由,緩存集成,分布式唯一id等等功能。
albianj誕生于2011年,它的創(chuàng)建并不是為了解決某個公司的問題,而純粹是為了度過我的 業(yè)余時間。當(dāng)時的想法其實(shí)很簡單,就是想把我這幾年來對于互聯(lián)網(wǎng)的理解用技術(shù)的形式 表現(xiàn)出來。其實(shí)2011年寫完v1.0后,除了我把它開源了以外,我就再也沒有去管過它。直 到2015年的4月份,當(dāng)時我已經(jīng)在閱文集團(tuán)任職,我們需要把閱文集團(tuán)的所有內(nèi)容都統(tǒng)一起 來,形成一個內(nèi)容中心。當(dāng)確定下來要做這個內(nèi)容中心的時候,我們面對的是億級別的數(shù) 據(jù)和千萬級別的訪問量。我們想到了需要一個統(tǒng)一的框架來完成我們的工作。這個框架必 須滿足幾個條件:
1. 必須容易使用,必須容易維護(hù),必須快速上手
2. 必須可以方便的處理現(xiàn)有的海量的數(shù)據(jù)
3. 必須能方便的進(jìn)行業(yè)務(wù)的擴(kuò)容
4. 必須能抗住當(dāng)前的訪問量,并且能抗住未來5年左右的業(yè)務(wù)擴(kuò)展說帶來的訪問量增長
從這些條件出發(fā),我從記憶中翻出來了albianj(所以對于albianj的出身有疑問的同學(xué)就不 要猜疑了。albianj并不出身于盛大創(chuàng)新院,也不是從騰訊帶出來的。而是完全自主開發(fā)的 )。當(dāng)時albianj的主體已近全部完成,并不需要更多的修改,就是在易用性和可控制性上 還表現(xiàn)的不夠好,我們又對albianj進(jìn)行了擴(kuò)展。形成了我們現(xiàn)在開源出來的albianj2.
后來,隨著技術(shù)的發(fā)展,我們對于現(xiàn)有的騰訊文學(xué)、起點(diǎn)中文網(wǎng)等閱文集團(tuán)旗下的站點(diǎn)也 進(jìn)行了重構(gòu)。在重構(gòu)過程中,我們也都使用albianj作為底層框架來使用。
所以呢,從我們的使用的真實(shí)情況出發(fā),albianj2是能抗住海量數(shù)據(jù)處理和大并發(fā)、大訪 問量的。既然已近在我們的系統(tǒng)中得到了驗(yàn)證,我們現(xiàn)在把我們修改過的albianj2開源出 來,以方便大家使用。
附albianj2的功能列表
1. 一個簡單的Service服務(wù),比spring輕量很多很多
2. 一個簡單的ORM框架
3. 數(shù)據(jù)路由服務(wù)
4. 分布式事務(wù)服務(wù)(支持強(qiáng)、弱兩種模型)
5. 簡單的緩存服務(wù)
6. 統(tǒng)一的Id服務(wù)
7. 日志服務(wù)(這部分有待擴(kuò)展)
8. 密碼安全服務(wù)
9. 簡單的restful服務(wù)
10. 一個輕量級的配置服務(wù)
Albianj2的適用范圍:
albianj2主要的適用范圍是互聯(lián)網(wǎng)企業(yè)。并不是那么的適合傳統(tǒng)行業(yè)。這個還得從兩個行 業(yè)的特殊性說起。對于傳統(tǒng)行業(yè)來說,他們更加注重的是業(yè)務(wù)的復(fù)雜性,所以這個特有的 業(yè)務(wù)會給數(shù)據(jù)庫設(shè)計帶來很大的煩惱和限制。傳統(tǒng)行業(yè)基本上用戶量固定,數(shù)據(jù)量固定, 增長量也是固定的,所以在一個系統(tǒng)搭建完畢之后,幾乎很少會去動數(shù)據(jù)庫設(shè)計,也不會 后期去對數(shù)據(jù)進(jìn)行拆分。這些類似的種種都是因?yàn)閭鹘y(tǒng)行業(yè)特有的屬性決定的。
而互聯(lián)網(wǎng)就完全不一樣了。互聯(lián)網(wǎng)首先講究的是快,快速的開發(fā),快速的搭建。然后是講 究架構(gòu)重構(gòu)簡單。因?yàn)榛ヂ?lián)網(wǎng)企業(yè)經(jīng)常會碰到數(shù)據(jù)爆發(fā)式增長,用戶量井噴式涌入這些問 題。我們就會想法設(shè)法的保證系統(tǒng)的快速和穩(wěn)定。對于數(shù)據(jù)庫,也是會隨著數(shù)據(jù)的增加需 要進(jìn)行相應(yīng)的拆庫拆表。這些在傳統(tǒng)行業(yè)不太碰到的問題在互聯(lián)網(wǎng)行業(yè)看來就是家常便飯 的事情。而在業(yè)務(wù)開發(fā)上,互聯(lián)網(wǎng)也比較特殊,互聯(lián)網(wǎng)的表之間幾乎很少有很復(fù)雜的關(guān)系 ,99%都是單表操作。所以互聯(lián)網(wǎng)的模型最后就是演變成了單表+分庫分表。而albianj就是 為了解決問題出現(xiàn)的。albianj不支持join,也不支持多表查詢。因?yàn)檫@些對于一個互聯(lián)網(wǎng) 系統(tǒng)來說,這些都會大大的損耗數(shù)據(jù)庫的性能。數(shù)據(jù)庫本來就是單點(diǎn)的存在,我們需要盡 可能快速的來訪問數(shù)據(jù)庫,所以在這些方面albianj做了很大的限制,這也導(dǎo)致了不是太符 合傳統(tǒng)企業(yè)的業(yè)務(wù)。albianj2從開始設(shè)計的時候其實(shí)主要考慮的都是互聯(lián)網(wǎng)的業(yè)務(wù),albianj 幾乎適合做互聯(lián)網(wǎng)所有的業(yè)務(wù),不管你是想阿里一樣的電商還是想騰訊一樣的社交。幾乎 都可以選擇使用albianj來作為基礎(chǔ)框架。
