成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

業(yè)務層,到底需不需要服務化?

開發(fā) 開發(fā)工具 前端
除了基礎數(shù)據(jù)的訪問需要服務化,業(yè)務層是否需要服務化?如果需要,什么時機進行服務化?這是本文要討論的兩個問題。

[[358813]]

很多公司,都實施了微服務架構(gòu),底層抽象出很多基礎數(shù)據(jù)服務。

基礎數(shù)據(jù)的訪問服務化之后,架構(gòu)如上:

  • 站點業(yè)務通過RPC接口,調(diào)用基礎數(shù)據(jù)服務;
  • 基礎數(shù)據(jù)服務通過DAO,從db/cache獲取數(shù)據(jù);
  • db/cache存儲數(shù)據(jù);

除了基礎數(shù)據(jù)的訪問需要服務化,業(yè)務層是否需要服務化?如果需要,什么時機進行服務化?這是本文要討論的兩個問題。

隨著時間的推移,系統(tǒng)架構(gòu)并不會一成不變:

(1)隨著業(yè)務越來越復雜,業(yè)務會不斷進行垂直拆分;

畫外音:以58同城為例,有招聘、房產(chǎn)、二手、二手車、黃頁等多個業(yè)務。

(2)隨著數(shù)據(jù)越來越復雜,基礎數(shù)據(jù)服務也會越來越多;

畫外音,例如:用戶服務,訂單服務,搜索服務,推薦服務等。

于是系統(tǒng)架構(gòu)變成了上圖這個樣子,業(yè)務垂直拆分,有若干個基礎數(shù)據(jù)服務:

  • 垂直業(yè)務要通過多個RPC接口訪問不同的基礎數(shù)據(jù)服務,服務共享是服務化的特征;
  • 每個基礎數(shù)據(jù)服務訪問自己的數(shù)據(jù)存儲,數(shù)據(jù)私有也是服務化的特征;

上面架構(gòu)圖中的依賴關(guān)系是不是看上去很別扭?

  • 基礎數(shù)據(jù)服務與存儲層之間連接關(guān)系很清晰;
  • 業(yè)務站點層與基礎數(shù)據(jù)服務層之間的連接關(guān)系錯綜復雜,變成了蜘蛛網(wǎng);

再舉一個更具體的例子,58同城列表頁站點如何獲取底層的數(shù)據(jù)?

  • 首先調(diào)用商業(yè)基礎服務,獲取商業(yè)廣告帖子數(shù)據(jù),用于頂部置頂/精準的廣告帖子展示;
  • 再調(diào)用搜索基礎服務,獲取自然搜索帖子數(shù)據(jù),用于中間自然搜索帖子展示;
  • 再調(diào)用推薦基礎服務,獲取推薦帖子數(shù)據(jù),用于底部推薦帖子展示;
  • 再調(diào)用用戶基礎服務,獲取用戶數(shù)據(jù),用于右側(cè)用戶信息展示;

如果只有一個列表頁這么寫還行,但如果有招聘、房產(chǎn)、二手、二手車、黃頁等多個業(yè)務,都這么獲取共性數(shù)據(jù),而只有少部分個性數(shù)據(jù),每次都這么一個個調(diào)用基礎服務,有大量冗余、重復、每次必寫的代碼。

特別的,不同業(yè)務上游列表頁都依賴于底層若干相同服務:

  • 一旦一個服務RPC接口有稍許變化,所有上游的系統(tǒng)都需要升級修改;
  • 子系統(tǒng)之間很可能出現(xiàn)代碼拷貝;
  • 一旦拷貝代碼,出現(xiàn)一個bug,多個子系統(tǒng)都需要升級修改;

如何讓數(shù)據(jù)的獲取更加高效快捷呢?

業(yè)務服務化,通用業(yè)務服務層的抽象勢在必行。

通過抽象通用業(yè)務服務層,例如58同城“通用列表服務”:

  • 業(yè)務站點層,可以通過RPC接口,像調(diào)用本地函數(shù)一樣,調(diào)用通用業(yè)務服務,一次性獲取所有通用數(shù)據(jù);
  • 通用業(yè)務服務,也可以通過多次調(diào)用基礎數(shù)據(jù)服務提供的RPC接口,分別獲取數(shù)據(jù),底層數(shù)據(jù)獲取的復雜性,全都屏蔽在了此處;

