雲為我們提供了便利,降低了開發和運維的成本。
但是也必須思考一個問題,我們的雲元件之間的的網絡延遲?
(相比較區域網路的伺服器和伺服器之間)
你可以用各種方法測試驗證一下。
以往我們把資料放在資料庫,資料庫隻提供簡單的增删改查,大部分的業務邏輯放在應用伺服器來完成。
但是在雲時代,如果我們還這樣的話,應用伺服器和資料庫間如果多次互動,會浪費大量的時間。
我們應該充分利用資料庫的程式設計能力,例如postgresql,是一個功能非常強大的資料庫,我們完全可以把業務邏輯放在資料庫處理,
例如使用plv8, plpython, plpgsql, plperl, pltcl等函數語言,
資料類型支援也非常的豐富,例如jsonb, gis, text, 異構類型,key-value類型...等,
索引支援btree, hash, gin , gist, spgist, brin等索引類型,
sql文法層面支援 視窗查詢,遞歸查詢,grouping set, 等進階文法。
join方面,支援hash join , merge join , nestloop join ,
優化器方面,支援自定義成本因子, cbo , 遺傳算法等。
另外postgresql更強大之處,可以利用gpu加速運算,包括隐式加速,也可以顯示加速。
隐式指資料庫自身提供的custom scan provider程式設計接口,已經有實作了的插件。
顯式,指的是過程語言和cuda的結合,例如pycuda。
還可以用julia來友善的實作并行程式設計。
postgresql完全可以滿足大多數業務的需求。
功能如此強大的資料庫,隻用來做增删改查,是不是有點浪費呢,充分利用它的功能,當網絡是瓶頸的時候,讓業務邏輯和資料靠近,可以大大提升效率,降低rt,提升業務系統的使用者體驗。
關于雲端網絡延遲,可以參考我在前幾天寫的幾篇文檔。
postgresql 網絡延遲定量分析
<a href="https://yq.aliyun.com/articles/35176">https://yq.aliyun.com/articles/35176</a>
使用sysbench測試阿裡雲rds postgresql性能
(内容中包含了如何測試雲資料庫的網絡延遲)
<a href="https://yq.aliyun.com/articles/35517">https://yq.aliyun.com/articles/35517</a>
本文還會利用sysbench來佐證一下,使用資料庫服務端程式設計後,帶來的性能提升是多麼明顯。
測試環境依舊是阿裡雲rds postgresql,ecs是32核的機器,與rds pg在同一機房。
步驟
購買rds pg資料庫執行個體
建立資料庫使用者
購買同機房,與rds pg同vpc網絡ecs或者同經典網絡的ecs
在ecs端安裝postgresql用戶端
安裝sysbench(from github)
并行初始化測試資料
初始化256張表,每張表100萬資料。
表結構和資料樣本如下
測試包含sql如下,其中第一條sql執行10次 :
首先 測試不使用服務端程式設計時的性能, 分别測試16并發和256并發
測試結果
16并發
tps 248.27
qps 4717.13
256并發
tps 1243.61
qps 23628.59
然後 測試使用服務端程式設計時的性能, 分别測試16并發和256并發
tps 1533.44
qps 29135.36
tps 1684.45
qps 32004.55
從測試資料可以非常明顯的看到,rt對小事務的影響非常大(單個連接配接tps隻有 15.56,互動次數越多tps越低)。
使用服務端程式設計,可以大大的規避網絡問題,對于互動較多的高并發小事務起到的效果非常棒。
在所有的關系資料庫中,postgresql支援的服務端程式設計語言應該是最豐富的,例如c,python,java,javascript, lua, perl, tcl, perl, ......。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIzMmlDZ5IWNiZjNxQjZ1gTM2cjZlFGNxE2MjZzM1cjZyUjYyQDOmNzLcNXZslmZxl3Lc12bj5ycj5Wd5lGbh5Sdvhmen5WYo1ibj1ycz92Lc9CX6MHc0RHaiojIsJye.png)