數據庫防火墻關鍵特性系列之二丨高性能和可擴縮性
作為一個技術人,對于文字的造詣遠不及對代碼的掌控,筆者不擅長用華麗的辭藻表達數據庫防火墻所背負的重任,在大部分人眼中,它只是一個冰冷的盒子,但筆者依然希望依靠有限的語言能力,用技術人的思維把這樣一個盒子的自我進階之路講給你們聽。
實現了高可用性,解決了最基本的能不能串接部署的問題,數據庫防火墻的“人生”可以說成功了一小半,下一個人生挑戰隨之而來:高性能和可擴縮性。
在這里,我們還是有必要先介紹一下數據庫防火墻和傳統網絡防火墻的根本性差異:
一、關于深度協議解析和內容分析的復雜性挑戰
傳統網絡防火墻:通常只分析網絡層的包頭和部分協議特征,不會對通訊包進行深度分析,一般不會對應答包進行分析。
數據庫防火墻:需要對數據庫通訊協議的請求包和應答包(雙向包)進行深度分析:
1、對于請求包,需要解析出包中的SQL語句、參數化語句、參數值、跟蹤語句游標。
2、對于應答包,需要解析出返回字段信息、結果集、應答信息等。
3、對于SQL語句,需要進行詞法和語法分析(下一篇文章會介紹為什么需要進行語法分析,而不是簡單的關鍵詞匹配)。
4、對于參數值,和結果集,需要進行格式轉換,并根據策略進行必要的內容過濾。
很明顯,二者對通訊包的處理工作量存在很大差異。面對這樣的工作強度,我們必須賦予數據庫防火墻一顆強大的“心”,對其進行專門的處理邏輯優化和性能優化,能夠實現低延遲,保證數據庫操作的高吞吐量要求。
二、核心業務數據庫的高吞吐量和擴縮性挑戰
在以銀行、保險、電信為代表的大型企業,以稅務、海關、航空為代表的行業,和以快遞業為代表的新興領域中,相比大規模的WEB應用服務器集群,數據庫服務器基本上采用的是少量高端設備支撐大規模的核心應用,無論采用的是RAC集群還是分布式數據庫集群,核心業務場景多數都是采用非常高端的小型機來搭建,動輒上百甚至幾百個CPU,幾百GB的內存,高端磁盤陣列,支撐起強大的數據庫事務吞吐量(TPS)。
在這種場景下,對于串聯接入的數據庫防火墻,面臨“小馬拉大車”的局面,高吞吐量和可擴縮性挑戰有多嚴峻?下面兩個實例充分體現:
首先,介紹一個數據庫防火墻的實際經典案例:
數據庫防火墻經典案例 拓撲圖
在這個經典案例中,業務系統采用兩套RAC節點進行負載均衡(雙活)運行,常規穩定運行的情況下,單套RAC節點的性能指標需求如下:
當有一路網絡環境出現故障,原來分散在2套RAC節點上的的壓力將集中在一個數據庫防火墻上,也就是說,異常情況下,單臺數據庫防火墻面臨的是支撐2倍的吞吐量和會話量壓力,同時通訊包的延遲仍然需要保持在50微秒以內。
另外一個想拿來說說的案例,是截止到目前,數據庫防火墻面臨的***端性能案例:
數據庫防火墻高端案例 拓撲圖
在這個案例中,整體的數據庫集群的性能需求是:
折合到單個DBFirewall設備,考慮到設備故障情況,需要支撐的性能指標:
三、高性能和可擴縮性解決方案
通過介紹這兩個經典案例和高端案例,相信不用多說,大家已經能夠感受到數據庫防火墻必須具備怎樣一顆強大的心:低延遲、高吞吐量、高可擴縮性能力。
我們確立了這一目標,下一步要做的是制定具體的解決方案,核心技術點有四:
1.極小化每個SQL操作的處理過程
眾所周知,SQL語法分析非常耗時,需要專門進行優化:基于詞法和語法分析,對業務系統的SQL語句進行抽象化處理,形成軟解析結果,并對SQL語句進行序列化、標簽化,這樣就只需要對語法特征不一樣的SQL語句進行解析,而應用系統中SQL語法特征不一樣的SQL語句是有限的,這樣,就能夠極大的減少應用系統SQL語句的語法解析量。
2.無鎖化設計,支撐高并發下的線性性能
隨著系統并發量的增加,互斥鎖會成為主要的性能瓶頸點;無鎖化的實現方式是必然,必要時可以通過異步處理來提升吞吐量。
3.低延遲網絡處理技術
隨著吞吐量的增加,串聯的網絡處理開銷會成為主要的延遲;推薦采用基于Intel DPDK的透明網卡通訊包處理技術,跳過操作系統內核協議棧的處理,實現低延遲。
4.推薦采用經典的多進程機制
在關系型數據庫領域中,最經典的設計要數Oracle數據庫的多進程架構,每個數據庫的連接會話對應一個獨立的Oracle進程來處理,這樣的機制為數據庫帶來了兩個典型優勢:
高可擴縮性:隨著硬件性能的提升,可以實現接近線性的處理性能提升。
高安全性:一個會話(進程)的處理異常,不影響其他會話(進程)。
安華金和數據庫防火墻,正是基于以上四點核心技術設計開發的一款成熟的數據庫防火墻產品,且已經經過了社保,金融,運營商等高端行業的驗證。
至此數據庫防火墻的自我修養之二——高性能和可擴縮性介紹完畢,歡迎廣大用戶繼續關注數據庫防火墻的自我修養系列文章。
名詞術語解釋
[1]DPDK:全稱Data Plane Development Kit,是intel開發的x86芯片上用于高性能網絡處理的基礎庫;是一款數據包轉發處理套件;適合網絡數據包分析,處理等操作;對于大數據包的轉發,多核操作有一定的性能提升。