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

互聯網分層架構之DAO與服務化

開發 開發工具
互聯網分層架構的本質,是數據的移動。那么,什么時候進行DAO層的抽象,什么時候進行數據服務層的抽象?

互聯網分層架構的本質,是數據的移動。

互聯網分層架構演進的核心原則:

  • 讓上游更高效的獲取與處理數據,復用
  • 讓下游能屏蔽數據的獲取細節,封裝

這些在上一篇《互聯網分層架構的本質》中有詳盡的描述,在實際系統架構演進過程中,如何利用這兩個原則,對系統逐步進行分層抽象呢?咱們先從后端系統開始講解。

本文主要解答兩個問題:

  • 后端架構,什么時候進行DAO層的抽象
  • 后端架構,什么時候進行數據服務層的抽象

核心問題一:什么時候進行DAO層的抽象

一個業務系統最初的后端結構如上:

  • web-server層從db層獲取數據并進行加工處理
  • db層存儲數據

此時,web-server層如何獲取底層的數據呢?

web-server層獲取數據的一段偽代碼如上,不用糾結代碼的細節,也不用糾結不同編程語言與不同數據庫驅動的差異,其獲取數據的過程大致為:

  • 創建一個與數據庫的連接,初始化資源
  • 根據業務拼裝一個SQL語句
  • 通過連接執行SQL語句,并獲得結果集
  • 通過游標遍歷結果集,取出每行數據,亦可從每行數據中取出屬性數據
  • 關閉數據庫連接,回收資源

如果業務不復雜,這段代碼寫1次2次還可以,但如果業務越來越復雜,每次都這么獲取數據,就略顯低效了,有大量冗余、重復、每次必寫的代碼。

如何讓數據的獲取更加高效快捷呢?

如何讓數據的獲取更加高效快捷呢?

通過技術手段實現:

  • 表與類的映射
  • 屬性與成員的映射
  • SQL與函數的映射

絕大部分公司正在用的ORM,DAO等技術,就是一種分層抽象,可以提高數據獲取的效率,屏蔽連接,游標,結果集這些復雜性。

結論

當手寫代碼從DB中獲取數據,成為通用痛點的時候,就應該抽象出DAO層,簡化數據獲取過程,提高數據獲取效率,向上游屏蔽底層的復雜性。

核心問題二:什么時候要進行數據服務層的抽象

抽象出DAO層之后,系統架構并不會一成不變:

  • 隨著業務越來越復雜,業務系統會不斷進行垂直拆分
  • 隨著數據量越來越大,數據庫會進行水平切分
  • 隨著讀并發的越來越大,會增加緩存降低數據庫的壓力

于是系統架構變成了這個樣子:

業務系統垂直拆分,數據庫水平切分,緩存這些都是常見的架構優化手段。

此時,web-server層如何獲取底層的數據呢?

根據樓主的經驗,以用戶數據為例,流程一般是這樣的:

  • 先查緩存:先用uid嘗試從緩存獲取數據,如果cache hit,數據獲取成功,返回User實體,流程結束
  • 確定路由:如果cache miss,先查詢路由配置,確定uid落在哪個數據庫實例的哪個庫上
  • 查詢DB:通過DAO從對應庫獲取uid對應的數據實體User
  • 插入緩存:將kv(uid, User)放入緩存,以便下次緩存查詢數據能夠命中緩存

如果業務不復雜,這段代碼寫1次2次還可以,但如果業務越來越復雜,每次都這么獲取數據,就略顯低效了,有大量冗余、重復、每次必寫的代碼。

特別的,業務垂直拆分成非常多的子系統之后:

  • 一旦底層有稍許變化,所有上游的系統都需要升級修改
  • 子系統之間很可能出現代碼拷貝
  • 一旦拷貝代碼,出現一個bug,多個子系統都需要升級修改

不相信業務會垂直拆分成多個子系統?舉兩個例子:

  • 58同城有招聘、房產、二手、二手車、黃頁等5大頭部業務,都需要訪問用戶數據
  • 58到家有月嫂、保姆、麗人、速運、平臺等多個業務,也都需要訪問用戶數據

