Coder Social home page Coder Social logo

netyjq / data-center Goto Github PK

View Code? Open in Web Editor NEW
16.0 2.0 7.0 1.66 MB

一个能实现任意动态sql执行、统一管理、异常监控告警的数据查询平台。

License: Apache License 2.0

Java 67.75% HTML 24.53% CSS 0.62% JavaScript 1.10% PLpgSQL 6.01%
sql-query data-center dynamic-sql freemarker

data-center's Introduction

English Document

项目简介

公司有个数据采集的共享库,对应着一个数据中心的项目,每次业务方有数据查询的需求,都需要投入开发同学做SQL查询,提供接口和数据,调试和发布项目,一顿操作下来,耗时费力,伸缩性极差。

data-center是一个能实现任意sql(动态/静态)执行、统一管理、异常监控的数据查询中台项目。 它真正做到了无需数据中心项目投入人力参与到业务方需求,业务方同学只需在后台录入SQL拿到sqlId,就可以使用dubbo进行调用。

项目核心功能:

  1. SQL管理
  2. 统一RPC接口
  3. 监控告警
  4. 权限管理
  5. 报表统计

方案

设计图

技术方案

Dubbo(RPC) + Freemarker(解析SQL) + Mybatis(执行SQL)

假设下面的sql需要根据parentId和name动态查询,其中parent_id和name有值传递过来就参与查询,否则不查询

SELECT * from unit_info where and parent_id = #{parentId} and name = #{name};

那么需要在数据中心配置下面的sql模板:

SELECT * from unit_info where 1=1 <#if parentId??>and parent_id = #{parentId}</#if> <#if name?? && name != ''>and name = #{name}</#if>

接下来业务方通过Dubbo调用了数据中心的RPC接口,并传递了参数parentId=1,最终sql被解析并被mybatis执行。

SELECT * from unit_info where 1=1 and parent_id = 1

项目模块

  1. data-center-admin 管理员后台 部署形式:war
  2. data-center-service 提供业务接口 部署形式war
  3. data-center-client 封装接口给业务方 部署形式jar
  4. script sql脚本

业务流程

  1. 业务方申请应用,得到appId
  2. 配置sql,包含sqltext是否分页表字段映射,系统自带校验和测试功能。
  3. 业务方集成数据中心client jar,配置duboo接口,调用api并传递对应参数
  4. 数据中心响应请求,异步记录此次调用信息。

SQL管理

供业务方进行sql模板的配置(如果动态条件则需要使用freemarker编写sql模板) 、sql的模拟测试、上下架管理等功能。

监控告警

支持2种形式的告警:ERROR_COUNT以及SLOW_COUNT。系统通过定时扫描,对符合条件的查询以邮件的形式发送到用户或组。

报表统计

数据中心会记录每次的调用请求,为日后报表统计类业务做铺垫。同时Admin后台也将以图形的方式展现部分维度下的Top调用量情况。

权限管理

  1. 用户组与用户间的关系 —— 用于告警发送邮件以及SQL管理权限的判定
  2. 用户组与应用的关系 —— 用于告警发送邮件
  3. 应用与sql间的关系 —— 用于应用方调用权限的判定

预览

登录页

首页

风险点

  1. 负载风险:宕机引发整体服务不可用
  2. 流控风险:某个业务查询时间过长过高影响其它业务正常运行
  3. 安全风险:大表查询未limit、未走索引、全表扫描;未按需查询、大字段未过滤;锁表;SQL注入:Update、Delete、Truncate等
  4. 其它待补充

data-center's People

Contributors

dependabot[bot] avatar netyjq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.