面向進(jìn)程模型是一種數(shù)據(jù)庫(kù)系統(tǒng)的架構(gòu)模型,核心思想是將不同的數(shù)據(jù)庫(kù)服務(wù)分配給不同的進(jìn)程,每個(gè)進(jìn)程獨(dú)立運(yùn)行,相互之間通過進(jìn)程間通信(IPC)進(jìn)行協(xié)作。這種模型被廣泛應(yīng)用于數(shù)據(jù)庫(kù)系統(tǒng)中,例如 PostgreSQL 數(shù)據(jù)庫(kù)系統(tǒng)。 正如上文所說,進(jìn)程模型使得 PostgreSQL 可以將不同的服務(wù)分配給多個(gè)進(jìn)程獨(dú)立運(yùn)行,每個(gè)進(jìn)程負(fù)責(zé)不同的任務(wù),例如查詢處理、并發(fā)控制、鎖管理等。進(jìn)程模型還可以可以保證系統(tǒng)的穩(wěn)定性和可靠性。當(dāng)一個(gè)進(jìn)程出現(xiàn)問題時(shí),不會(huì)影響到其他進(jìn)程的正常運(yùn)行,從而提高了系統(tǒng)的可用性。 這樣的特點(diǎn)使得 PostgreSQL 可以同時(shí)處理大量的并發(fā)請(qǐng)求,提高了系統(tǒng)的性能和響應(yīng)速度;除此之外,PostgreSQL 還可以很容易地進(jìn)行水平擴(kuò)展,增加更多的節(jié)點(diǎn)以應(yīng)對(duì)更高的負(fù)載。不過與此同時(shí),也讓 PostgreSQL 面對(duì)著管理和維護(hù)成本相對(duì)較高、需要較為復(fù)雜的進(jìn)程間通信和協(xié)調(diào)機(jī)制、需要消耗更多的系統(tǒng)資源等缺點(diǎn)。 6 月初,Heikki Linnakangas 發(fā)布了將 PostgreSQL 轉(zhuǎn)為線程模型的提案。 線程模型是一種數(shù)據(jù)庫(kù)系統(tǒng)的架構(gòu)模型,與面向進(jìn)程模型類似,它是將不同的數(shù)據(jù)庫(kù)服務(wù)分配給不同的線程,每個(gè)線程獨(dú)立運(yùn)行,相互之間通過線程間通信進(jìn)行協(xié)作。線程模型在一些輕量級(jí)的數(shù)據(jù)庫(kù)系統(tǒng)中得到廣泛應(yīng)用,例如 SQLite。 線程模型與進(jìn)程模型的最大區(qū)別在于,線程模型中所有的線程共享同一個(gè)進(jìn)程的地址空間,每個(gè)線程有自己的堆棧,共享代碼段和數(shù)據(jù)段。這意味著線程之間可以直接訪問同一份內(nèi)存,因此線程間通信的成本相對(duì)較低,不過這也意味著線程間的數(shù)據(jù)共享可能會(huì)帶來安全性問題。 從進(jìn)程模型轉(zhuǎn)換成線程模型的優(yōu)缺點(diǎn): 優(yōu)點(diǎn)
更輕量級(jí):線程模型相對(duì)于進(jìn)程模型更加輕量級(jí),可以更加高效地使用系統(tǒng)資源,尤其是在單機(jī)上運(yùn)行多個(gè)實(shí)例時(shí),線程模型可以將多個(gè)實(shí)例運(yùn)行在同一個(gè)進(jìn)程中,減少了系統(tǒng)調(diào)用和進(jìn)程間通信帶來的開銷。
更高的響應(yīng)速度:線程模型中線程之間的通信成本相對(duì)較低,因此在高并發(fā)場(chǎng)景下具有更高的響應(yīng)速度。
更少的內(nèi)存占用:線程模型中線程共享同一份地址空間,因此可以避免進(jìn)程模型中同一份代碼和數(shù)據(jù)被多個(gè)進(jìn)程重復(fù)加載到內(nèi)存的問題,節(jié)省了系統(tǒng)內(nèi)存占用。
缺點(diǎn)
安全性問題:線程之間共享同一份內(nèi)存,可能會(huì)帶來安全性問題,例如數(shù)據(jù)競(jìng)爭(zhēng)和鎖競(jìng)爭(zhēng)等。
可靠性問題:線程模型中一個(gè)線程崩潰可能會(huì)影響到整個(gè)進(jìn)程的穩(wěn)定性和可靠性。
多線程編程難度較大:線程之間的通信需要進(jìn)行同步和互斥,編寫多線程程序的難度相對(duì)較大。
PostgreSQL 開發(fā)者、EnterpriseDB 高級(jí)數(shù)據(jù)庫(kù)架構(gòu)師 Andres Freund 指出:
我認(rèn)為原有流程模型開始產(chǎn)生諸多限制,這個(gè)問題在大型設(shè)備上體現(xiàn)得尤其明顯。跨進(jìn)程上下文切換所帶來的開銷,原本就比在同一進(jìn)程內(nèi)的不同線程間切換要更高 —— 我估計(jì)這種開銷還將持續(xù)提升。面對(duì)大量連接,整個(gè)體系最終一定會(huì)因 TLB 未命中而浪費(fèi)大量時(shí)間。這是進(jìn)程模型無法跨進(jìn)程共享 TLB 的天然屬性造成的必然結(jié)果。
目前這還僅僅只是一項(xiàng)提議,并且由于 PostgreSQL 被廣泛用于生產(chǎn)環(huán)境,轉(zhuǎn)換到線程模型的過程需要非常謹(jǐn)慎。開發(fā)團(tuán)隊(duì)需要在不影響現(xiàn)有生產(chǎn)環(huán)境的情況下測(cè)試新的線程模型,以確保其穩(wěn)定性和可靠性。即便這個(gè)提議通過,這個(gè)轉(zhuǎn)化過程肯定也是無法通過單一版本徹底完成,從網(wǎng)上的各方評(píng)價(jià)來看,目前大多數(shù)人都支持這項(xiàng)提議。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6715瀏覽量
88308 -
模型
+關(guān)注
關(guān)注
1文章
3032瀏覽量
48357 -
代碼
+關(guān)注
關(guān)注
30文章
4671瀏覽量
67765
原文標(biāo)題:PostgreSQL 正面臨抉擇
文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論