大家好今天為大家分享的是我們這個責貨科我們是一個出狀公司做的產品叫做昆仑貝斯是一個分屬數據庫主打TP場景實施這些AP產品分析這麼一個產品我們在這個這種水桶方案包括激光內化學群對桶方這麼請的部分先介紹一下我們這個產品架構核心技術然後這個理論化就是一般化的講述說數據庫系統對於這個雲計算這種服務化的這種價值尤其它講的主要的是講說這個K8S使用K8S技術然後使用這個容器怎麼樣做這種服務的這種調度啊 監控啊隨時去拉起啊等等那麼這些靈活性為什麼在雲的環境下能夠做到這種靈活性其實有一個其實有一個基礎就是這個數據庫系統搞可能的能力也就是說當很多這個服務在各個地方拉起的時候它數據還在這一點其實是一個有很難得的事因為這個數據量會很大大家會想去接它到然後我介紹我們空中貝斯這個高可用機制包括這種還有多機方的高可用還有這個這個容器化的一些展望對那麼空中貝斯呢是一個這種支持這種彈性深縮的分布式數據戶這個我們把這個數據呢把這個數據讓用戶以表為單位做這個切分比如說用戶可以定義一些分區表然後這個分區表呢我們空中貝斯就會把它放到不同的這個集群的這個分片上面去然後呢這些分片呢我們集群可以按區的去搬動這分片比如說一開始你有兩個數據分片看我們右邊那個圖那麼這個圖裡面有三個這個我們就要剎的這倒是剎的就算數據分片吧成為這樣然後呢這個三個這個剎的然後呢可能你後來也加了兩個變成五個了或者又加了十個等等總之就是說你可以按區增加這個剎的來增加存儲的空間以及增加計算能力同樣你也可以增加這個計算節點來增加這種查詢處理能力因為我們還支持這種AP的這些查詢的這種分析的能力所以比如說可能有些查詢節點計算負責比較重你就可以增加一些專業的節點做這種查詢分析我們也支持補血分離這樣的話這些查詢分析節點它就從這個這些查詢的背景節點去讀數據所以也不影響主機的這個血路這些是數據庫的一些一些這個這個我們這個產生的一些這個核心能力吧然後可能你比如說你後來數據這樣大了又增長負責提高了然後呢你就加了些查詢然後你就可以DBA就可以把這個數據呢讓系統把它搬一部分到這個其他的新增的查詢上就是彈性伸縮然後呢這個我們支持這個金融機高可用什麼意思呢就是這些機器它可能有有一定的概率會發生故障包括這個需要微保包括這個這個不小心的斷電之類的那麼在這些發生這些狀況的情況下呢我們能夠去把這個數據呢不丟不亂然後呢業務持續疫情提供小的30秒比如說主機點剛好掛了那麼能夠即時發現並且發生做這個自動準備切換這樣不需要人去介入馬上就可以在30秒以內繼續運行持續提供讀寫服務我們也支持這種叫做多機房的高可用要不講到還有同一地雙火然後包括我們也有這個極致的數據安全保障能力今天主要重點就是這個高可用很紅色的部分然後呢我們目前互相對此支持一部分就是基本的開發這種計劃部署主要是有有特別組件由於它使用了一些其他的比如說開源的組件然後呢那些組件它不支持容器就是這種譽名的就是它不去使用IP地址等等還有一些細節的這目前還有一些部分的組件就是基本上是plasmatic介紹到然後還不支持容器的話總之是說但是我們後來會去把這些都做全了然後HTAP另外一個能力就是這個叫數據分析的能力那麼這塊能力就是讓用戶能夠這個做這種分析的查詢用最新的這種TG的業務數據來做分析提供這種最及時的這種數據分析什麼最新的數據然後我們支持這個買賊戶PG兩種協議兩種Z口語法這樣的話如果你的程序原先使用的是買賊戶或是Cospress那你不需要這個修改直接能夠使用或者被子來工作但是這時候現在變成分析式就給談情山座就可以有很好的高可用能力這是我們一些談情的能力ok然後呢咱們介紹一下就是說這個數據肚系統對於這個雲峰化的這種價值就是比如說這個這個在雲的環境下大家希望拿到一種就是說服務可以就是說隨時做這種遷移把這種靈活性那麼現在的技術KBS技術這種容器化的技術做得非常好可以在任何需要的地方發現比如說服務節點服務節點或者是談情山座增加更多的服務節點來擴整這個計算能力那其實包括這種多機房同時提供這種多機房的這種高可用能力服務的這種伸縮能力這是非常好的技術那其實這一套技術這些服務其實他很多時候是需要什麼數據肚系統的所以呢其實數據肚系統提供了一個基礎的一種能力是什麼呢就是你的這個服務它需要在本地的這個機房有數據因為這個服務數據還不能離得太遠假設它是跨機房的性能就延遲這個增大你都不知道跨成了那那個延遲就非常大事實上就是一般不會那麼去用那麼所以呢就需要什麼呢其實數據肚系統提供了一種基礎的能力那麼也就是說數據肚系統也要去比如說要在多個地方上有多份的數據上方的服務才能夠牽到那些地方他牽過去以後沒有數據了跨機房的數據那就太慢了當然有些服務它是不依賴數據肚的那就非常離譜了但是也確實有很多服務它是依賴數據肚對吧這個微服務現在很多這種很多這種場景很多都是用微服務來做那麼這個就是通常是依賴數據肚的很多服務所以呢大家會發現說其實這個數據肚系統是它的這種跨機房的能力這種跨機房的多機房的高可用性其實對於上層這些服務的這種穩定穩定穩定的穩定穩定的遷移非常重要所以呢比如說我們看到說這個計算和數據的高可用首先是說他們的這個數據量計算的話比如說這些服務它是一種程序的能力其實本身就是程序文件比如說我們放的多個機房都有那麼就可以用可是它是有容器的形式存在的那種多個機房都都放著就可以而且這個遷移它這個數據量比較小因為它這個容器一般的數據量是比較小的但是這個數據呢它是一個很多時候是數據量分成大數百記幣的長件的那個幾十記幣也非常長件然後它的記幣也是也是很多的那麼這時候會發現說如果這麼大的數據它沒辦法跟著那個計算就沒辦法跟著那些程序小的這個文件一起去簽但是數據量太大球中的量比較大所以呢這就是一個區別還有一個區別是什麼呢數據它是變的就是在業務運行當中這個程序文件這個程序邏輯它是不變的它一程度容器的形式就在會裏呈形式它基本上不用變的但是那個數據是變的那個數據的話比如說關鍵數據或者它那個數據經常在業務運行當中它就在修改那這是一個區別這個區別導致什麼呢就是說我們需要其實就把這些是變化的數據它的變化傳到這個多幾房多份數據上才能夠讓這個上層的容器能夠隨時保護錢簽過去就有立刻最新的數據所以這裏其實數據構性提供這種基礎的能力所以呢相應的這個就是說由於這些異同吧導致說這個計算和數據的這個高能就類的不要計算的話就是隨時去讓它起伏這個iClouds這些幾群的那種基礎能力就先做得非常好但是數據這份它比較大部分的數據站通常都比較大我們一方到處隨時就隨時跑隨時就表級就起了所以必須什麼呢比如說有多份數據在各個基房各個這個可用區或者是包括夥伴用的話這個私有的這個基房在有數據在公園上也要有總之就是如果你單用的時候才能過錢才發現肯定好幾分鐘甚至是個玩小時就來得及所以呢是這麼情況所以呢就是比如說的雲服務是雲計算的技術能力能夠確保說隨時拉起就是說單空區或者是叫多雲多基房混合用這些反正就是數據你希望你的服務在哪裡都可以跑起來的話那個地方如果它依賴於這些數據庫的話那地方肯定得有數據否則的話這個服務起來沒有數據所以這個是挺有趣的一點吧就是下面就講一下是我們庫人貝斯的集權我們是怎麼提供這種剛講的高可用其實我們有兩套房一種是基於容器KBS這種方案才會講另外一種就是說這個這個我們目前花了挺多精力時間做的一種相當於是自己做了一套做這些服務的監控服務的這種節點的拉起做這個集權的高可用確保其實目標就是確保它的目標其實特別是比較像就是確保服務持續的運行然後哪裡當了就把它拉起來只不過對於數據後它複雜的是說你還得確保這個數據它的一致性你拉起來以後那個數據它得是對的不能有丟失損失業這些所以複雜性更大一些所以相對就有這麼些組件這些組件具體幹啥其實但也不用去仔細看反正就是這些組件確保就是它講的這些目標那麼總來說這個流程就是說一開始先把這個服務器用一套工具把它出示化了出示化以後這些機器上每一個都有我們所需要的所有的我們自己的這些組件某塊兒程序文件或者是刀殼鏡像然後這個後續我們就有一個管理工具也就是一種APIclass manager API用這管理工具叫Spanel你可以用點數標的方式去合一個創建機群在你剛才出示化過的這些機器上你也可以調class manager API去創建機群等等這後續的事情就非常自動化這樣一個一個工作機制然後呢我們這個高坤分好幾部分第一部分最基本的就是這個機群內這個高可用什麼意思呢我們這個FoSync就確保說這個剛才講的這種SAD這個幼眉的圖這個SAD你看它這個柱和背柱是數學生寫的到柱上計算機件把運用戶的數據先查做著這個就是查詢處理就是你一個人拿對敵敵的這些操作它會送到電線上來執行經過拆分比如說你拿對的一個表可能某個臺線皮革上好多行它是放在不同的SAD那麼接著接著經過處理以後就會發到各自的那個SAD發那個針對性的語句去更新相應的數據就是這個例子那總之就是發下來的語句主機電上先執行然後把冰繞傳到背機那麼我們這個FoSync就確保說這個背機上每次任何事物提交它都有這個主機全部的這個冰繞這樣的話一旦主機電消失了這個接壞我們會自動發現這個狀況然後做指揮接壞那麼現在主機電上就剛才全部這些數據更新就不會損失這個丟失這個數據這就是FoSync然後呢我們能夠在這個就打到我剛才講的說30秒內完成這種接壞而且不丟失數據就RTO等於0RTO小於30秒那麼和這個設計法就把這個比起來的話不管是在性能上還是在那種性能級別上都可以做得更好那這塊呢就不細展開了我們官網上有些穩當大家可以仔細看一下有興趣的話然後呢這個FoSync的H&A就是剛才講的說能夠監測主機電監測狀況然後自動做這個懸主指揮接壞目標就確保主機電它是持續的持續的提供服務的那然後呢我們就講一下這個多機房的高等是什麼意思呢對我們這個能夠付出到多個機房上那這個機房在雲的環境下我們可以認為它就是比如說你可以把可動區看都是機房它是一個本上其實是一件事只是這個數與不同那總來說多機房達到高可動的意思就是假設一個機房不離可動區整體消失了的時候那麼這個集群上來的提供服務這是一個更高級別的一個高可動能力那麼怎麼做呢其實就是把這個集群這個SAD剛才講的SAD一個SAD部署到這麼多個機房上這裡可以看到說這裡有這個這是其中一個SAD的佈置那麼一個機型它有多個SAD那麼一個都是這麼佈置的那它怎麼佈置呢就是這個這個主機房主城的主機房上它有一個這個主節點然後呢主城的這個主機房也有一個背景這個都是做夫姓夫之的什麼意思呢就是主上的任何事務提交它背上一定一定是收到了主才會告訴客戶大家說這個事務提交成功了這個意思那麼告訴客戶大家說事務提交成功以後呢這筆事務那麼數據庫系統才有義務有責任保證它不會丟失這個意思所以呢這個夫姓的這種背呢就是在每個機房都有這麼每一個這個主城的背機房都放一個這樣的話呢確保如果這個主城的主機房掛了成績掛了那麼我們機房能夠自動的切換切換這個主機房切換到主城的某個備選的主機房這樣的話那麼機群整體仍然是很提供服務的提供多些能力的而且它不會丟失數據然後呢就是這個另一種情況就是假設主城整體好幾個機房同時都換了但是這種情況其實是不會發生的就是幾乎不會發生蓋這機機小其實可以忽略不計所以很多時候這些其實是實際的部署通常就是所謂的同城兩機房之間也就夠了那麼除非一些比如金融非常高的可高興要求才會有這個異地也要搞一個機房由於異地這個延遲很大就不能使用強弄過否則的話事務處理的性能就會大大降低那麼只能是異部的異部的就意味著什麼呢如果這個假設主城這些機房消失了那麼這個備用這個備成的這個這個機房它可能就會丟失一些數據那這是不得不不得不是這樣的那麼意味著就這種情況下就可能需要人工介入因為可能那個備上它就沒有收到全部的這個主的這個數據那總之這是極力幹的事那麼我們在這種空置下還可以看到說我們的其他組件像計算幾點那這個計算幾點就是在每個機房都放一塊就可以了這樣它切換到哪個機房做主機房那麼像一個使用那個機房的計算節點那還有像這些管理節點class manager這些就是每個機房都有所以呢就切換到哪裏就使用哪個機房的同時這class manager它是一個它是一個高可用機群這個這裏的一些技術細節也不展開總之就是說class manager我們這個管理機群也能確保它自己是高可用的它在機房掛下去也能正常工作然後呢我們再看一下說我們目前這個這種方案的一些不符就是說就是主要是這個什麽呢主要是這個對這是我們以後可能會改進改進的一個方向主要是在雲這種環境下的一種就是說其實我們這個高可用方案我們所有這個高可用技術其實是面向的是什麽情況呢是這個就是我們部署在我們部署的雲環境不使用雲的這種分布式文件系統的這種場景而是說除了一部系統自己負責高可用自己負責這個彈性伸縮那假設說假設說現在咱們想把共產貝斯部署到這個雲的環境比如工藝運用現在共產貝斯也在阿里雲上你可以在阿里雲的市場上買這個共產貝斯服務那這種雲環境下部署共產貝斯那其實當然也是可以的因為這個這個分布式文件系統它向上提供的也是這個炮隊和API所有的調用它都是支持的程序其實自己感覺不到的時候用的是本地的文件系統還是這個雲的所以但是它有個技術是說由於這個分布式文件系統本來它就是多位分的對吧那個框它是位分的幾遍至少三遍的分布反正我們的這個組合位又會分成三分分所以這時候有一個就是說這個數據這個數據空間就會比較大所以這個也是以後我做一個純粹的完全的這個基於這個分布式文件系統雲上的分布式文件系統做一個做一種這個另外一種長期的過程技術然後呢包括這個節點的這個遷移假設意思就是說假設這個在就是說這個如果是我們現在這種方案就是不依賴分布式文件系統情況下假設我要把這個那些數據從一個死另一個上面這時候花的時間會比較多一點假設你這個表有一個TV就是你把它頒過去需要花一個時間的雖然說在頒的過程當中其實你這個表還是能用的其實還是能讀寫的畢竟的話這個會傳出的數據比較多一些這是小小的美中不足當然其實用分布式文件系統它的效果也是一樣的就是不說那個頒的過程是在持續的頒每塊葉新增的一個葉負至三遍頒的三分而我们这种班是需要班的时候一次年班所以有这个区别然后就是这个对 这句话的意思就是公园上的没有发发出分布制文型的多福管的能力其实意思就是说其实那个没有使用它这个多福管的能力那么我们自己又做了三份是这意思就是变成九份了对 所以这个事我们后续就是说现在是会被这个公园委员做一套完全云上 装内体的一种新的技术那么我从来那个就是说我们开发工作量我们没有使用K8S而是自己做了一套这种完全的针对我们这个产品的高度我之前意味着就是使用这个就是我们需要开发这两个模块Node Manager Plus Manager那么假设是完全使用这种计划用K8S的话就不用做这些开发了当然我们这么做的有一个好处是我们可以定制自己需求而且我们不需要东西我们也不用做我们只实现自己需要的这些功能就够了所以总来说就是在功用上功力各级现在是可以正常工作完全可以工作然后但是有一些这种美中部组包括村主工间占用偏大包括我们开发了一些额外的模块当然这些模块如果是在语音下私有故事的话是必须得有的因为假设说没有K8S这些环境的话那么就得有这么一套这种能够把节点能够随时让它起来发给它状况然后要包括做准备切换等等另一块其实就是使用K8S的问题是什么呢就是比如说这个真要做准备切换的话用K8S该怎么做因为那块就是通用的其实K8S自己应该是不知道说怎么帮助就不系统做准备切换的这一块怎么样把这块定制的逻辑就是能够如果用Plugin的模式注入到K8S这个流程当中有这个机制我们其实才能够用K8S做一个完全超能体的一种高可用技术对 总之这是一些我们的展望那么对 这个就是刚才刚才有讲到那么对我们的目标就是说以后会做一种完全使用K8S的这种这种高可用技术完全K8S加上武器这样的话这个就完全相对和云的这种生态几乎是绑起来这个做成了变成了Kaunty的模式这种模式下可能这块高可用的机制会做得更简单一些K8S的量也小了很多然后这个就是包括存储的份数刚才讲的三成三 三成九份在这种模式下就只完全使用原本是文件系统本身的高可用我们就不用再数据步行从前再做一遍高可用那就是数据多费份多份对 挑战就是这块其实我刚才有讲到那其实现在看来的话今天大家讲K8S这些刚才前面几位嘉宾分享的都特别好就是说讲到K8S的各种用法我发现我们现在面临的一些挑战前面他们已经都有讲完特别是最后一条应该是有讲完前面有讲的然后像前面这些关于数据的部分数据的这种移制性这块是我们单独要解决的问题就是说K8S其实是帮不到我们的必须把我们的一些逻辑算法然后以插件的形式注入到K8S的球场採取这块来的话我们以后还要看一下怎么做对 这个是我们的产品的公众号欢迎大家关注喜欢我们的技术然后我们这个有一个社区小编的微信号可以欢迎大家加上它然后可以进入到我们的这个社区的这个这个有些很多技术就是讨论群平常就是交流这些数据不系统相关的技术包括马切克包括PG都有就是包括就是更更准就是关于我们控制Base的这种使用相关的技术日常我们每周也在做现场的Metal这些都有在我们的群里都有这些相关的通知 材料所以欢迎大家关注然后扫码进群你加这个小编然后让它把你拉到群里也不错我就讲完了大家如果谁有眼睛欢迎接着后不期待的接触对 后不期待您好我们有问题第一个问题就是我们这边对于那个这边是数据的杀灵分店嘛当你的这个三层三如果说我有六个节点七个节点或者是十几个节点之后你不说你选当出差群的时候可能不到一个热点的问题我想问问那个第一个就是热点的问题是怎么处理的第二个问题就是说说出了执行计划的问题咱们现在是否可以支持执行计划的广定还有一个最后一个问题就是现在我们认为的时候我们是否有劣势首先现在还不支持劣势什么时候然后那个热点怎么解决就是由于数据是分片存储的你说的热点可能是说假设某一个表所有的这个流量都乱到这同一个表了对吧它是一个热点是吧然后该怎么办它这些数据分布的话比如说我是三层三三不三分十都过了然后我参与就集中了这些三个三个分数就几点上等于十几点过了的话哎呦我参与了它都会存在这三个几点上所以说这边应该也是个问题如果说能把数据打散比如说这张表我对集中的存放在这三个几点上我可以认为的尤其它他们这一层的这种只定号不被存放在我存在这种数据点上那就会把这种表的整个数据打散对所以我们支持的这个数据分片怎么做的呢就是DBA需要做这个表的分片它需要根据这个比如说我是一个订单的表对吧我可能根据订单第一座的害手它拆成多少片然后放在这一扇子上假设说我这个假设DBA这个用法不逛然后呢它把一个比如说非常常用的一个小表然后放到了只放在同一个某一个扇子上导致它变成一个热点那说明这个时候它需要改这个算法我们支持一个最爬梯圣的工作的功能这种可以小拆除或者是可以对能够调整也就是假刚一开始没有设置好或是忘记去做这个表的这个分片了导致说后来发现这个真的不合适我们有个功能说让它能够随时的去改这个分片的方式然后而且这个我们叫REPATITIONonline DDLREPATITION什么意思呢不光能做REPATITION还能做online DDL比如说你讲对这个表比如说加个列改一些数据类型列的数据类型或者说再删个列或者调整这个顺序你可以一次性的把你想要的新表建好然后呢调整这个功能一次性就把这个表搬过去了而且搬的过程当中这个表持续可以读写它这就是用于帮DBA解决这种说这个可能业务的需求变或者说一开始设计不够良好然后这个这个这个或者是业务的规模再持续增大一开始没有想到后来后来它变成热点之类的情况随时可以按需求调整这个表的这个分片呀定义呀这都是可以的都是自动化的而且不不挺浮不影响原来那个表的读写你所问就是那个执行计划的广定问题是咱们现在是执行读写的你说执行计划广定是是个什么概念的就我们当时确实做查询我们在这个店里做完整的查询划流程解析然后优化就是就是我们有些计划就是一些自己的一些我一听去分析读写计划但是有时候他采的这个读采量或者怎么样他采的数据不一定准确让他生命的计划执行计划不一定比之前的读写计划那么这个时候可能我们会认为的去执行一个执行计划的他其实可以规定让他就好这个我的执行的这个首先是这么做的话肯定就是你说这种方法它和这种说使用平子有类型的缺点就是这种就是你要在这个应用程度谁要这么做你会发现你要敢用代码你要在代码都加一些平子还加一些你刚才说的绑定的那种调用都是机制那么这它是不是一种很好的方法我们目前也不只是一种方式但是说那个我们支持比如说执行计划就它优化行业会反复用这个长期化很多次的然后那个但是我们并不是支持说它去选择我用哪个计划因为这个事情它实际上现在让人发现没法用因为它是它不断的在在在运行当中的对不对你如果还需要再改改那个在连接里头改那个程序的改连接的状态是不好操作的就是实际上这个这个方法其实不太实用它可能适用于就是DBA透台去它发起了我们查军然后它发起了多次的时候它就需要改但在业务系统连上来然后它去你让它这么做其实是不合适因为你真的有很多人工界的东西它这个业务程序代码没办法就是把这些东西实现成一个实现在业务逻辑里面对不对实际上这种方式其实是并不实用的所以如果说查军用法做的做的不够好的时候应该我们会改进这个查军优化的这条逻辑去把这个比如说把这个统计信息弄得更准确比如说我们现在查军用法我们也只是把这个存处这个SAD上面的这个统计息汇聚到这个计算节点以便呢现在有准确的这个关于下面所有表的这个统计信息它以便能够产生准确的查军计划我们是通过这种方式来解决这个查军计划不够好的问题或者说甚至是说是不是我们这个目前的查军优化的有些关键的参数设定不合理总之我们是通过改进这个程序软件本身就是把这个负担推给用户因为其实用户让用户的设计能够改在实际上就没法用它包括那个hint其实hint有个问题是什么呢随时你这个数据的变化就发现原先管用的hint后来不管用了比如说你要求它必须就这样一会儿这个特质定的数据但可能随着这个表的数据变化加上或者减长或者是它里面行的那个分布的变化然后比如说某些那个值它在数据上越来越多它这个数据不是平均分布它也这个所谓的偏邪就会导致什么原先好多次成绩后来就不好用了再慢了之类的或者说原来慢了后来它又突然又变快了所以这个时候都是长期化其本身做得不够好的等问题所以得改自己的这个产品的实现寻到不快谢谢大家然后大家现在我们的行令可以加我们的信息二礼了谢谢接下来是来自理想的张文杰老师给我们分享原生不在其内的技术战阵好 再掌声