數(shù)據(jù)庫(kù)行業(yè)解決方案都寫(xiě)了啥
原創(chuàng)隨著國(guó)產(chǎn)數(shù)據(jù)庫(kù)在各行業(yè)應(yīng)用規(guī)模不斷增大,并開(kāi)始進(jìn)入深水區(qū)。國(guó)產(chǎn)數(shù)據(jù)庫(kù)從之前的不能用、不敢用逐漸過(guò)渡到如何用好。特別是以分布式數(shù)據(jù)庫(kù)為代表的新架構(gòu)數(shù)據(jù)庫(kù)產(chǎn)品的出現(xiàn),顛覆了原有架構(gòu)產(chǎn)品,之前很多的知識(shí)不能復(fù)用,如何用好這些成為很多用戶(hù)所關(guān)注的問(wèn)題。近期,筆者也觀(guān)察到部分國(guó)產(chǎn)數(shù)據(jù)庫(kù)廠(chǎng)商經(jīng)過(guò)階段性實(shí)踐后,開(kāi)始將使用心得形成行業(yè)解決方案,這無(wú)疑對(duì)用戶(hù)會(huì)帶來(lái)積極影響,加速行業(yè)推廣使用。本文將結(jié)合近期發(fā)布的兩家廠(chǎng)商的行業(yè)解決方案為基礎(chǔ),說(shuō)明下數(shù)據(jù)庫(kù)行業(yè)解決方案都應(yīng)包括什么內(nèi)容。
1、場(chǎng)景:讓用戶(hù)判斷是否適合自己
用戶(hù)的場(chǎng)景千差萬(wàn)別,沒(méi)有一款產(chǎn)品是可以通吃所有場(chǎng)景的,因此明確的場(chǎng)景描述尤為重要。通過(guò)這部分描述,用戶(hù)可以快速判斷是否適合自己。這其中場(chǎng)景分為兩種:
(1)技術(shù)場(chǎng)景
一種方式是描述技術(shù)場(chǎng)景,如常見(jiàn)的 OLTP、OLAP、HTAP 等,但這些還是比較寬泛的,需要更進(jìn)一步的細(xì)化。如處理的數(shù)據(jù)規(guī)模大小、計(jì)算邏輯怎樣、延遲要求如何等等。如下面這段描述:這是一款分布式數(shù)據(jù)庫(kù),可滿(mǎn)足百TB以下的關(guān)系型數(shù)據(jù)存儲(chǔ),可提供數(shù)萬(wàn)的高并發(fā)支持,適用于數(shù)據(jù)計(jì)算邏輯簡(jiǎn)單,支持簡(jiǎn)單點(diǎn)查、范圍查詢(xún)及數(shù)據(jù)變更,在高并發(fā)下情況下可提供百毫秒級(jí)別的響應(yīng)時(shí)間等。上述技術(shù)場(chǎng)景描述,會(huì)給用戶(hù)一個(gè)較為直觀(guān)的印象。如果用戶(hù)也整理有自己的數(shù)據(jù)庫(kù)場(chǎng)景地圖(如下圖),就可以很容易的找到結(jié)合點(diǎn)。
(2)業(yè)務(wù)場(chǎng)景
另一種方式是描述業(yè)務(wù)場(chǎng)景,這種方式對(duì)用戶(hù)而言會(huì)更加簡(jiǎn)單直觀(guān),畢竟用戶(hù)是最了解自有業(yè)務(wù)的。用戶(hù)在第一時(shí)間就明確了這一產(chǎn)品是否適合自己。如在金融行業(yè),可以通過(guò)類(lèi)似下面的一段話(huà)進(jìn)行描述:某分布式數(shù)據(jù)庫(kù)產(chǎn)品適合于銀行核心系統(tǒng)分布式改造,過(guò)去此業(yè)務(wù)多是通過(guò)集中式架構(gòu)、通用硬件來(lái)支撐,無(wú)法滿(mǎn)足日益增長(zhǎng)的海量數(shù)據(jù)規(guī)模、業(yè)務(wù)連續(xù)性也較差。分布式數(shù)據(jù)庫(kù)產(chǎn)品具備海量規(guī)模、高性能處理、強(qiáng)一致事務(wù)保證、數(shù)據(jù)高可靠及服務(wù)連續(xù)性保證等,并已通過(guò)多年實(shí)踐在很多銀行系統(tǒng)核心改造中落地。通過(guò)上述一段描述,用戶(hù)可以很容易產(chǎn)生共鳴。用戶(hù)對(duì)自身業(yè)務(wù)是有著明確認(rèn)知的,例如銀行業(yè)業(yè)務(wù)分類(lèi)參考下圖。
2、架構(gòu):讓用戶(hù)了解產(chǎn)品是什么
數(shù)據(jù)庫(kù)產(chǎn)品是由多組件構(gòu)成,對(duì)于分布式架構(gòu)產(chǎn)品來(lái)說(shuō)尤為如此。如何讓用戶(hù)快速了解產(chǎn)品,可通過(guò)架構(gòu)部分進(jìn)行描述。這里可通過(guò)一張架構(gòu)圖進(jìn)行說(shuō)明,包括哪些組件、組件有何功能、如何與周邊生態(tài)協(xié)作、高可用實(shí)現(xiàn)機(jī)理等等。通過(guò)這部分可以讓用戶(hù)快速了解產(chǎn)品構(gòu)成、工作原理等內(nèi)容,也為后面進(jìn)一步展開(kāi)功能說(shuō)明做個(gè)鋪墊。下面通過(guò)一個(gè)分布式數(shù)據(jù)庫(kù)架構(gòu)示意圖說(shuō)明下
注意這里不是技術(shù)架構(gòu)、也不是部署架構(gòu)。前者更強(qiáng)調(diào)技術(shù)原理及實(shí)現(xiàn),后者則為實(shí)施規(guī)劃設(shè)計(jì)階段需考慮。這里就是簡(jiǎn)單的產(chǎn)品功能架構(gòu),讓用戶(hù)有個(gè)概括性了解即可。
3、功能:讓用戶(hù)了解我能干什么
(1)現(xiàn)狀描述
第一部分,重點(diǎn)是讓用戶(hù)了解現(xiàn)在產(chǎn)品能做什么。這里不是產(chǎn)品的功能手冊(cè),因此無(wú)需對(duì)功能做很詳細(xì)的說(shuō)明,但需要將一些重點(diǎn)的能力及用戶(hù)比較關(guān)注的部分都說(shuō)到。這里可包含但不限于這些內(nèi)容:
- 基本能力:ACID、SQL引擎等
- 存儲(chǔ)結(jié)構(gòu):行存、列存、索引結(jié)構(gòu)
- 高可用:?jiǎn)螜C(jī)、主備、雙活、多活
- 容災(zāi):?jiǎn)螜C(jī)房、同城多機(jī)房、異地等
- 擴(kuò)展性:接入、計(jì)算、存儲(chǔ)擴(kuò)展等
- 數(shù)據(jù)集成:導(dǎo)入導(dǎo)出、遷移同步等
- 安全能力:用戶(hù)、權(quán)限、加密、審計(jì)等
- 運(yùn)維相關(guān):管理、監(jiān)控、優(yōu)化、備份等
- 生態(tài)兼容:協(xié)議、語(yǔ)法、接口等
- 部署方式:物理機(jī)、虛擬化、容器、云
- 國(guó)產(chǎn)化:軟硬件、上下游
(2)歷史與發(fā)展
第二部分,是描述產(chǎn)品功能的發(fā)展歷史及未來(lái)路標(biāo)。產(chǎn)品功能發(fā)展是有一定傳承關(guān)系的,用戶(hù)可從演進(jìn)版本中找到發(fā)展脈絡(luò),更好地了解產(chǎn)品。同時(shí),產(chǎn)品未來(lái)發(fā)展也有助于用戶(hù)判斷產(chǎn)品未來(lái)發(fā)展策略及方向。下圖以 MySQL 為例,做個(gè)簡(jiǎn)單說(shuō)明。
4、規(guī)劃:解決用戶(hù)產(chǎn)品上線(xiàn)問(wèn)題
當(dāng)用戶(hù)對(duì)產(chǎn)品有了初步了解后,并有意愿后,該如何上手就是急需解決的問(wèn)題。首當(dāng)其中就是上線(xiàn),需做如下一些工作。
(1)硬件評(píng)估
數(shù)據(jù)庫(kù),特別是分布式數(shù)據(jù)庫(kù),通常有多個(gè)組件組成,不同組件的資源消耗模型不同,有的是 CPU 密集、有的是 IO 密集不等。這里需根據(jù)不同組件,給出硬件推薦的配置,方便用戶(hù)快速上手。如考慮國(guó)產(chǎn)化問(wèn)題,還需列明對(duì)應(yīng)的國(guó)產(chǎn)化軟硬件產(chǎn)品列表,供用戶(hù)參考。此外,還和部署方式有一定關(guān)系,如云、容器化部署也有著特殊要求。可參考下表
這里需要注意的是,資源配置不僅與角色有關(guān),也與負(fù)載有關(guān)系。上面硬件配置通常只是最低配置,實(shí)際生產(chǎn)環(huán)境可根據(jù)用戶(hù)負(fù)載進(jìn)行精確評(píng)估,這部分會(huì)在資源評(píng)估中詳述。
(2)資源評(píng)估
在做資源評(píng)估時(shí),會(huì)情況比較復(fù)雜,需要考慮多重因素。很多廠(chǎng)商都提供了一個(gè)評(píng)估模版,用戶(hù)可如實(shí)填入后,給出相關(guān)評(píng)估結(jié)果。下表簡(jiǎn)單說(shuō)明下需考慮的因素。
這其中會(huì)有一些閾值,是根據(jù)廠(chǎng)商產(chǎn)品長(zhǎng)期實(shí)踐后所得出的,是與產(chǎn)品自身架構(gòu)、功能有關(guān)。以負(fù)載維度為例,較大負(fù)載是需要更高的資源配置,可以簡(jiǎn)單根據(jù)一些指標(biāo)做下分列,這樣方便用戶(hù)選擇或內(nèi)置到資源評(píng)估小工具。當(dāng)然,如果能根據(jù)業(yè)務(wù)指標(biāo)做相應(yīng)的資源評(píng)估,無(wú)疑是更好的。
(3)容災(zāi)方式
很多行業(yè)都對(duì)業(yè)務(wù)連續(xù)性有一定的要求,因此需要確定具體應(yīng)用的業(yè)務(wù)連續(xù)性目標(biāo)、設(shè)計(jì)對(duì)應(yīng)的高可用方案。很多數(shù)據(jù)庫(kù)產(chǎn)品也都支持了如單數(shù)據(jù)中心高可用、同城雙中心、兩地三中心、多地多中心等容災(zāi)架構(gòu)模式。技術(shù)上基于多副本冗余技術(shù)、一致性復(fù)制技術(shù)和靈活高可用策略實(shí)現(xiàn)多種容災(zāi)方案,單臺(tái)服務(wù)器故障自動(dòng)切換到本數(shù)據(jù)中心其他機(jī)器的副本上;雙中心以上的機(jī)房故障時(shí),可快速切換到其他機(jī)房或者城市災(zāi)難中心,最大程度保證業(yè)務(wù)連續(xù)性。
5、開(kāi)發(fā):解決用戶(hù)應(yīng)用開(kāi)發(fā)問(wèn)題
產(chǎn)品上線(xiàn)后,下一步的問(wèn)題就是如何開(kāi)發(fā)對(duì)接,這里需要將開(kāi)發(fā)所關(guān)心的問(wèn)題一一說(shuō)明。
(1)快速入門(mén)
首先可以通過(guò)一個(gè)DEMO,讓用戶(hù)快速入門(mén)。選擇最主流的開(kāi)發(fā)語(yǔ)言,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 CRUD 即可。目的是使得用戶(hù)能夠快速上手。國(guó)內(nèi)很多產(chǎn)品都提供了一定的兼容性,例如兼容 MySQL、PostgreSQL、Oracle 等,其目的正是降低用戶(hù)使用門(mén)檻。
(2)開(kāi)發(fā)接入
開(kāi)發(fā)者使用此產(chǎn)品,需要關(guān)注的一些問(wèn)題。包括如:連接池配置、應(yīng)用高可用、負(fù)載均衡、字符集選擇、事務(wù)控制等。此外,還包括適配一些主流的開(kāi)發(fā)框架、日志跟蹤工具等,對(duì)于開(kāi)發(fā)一開(kāi)始關(guān)注的問(wèn)題都可在此處說(shuō)明。
(3)數(shù)據(jù)建模
主流的數(shù)據(jù)建模方法,是否適用于本數(shù)據(jù)庫(kù)產(chǎn)品,需要有哪些注意事項(xiàng)。
(4)結(jié)構(gòu)設(shè)計(jì)
數(shù)據(jù)庫(kù)對(duì)象設(shè)計(jì)上,有哪些注意事項(xiàng)。對(duì)于分布式數(shù)據(jù)庫(kù)而言,對(duì)象設(shè)計(jì)上需要做一些調(diào)整以適應(yīng)分布式架構(gòu),包括如數(shù)據(jù)分片策略、索引設(shè)計(jì)、自增類(lèi)型、庫(kù)內(nèi)計(jì)算(存儲(chǔ)過(guò)程、觸發(fā)器等)。特別是數(shù)據(jù)分片策略,尤為重要。分布式數(shù)據(jù)庫(kù)的基礎(chǔ)就是將數(shù)據(jù)“大而化小”,但不是所有數(shù)據(jù)對(duì)象都需要做分片。哪些做分片,哪些不做?選擇怎樣的分片算法?分片的粒度如何?如何規(guī)避熱點(diǎn)?如何解決關(guān)聯(lián)對(duì)象的分片問(wèn)題等等。上述問(wèn)題都是需要解決的,有些數(shù)據(jù)庫(kù)產(chǎn)品結(jié)合在行業(yè)的經(jīng)驗(yàn),將常規(guī)的分片策略抽象出來(lái)給出一定的最佳實(shí)踐,這對(duì)于用戶(hù)來(lái)講無(wú)疑會(huì)大大降低使用難度。通常有如下一些建議:
- 數(shù)據(jù)分片應(yīng)盡量均衡
- 盡量減少跨節(jié)點(diǎn)事務(wù)
- 集合業(yè)務(wù)特點(diǎn),梳理主題場(chǎng)景
- 同一主題選擇相同分片鍵
- 分片鍵字段保持穩(wěn)定
(5)語(yǔ)句開(kāi)發(fā)
制定一套應(yīng)用開(kāi)發(fā)遵循的開(kāi)發(fā)規(guī)范,有利于避免重復(fù)觸及數(shù)據(jù)庫(kù)使用常見(jiàn)問(wèn)題,提高可閱讀性和問(wèn)題定位速度。包括但不限于:命名規(guī)范、事務(wù)控制、語(yǔ)句寫(xiě)法,問(wèn)題常見(jiàn)于索引、排序、函數(shù)、分組、關(guān)聯(lián)等。
(6)性能優(yōu)化
將常用的性能優(yōu)化手段,加以說(shuō)明。可能包括如:性能分析手段、參數(shù)優(yōu)化、模型優(yōu)化、SQL調(diào)優(yōu)等。
6、遷移:解決用戶(hù)數(shù)據(jù)上線(xiàn)問(wèn)題
如何將用戶(hù)數(shù)據(jù)平穩(wěn)遷移上線(xiàn),很多產(chǎn)品都提供了獨(dú)立工具實(shí)現(xiàn)對(duì)異構(gòu)數(shù)據(jù)庫(kù)的遷移。這里可分為三個(gè)步驟:
(1)事前評(píng)估
完成遷移動(dòng)作,涉及到數(shù)據(jù)對(duì)象結(jié)構(gòu)遷移、數(shù)據(jù)自身的遷移以及負(fù)載評(píng)估。前者需要支持異構(gòu)數(shù)據(jù)庫(kù)對(duì)象的映射,這其中包括很多細(xì)節(jié)(如字符集、空值等),很多廠(chǎng)商都內(nèi)置于工具中來(lái)完成;數(shù)據(jù)遷移則涉及對(duì)遷移速度、斷點(diǎn)續(xù)傳、異常處理等問(wèn)題;最后則是數(shù)據(jù)庫(kù)負(fù)載能否在新產(chǎn)品中得以支撐。除此之外,還包括可能得回退步驟。
(2)事中遷移
正式的數(shù)據(jù)遷移,一般都包括全量數(shù)據(jù)遷移、增量數(shù)據(jù)遷移及數(shù)據(jù)比對(duì)三個(gè)階段。很多產(chǎn)品都內(nèi)置于工具中,提供一整套遷移方案。
(3)事后割接
當(dāng)都完成后,需完成最后的割接動(dòng)作,一般是通過(guò)流量重定向到新庫(kù)來(lái)完成。此時(shí),如果需要后備,可一并提供回流能力,保證可回切。
7、運(yùn)維:解決用戶(hù)日常管理問(wèn)題
運(yùn)維部分,包括的比較龐雜,如備份恢復(fù)、監(jiān)控報(bào)警、擴(kuò)縮容、升降級(jí)、日志分析等。很多產(chǎn)品都提供了運(yùn)維平臺(tái)來(lái)輔助完成上面這些管理動(dòng)作。
8、安全:解決用戶(hù)的后顧之憂(yōu)
安全部分,范圍也比較廣,包括主機(jī)安全、賬戶(hù)安全、傳輸安全、存儲(chǔ)安全、安全審計(jì)等。
9、案例:實(shí)踐出真知,效果案例見(jiàn)
很多用戶(hù)非常關(guān)心同行業(yè)的案例情況,一方面這些案例都是經(jīng)過(guò)實(shí)踐,具備一定的可參考性;另一方面同行業(yè)案例,往往還能反映出很多共性的問(wèn)題。這其中需重點(diǎn)描述出場(chǎng)景、架構(gòu)、效果即可。讓用戶(hù)有直觀(guān)印象即可,也勾起用戶(hù)嘗試使用的興趣。