数据仓库侧作为众多数据的集合,除了提供报表和数据分析以外,还会以各种api的方式向外提供数据服务,供后端各种系统使用。api平台的实现方式多种多样,开源的api平台也有多种版本,简单梳理一下接口平台的功能和实现方式。
数据生产
各种接口的数据都不是凭空来的,api平台的数据源可以简单的分为离线数据和实时数据,离线数据的存储有mysql,postgresql,hive,presto等,这部分的数据大都是有调度系统通过定时任务写进去。实时的数据存储方式有redis,hbase,ES等,实时的数据大多数是由spark,flink或者其他消费实时消息队列的系统写入。虽然从存储上可以简单的按照上述的方法去划分,但是在使用上各种存储的介质提供的数据能力上却没有那么明显的界限,例如对一些实时性能要求没那么高的内部系统,可以通过presto提供一些近实时的接口。
接口实现
无论各种数据源的处理其实都一个逻辑,前端选择数据源,写入需要的sql,sql中可以选择对应表字段的子集,sql的限制部分可以用变量去标识,变量通过前端传入,后端的adpter拿到sql以后去将变量替换成要替换的值即可。对不同的数据源初始化不同的client去查询数据,将查询到的结果通过分页,纯文本等方式返回。存储在mysql,postgresql中的数据一般是一些离线数据,这部分数据使用方会每天定时的拉取,数据到使用方后做缓存处理,接着再去使用,同时对小数据集会提供实时查询,在需要的字段上加上索引即可。hive中的数据一般有两种处理逻辑,第一是将hive数据同步到mysql和postgresql中,通过mysql和postgresql向外提供数据,第二是通过presto查询引擎去查询数据,presto的这种方式适合低频的离线批次查询,高频查询会受到presto集群的影响,在查询高峰时段接口会超时。对上述的一部分key value类型的接口数据,提供了redis查询的功能,接口系统会有定时任务将数据刷进redis中,查询的时候直接走redis查询。
数据使用
提供http和dubbo的方式供调用方拉取数据。离线部分的数据数据产出以后,定时任务会发消息出去,使用方可通过接受到的系统来拉取数据。
权限管理
对保密级别高的接口做了权限的限制,只有特定的内网ip可以访问。同时整个系统还有一层白名单和黑名单的限制,管理所有接口的权限。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。