是不是連接關(guān)系也看起來更清晰?

這樣的好處是:

  • 復雜的從基礎服務獲取數(shù)據(jù)代碼,只有在通用業(yè)務服務處寫了一次,沒有代碼拷貝;
  • 底層基礎數(shù)據(jù)服務接口發(fā)生變化,只有通用業(yè)務服務一處需要升級修改;
  • 如果有bug,不管是底層基礎數(shù)據(jù)服務的bug,還是通用業(yè)務服務的bug,都只有一處需要升級修改;
  • 業(yè)務站點層獲取數(shù)據(jù)更便捷,獲取所有數(shù)據(jù),只需一個RPC接口調(diào)用;

于是,當業(yè)務越來越復雜,垂直拆分的系統(tǒng)越來越多,基礎數(shù)據(jù)服務越來越多,底層數(shù)據(jù)獲取復雜性成為通用痛點的時候,就應該抽象出通用業(yè)務服務,簡化數(shù)據(jù)獲取過程,提高數(shù)據(jù)獲取效率,向上游屏蔽底層的復雜性。

最后再強調(diào)兩點:

(1)是否需要抽象通用業(yè)務服務,和業(yè)務復雜性,以及業(yè)務發(fā)展階段有關(guān),不可一概而論;

畫外音:如果沒有多個業(yè)務線,大概率基礎服務就夠用。

(2)需要抽象什么通用業(yè)務服務,和具體業(yè)務相關(guān);

畫外音:帖子列表業(yè)務服務,帖子詳情業(yè)務服務,是58同城特有的;而基礎服務,例如用戶,訂單,支付等基礎服務,基本上各個公司是類似的。

任何脫離業(yè)務的架構(gòu)設計,都是耍流氓。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2022-02-15 07:26:34

web前端算法題

2010-11-23 10:55:47

跳槽

2020-09-09 10:07:06

導航手機導航北斗導航

2023-10-04 00:19:00

Java開發(fā)

2011-09-02 09:45:39

交互設計Android

2009-11-23 12:45:22

2010-07-29 09:28:02

VMware虛擬化云計算

2017-10-21 22:47:46

服務化業(yè)務層分層架構(gòu)

2018-01-17 15:33:14

2017-03-13 13:54:40

戴爾

2017-08-08 14:33:36

無服務計算服務器

2015-09-14 11:06:53

PYTHON運維

2015-07-02 14:15:28

云遷移應用重構(gòu)頭號難題

2020-02-29 15:58:37

iPhoneiOS安卓

2012-08-23 09:50:07

測試測試人員軟件測試

2011-04-07 15:19:37

路由器

2015-09-30 09:57:53

天分熱情工程師

2015-08-20 10:56:19

算法界面開發(fā)

2013-12-02 09:43:29

字符串編程

2024-02-22 09:00:00

LogitMat數(shù)據(jù)集算法
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 成人免费三级电影 | 日韩中文字幕网 | 久久久久久久国产精品视频 | 伊人久久综合 | 欧美激情国产精品 | 欧美亚洲国语精品一区二区 | 精品久久一区 | 成人国产在线观看 | 亚洲视频在线观看免费 | 国产成人免费在线观看 | 中文字幕亚洲一区二区三区 | 欧美日韩a| 亚洲一区中文字幕 | 久久久成| 亚洲天堂免费 | 亚洲人成免费 | 欧美精品片 | 国产1区2区在线观看 | 毛片com | 精品美女久久久久久免费 | 中文一区| 丁香婷婷久久久综合精品国产 | 在线一区 | 免费在线成人网 | 国产精品区一区二 | 久久精品这里精品 | 免费一区二区 | 日韩视频a | 久久成人国产精品 | 一区二区三区四区国产 | 成人特区 | 亚洲天堂精品久久 | 97精品国产97久久久久久免费 | 久久视频精品 | 夜夜爽99久久国产综合精品女不卡 | 狠狠干狠狠操 | 午夜一区二区三区在线观看 | 黑人精品欧美一区二区蜜桃 | 日韩免费高清视频 | 紧缚调教一区二区三区视频 | 国产精品久久久久久吹潮日韩动画 |