如果每個子系統都需要關注緩存,分庫,讀寫分離的復雜性,調用層會瘋掉的。

如何讓數據的獲取更加高效快捷呢?

服務化,數據服務層的抽象勢在必行。

通過抽象數據服務層:

  • web-server層可以通過RPC接口,像調用本地函數一樣調用遠端的數據
  • 數據服務層,只有這一處需要關注緩存,分庫,讀寫分離這些復雜性

服務化這里就不展開,更詳細的可參考《互聯網架構為什么要做服務化?》。

結論

當業務越來越復雜,垂直拆分的系統越來越多,數據庫實施了水平切分,數據層實施了緩存加速之后,底層數據獲取復雜性成為通用痛點的時候,就應該抽象出數據服務層,簡化數據獲取過程,提高數據獲取效率,向上游屏蔽底層的復雜性。

互聯網分層架構是一個很有意思的問題,服務化的引入,并不是越早越好:

  • 請求處理時間可能會增加
  • 運維可能會更加復雜
  • 定位問題可能會更加麻煩

千萬別魯莽的在“微服務”大流之下,草率的進行微服務改造,看似“高大上架構”的背后,隱藏著更多并未接觸過的“大坑”。還是那句話,架構和業務的特點和階段有關:一切脫離業務的架構設計,都是耍流氓。

這一篇先到這里,分層架構,還有很多內容要和大家聊:

  • 后端架構,是否需要抽取中臺業務,什么時機抽取
  • 后端架構,是否需要前后端分離,什么時機分離
  • 前端架構,如何進行分層實踐

末了,再次強調下,互聯網分層架構的本質,是數據的移動。

互聯網分層架構演進的核心原則,是讓上游更高效的獲取與處理數據,讓下游能屏蔽掉數據的復雜性獲取細節。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

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

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-10-15 14:36:10

互聯網分層架構服務化

2020-08-11 09:43:28

分層架構互聯網架構

2020-09-29 07:42:34

互聯網分層架構前后端分離

2017-11-06 08:41:53

互聯網分層架構前后端

2016-09-22 15:01:59

微服務互聯網架構

2018-11-07 06:35:50

互聯網服務化高可用架構

2016-09-22 14:22:53

互聯網

2018-08-15 09:02:59

產業互聯網工業互聯網物聯網

2020-08-13 09:22:11

MapReduce分層架構架構

2017-08-03 16:37:35

互聯網法院司法

2015-06-24 15:35:54

2013-01-22 18:32:43

2013-01-23 09:09:31

2011-08-19 11:33:32

2021-03-09 10:02:40

996互聯網商業

2014-10-11 09:16:59

互聯網協議

2017-05-29 08:30:42

互聯網智能廣告架構

2015-05-28 16:11:07

互聯網+

2014-01-15 14:35:35

云計算

2019-09-02 16:12:16

工業互聯網智能制造體系架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品美女www爽爽爽视频 | av久久 | 日韩欧美在线免费观看 | 91深夜福利视频 | 九九亚洲 | 国产精品夜间视频香蕉 | 国产午夜精品久久 | 亚洲精品国产一区 | 欧美一级黄色片免费观看 | 久久久久久影院 | 久久久久久久久久久爱 | 久久久99精品免费观看 | 亚洲天堂一区二区 | 99精品国产一区二区青青牛奶 | 中文在线一区二区 | 国产一区二区影院 | 蜜桃视频一区二区三区 | 亚洲视频中文字幕 | 日韩免费视频 | 91影片| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲精品9999 | 在线免费国产 | 亚洲最大的黄色网址 | 欧美精品被 | 神马久久久久久久久久 | 高清国产午夜精品久久久久久 | 国产精品不卡视频 | 最新黄色在线观看 | 日韩影院在线观看 | 久久噜噜噜精品国产亚洲综合 | 国产精品免费在线 | 特黄视频 | 国产玖玖 | 日本91av视频 | 国产亚洲精品精品国产亚洲综合 | 午夜成人在线视频 | 2021天天躁夜夜看 | 国产观看 | 欧美综合在线视频 | 99视频精品 |