阿里工程师教你 3 分钟实现数据源编排和接入


阿里工程师教你 3 分钟实现数据源编排和接入

文章插图
作者| 阿里文娱高级开发工程师 天甘 慕理
责编 | 屠敏
头图 | CSDN 下载自东方 IC
阿里工程师教你 3 分钟实现数据源编排和接入

文章插图
背景
你一定也深有同感,在开发业务需求时,1/3是时间都花费在了前期准备工作上 。比如,调研数据来自哪里,查看几条真实数据及其结构,然后开始写代码过滤出所需要的数据,并将数据组装成期望的结构……经过漫长的过程后,才能进入正题 。今天我将介绍,如何通过元数据中心,帮你直接提升开发效率 。
什么是元数据中心?它有两个主要作用:沉淀数据源广场、自定义接口 。
1) 数据源广场:通过关键字搜索出基础平台服务相关接口,可手动快速调用查看接口;
2)自定义接口:根据业务自定义所需字段(字段名、类型),元数据中心SDK还将接口调用这一系列逻辑抽象出来,沉淀了“接口调用引擎”,业务开发只需要将平台下发的接口标示传入引擎中,即可完成接口接入,由hardcode转为配置化 。
除以上两点,元数据中心还建立了统一监控、熔断能力,采用多线程池,保证接口调用的效率及稳定性 。
阿里工程师教你 3 分钟实现数据源编排和接入

文章插图
架构
阿里工程师教你 3 分钟实现数据源编排和接入

文章插图
元数据中心有两个核心模块:1)数据源,对基础平台服务(像需求中的ABCD系统)接口做标准化调用;2)自定义接口,为业务开发做接口编排,包括入参和出参的定义 。
1、数据源
数据源模块是将基础平台服务接口做了标准化调用,与其他平台标准化不同的是,基础平台服务不需要实现JAVA接口,这样降低了基础服务接入 。目前元数据中心暂时支持HTTP及RPC接口,后面我们会逐步支持分布式数据库数据源,分布式缓存数据源及mock数据源 。数据源模块采用以下技术来保证调用的稳定:
  1. 数据源模块采用多线程池技术,不但可以并发调用,保证接口调用的稳定,还可以根据接口调用情况动态调整所使用的线程池,保证在某个接口性能较差情况下不影响其他接口的调用;
  2. 使用了泛化调用技术,泛化调用技术避免了引入二方包导致包冲突的问题;
  3. 数据源模块还支持分批调用,很多诸如queryByIdList这种查询,肯定需要对查询ID做count限制,但是有时候业务所需要的单次查询数多于限制数,那么就需要分批并发调用多次,然后再merge结果;
  4. 利用ThreadLocal技术元数据中心还支持对接口调用的超时时间做动态的调整,有些业务为了获取到数据可以容忍较长的RT,有些业务对RT比较敏感,所以可以根据业务不同对超时时间做个性化设置 。
2、业务自定义接口
1)Schema的定义
通常在业务开发时,接口主要解决两件事:1)对接底层的数据源,2)用几个数据源的结果组合成一个业务接口暴露给上层的业务 。因此,在设计Schema时考虑了以上两点,将Schema分为调用和返回,根据不同的需求配置调用哪些数据源,并配置这些数据源的依赖关系,并且配置接口需要以什么样的方式返回,可直接透出数据源的返回结果,对结果进行简单维护,也可以自己定义结果,并指定取值的来源,对结果的类型和结构进行控制和干预 。
2)Schema执行引擎
  • 第一:简述执行过程
首先解决依赖关系,然后进行数据源调用,调用后再根据返回配置来处理 。这里如果返回值配置的是一个表达式,那么引擎直接执行这个表达式来作为中间结果,并根据特殊配置对中间就结果进行处理 。如果没有指定配置表达式,而是指定了自己需要的哪些字段,引擎会根据这些字段值的表达式分别进行设置,如果这个字段是一个嵌套,引擎对嵌套的Schema进行递归处理 。
  • 第二:如何解决数据源依赖
有很多使用场景是一个业务接口需要两个数据源的支持 。对于依赖,抽象出一个依赖解决器,它会遍历所有的数据源调用,分析调用关系并生成一颗依赖树 。在调用时,对树进行层次遍历和先序遍历,保证先执行到无依赖的调用,再处理有依赖的调用 。举例,总共需要调用8个数据源分别为A、B、C、D、E、F、G、H,其中C依赖A,D依赖A和B,E依赖B,G依赖C,F依赖C和D,H依赖E 。下图表示生成的依赖树:
阿里工程师教你 3 分钟实现数据源编排和接入


推荐阅读