你一定也深有同感,3,数据源广场


你一定也深有同感,3,数据源广场
文章图片
背景
你一定也深有同感 , 在业务需求时 , 1/3是时间都花费在了前期准备工作上 。 比如 , 调研数据来自哪里 , 查看几条真实数据及其结构 , 开始写代码过滤出所需要的数据 , 并将数据组装成期望的结构…经过漫长的过程后 , 才能进入正题 。 今天我将介绍 , 如何通过元数据中心 , 帮你直接提升效率 。
什么是元数据中心?它有两个主要作用:沉淀数据源广场、自定义接口 。
1 数据源广场:通过关键字搜索出基础平台服务相关接口 , 可手动快速调用查看接口 。
2自定义接口:根据业务自定义所需字段字段名、类型元数据中心SDK还将接口调用这一系列逻辑抽象出来 , 沉淀了“接口调用引擎”业务只需要将平台下发的接口标示传入引擎中 , 即可完成接口接入 , 由hardcode转为配置化 。
除以上两点 , 元数据中心还建立了统一监控、熔断能力 , 采用多线程池 , 保证接口调用的效率及稳定性 。
架构
你一定也深有同感,3,数据源广场
文章图片
元数据中心有两个核心模块:1)数据源 , 对基础平台服务(像需求中的ABCD)接口做标准化调用;2)自定义接口 , 为业务做接口编排 , 包括入参和出参的定义 。
1、数据源
数据源模块是将基础平台服务接口做了标准化调用 , 与其他平台标准化不同的是 , 基础平台服务不需要实现java接口 , 这样降低了基础服务接入 。 目前元数据中心暂时支持HTTP及RPC接口 , 后面我们会逐步支持分布式数据库数据源 , 分布式缓存数据源及mock数据源 。 数据源模块采用以下技术来保证调用的稳定:
数据源模块采用多线程池技术 , 不但可以并发调用 , 保证接口调用的稳定 , 还可以根据接口调用情况动态调整所使用的线程池 , 保证在某个接口性能较差情况下不影响其他接口的调用 。
使用了泛化调用技术 , 泛化调用技术避免了引入二方包导致包冲突的问题 。
数据源模块还支持分批调用 , 很多诸如queryByIdList这种查询 , 肯定需要对查询ID做count限制 , 但是有时候业务所需要的单次查询数多于限制数 , 那么就需要分批并发调用多次 , 再merge结果 。
利用ThreadLocal技术元数据中心还支持对接口调用的超时时间做动态的调整 , 有些业务为了获取到数据可以容忍较长的RT , 有些业务对RT比较敏感 , 所以可以根据业务不同对超时时间做个性化设置 。
2、业务自定义接口
1Schema的定义
通常在业务时 , 接口主要解决两件事:1)对接底层的数据源 , 2)用几个数据源的结果组合成一个业务接口暴露给上层的业务 。 因此 , 在设计Schema时考虑了以上两点 , 将Schema分为调用和根据不同的需求配置调用哪些数据源 , 并配置这些数据源的依赖关系 , 并且配置接口需要以什么样的方式可直接透出数据源的返回结果 , 对结果进行简单维护 , 也可以自己定义结果 , 并指定取值的 , 对结果的类型和结构进行控制和干预 。
2Schema执行引擎
第一:简述执行过程
首先解决依赖关系 , 进行数据源调用 , 调用后再根据返回配置来处理 。 这里如果返回值配置的是一个表达式 , 那么引擎直接执行这个表达式来作为中间结果 , 并根据特殊配置对中间就结果进行处理 。 如果没有指定配置表达式 , 而是指定了自己需要的哪些字段 , 引擎会根据这些字段值的表达式分别进行设置 , 如果这个字段是一个嵌套 , 引擎对嵌套的Schema进行递归处理 。


推荐阅读