日本一区二区免费播放_麻豆导航_久久精品99_国产性av_色婷婷噜噜久久国产精品12p_av福利资源_精品综合久久

當(dāng)前位置:首頁(yè) > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > 采訪分布式數(shù)據(jù)訪問(wèn)層(Data Access Layer)

采訪分布式數(shù)據(jù)訪問(wèn)層(Data Access Layer)
2010-01-14 23:28:50  作者:  來(lái)源:
分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)(以下簡(jiǎn)稱(chēng)DAL)是綜合MySQL Proxy、Memcached、集群等等技術(shù)優(yōu)點(diǎn)而構(gòu)建的一個(gè)軟件系統(tǒng)。目的是為了解決在構(gòu)建大中型網(wǎng)站時(shí)遇到的和數(shù)據(jù)訪問(wèn)有關(guān)的諸多問(wèn)題,如怎么使得切庫(kù)分表透明化,如何使得緩存存取清除自動(dòng)化,怎樣才能更好地防止服務(wù)單點(diǎn)故障等等。DAL是手機(jī)之家團(tuán)隊(duì)近幾年在開(kāi)發(fā)和運(yùn)營(yíng)上的經(jīng)驗(yàn)的總結(jié)以及智慧的結(jié)晶。

許超前 是手機(jī)之家一位資深的開(kāi)發(fā)者和架構(gòu)師, JavaEye非常榮幸的采訪了他。

許超前博客:http://www.longker.org/

歡迎大家推薦更多開(kāi)源項(xiàng)目和業(yè)界專(zhuān)家給我們,支持中國(guó)的IT發(fā)展,發(fā)站內(nèi)短信給JavaEye管理員或者發(fā)信到webmaster@javaeye.com,謝謝。

采訪分布式數(shù)據(jù)訪問(wèn)層(Data Access Layer)作者許超前(十四) Top

JavaEye:1.Hi,許超前,你好,非常榮幸能夠采訪你,首先你能夠向大家介紹一下分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)嗎?

許超前:簡(jiǎn)單說(shuō)來(lái),分布式數(shù)據(jù)訪問(wèn)層(以下簡(jiǎn)稱(chēng)DAL)是綜合MySQL Proxy、Memcached、集群等等技術(shù)優(yōu)點(diǎn)而構(gòu)建的一個(gè)軟件系統(tǒng)。目的是為了解決在構(gòu)建大中型網(wǎng)站時(shí)遇到的和數(shù)據(jù)訪問(wèn)有關(guān)的諸多問(wèn)題,如怎么使得切庫(kù)分表透明化,如何使得緩存存取清除自動(dòng)化,怎樣才能更好地防止服務(wù)單點(diǎn)故障等等。后面,我會(huì)在我的博客上以及今年的SD2China大會(huì)上做進(jìn)一步的說(shuō)明,有興趣的可以留意。

JavaEye:2.分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)是什么時(shí)候誕生的,能否介紹一下發(fā)展歷程?

許超前:DAL的產(chǎn)生是經(jīng)歷一番波折的。

2007 年,手機(jī)之家的用戶(hù)已經(jīng)接近1000萬(wàn)、PV也到了500萬(wàn)以上,正處于中小型網(wǎng)站向大型網(wǎng)站的過(guò)渡時(shí)期。那時(shí)候,我們明顯感覺(jué)到我們?cè)诩夹g(shù)上已經(jīng)遇上了瓶頸:一個(gè)是系統(tǒng)負(fù)載過(guò)高,經(jīng)常要擔(dān)心我們的數(shù)據(jù)庫(kù)是不是又掛了,進(jìn)而造成整個(gè)系統(tǒng)的癱瘓;第二個(gè)是5年積累下來(lái)的代碼也已經(jīng)非常難以維護(hù),因?yàn)榉謱幽:Y(jié)果到處充滿(mǎn)著數(shù)據(jù)庫(kù)訪問(wèn)邏輯、到處充滿(mǎn)著緩存讀寫(xiě)邏輯,再加上表的設(shè)計(jì)不合理,造成無(wú)法簡(jiǎn)單地進(jìn)行水平伸縮。總之,我們的系統(tǒng)已經(jīng)到了不得不進(jìn)行改造的地步了。

后來(lái),老高(手機(jī)之家創(chuàng)始人高春輝)組了一個(gè)研發(fā)團(tuán)隊(duì),旨在從根本上解決上述提到的問(wèn)題。在此后一年的時(shí)間里,我們走了很多彎路,經(jīng)歷了很多痛苦,不過(guò),也正是在這段時(shí)間里,產(chǎn)生了DAL的雛形,經(jīng)過(guò)若干次改進(jìn),變成了后來(lái)的DAL1.0。DAL的產(chǎn)生完全是形勢(shì)使然。。。到了那個(gè)時(shí)間、在那個(gè)地點(diǎn)、做了那件事。

DAL1.0上線后數(shù)據(jù)庫(kù)的QPS明顯下降,從幾千降到幾百。事實(shí)證明,我們找到了一條行得通的路子。所以才有DAL的后續(xù)版本的開(kāi)發(fā),才有今天的DAL2.x版本的產(chǎn)生。

JavaEye:3.能介紹一下手機(jī)之家網(wǎng)站和技術(shù)團(tuán)隊(duì)嗎?

許超前:手機(jī)之家是一個(gè)旨在提供全方位的手機(jī)相關(guān)服務(wù)的資訊類(lèi)網(wǎng)站。在7年的時(shí)間里,手機(jī)之家從無(wú)到有,已經(jīng)發(fā)展成為極具人氣、最受關(guān)注的手機(jī)產(chǎn)品資訊網(wǎng)站。有點(diǎn)廣告的味道,不過(guò)說(shuō)的都是事實(shí),呵呵。

以下是今年3月份在Beta技術(shù)沙龍上提到的統(tǒng)計(jì)數(shù)據(jù):
a. 1000w+用戶(hù)
b. 3000w+帖子
c. 1.1TB+附件
d. 780w+ Page View/每天
e. 5~10w在線用戶(hù)/15分

現(xiàn)在,用戶(hù)應(yīng)該是1200萬(wàn)了吧,其它的也有所變動(dòng)。最近比較忙,沒(méi)再去關(guān)注。

手機(jī)之家現(xiàn)在有個(gè)技術(shù)部,負(fù)責(zé)網(wǎng)站的日常維護(hù)事宜;我們還有個(gè)項(xiàng)目組,負(fù)責(zé)整個(gè)系統(tǒng)的架構(gòu)設(shè)計(jì)及新技術(shù)的研究和探索等等。

JavaEye:4.分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)的主要特點(diǎn)是什么?能否簡(jiǎn)要分析一下它實(shí)現(xiàn)的主要技術(shù)核心?

許超前:要說(shuō)特點(diǎn),摘抄一下我在博客里寫(xiě)的關(guān)于新版DAL的項(xiàng)目目標(biāo),這些目標(biāo)在DAL2.x里已經(jīng)得到了相對(duì)較好的實(shí)現(xiàn),我想這應(yīng)該就是它最大的特點(diǎn)了吧:

一)可伸縮。
這里是指Scale Out.,即水平可伸縮。事實(shí)上,這點(diǎn)更應(yīng)該是整個(gè)系統(tǒng)要考慮的目標(biāo)了,而非DAL,DAL要考慮的是怎么更好地支持。舉例說(shuō),我們可以一個(gè)庫(kù)一個(gè)服務(wù),甚至可以是一個(gè)表一個(gè)服務(wù);庫(kù)、表拆分后,DAL應(yīng)能路由查詢(xún)、合并結(jié)果,而不是讓?xiě)?yīng)用程序去操心這些事。

二)高可用性。
1) 我們認(rèn)為出錯(cuò)失敗是很正常的,一臺(tái)機(jī)器倒下了,其它機(jī)器應(yīng)繼續(xù)保持系統(tǒng)正常運(yùn)作。容錯(cuò)是很重要的一個(gè)要求。
2) 系統(tǒng)規(guī)模大了以后,很容易出現(xiàn)“異構(gòu)“的情況,如原有模塊MySQL表引擎是MyISAM的,是不支持事務(wù)的,而新上的模塊又采用了InnoDB表引擎,在這種情況下,DAL應(yīng)能對(duì)原有模塊進(jìn)行優(yōu)雅降級(jí)。
3)失敗恢復(fù)也是要考慮的,失敗后,需要把失敗前駐留在內(nèi)存中的消息找回來(lái)。
4) 另外,DAL本身也在快速的迭代當(dāng)中,升級(jí)是很經(jīng)常的事,應(yīng)能進(jìn)行在線熱升級(jí)(不重啟原有服務(wù))。

