數(shù)據(jù)庫防火墻商業(yè)化的前提條件
一、概述
數(shù)據(jù)庫防火墻和一般的傳統(tǒng)數(shù)據(jù)庫安全設(shè)備不同,它部署在應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器之間。業(yè)務(wù)系統(tǒng)巨大的流量將穿越數(shù)據(jù)庫防火墻,數(shù)據(jù)庫防火墻任何的風(fēng)吹草動都會影響業(yè)務(wù)系統(tǒng)的正常運行。數(shù)據(jù)庫防火墻投放市場之前,不管數(shù)據(jù)庫防火墻功能的多寡,都必須解決兩個基本問題:性能和可靠性。
二、性能
性能主要考慮兩方面的影響:延遲和并發(fā)。
1. 延遲
延遲:業(yè)務(wù)操作從指令發(fā)出到結(jié)果返回之間消耗的時間。
一般來說,絕大部分客戶的OLTP(線上交易處理)業(yè)務(wù)要求秒級響應(yīng),這個秒級響應(yīng)包含了所有的業(yè)務(wù)處理,包括:客戶端的處理(比如瀏覽器)延遲,業(yè)務(wù)網(wǎng)絡(luò)延遲,應(yīng)用服務(wù)器處理延遲,數(shù)據(jù)庫網(wǎng)絡(luò)延遲,數(shù)據(jù)庫處理延遲等。對于數(shù)據(jù)庫防火墻來說,應(yīng)用服務(wù)器處理延遲和數(shù)據(jù)庫處理延遲之間增加了一個數(shù)據(jù)庫防火墻處理延遲。
我們來看看一般OLTP系統(tǒng)的常規(guī)情況,數(shù)據(jù)庫網(wǎng)絡(luò)延遲一般1ms之內(nèi),數(shù)據(jù)庫處理延遲大部分在0.1ms-10ms之間,少部分會在10ms-100ms之間,極少出現(xiàn)幾百ms以上的延遲。
為了簡化說明,我們把數(shù)據(jù)庫網(wǎng)絡(luò)延遲標定為1ms,每次數(shù)據(jù)庫響應(yīng)處理延遲時間標定為2ms,每筆業(yè)務(wù)平均由20條SQL語句構(gòu)成,則每次延遲時間為3ms,每筆業(yè)務(wù)的響應(yīng)時間為60ms,每秒鐘可以處理16.8筆業(yè)務(wù)。如果數(shù)據(jù)庫防火墻的處理延遲時間為1ms,則每次處理延遲增加為4ms,總處理時間增加為80ms,每秒鐘可以處理12.5筆業(yè)務(wù)。
下面我們從三種不同的業(yè)務(wù)場景來分析:獨占數(shù)據(jù)庫連接(無數(shù)據(jù)庫連接池)、數(shù)據(jù)庫連接池和短連接業(yè)務(wù)。大部分C/S應(yīng)用都獨占數(shù)據(jù)庫連接,大部分B/S應(yīng)用都采用數(shù)據(jù)庫連接池,短連接的應(yīng)用非常少見,只出現(xiàn)在極少數(shù)據(jù)庫處理的應(yīng)用中。
(1) 獨占數(shù)據(jù)庫連接
獨占數(shù)據(jù)庫連接應(yīng)用中,數(shù)據(jù)庫防火墻的接入在每次處理中增加1ms,整體響應(yīng)中增加了20ms,也就是從1000ms增加到了1020ms,這個延遲增量一般情況下不會對于業(yè)務(wù)體驗造成任何影響。
(2) 數(shù)據(jù)庫連接池
不同于獨占數(shù)據(jù)庫連接,數(shù)據(jù)庫連接池為不同業(yè)務(wù)操作的共享單元。假設(shè)數(shù)據(jù)庫連接池數(shù)量為200個,冗余20%,可用數(shù)量為160個。顯然,引進數(shù)據(jù)庫防火墻之后,業(yè)務(wù)處理能力從16.8 * 160 = 2688/s下降為12.5*160=2000/s,吞吐量下降25.6%。當你需要比較2000筆/s更高吞吐量的時候,數(shù)據(jù)庫防火墻的接入將帶來業(yè)務(wù)線的影響。在這種情況下,你需要把數(shù)據(jù)庫連接池數(shù)量至少增加26%,也就是252個,這個時候數(shù)據(jù)庫連接池的處理能力將恢復(fù)到2688筆/s,整體業(yè)務(wù)感知的影響也僅僅從1000ms增加到了1020ms,基本可以被忽略。
(3) 短連接業(yè)務(wù)
在短連接業(yè)務(wù)中,數(shù)據(jù)庫連接消耗的時間將納入業(yè)務(wù)響應(yīng)時間。以O(shè)racle數(shù)據(jù)庫為例子,一個數(shù)據(jù)庫連接的建立消耗時間在120ms-200ms,數(shù)據(jù)庫防火墻增加的每次1ms延遲和合計20ms延遲基本不會產(chǎn)生業(yè)務(wù)層面的影響。
(4) 數(shù)據(jù)庫響應(yīng)處理的影響
在上面的討論中都假設(shè)了數(shù)據(jù)庫不會受到影響,但是事實上數(shù)據(jù)庫防火墻的加入會到數(shù)據(jù)庫處理產(chǎn)生影響,其影響等同于網(wǎng)絡(luò)速度下降。一般而言,延遲造成的影響主要在于增加了數(shù)據(jù)被鎖定的時間,從而會從根本上影響數(shù)據(jù)庫并發(fā)性。
我們以簡單的update為例子:
- update customer set balance=500 where cust_id=10080;
- commit;
可以看到cust_id=10080這一行的鎖定周期從3ms增加到了4ms,鎖定周期增加了33.3%,這個增加的鎖定時間會在一定時間影響數(shù)據(jù)庫的并發(fā)性。
2. 并發(fā)性
對于一個企業(yè)級數(shù)據(jù)庫,幾千甚至幾萬個數(shù)據(jù)庫連接是很常見的,數(shù)據(jù)庫防火墻需要在處理高并發(fā)量的同時保持延遲時間的穩(wěn)定。在現(xiàn)實場景中,隨著業(yè)務(wù)并發(fā)程度的上升,響應(yīng)時間下跌甚至于非線性下跌都是很常見的事情。我們在這里不討論如何實現(xiàn)高并發(fā),只是說明并發(fā)性會嚴重影響響應(yīng)延遲。
3. 性能延遲的可接受性
從上面計算可以看到,絕大部分的業(yè)務(wù)應(yīng)用在數(shù)據(jù)庫防火墻增加1ms延遲時間不會對業(yè)務(wù)造成太大影響。對于高度并發(fā)性或者響應(yīng)時間極為苛刻的業(yè)務(wù)應(yīng)用,1ms延遲具有比較大的風(fēng)險,需要更低延遲的數(shù)據(jù)庫防火墻支持,300us-500us的延遲是一個相對合理的數(shù)值。當然如果你的網(wǎng)絡(luò)環(huán)境甚至已經(jīng)在多接入一個網(wǎng)絡(luò)交換機(延遲時間一般在100-300us)都會對業(yè)務(wù)造成明顯影響的時候,顯然增加數(shù)據(jù)庫防火墻接入是不合適的。
三、可靠性
性能是一個復(fù)雜的問題,可靠性對于數(shù)據(jù)庫防火墻來說就是一個極為簡單的命題。由于數(shù)據(jù)庫防火墻部署在應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器之間,數(shù)據(jù)庫防火墻的任何故障顯然會導(dǎo)致業(yè)務(wù)操作失敗,在數(shù)據(jù)庫防火墻無法工作的時候?qū)е滤袠I(yè)務(wù)中斷。
相信任何用戶在安全和業(yè)務(wù)保障之間都會優(yōu)先選擇業(yè)務(wù)保障而暫時放棄安全。基于這個考慮,一個很樸素的需求就是:在數(shù)據(jù)庫防火墻出現(xiàn)任何故障,包括軟件故障,硬件故障等,依然需要保障業(yè)務(wù)運行不要被中斷和影響。
1. bypass
當防火墻軟件或者硬件故障的時候,可以自適應(yīng)降級成網(wǎng)絡(luò)通路設(shè)備,保證業(yè)務(wù)運行不會受到防火墻軟件或者硬件故障的影響。
2. 可靠性保持
數(shù)據(jù)庫網(wǎng)絡(luò)往往具有很高的冗余措施,數(shù)據(jù)庫防火墻的接入要求不會改變原有網(wǎng)絡(luò)的冗余結(jié)構(gòu),保持原有網(wǎng)絡(luò)的可靠性。
四、總結(jié)
數(shù)據(jù)庫防火墻商業(yè)化需要兩個基本前提:可以接受的性能和可靠性保障,在這兩個基本前提解決之前,任何數(shù)據(jù)庫防火墻產(chǎn)品都只能是實驗室產(chǎn)品而無法投放市場。
從性能的角度看,絕大部分情況下1ms以下的延遲都可以接受,對于高并發(fā)的復(fù)雜業(yè)務(wù)或者響應(yīng)苛刻業(yè)務(wù)會需要更高的延遲性能,要求在500us以下。