2021-01-25 今日雜記

最近完成了群組模塊的簡單的CRUD的編寫,在編寫過程中使用了Mybatis Plus爽蝴,好好地偷了一把懶沐批。不得不說MP是真的香,不僅節(jié)省了很多寫mapper數(shù)據(jù)庫配置蝎亚、mapper接口的時間九孩,甚至還提供了很多鍵的自增的策略,鍵的自填充策略等发框。最有料的還是代碼的逆向生成了躺彬,雖然對達夢數(shù)據(jù)庫的小寫模式不友好,需要自己寫入實體類的字段梅惯,但是其他方面都還好宪拥。

哦,當然了铣减,如果想的話她君,可以直接在controller中調(diào)用BaseService中的方法進行數(shù)據(jù)庫的操作,但是為了讓控制層看著簡潔一點葫哗,這里還是把業(yè)務(wù)邏輯放在了Service的實現(xiàn)中缔刹。By the way,如果想的話劣针,還可以直接開啟Active Record模式校镐,直接通過實例對象進行數(shù)據(jù)庫的操作。

MP當然還提供了邏輯刪除(deleted)捺典,樂觀鎖(version)鸟廓,多租戶(tenant_id),這些的實現(xiàn)類似辣苏,都是在sql中多加入了一個條件肝箱,雖然原理簡單,但將這些邏輯交給MP稀蟋,實屬方便煌张。

當然上述的種種,說破天就是一個CRUD退客,我們的真的業(yè)務(wù)邏輯和架構(gòu)需求如下:

1. 緩存的構(gòu)建

如果只是針對單套CRUD的操作而言骏融,或者直接說链嘀,針對單個Mapper進行緩存,那么直接采用Mybatis的二級緩存档玻,何樂而不為呢怀泊?二級緩存可以針對select方法進行緩存,針對update误趴、delete方法進行緩存刪除霹琼,但是目前的項目中,顯然不是這樣的場景凉当。

幾個Mapper之間存在一定的交互枣申,即存在多表查詢的情況,那么又有下面兩種情況:

  1. 兩個Mapper在同一個服務(wù)器上看杭,那么可以通過cache-ref將緩存空間指向另一個Mapper忠藤,可以實現(xiàn)多表的二級緩存,但是這樣的話楼雹,只要有一個表更新或者刪除都會更新緩存模孩,在無形中增加了開銷,且使用不當贮缅,會存在臟數(shù)據(jù)
  2. 兩個Mapper不在一個服務(wù)器上......??榨咐,不用多說了吧。

所以建議携悯,還是一般情況下祭芦,僅在單表情況下使用二級緩存(或者遵守二級緩存的注意事項)

所以還是自己實現(xiàn)緩存邏輯比較合適筷笨。

那么這里就涉及到了另一點:如何感知其他微服務(wù)對數(shù)據(jù)源的操作憔鬼,進而更新緩存呢?

一個簡單的應(yīng)用場景:

Ⅰ服務(wù)用到了A(x)胃夏,B(x,y)兩張表轴或,其中均有x字段,并通過該字段進行關(guān)聯(lián)仰禀,Ⅱ服務(wù)中用到了C(y)表照雁,其中存在y字段,當Ⅰ服務(wù)通過相關(guān)的SQL語句答恶,獲取了x,y字段饺蚊,并以一種數(shù)據(jù)結(jié)構(gòu)存入了redis,那么當Ⅱ服務(wù)通過C表修改了y字段悬嗓,此時污呼,用戶在該階段去讀取redis種的緩存時,緩存中的y字段包竹,即為臟數(shù)據(jù)燕酷。

那么問題就來了籍凝,如何做到redis中的字段和數(shù)據(jù)庫中的字段同步?或者苗缩,換一個角度饵蒂,如何做到,在其他服務(wù)操作了與redis中相關(guān)字段對應(yīng)的數(shù)據(jù)庫字段后酱讶,redis如何同步更新退盯?

根據(jù)初步調(diào)研,阿里推出的一個開源的數(shù)據(jù)同步中間件canal泻肯,可能可以解決這個問題得问,但是!软免! 項目中使用的是DM數(shù)據(jù)庫宫纬,中間件并不支持。??

2. 數(shù)據(jù)更新的問題

上面的問題膏萧,是針對緩存的漓骚,直白點兒,就是針對redis和數(shù)據(jù)庫的同步問題的榛泛,而下面要講的問題蝌蹂,是針對兩個數(shù)據(jù)庫之間的。

說到這里曹锨,相信很多盆友孤个,都想到了分布式事務(wù)的處理方案,如阿里三件套中的seata沛简,但是以目前個人的了解齐鲤,似乎,并不能解決類似的問題

