資料庫系統如何做負載平衡?
到iT邦幫忙

ymtangg(iT邦初學者10級)發問:
目前公司的應用服務與資料庫在同臺伺服器運行,目前計畫分離成三層式架構甚至分散式。但怕資料庫伺服器還是滿載,所以在加上一臺負載平衡。請問這樣是否架構是否可行?

raytracy(iT邦超人2級):
資料庫哪有人這樣做負載平衡的,有哪家的Load Balancer可以讓你這樣用?合理的作法應該是要組成Database Cluster才對。

在Cluster的環境中,Database主機可以有很多臺,但是大家的後端都接到同一個外部儲存體(通常是SAN),所有主機都寫入同一個儲存體內的一個資料庫而已,也因為只有一個儲存體、一個資料庫,所以主機之間根本沒有同步的需要。

sam0407(iT邦初學者7級):
如同Raytracy所言,負載平衡設備是不能解決資料庫負載過重的問題,但Databse Server效能不足的原因很多,應詳細探究為何效能不足,架Database Cluster能解決部分問題,但不一定能帶來太大效能上的改進。

拆Table結構是一個方法,通常是用在資料量特大的Table才建議,但用這種方式,程式開發人員保證會很痛苦,如果真要採取這種架構,建議你程式架構要多一層資料存取層,商業物件不能直接下SQL存取資料庫資料,要透過資料存取層元件來存取資料庫資料,才能避免程式設計師的人為錯誤。

還是建議你先分析資料庫效能瓶頸,再來決定架構。根據我個人經驗,Disk I/O是最大的問題,而造成Disk I/O的原因,通常是Index沒設好,或是程式設計師撰寫的SQL指令,沒考慮到資料成長後的效能問題。這些問題都先排除後,再考慮作資料庫的複寫或鏡像,將複雜的查詢指令、BI報表及Data Mining的資料來源,指向複寫或鏡像出來的那臺Database主機,這樣應該就可以解決你的問題。

hankyeh(iT邦初學者10級):
通常沒有人在作資料庫的Load Balance,不過,沒人做不表示不能做,因為小弟的系統就有做,但是只是把它當熱切換器而已。

如果資料量大到一臺資料庫無法負擔,考量拆Database的時候,首要考量是你資料的同步該如何處理。

在做資料庫多臺並行前,要先決定你的資料一致性要多高,如果可以容忍有時間差的同步,可以考慮用Big Table架構的資料庫來進行處理,否則就是加快取吧,並且盡量把資料庫讀/寫的任務分散來做。

熱門新聞

Advertisement