大数据之路读后 —— 数据服务章

架构演进

阿里巴巴的数据开放服务经历了四个阶段:DWSOA、OpenAPI、SmartDQ 和 OneService。

  • DWSOA:将业务方对数据的需求通过 SOA 服务提供除去(接口内部实现数据计算逻辑)。接口开发、测试、上线繁复,灵活性不高,扩展性差,复用率低。
  • OpenApi:同类数据(如会员数据)合并成一张逻辑表,对外透出一个接口,通过接口参数定位具体数据。接口数量随着类目数量也逐渐增多。
  • SmartDQ:逻辑表的取数据逻辑通过 SQL (作为领域专用语言 DSL)描述,SmartDQ 通过解析 SQL、生成执行计划、执行 SQL、合并数据、限制结果,最终透出数据。SmartDQ 通过跨异构数据源适配器对接不同的数据库,并且封装了分布式查询功能,无需关心底层物理表是不是分库分表。应用层,SmartDQ 提供接口配置管理,且集成监控、限流、计费、权限能力。缺点是 SQL 无法解决复杂的业务逻辑,即提供个性化的数据内容。
  • OneService:OneService 在 SmartDQ 的基础上,切分数据使用场景,主要包含以下几类:个性化的垂直业务场景、实时数据推送服务、定时任务服务。介于此,OneService 提供多种服务类型满足不同场景,分别是 OneService-SmartDQ、OneService-Lego、OneService-iPush、OneService-uTiming。OneService-Lego 采用插件化开发模式,一类需求一个插件,用于满足个性化的垂直业务场景。OneService-iPush 通过 websocket 或 long-polling 实时推送数据。OneService-uTiming 提供定时任务、即时任务两种模式。

在 OneService 阶段;数据生产者推送数据入库,服务提供者根据规范快速创建、发布、监控、下线服务;服务调用者可以在门户网站中快速检索、申请、调用服务。

SmartDQ 架构图:

OneService 架构图:

架构细节

逻辑表通过多个数据源的物理表汇总而成,多个逻辑表挂在一个主题下。服务层元数据中心用于进行元数据配置,并维护物理表到逻辑表的映射。同时,服务层会把元数据加载到本地缓存中,以便进行后续的模型解析。

元数据分三套环境:日常、预发、线上。元数据经预发布经验证后,才可以正式发布。元数据的权限级别在逻辑表层级。当某用户修改逻辑表及其下的物理表资源时,禁止其他用户修改。技术上,元数据缓存采用增量更新。

主处理模块首先会通过解析 DSL(即 SQL 描述)获得查询树;其次遍历查询树,混入元数据模型中的逻辑表信息,获得逻辑 Query;其次通过元数据模型中物理表和逻辑表的映射关系,将逻辑 Query 转成物理 Query;其次按所涉及的物理表拆分为 SubQuery;其次将 SubQuery 组装成 SQL 语句并交给 DB 执行;最后将执行结果合并,返回调用者。

对于 Get 快查询和 List 慢查询,分配两套线程池,避免 Get 快查询前面有一个 List 慢查询,导致等待时间过长。在查询优化过程中,引擎会将不必要的 List 慢查询转成 Get 快查询。

查询服务器分组,每个分组有明确的服务对象和保障等级。分组隔离使 A 分组的异常不会影响到 B 分组。分组策略会进行动态调整,以实现资源的最大化利用。

数据安全方面,查询强制带上 LIMIT 限制,并设定必传字段,防止全表扫描。

日志采集方面,采集内容包含调用时间、接口名、方法名、返回记录数等基础信息;调用者应用名、来源 IP 地址等调用者信息;调用指标、查询筛选条件等调用信息;响应时间、是否走缓存等性能指标信息;出错原因、错误类型、数据源、错误堆栈等错误信息。在有了日志的基础上,可以监控系统的健康:总体、分组或单机的性能;逻辑表被调用情况(零调用酌情予以下线处理);慢 SQL 查找并优化;错误排查。