druid,连接池和微服务的问题

发布于 2022-09-07 20:42:36 字数 895 浏览 19 评论 0

我所知道的 druid 配置,是在一个服务上进行配置
假如一台机器上装有 mysql
当我们用连接池去连接的时候
根据 https://blog.csdn.net/w059805... 说法
连接池的大小公式是:

连接数 = ((核心数 * 2) + 有效磁盘数)

这里应该说假定连接池大小的配置是在单一服务(工程)上配置

如果我们考虑微服务
有 N 个服务访问这个 mysql 机器的情况
假如每个服务的配置都是上述公式
那么总的连接池数就是 N((核心数 2) + 有效磁盘数)了
这应该就不对了
但是感觉也不能用这个连接数除以N来给每个服务分配连接数吧
因为N是不确定的,因为你不知道什么时候某个服务挂了,或者什么时候多加几个服务
其次,每个服务访问数据库的量也有差异
这个如何理解?

其次,druid的配置监控系统 Servlet 也是在单个服务下配置
而访问 url 诸如这种
http://IP:PORT/druid
那 N 个微服务岂不是会有 N 个配置监控系统 Servlet?
假如有几个微服务处于同一台机器上
那就还要配置不同的 url
这样感觉怪怪的?

或许一个解决方案是把对同一个 mysql 机器进行访问的所有的 dao 层
从各个微服务中抽出来,独立操作做成一个微服务可以解决上述问题?
这样的架构奇怪吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别理我 2022-09-14 20:42:36

而连接池大小的配置是在单一服务上配置
在 N 个服务访问这个 mysql 机器的情况下
加入每个服务的配置都是上述公式
那么总的连接池数就是 N((核心数 2) + 有效磁盘数)了
这不是悖论吗?
如何理解?

没有什么悖论呀。举个例子,比如一个mysql支持的并发连接最多100个,你有3个微服务应用需要同时连接这个数据库,每个微服务部署在一台独立的机器上,每个机器核心数为8,磁盘数为2。 3 (2 8 + 2) 远远小于100呀。

即使超过的mysql可以支持最大并发数,可以稍减少某些微服务的连接池连接数,没有说连接池中的连接数必须是(核心数 * 2) + 有效磁盘数。

其次,配置监控系统 Servlet 也是在单个服务下配置
而访问 url 诸如这种
http://IP:PORT/druid
那 N 个微服务岂不是会有 N 个配置监控系统 Servlet?
假如有几个微服务处于同一台机器上
那就还要配置不同的 url
这样感觉怪怪的?

不奇怪呀,不同的微服务只需要关注自己的druid的监控。如果需要总的监控信息,mysql 提供了很多状态变量,相关日志(比例慢查日期)等,当然了有很多针对mysql的监控的工具,这些工具收集分析这些日志,变量等信息,提供很友好的界面显示。

或许一个解决方案是把对同一个 mysql 机器进行访问的所有的 dao 层
从各个微服务中抽出来,独立操作做成一个微服务可以解决上述问题?
这样的架构奇怪吗?

奇怪,有一些mysql的中间件提供连接池的功能,这样就不需要再应用中初始化连接池了,多个微服务公用一个连接池。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文