三)良好的性能。
對(duì)于根據(jù)Id來(lái)取記錄的查詢(xún),在緩存命中的情況下,應(yīng)該達(dá)到和Memcached不相上下的讀取速度。在緩存不命中的情況下,則應(yīng)該充分利用分庫(kù)分表和并行計(jì)算的優(yōu)勢(shì),最大化地提高查詢(xún)的效率。對(duì)于修改型查詢(xún),掛在上面的監(jiān)聽(tīng)器,不應(yīng)該影響性能。

四)系統(tǒng)可監(jiān)控。
資源占用情況,命中率如何,系統(tǒng)當(dāng)前壓力怎樣等等,都應(yīng)該是可知的。應(yīng)該有報(bào)警機(jī)制,當(dāng)壓力到達(dá)一個(gè)閥值以后,通知相關(guān)人員進(jìn)行處理。還應(yīng)該有詳細(xì)的錯(cuò)誤日志,便于排查問(wèn)題。

五)安全。
沒(méi)有SQL注入問(wèn)題;避免或盡量減少分表和索引表之間的數(shù)據(jù)不一致問(wèn)題等等。

六)易于編程。
需要設(shè)計(jì)一套簡(jiǎn)單好用的API,便于應(yīng)用程序的開(kāi)發(fā)。API必須是自完備的,應(yīng)用開(kāi)發(fā)者不需要太費(fèi)力就能記住的。
應(yīng)用開(kāi)發(fā)人員不再關(guān)心分庫(kù)分表問(wèn)題,不再關(guān)心緩存問(wèn)題, 特別是緩存清除問(wèn)題。甚至不再關(guān)心后端的數(shù)據(jù)庫(kù)是MySQL,還是Oracle,或者是其它。

七)可定制、可擴(kuò)展、可維護(hù)的架構(gòu)設(shè)計(jì)。
像連接池組件、緩存組件、查詢(xún)分析組件、消息隊(duì)列組件、通訊協(xié)議等等不應(yīng)該寫(xiě)死,應(yīng)設(shè)計(jì)成可方便定制的。還應(yīng)該提供足夠的鉤子用于擴(kuò)展。只有這樣,DAL 的架構(gòu)才是靈活的、擁抱變化的。簡(jiǎn)單說(shuō),我們定的是機(jī)制,提供的是策略;機(jī)制是軟件目標(biāo)和宗旨的體現(xiàn),一般是不能輕易改變的,而策略則應(yīng)當(dāng)是能比較簡(jiǎn)單地進(jìn)行切換的。

這里面,每一點(diǎn)都可以說(shuō)說(shuō),還是在以后的博客里,再來(lái)詳細(xì)和大家討論吧。


JavaEye:5.分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)應(yīng)用的主要場(chǎng)景是什么?能否詳細(xì)比較一下分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)和類(lèi)似產(chǎn)品比如hibernate的區(qū)別嗎?

許超前:DAL比較適用于大中型網(wǎng)站,對(duì)于想提高系統(tǒng)負(fù)載能力及響應(yīng)速度的小型網(wǎng)站也是適用的,但可能獲得的好處不如大中型網(wǎng)站那么明顯。

