新聞中心
【綜合報道】圍脖,織圍脖——這是什么?冬天到了,織條圍脖保暖嗎?錯,這是網(wǎng)絡(luò)流行用語。這還是大家的生活方式,生活態(tài)度?!罢椅遥縼砦椅⒉┌?!”最近身邊的朋友都在織啊織,你不織?你就是“奧特曼”。那么大家是否知道微博的開發(fā)模式嗎?數(shù)據(jù)庫是如何部署的?又是如何優(yōu)化的?這些問題一出,必要找達(dá)人為我們解惑。有幸請到新浪***DBA楊海潮先生來為我們解一解上述的疑惑。

專訪人物介紹
楊海潮,新浪***DBA,在大規(guī)模高并發(fā),海量訪問有豐富的管理經(jīng)驗。熱衷于數(shù)據(jù)庫設(shè)計,性能優(yōu)化,分布式部署方案和高可用性方面的研究。
之前從事大訪問量網(wǎng)站的部署以及優(yōu)化工作,加入新浪后主要負(fù)責(zé)整個公司的數(shù)據(jù)庫管理工作。
:新浪現(xiàn)在的開發(fā)模式還是LAMP嗎?
楊海潮:目前大部分業(yè)務(wù)還是使用LAMP方式,也有部分采用LNMP方式。
:新浪數(shù)據(jù)庫是如何部署的?
楊海潮:目前NoSQL和MySQL是結(jié)合使用的,根據(jù)應(yīng)用的特點選擇合適存儲方式。
:Sharding策略是很好的數(shù)據(jù)庫擴(kuò)展方案,但是這種方案也不是***的,新浪是如何選取sharding的形式,來適應(yīng)不同的應(yīng)用場景?
楊海潮:如圖:
sharding只用于數(shù)據(jù)量大同時有性能瓶頸的庫,大部分庫不進(jìn)行sharding處理。
對于數(shù)據(jù)量比較大的庫,在一開始就考慮sharding策略,例如索引數(shù)據(jù)和內(nèi)容數(shù)據(jù)分開設(shè)計,每類數(shù)據(jù)庫根據(jù)業(yè)務(wù)邏輯選擇恰當(dāng)?shù)膒artitioning key,拆分成一定數(shù)量的表。
然后隨著壓力的增加進(jìn)行垂直拆分,垂直拆分后的庫再遇到性能瓶頸時首先考慮用硬件來解決。
當(dāng)硬件解決不了時才開始考慮水平拆分。
在選擇sharding方案時仔細(xì)考慮業(yè)務(wù)邏輯。對于讀密集型應(yīng)用,基本上通過增加slave來解決,對于寫密集型應(yīng)用才進(jìn)行垂直和水平拆分工作。
:跨越越多的sharding,帶來的開銷就越大,這個數(shù)量是如何控制的?
楊海潮:目前我在設(shè)計之前就避免跨表操作,選擇適當(dāng)?shù)膒aritioning key,也即合適的拆分維度,避免對后期業(yè)務(wù)的影響。
根據(jù)業(yè)務(wù)邏輯的重要程度,如果業(yè)務(wù)邏輯是查詢某一個用戶的信息,那么會按用戶進(jìn)行拆分,那么保證一個用戶的數(shù)據(jù)是落在一張表里面。按時間維度進(jìn)行拆分,那么會分析數(shù)據(jù)的冷熱程度,把80%以上的數(shù)據(jù)放在一個表,避免過多的跨表查詢。
在這種拆分維度滿足不了業(yè)務(wù)需求時,我們會利用空間換時間的思想,同一份數(shù)據(jù)按多種維度進(jìn)行拆分,讓每種業(yè)務(wù)邏輯的查詢語句都有很高的效率。
:很多用戶都會把sharding和partitioning混淆,您能講講您是怎么區(qū)分sharding與partitioning的異同。
楊海潮:sharding通常是指垂直拆分和水平拆分,是一個總體的概念,mysql的partitioning是實現(xiàn)sharding的一種技術(shù)。
:新浪現(xiàn)在采用SQL+NoSQL結(jié)合的數(shù)據(jù)庫部署,那么對于兩種數(shù)據(jù)庫,分別是如何進(jìn)行優(yōu)化的呢?
楊海潮:目前NoSQL和MySQL是結(jié)合使用的,根據(jù)應(yīng)用的特點選擇合適存儲方式。譬如:關(guān)系型數(shù)據(jù),例如:索引使用MySQL存儲,非關(guān)系數(shù)據(jù)庫,例如:一些K/V需求的,對并發(fā)要求比較高的放入NoSQL產(chǎn)品存儲,或者通過關(guān)系數(shù)據(jù)復(fù)制到NoSQL(redis)來顯示不同的應(yīng)用需求。
針對MySQL做的優(yōu)化比較多,從硬件(使用SSD,Fusion-IO,Cachecade等),文件系統(tǒng)(嘗試XFS),調(diào)整IO調(diào)度,優(yōu)化參數(shù),調(diào)整索引到減少應(yīng)用對數(shù)據(jù)庫的訪問和交換等。
NoSQL(redis)通過修改源碼滿足自己的業(yè)務(wù)需求:完善它的replication機(jī)制,加入position的概念,讓維護(hù)更容易,同時failover能力也大大增強(qiáng)。改善Hashset在rdb里面的存儲方式,提升復(fù)雜數(shù)據(jù)類型的加載速度。
:如何保證數(shù)據(jù)庫的安全性的呢?
楊海潮:主要通過幾個方面進(jìn)行考慮:
- 只通過內(nèi)網(wǎng)進(jìn)行訪問。
- 對來源IP做限制。
- 使用一定復(fù)雜度的密碼策略。
- 從程序的角度對于輸入進(jìn)行檢查,例如使用綁定變量防止SQL注入。
- 對一些敏感的信息會記錄上操作日志,定期以報表的形式發(fā)給相關(guān)人員。
分享題目:微博請問你是怎么優(yōu)化數(shù)據(jù)庫的?
分享網(wǎng)址:http://fisionsoft.com.cn/article/djjcoei.html


咨詢
建站咨詢
