提示:点击上方"我们的开心"↑关注我们 文/张海峰、叶俊 2017年3月29日下午3点,由上海软件研发部应用支持二部主办的技术沙龙活动进入第二期。本次活动继续聚焦应用运维自动化工具,以数据查询工具开发过程中遇到的技术难点为重点,回顾了数据查询工具的建设过程,现场提问踊跃,互动氛围良好,契合了大家应用支持工作中查询生产系统数据的需要。 主讲人张海峰,来自上研应用支持二部,人称“海叔”,项目经验丰富,在应用运维领域磨砺多年,近两年在运维自动化分析领域持续耕耘。他首先提出现状下的手工进行数据查询存在工作量繁琐、中间环节较多、有生产数据泄露风险等弊端,引出数据查询工具建设初衷建立一套能支撑和覆盖完整数据查询流程的自动化工具。 接下来,海叔介绍了数据查询工具的主要功能、实现思路,明确了接入数据查询工具的标准和规范,并重点分析开发过程中的几个技术重点如乱码字符的处理和数据库中断机制的控制等,对于未来其它系统和数据库交互开发的过程具有借鉴和指导意义。 本次沙龙活动形式自由,现场提问热烈,双方互动频繁,开放式的讨论让与会者都融入其中并深入思考,海叔针对现场提问一一进行了耐心细致的解答。通过本次沙龙,与会者对于数据查询工具建设的必要性和实现的功能模块有了一定的了解,现场激烈的思维碰撞也为后续数据查询工具的不断优化打开了新的局面。 技术拓展 Technology development 数据查询工具研发的过程中,小伙伴们遇到过哪些技术难点?如何有效的处理主机DB2、开放Oracle、DB2、Sybase、GBase各种数据库的字符集,避免查询结果在字符集转换过程中产生乱码? 解决方案:通过测试及各种应用场景的梳理,我们发现乱码主要是由于很多应用系统后台数据库字符集采用ISO8859-1,但应用系统本身的字符集是另一种编码(例如GBK),我们在数据查询工具通过如下方案解决了乱码问题。 1. 在数据源配置中,增加应用系统字符集的配置选项。 2. 在处理流程中增加如下逻辑: 2 传统人工操作方式下,发生查询异常时可以及时地人工干预终端查询吗?数据查询工具如何实现类似的安全保证机制? 解决方案:提供超时中断和人工中断两种方式,避免大数据量的查询请求对业务系统的数据库性能造成影响。 1. 超时中断 对每一条SQL语句都会根据数据源中设定的超时阈值,限定SQL语句的执行时间,同时每条SQL语句的耗时还会累计进查询脚本的执行时间,如果总的脚本执行超过设定阈值将停止脚本执行。 2. 人工中断 操作员在前台提交查询脚本后,可以通过点击按钮中断当前正在执行的请求,系统在接收到中断请求后立即终止数据查询。 对每一条查询请求,脚本执行线程会启动一对Query、Watcher线程,Query执行数据查询,Watcher监控: 1. Query线程是否结束,包括正常结束和超时。 2. Redis数据库中是否有操作员发来的终止当前查询单的请求。 发生上述两种情况之一, Watcher会唤醒暂停的主线程中断查询操作、关闭数据库连接。 3 数据查询工具允许多用户执行数据查询,如何对单一数据源的并发访问进行控制,避免对生产数据库造成压力? 解决方案:在数据源配置中设置最大连数阈值,并为每一数据源在Redis数据库中分配一个访问计数器,每个数据查询提交前先检查计数器是否已到达阈值,未到达阈值提交查询请求,计数器 1,否则暂停数据查询,通过这个机制实现数据查询工具单一数据源访问的并发控制。 Redis确保多个请求对计数器增减串行执行,当我们请求获取锁时,通过数据源id构成一个key,向Redis发送setNX命令,这个key如果已存在则setNX失败,代表有其他请求已经获取了锁该请求就轮询等待直到获取锁。 END 轮值总编:徐佳琦 美编:刘皓阳 技术支持:姜皓
长按二维码 关注我们 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|