DAL和Hibernate兩者不具有可比性,從出發(fā)點(diǎn)來(lái)看就不同,DAL一開(kāi)始是為了提高網(wǎng)站的負(fù)載能力,而Hibernate則是為了能更快地開(kāi)發(fā)Java應(yīng)用。手機(jī)之家采用混合編程,上層應(yīng)用不一定是用Java寫(xiě)的,要讓(非Java)程序員對(duì)每個(gè)模塊涉及到的表結(jié)構(gòu)都用Java實(shí)體類(lèi)寫(xiě)一遍,不太現(xiàn)實(shí)。相反,我們采取了不同的思考方式,我們的程序員面向的是表和記錄,而不是實(shí)體類(lèi)和實(shí)體對(duì)象。雖然,DAL也有Mapping的概念,但是它的Mapping是指邏輯表到物理表的Mapping,而不是Java對(duì)象到數(shù)據(jù)庫(kù)模式的Mapping。DAL的邏輯表可能對(duì)應(yīng)著多個(gè)物理表,程序員看到的是邏輯表,不用關(guān)心后面有多少個(gè)物理表。

MySQL Proxy也提供了一些類(lèi)似的特性,DAL與它的第一個(gè)不同在于,我們的緩存處理是內(nèi)置的,我們從設(shè)計(jì)之初就特別認(rèn)真地考慮緩存這塊,而MySQL Proxy得自己寫(xiě)Lua腳本。第二個(gè)不同在于,我們針對(duì)的不僅僅是MySQL這一種數(shù)據(jù)庫(kù)。而且,我們還有很多其它的事情要做。

另外,國(guó)內(nèi)還有一個(gè)開(kāi)源項(xiàng)目叫Amoeba。Amoeba關(guān)注的領(lǐng)域是切分,在這個(gè)領(lǐng)域,Amoeba對(duì)概念的抽象還是不錯(cuò)的。DAL更像是一個(gè)完整的系統(tǒng),當(dāng)然,也可以只用DAL來(lái)做切分,其它的邏輯自己編寫(xiě),想擁有哪些特性都是可配置的。這樣設(shè)計(jì)一個(gè)是為了易用,一拿來(lái)就能用,另一個(gè)是為了能更好的和現(xiàn)有的解決方案(如Hibernate)集成,雖然DAL在很多方面都可以取代它們(如Hibernate)。

最后,我相信,肯定還存在很多類(lèi)似的解決方案,只是我們不曾得知。或許是過(guò)于定制化了,或許是還不夠成熟。。。

JavaEye:6.目前大概有多少用戶(hù)在使用分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)?

許超前:目前DAL主要用在手機(jī)之家網(wǎng)站上面,當(dāng)然,還有其它的項(xiàng)目也在用。

JavaEye:7.目前分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer) 開(kāi)發(fā)的技術(shù)難點(diǎn)是哪里?

許超前:要說(shuō)技術(shù)難點(diǎn),我覺(jué)得有以下幾點(diǎn):

一)如何降低CPU負(fù)載及減少內(nèi)存占用。

二)如何提高查詢(xún)條件的分析速度。

三)如何更有效地路由到相應(yīng)的庫(kù)和表上。

四)如何提高緩存的命中率。

五)如何更有效的進(jìn)行數(shù)據(jù)復(fù)制。


JavaEye:8.你每周大概花多少時(shí)間在分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)項(xiàng)目上面?

許超前:每周大概80個(gè)小時(shí)左右。

JavaEye:9.開(kāi)發(fā)分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)帶給你最大的收獲是什么?

許超前:一)貴在堅(jiān)持。一個(gè)長(zhǎng)開(kāi)發(fā)周期的軟件,到了后面,不僅是對(duì)開(kāi)發(fā)人員體力、智力的綜合考驗(yàn),更是對(duì)開(kāi)發(fā)人員心理承受能力的考驗(yàn),因?yàn)檫@時(shí)會(huì)有來(lái)自各方的及自發(fā)的壓力。如果能堅(jiān)持下去,扛過(guò)這一關(guān),事情往往就成了一半。

二)找一些和你有共同目標(biāo)的人一塊共事。否則會(huì)耗費(fèi)大量的溝通成本。

三)用數(shù)據(jù)說(shuō)話(huà)。事務(wù)都在變化當(dāng)中,幾年前的經(jīng)驗(yàn),也許到今天就不靈了。而且很多事情并不是像我們想象得那樣去發(fā)展。

四)中國(guó)不打折。

JavaEye:10.開(kāi)發(fā)分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)的roadmap是什么?近期遠(yuǎn)期的開(kāi)發(fā)計(jì)劃計(jì)劃是什么?

許超前:接下來(lái)的版本要做的事有這幾個(gè)方面:

一)更多的協(xié)議開(kāi)發(fā),這樣才能作為透明代理使用,比如我們的PMA也可以使用了。

二)數(shù)據(jù)庫(kù)廠商中立的數(shù)據(jù)復(fù)制。

三)嵌入式API,考慮和Spring、Guice等集成,方便Java應(yīng)用開(kāi)發(fā)人員的使用。


JavaEye:11.你的開(kāi)發(fā)環(huán)境是什么? 使用什么操作系統(tǒng),和IDE?

許超前:一直用Linux操作系統(tǒng),現(xiàn)在是Ubuntu,IDE用Eclipse。

JavaEye:12.開(kāi)發(fā)分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)項(xiàng)目是如何推廣的?未來(lái)有什么推廣方面的計(jì)劃嗎?

許超前:DAL目前只在內(nèi)部項(xiàng)目中使用。等足夠成熟了,我們會(huì)采取一系列辦法進(jìn)行推廣的。


JavaEye:13.通過(guò)開(kāi)發(fā)開(kāi)發(fā)分布式(Distributed)數(shù)據(jù)訪問(wèn)層(Data Access Layer)項(xiàng)目 ,你對(duì)中國(guó)的開(kāi)源軟件現(xiàn)狀有什么看法?對(duì)國(guó)內(nèi)軟件開(kāi)發(fā)人員做開(kāi)源項(xiàng)目有什么感受和想法嗎?

許超前:我們的IT行業(yè)起步晚,開(kāi)源文化還不夠深入人心,再加上我們中的大部份人還在為生計(jì)發(fā)愁,所以對(duì)開(kāi)源事業(yè)上心的人還是少數(shù)。因此,和歐美發(fā)達(dá)國(guó)家比起來(lái),我們的開(kāi)源事業(yè)相對(duì)滯后。
我由衷地敬佩那些做開(kāi)源項(xiàng)目的開(kāi)發(fā)人員,如果可能,我也希望多做些開(kāi)源軟件和大家一塊分享。


JavaEye:14.作為一個(gè)JavaEye的會(huì)員,你對(duì)JavaEye網(wǎng)站有什么建議和意見(jiàn)嗎?

許超前:想辦法讓老人多發(fā)言,同時(shí)也給新人提供一個(gè)學(xué)習(xí)成長(zhǎng)的地方。比如可以弄個(gè)師徒頻道(有點(diǎn)SNS的味道),老人可以招學(xué)徒,新人可以拜師傅。

 

 


安徽新華電腦學(xué)校專(zhuān)業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢(xún)
主站蜘蛛池模板: 精品日本三级在线观看视频 | 日韩黄色视屏 | 加勒比在线免费视频 | 欧美一区2区三区4区公司 | 天天操天天看 | 国产一级做a爰片久久毛片99 | 国产农村三片免费网站 | 欧美白人和黑人xxxx猛交视频 | 黄网在线观看免费 | 久久99国产精品久久 | 大杳蕉伊人狼人久久一本线 | 青青草久久 | 天天夜夜人人 | 老子影院午夜伦不卡不四虎卡 | 免费a级毛片在线播放 | 日本高清不卡一区 | 香港三级大全 | 欧美黑人猛xxxxbbbb | 青青青青久在线观看视频 | 高清不卡日本v在线二区 | 久久人视频 | 国产成人午夜性a一级毛片 国产成人香蕉 | 日韩在线第二页 | 99久久精品免费看国产一区二区 | 天天天天做夜夜夜做 | 欧美乱大交xxxx| 免费看污视频软件 | 极品毛片 | 玖草资源在线 | 日日操夜夜操天天操 | 久久ww精品w免费人成 | 日日干天天干 | 国产综合在线视频 | 不卡视频免费在线观看 | 九九久久国产精品免费热6 九九久久精品这里久久网 九九久久久 | 九操网| 国产亚洲片 | 国产成人香蕉久久久久 | 狠狠躁夜夜躁人人爽天天段 | 亚洲一区二区约美女探花 | 国产成人精品aaaa视频一区 |