我們在采用微服務(wù)架構(gòu)之后椒楣,微服務(wù)的數(shù)據(jù)庫之間存在上述的一種關(guān)聯(lián)给郊,當我們在單庫或者說單schema中可以交由數(shù)據(jù)庫,通過簡單而暴力的級聯(lián)刪除處理捧灰,但是在分布式架構(gòu)下淆九,我們表不會在一個庫中,甚至不會在一臺服務(wù)器上毛俏,這時炭庙,就需要思考如何在這種情況下進行數(shù)據(jù)的"級聯(lián)"更新刪除。

目前想到的幾種不成熟的方案:

  1. 通過消息隊列煌寇,讓"外鍵"服務(wù)(這里本人指的就是內(nèi)含外鍵的服務(wù)焕蹄,且外鍵是待刪除的條目主鍵),訂閱|監(jiān)聽“主鍵”服務(wù)唧席,當“主鍵”服務(wù)調(diào)用刪除的時候擦盾,通知“外鍵”服務(wù)嘲驾,刪除其中相關(guān)的條目。
  2. “外鍵”微服務(wù)暴露根據(jù)“外鍵”刪除條目的接口迹卢,在“主鍵”服務(wù)的刪除操作中辽故,調(diào)用“外鍵”服務(wù)的相關(guān)接口,進行相關(guān)數(shù)據(jù)的刪除【耦合度較高】
  3. 與第二種類似腐碱,只不過誊垢,將這種統(tǒng)一的刪除提取為一個服務(wù),該服務(wù)中症见,托管了根據(jù)特定鍵喂走,刪除相關(guān)表中字段的服務(wù)∧弊鳎【耦合度較低】

3. 位置共享服務(wù)

又談到了老問題上芋肠,如何在位置共享的時候,如何將最新的位置推送給相關(guān)的群組中呢遵蚜?
這里用到實時位置帖池,同時還要進行保存,還要供前端進行顯示(就不讓前端去數(shù)據(jù)庫里找了)吭净,甚至還可能對接其他的服務(wù)睡汹。

目前的初步想法:

提取一個位置獲取的微服務(wù),用于獲取節(jié)點寂殉,或者說用戶的實時位置囚巴,獲取之后有三種處理情況:

  1. 存入數(shù)據(jù)庫
  2. 存入redis
  3. 發(fā)送給前端顯示

那么回到最初的問題,群組如何響應(yīng)式地獲取用戶的位置友扰?即在用戶位置更新時彤叉,才進行相應(yīng)用戶的更新,如果用戶關(guān)閉共享焕檬,及時在群組中剔除該用戶姆坚?

當用戶對某個群組開啟共享時,用戶開始訂閱當前群組中的所有在線用戶的位置实愚,這里,訂閱的數(shù)據(jù)源就是來自位置獲取微服務(wù)兔辅,所以腊敲,這個服務(wù),要能夠得知维苔,哪些用戶在哪些群組碰辅?這些用戶的實時位置?并維護好實時的用戶群組表介时!當?shù)玫饺航M服務(wù)的訂閱請求時没宾,要能夠?qū)⒋粲嗛喨航M中的用戶位置信息進行返回凌彬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者循衰。
  • 序言:七十年代末铲敛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子会钝,更是在濱河造成了極大的恐慌伐蒋,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迁酸,死亡現(xiàn)場離奇詭異先鱼,居然都是意外死亡,警方通過查閱死者的電腦和手機奸鬓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門焙畔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人串远,你說我怎么就攤上這事闹蒜。” “怎么了抑淫?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵绷落,是天一觀的道長。 經(jīng)常有香客問我始苇,道長砌烁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任催式,我火速辦了婚禮函喉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荣月。我一直安慰自己管呵,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布哺窄。 她就那樣靜靜地躺著捐下,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萌业。 梳的紋絲不亂的頭發(fā)上坷襟,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音生年,去河邊找鬼婴程。 笑死,一個胖子當著我的面吹牛抱婉,可吹牛的內(nèi)容都是我干的档叔。 我是一名探鬼主播桌粉,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衙四!你這毒婦竟也來了铃肯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤届搁,失蹤者是張志新(化名)和其女友劉穎缘薛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卡睦,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡宴胧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了表锻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恕齐。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瞬逊,靈堂內(nèi)的尸體忽然破棺而出显歧,到底是詐尸還是另有隱情,我是刑警寧澤确镊,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布士骤,位于F島的核電站,受9級特大地震影響蕾域,放射性物質(zhì)發(fā)生泄漏拷肌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一旨巷、第九天 我趴在偏房一處隱蔽的房頂上張望巨缘。 院中可真熱鬧,春花似錦采呐、人聲如沸若锁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽又固。三九已至,卻和暖如春会通,著一層夾襖步出監(jiān)牢的瞬間口予,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工涕侈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煤辨。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓裳涛,卻偏偏與公主長得像木张,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子端三,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容