数据管理(DaMS)介绍

谢柳平

前言

随着业务的增长,公司员工会不断增加,这时候如何使团队的所有人一起高效工作不仅需要员工本身的合作意识加强,还需要拥有好的协作工具以及很好的利用工具。数据管理系统就是由此而产生的高效进行公司内部数据管理的服务工具。本文会介绍系统的功能以及实现这些功能所使用的技术,希望读者在读完此篇后能从中收获到自己感兴趣的技术点。读完此文大约15分钟。

目录

一 数据管理系统简介

数据管理(Data Management System,简称DaMS)支持MySQL、SQL Server、PostgreSQL、MongoDB、Redis等关系型数据库和NoSQL的数据库管理。它是一种集数据管理、SQL审核、结构管理、访问控制、数据图表、数据趋势、数据轨迹、性能与优化于一体的数据管理服务。
系统架构图: alt

二 数据管理系统具备的功能

  1. 用户管理,用户管理包含数据源访问控制,用户权限管理等。同时还包括对每个用户行为的记录,进行用户的行为监控。这样可以知道每个用户访问了哪些数据,进行了哪些操作,可以及时发现并修正问题。
  2. 数据库管理,主要对数据库的性能监控,数据库的权限进行管理等。
  3. 结构管理,对于公司的各个环境的变更同步,核心指标监控,索引实时建议等。
    多测试环境结构变更同步过程图: alt 不同开发环境结构变更同步过程图: alt
  4. 数据管理,在行或列的层面进行敏感数据的加密保护,数据变化追踪,同时精准的进行数据回滚修复等。
  5. sql查询,使用和客户端一样的操作方式,快捷的在平台进行数据查询和分析。
  6. sql审核,针对dml/ddl从安全和稳定角度进行审核和执行。
    sql审核流程图: alt

三 数据管理系统使用的中间件

  1. activiti,基于BPMN 2.0实现的开源流程引擎。开发发出申请,生成工单,工单分配,dba审核,审核结果这个过程组合在一起就是一个完整的工作流。activiti提供了很好的一整套完整框架,我们只需要在对应的流程里面编写自己需要实现的业务代码即可快速完成,同时ide也提供了针对activiti的可视化插件使流程编写更简单快速。
    服务结构图: alt 1.RepositoryService: Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。Repository Service 提供了对 repository 的存取服务。
    2.RuntimeService:在 Activiti 中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。Runtime Service 提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。
    3.TaskService:在 Activiti 中业务流程定义中的每一个执行节点被称为一个 Task,对流程中的数据存取,状态变更等操作均需要在 Task 中完成。Task Service 提供了对用户 Task 和 Form 相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。
    4.IdentityService:Activiti 中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的 Task。Identity Service 提供了对 Activiti 系统中的用户和组的管理功能。
    5.ManagementService:Management Service 提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。
    6.HistoryService: History Service 用于获取正在运行或已经完成的流程实例的信息,与 Runtime Service 中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。
    7.FormService: Activiti 中的流程和状态 Task 均可以关联业务相关的数据。通过使用 Form Service 可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单。
  2. druid,DaMS使用druid进行数据库连接池的管理,druid自身会间隔EvictionRunsMillis时间结合victableIdleTimeMillis来判断connection是否空闲来关闭连接,由于DaMS同时会连接很多datasource,所以DaMS自身也会有周期性的检测datasource是否需要关闭来关闭多余的datasource,同时可以充分利用druid提供的内置servlet来查看监控数据。
    druid内置监控图表如下:
    alt
  3. hystrix,DaMS使用hystrix来进行第三方服务的调用管理,可以优雅的进行熔断、回退和降级处理,保证系统的稳定。
    HystrixCommand类图:
    alt Hystrix服务调用的内部逻辑:
    alt 1.构建Hystrix的Command对象, 调用执行方法。
    2.Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级getFallback方法。
    3.若熔断器开关关闭, 则Hystrix检查当前服务的线程池是否能接收新的请求, 若超过线程池已满, 则执行降级服务getFallback方法。
    4.若线程池接受请求, 则Hystrix开始执行服务调用具体逻辑run方法。
    5.若服务执行失败, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况。
    6.若服务执行超时, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况。
    7.若服务执行成功, 返回正常结果。
    8.若服务降级方法getFallback执行成功, 则返回降级结果。
    9.若服务降级方法getFallback执行失败, 则抛出异常。

四 数据管理系统依赖的第三方服务

  1. archer,基于python实现的http rest服务,主要用于解决java不能直连inception的问题,提供一层中转服务,即java服务访问archer,archer访问inception。
  2. inception,inception是一个自动化sql运维工具,提供了sql的语法检测及执行,它本身是基于mysql来改写的,所以对sql的语法检测非常强大。平台里面的sql自动检测就是通过调用inception的服务来实现。
  3. pt-online-schema-change,“ALTER tables without locking them”这是官网上的副标题,在mysql里当表里面有数据写入的时候直接执行表变更会导致锁表,这个工具对ddl的语句做了优化,可以实现无锁变更。DaMS平台里面对alter table类型的修改是通过调用inception,inception调用pt-online-schema-change来实现,整个过程对用户透明,不影响正常的业务流程。
    创建表变更时序图: alt 修改表结构时序图: alt

五 数据管理系统特性

  1. 系统在执行ddl时,由于执行时间长,并且通常在流量低谷区执行,所以这时候就需要DaMS提供定时执行的功能。
    操作界面图: alt
  2. 系统为了预防在执行时导致影响正常的业务流程,所以还增加了中止ddl变更的功能,通过kill执行进程,删除执行过程的triggers和临时表来达到对原表的无污染操作。
    操作界面图: alt 任务中止后会有相应的通知消息发送给开发人员,开发人员可以在下次重新提交来执行变更 alt
  3. 系统对cobar的操作非常容易,当我们在执行查询的时候,可以直接通过cobar来到达同时查询各个分片的数据,但是在执行ddl的时候我们需要对cobar的每个分片来单独处理,系统会存储cobar及cobar的对应分片信息,对于ddl操作,dba只需审核一次cobar,DaMS来保证对每个分片的变更一致,大大提升了dba的审核效率。

六 系统部署及扩展

系统的访问取决于同时使用的用户数,用户执行的sql。由于系统本身是无状态的,数据中心化存储,所以当系统的访问出现瓶颈,可以动态的增加数据节点和服务器节点来减轻压力。
物理部署图: alt

七 未来规划

未来DaMS还需要提供一种更敏捷的方式来分析数据变化趋势,利用数据库内部的一些高性能采集机制,可以实时展示每个实例、库及表级别的数据变化情况,包括每张业务表每秒读取行数、插入行数、删除行数以及更新行数情况,用户可以快速的看出业务增长。另外,通过采集一段时间的数据变化,可以提供给用户搜索每个实例、库、表级别的数据变化历史趋势,为业务分析或数据库优化提供可靠依据。另一方面还需要再扩展增加对更多的数据库类型的支持。

八 总结

本文从整体架构出发逐步分析系统的每个功能来介绍系统的方方面面,包括了系统中绝大部分功能和使用到的技术,相信对于对DaMS感兴趣的同学还是有启发性的帮助,同时由于个人的知识面有限,很多地方可能描述的不够准确,希望读者以批判的心态阅读的同时还能兼以包容的心态。

九 参考

  1. inception
  2. pt-online-schema-change
  3. activiti
  4. druid
  5. hystrix