【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

DDM 的成熟在一个细微之处的体现

  • 2019-10-23
  • 本文字数:1130 字

    阅读完需:约 4 分钟

DDM的成熟在一个细微之处的体现

我们都知道 DDM 是华为云分布式数据库中间件,在性能、易用性等方面在业界是遥遥领先的。他的成熟不仅仅体现在具有快速水平平滑扩容、支持多种分布式事物类型等等这些高大上的特性上,也体现在 DDM 诸多的细微之处,今天我和大家分享一个在发展多年的 mycat 上存在,但是在 DDM 中不存在的一个不起眼的细微问题(小问题,大灾难,在 IT 行业的历史上不断重演,我们要警钟长鸣)。这个问题是我在 DDM 上玩了好多 sql 之后,发现 DDM 是一个玩不死的小强,出于好奇也把一些在 DDM 上玩的 sql 放到了 mycat 上,不幸的是,第一条 sql 放到了 mycat 上执行之后,就出现了神奇一幕,下面看看我的排查过程吧。


排查过程


首先,我的测试代码如下,我的 sql 除了加了一段注释之外,好像再普通不过了。但是一执行发现好像是卡主了。



于是赶紧使用 jstack 查看测试应用的线程栈信息,如下:



由上图不难发现是卡在测试代码 TestJDBC 的 25 行上,也就是卡在了“ps.executeQuery()”这行代码上。当然也发现最终是卡在和 mycat 的通信上。那么为啥 mycat 一直没有返回结果呢。我马上到部署 mycat 的测试机上,查看日志,没有发现异常信息。于是顺手看了一下测试机器的资源使用情况,果然有意外发现,如下:



发现有一个 java 进程的 cpu 使用率非常高,在这里,他肯定是 mycat 进程,因为在这个机器上,我只部署了 mycat 这一个 java 应用。不禁要问,mycat 到底在干啥,是哪一个线程出现了问题。于是我执行了一下这样的一条命令:ps -mp 3403 -o THREAD,tid,time,想去看个究竟,命令中的 3403 是 mycat 进程的 id,于是我发现了下图的信息。



发现 3403 进程中的线程 3420 消耗了非常高的 CPU,接下来不难想到的是使用 jstack 命令去调出该 mycat 进程的线程栈信息,在执行 jstack 之前,我们先将线程 id(nid) 3420 转成 16 进制的数字,因为在 jstack 中看到的 nid(native thread id)是 16 进制显示的,转换方式如下:



那好,让我们来看一下 mycat 进程的该线程的栈快照吧,如下:



原来问题出在了 DruidMycatRouteStrategy 这个类的 724 行,于是看一下 mycat 的源码,如下:



看到代码之后,是不是恍然大悟呢,问题就出在这个 while 循环的处理逻辑上。当然这个 bug 的 fix 也不复杂。对该问题解决方式有兴趣的朋友可以在该文章下留言,我们可以交流一下。

结语

通过上面这样的一个问题,我们不难发现,现在业界的分布式数据库中间件在大的特性上基本都能做到对齐,那么为什么华为云分布式数据库中间件 DDM 作为后起之秀,显得更加成熟,给用户留下了更好的印象呢?我想可能跟 DDM 在诸如此类的非常多的细微之处做的非常到位也有原因吧。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/NEZUorxh5FuxRpIdAA5cCg


2019-10-23 11:27511

评论

发布
暂无评论
发现更多内容

群晖DS218+做maven私服(nexus3)

程序员欣宸

maven 12月月更 群晖

ReactDOM.render在react源码中执行之后发生了什么?

flyzz177

React

React Context源码是怎么实现的呢

flyzz177

React

手把手教你构建数据安全体系,守住安全合规红线

王巍

数据安全

架构实战营模块一作业

周烨

React源码分析3-render阶段(穿插scheduler和reconciler)

goClient1992

React

算法 KECP 被顶会 EMNLP 收录,极少训练数据就能实现机器阅读理解

阿里云大数据AI技术

自然语言处理 机器学习 12 月 PK 榜 机器阅读

掌握 CORS 跨域请求,读这一篇文章就够了

范家鹏

HTTP CORS 跨域 异步请求 跨域资源共享

模块一:课程作业

peter

#架构实战营

前端工程师leetcode算法面试必备-二分搜索算法(上)

js2030code

JavaScript LeetCode

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

IoT高级设备检索——设备管理运维类

阿里云AIoT

数据库 监控 物联网 传感器 Cloud Native

前端面试指南之JS面试题总结

loveX001

JavaScript

从观察者模式到Java事件处理机制(上)

老农小江

设计模式 java 编程 事件机制

Git实战(五)| 让工作更高效,搞定Git的分支管理

霍格沃兹测试开发学社

基于阿里云IoT平台OTA进行APP确认升级的方案——业务架构类

阿里云AIoT

物联网 UED 数据格式

架构实战营(第10期)模块一作业

Geek_e5f2e5

React源码分析1-jsx转换及React.createElement

goClient1992

React

前端刷完这12道滑动窗口,就可以出山面试了

js2030code

JavaScript LeetCode

Git实战(四)| Git分支管理实操,搞定在线合并和本地合并

霍格沃兹测试开发学社

React源码分析2-深入理解fiber

goClient1992

React

React源码解读之React Fiber

flyzz177

React

潦草手写体也能轻松识别,快速提取文字不用愁

HMS Core

HMS Core

深入理解JS作用域链与执行上下文

loveX001

JavaScript

做了一份前端面试复习计划,保熟~

loveX001

JavaScript

前端面试题(附答案)

loveX001

JavaScript

架构实战营-模块一作业

落叶挂云霄

从观察者模式到Java事件处理机制(下)

老农小江

设计模式 java 编程 事件机制

ChatGPT中文版杀疯了,已登录AI模型市场

felix

极客时间运维进阶训练营第七周作业

9527

损失高达3亿美元|如何保护源代码安全?

SEAL安全

12 月 PK 榜 源代码安全 最小权限管理 零信任模型

DDM的成熟在一个细微之处的体现_文化 & 方法_中间件小成_InfoQ精选文章