作家
登录

究竟为什么要引入数据库中间件

作者: 来源: 2017-11-03 11:52:09 阅读 我要评论


不少同伙经常会问我以下问题:

  • 58到家有没有应用数据库中心件
  • 应用了什么数据库中心件,是自研,照样第三方
  • 怎么实现的,是基于客户端的中心件,照样基于办事端的中心件
  • 应用中心件后,join/子萌芽/集函数/事务等问题是怎么解决的

你是不是也有类似的疑问?

然而,“毕竟为什么要惹人数据库中心件”却很少有人问及。 “架构师之路”文┞仿思路,以解决“为什么”为优先,借着近期撰写互联网分层架构系列文┞仿,讲一讲这个核心问题:

  • 毕竟为什么要惹人数据库中心件

经由持续分层架构演进,DAO层,基本数据办事化,通用营业办事化,前后端分别之后,一个营业体系的后端构造如上:

  • web-view层经由过程http接口,大年夜web-data获取json数据(前后端分别)
  • web-data层经由过程RPC接口,大年夜biz-service获取数据(通用营业办事)
  • biz-service层经由过程RPC接口,大年夜base-service获取数据(基本数据办事)
  • base-service层经由过程DAO,大年夜db获取数据(DAO)
  • db存储数据

跟着时光的推移,数据量会越来越大年夜,base-service经由过程DAO来拜访db的机能会越来越低,须要开端推敲对db进行程度切分,一旦db进行程度切分,本来很多SQL可以支撑的功能,就须要base-service层来进行特别处理:

  • 有些数据须要路由到特定的程度切分库
  • 有些数据不肯定落在哪一个程度切分库,就须要拜访所有库
  • 有些数据须要拜访全局的看维拿到数据的全局视野,到service层进行额外处理

更具体的,对于前台高并发的营业,db程度切分后,有这么几类典范的营业场景及应对筹划。特别强调一下,此处应对的是“前台”“高并发”“db程度切分”的场景,对于后台的需求,精晓过前台与后台分别的架构处理,不在此处评论辩论。

典范场景:经由过程uid萌芽user

场景特点:

  • 经由过程patition key萌芽
  • 每次只返回一行记录

解决筹划:base-service层经由过程patition key来进行库路由

如上图:

  • user-service底层user库,分库patition key是uid
  • uid上的萌芽,user-service可以直接定位到库

二、非patition key上的单行萌芽

底层的复杂性会扩散到各个base-service,所有的base-service都要存眷:

  • patition key路由
  • 非patition key萌芽,先mapping,再路由
  • 先全库,再归并
  • 先分析,再按需路由
  • 夸库分页处理

典范场景:经由过程login_name萌芽user

场景特点:

  • 经由过程非patition key萌芽
  • 每次只返回一行记录

解决筹划1:base-service层拜访所有库

如上图:

  • user-service经由过程login_name先查全库
  • 结不雅集在user-service再归并,最终返回一笔记录

解决筹划2:base-service先查mapping库,再经由过程patition key路由

数据的获取效力降低了

如上图:

  • 新建mapping库,记录login_name到uid的映射关系
  • 当有非 patition key的萌芽时,先经由过程login_name萌芽uid
  • 再经由过程patition key进行路由,最终返回一笔记录

base-service层的复杂度进步了

解决筹划3:基因法

关于“基因法”解决非patition key上的萌芽需求详见《分库后,非patition key上拜访的多种解决办法》。

三、patition key上的批量萌芽

典范场景:用户列表uid上的IN萌芽

场景特点:

  • 经由过程patition key萌芽
  • 每次返回多行记录

解决筹划1:base-service层拜访所有库,结不雅集到base-service归并

解决筹划2:base-service分析路由规矩,按需拜访

如上图:

  • base-service根据路由规矩分析,断定出有些数据落在库1,有些数据落在库2
  • base-service按需拜访相干库,而不是拜访全库
  • base-service归并结不雅集,返回列表数据

一:partition key上的单行萌芽

四、非patition key上的夸库分页需求

关于分库后,夸库分页的萌芽需求,详见《业界难题,夸库分页的四种筹划》。

五、其他需求…

本文写到这里,上述一、二、三、四、五其实都不是重点,base-service层经由过程各类各样的事业淫巧,可以或许解决db程度切分后的数据拜访问题,只不过:


  推荐阅读

  微信小程序再加码,可直接打开网页

微信小法度榜样昨天再次开放了2项新特点,小法度榜样内可直接打开辟页和小法度榜样可接洽关系500个"大众,"号。具体来看,开辟者登录小法度榜样后台设备营业域名,即可实现小法度榜样内嵌网>>>详细阅读


本文标题:究竟为什么要引入数据库中间件

地址:http://www.17bianji.com/lsqh/38453.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)