3个点说清楚分库分表扩容问题

  • 时间:
  • 浏览:2

当业务又能也能了大,亲戚我们歌词 都 的服务关系错综错综复杂,一同,有全都服务访问都会需要连接 DB 的,只需要连接缓存即可,能也能了就还需要做成分离的,减少 DB 宝贵的连接。如下图:

亲戚我们歌词 都 发现,问题图片报告 是出在“每个 RPC 应用都会连所有的库”,原困着扩容应用的一同,每个数据库连接数就要增加。就算增加数据库,也不能处置连接数的问题图片报告 。

那为什么我办呢?

欢迎亲戚我们歌词 都 关注我的公种浩【多多程序运行 员追风】,文章都会在里面更新,派发的资料也会中放里面。

到这里,亲戚我们歌词 都 终于处置了无限扩容的问题图片报告 。

这下应该没问题图片报告 了吧。任凭你用户再多,并发再高,我假如无限扩容数据库,无限扩容应用,就还需要了。

这也是本文的标题,分库分表就能处置无限扩容吗?

实际上,像里面的架构,不必能处置。

其实,你你这一问题图片报告 和 RPC 的问题图片报告 一阵一阵这类:数据库连接过多!!!

通常,亲戚我们歌词 都 的 RPC 应用将会是使用里面件进行访问数据库,应用实际上是不知道到底要访问哪个数据库的,访问数据库的规则由里面件决定,这类 sharding JDBC。这就原困着,你你这一应用需要和所有的数据库连接,就像亲戚我们歌词 都 里面的架构图一样,有另另1个 RPC 应用需要和 3 个 mysql 连接,将会是 500 个 RPC 应用,每个 RPC 的数据库连接池大小是8 ,每个 mysql 需要维护 240 个连接,亲戚我们歌词 都 知道,mysql 默认连接数是 5000,最大连接数是 16384,也也不说,假设每个应用的连接池大小是 8 ,超过 2048 个应用就无法再继续连接了,也就无法继续扩容了。

注意,将会每个物理库有全都逻辑库,加上上微服务运动如火如荼, 2048 也能也能了看起来能也能了大。

你说歌词 你说歌词 ,我还需要通过前面加有另另1个 proxy 来处置连接数的问题图片报告 ,实际上,代理的性能也会成为问题图片报告 ,为那先 ?代理的连接数也是能也能了超过 16384 的,将会并发超过 16384,变成 163840,能也能了 proxy 也处置不了问题图片报告 。

为什么我办?让亲戚我们歌词 都 再看看里面的架构图:

我相信大每段公司都会在你你这一阶段。Dubbo 也不为了处置你你这一问题图片报告 而生的。

将会你的公司产品很受欢迎,业务继续高速发展,数据过多,SQL 操作能也能了慢,能也能了数据库就会成为瓶颈,能也能了你肯定会想到分库分表,不论通过 ID hash 将会 range 的法律辦法 都还需要。如下图:

最后

欢迎亲戚我们歌词 都 一同交流,喜欢文章记得点个赞哟,感谢支持!

本文从单体应用随后开始,逐步讲述了有另另1个正常后台的演进历程,知道了分库分表不必能处置“无限扩容” 的问题图片报告 ,能也能了单元化也能处置这问题图片报告 。而单元化则带来更多的错综错综复杂。怎么能让好处未必。

单元化带来的更多的思路。

有了单元化,处置了无限扩容的问题图片报告 ,怎么能让亲戚我们歌词 都 还能也能了考虑单点的问题图片报告 ,即服务的可用性。要知道,亲戚我们歌词 都 这里的数据库都会单点的。

像我另有另另1个的菜鸟,总会有各种问题图片报告 ,随后刚开始是对 JDK API 的问题图片报告 ,对 NIO 的问题图片报告 ,对 JVM 的问题图片报告 ,当工作几年后,对服务的可用性,可扩展性都会了新的问题图片报告 ,那先 问题图片报告 呢?其实是老生常谈的话题:服务的扩容问题图片报告 。

让亲戚我们歌词 都 从最初随后开始。

单体应用 每个创业公司基本都会从这类 SSM 和 SSH 你你这一架构起来的,没那先 好讲的,基本每个多多程序运行 员都经历过。

RPC 应用 当业务能也能了大,亲戚我们歌词 都 需要对服务进行水平扩容,扩容很简单,假怎么能证服务是无请况的就还需要了,如下图:

单元化,听起来高大上,通常在一些 XXX 大会上,分享“关于两地三中心”,“三地五中心”,“异地多活”等等牛逼的名词的随后,单元化也会一同冒出 。

这里亲戚我们歌词 都 不讨论能也能了牛逼的,就只说“数据库连接数过多” 的问题图片报告 。

实际上,思路很简单:亲戚我们歌词 都 不必应用连接所有的数据库就还需要了。

假设亲戚我们歌词 都 根据 range 分成了 10 个库,现在有 10 个应用,亲戚我们歌词 都 让每个应用只连有另另1个库,当应用增多变成 20个,数据库的连接不够用了,亲戚我们歌词 都 就将 10 个库分成 20 个库,另有另另1个,无论你应用扩容到十2个 个,都还需要处置数据库连接数过多的问题图片报告 。

注意:做这件事的前提是:你需要保证,访不知道你你这一应用的 request 请求的数据库一定是在你你这一应用的。s

换个说法,当用户从 DNS 那里进来的随后,就知道此人 要去那个应用了,全都,规则在 DNS 随后就定好了,其实你你这一阵一阵夸张,但肯定在进应用随后就知道要去哪个库了。

全都,这通常需要有另另1个规则,这类通过用户 ID hash,由配置中心广播 hash 规则。另有另另1个,所有的组件都能保持一致的规则,从而正确的访问到数据库。如下图: