大数据之路—— 数据服务

6.1 架构演进

DWSOA

由需求驱动,一个需求开发几个接口,编写接口文档,开放给业务方调用。

缺点:接口力度粗,灵活度低,扩展性差,复用率低,开发效率低

OpenAPI

数据按照统计粒度聚合,同样维度的数据形成一张逻辑表,能有效收敛接口数量。

SmartDQ

OpenAPI接口变多,且带来大量对象关系映射的维护工作量。这里再抽象一层,用DSL(Domain Specific Language,领域专用语言) 来描述取数需求,采用标准的SQL语法,可以用对象关系对象映射框架,把接口减少到一个,且只需要关心逻辑表的结构(不需要关心地标数据,可以只变更映射关系,对调用法无感)。数据服务接口一定要尽可能抽象,接口数量尽可能收敛

OneService

在满足简单的查询服务需求,满足个性化的垂直业务场景、实时数据推送、定时任务。

6.2 技术架构@

元数据模型:多种数据源 -> 物理表(具体数据源的一张表,要指明主键)-> 逻辑表(类似于视图,是一张虚拟表,可看作若干主键相同的物理表构成的大宽表)-> 主题

请添加图片描述

查询数据库:底层支持多种数据源 1. 实时任务写入 2.离线数据同步

服务层:元数据配置,物理表和逻辑表映射

主处理模块流程

  1. DSL解析:对查询DSL进行语法解析,构建查询树
  2. 逻辑Query构建:遍历查询树,通过查找元数据模型,转变为逻辑Query
  3. 物理Query构建:通过查找物理表和逻辑表映射,变成物理Query
  4. Query拆分:如果设计多张物理表且查询条件允许拆分,变为多个SubQuery
  5. SQL执行:SubQuery组装成SQL语句,交给DB执行
  6. 结果合并:返回结果合并

其他模块: 日志记录,性能稳定优化

6.3 最佳实践@

6.3.1 性能

资源分配

如何合理的进行资源分配,能够提升性能?

  1. 剥离计算资源。有些指标要多天数据的集合或者有复杂的逻辑计算,这些计算逻辑在调用接口时处理成本很高,推荐在底层的数据公共层处理
  2. 查询资源分配。查询接口分为:GET接口(基本转为KV查询,时间短代价小)和 List接口(响应时间长,返回记录多,序列化和网络传输,代价高)。两个独立线程池(一个的话,快的会被慢的堵住)
  3. 执行计划优化。方案一:查询拆分,并发执行。方案二:查询优化,符合条件的List请求变成GET

缓存优化

  1. 元数据缓存。接口查询会频繁调用元数据信息(场景一:解析出映射关系,逻辑Query变成物理Query。场景二:SQL安全检查,调用参数是否合法,LIMIT是否超过上限。场景三:字段权限检查)
  2. 模型缓存。把解析后的模型缓存在本地,类似于找个公式直接去套用就可以,可以省了DSL->SQL 的解析时间
  3. 结果缓存。把复杂、响应时间比较长,变动比较少的数据缓存。

查询能力

  1. 合并查询。日期是今天的话,展示的是实时数据;昨天的话是离线数据,需要切换原因:两者数据存储的数据源不同,且查询方式不同,离线产出时间不定(可能延迟,但精准),实时对成本和性能考虑,用的算法不精准。可以使用离线数据,实时数据作为兜底
  2. 推送服务。前端不是一致请求数据,而是监听数据提供者,推送的方式。设计一:对生产者监听做好消息过滤。设计二:重要消息单线程运转。设计三:消息推送基于Socket实现,基于高性能异步事件的网络通信框架Netty。设计四:多线程。设计五:设计优先级保障重要的主题。设计六:缓存

6.3.2 稳定性

发布系统

  1. 元数据隔离。三个环境:日常环境、预发环境和线上环境,与之对应三套元数据,每个环境只会访问对应的元数据。要在预发环境测试后上线。
  2. 隔离划分。 需要一:资源划分,确定最小隔离单位,隔离的力度控制在逻辑表层面。需要二:资源独占,修改时禁止其他用户改动。需要三:增量更新,同步用户修改的部分

隔离

  1. 机房隔离。双机房容灾,保障内部调用优先
  2. 分组隔离。调用者的优先级分层,明确服务对象和保障等级。动态调整规则

安全限制

  1. 返回最大记录数。强制LIMIT限制
  2. 必传字段。逻辑表配置主键
  3. 超时时间。超时查询能终止并释放资源

监控

  1. 调用日志采集。基础信息(调用时间、接口名),调用者信息(名称、IP地址),调用信息(调用指标,筛选条件),性能指标(响应时间、是否走缓存),错误信息(出错原因、类型)
  2. 调用监控。性能趋势图(总体QPS趋势图、响应时长区间分布),零调用统计,慢SQL查找,错误排查

限流和降级

都是为了不再消耗系统资源

  1. 限流。应用内的QPS保护,超出阈值后续的请求立即失败返回,不再继续处理。
  2. 降级。方法一:限流措施,QPS为0对应所有访问全部立即失败。方法二:修改元数据,存在为你的资源置为失效状态。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿⾥巴巴⼤数据之路 阿⾥巴巴⼤数据之路——数据技术篇 数据技术篇 ⼀、整体架构 ⼀、整体架构      从下⾄上依次分为数据采集层、数据计算层、数据服务层、数据应⽤层    数据采集层:以DataX为代表的数据同步⼯具和同步中⼼    数据计算层:以MaxComputer为代表的离线数据存储和计算平台    数据服务层:以RDS为代表的数据库服务(接⼝或者视图形式的数据服务)    数据应⽤层:包含流量分析平台等数据应⽤⼯具 ⼆、数据采集(离线数据同步) ⼆、数据采集(离线数据同步)   数据采集主要分为⽇志采集和数据库采集。⽇志采集暂略(参考书籍原⽂)。我们主要运⽤的是数据库采集(数据库同步)。   通常情况下,我们需要规定原业务系统表增加两个字段:创建时间、更新时间(或者⾄少⼀个字段:更新时间)   数据同步主要可以分为三⼤类:直连同步、数据⽂件同步、数据库⽇志解析同步   1.直连同步     通过规范好的接⼝和动态连接库的⽅式直接连接业务库,例如通过ODBC/JDBC进⾏直连     当然直接连接业务库的话会对业务库产⽣较⼤压⼒,如果有主备策略可以从备库进⾏抽取,此⽅式不适合直接从业务库到数仓的情景   2.数据⽂件同步     从源系统⽣成数据⽂本⽂件,利⽤FTP等传输⽅式传输⾄⽬标系统,完成数据的同步     为了防⽌丢包等情况,⼀般会附加⼀个校验⽂件 ,校验⽂件包含数据量、⽂件⼤⼩等信息     为了安全起见还可以加密压缩传输,到⽬标库再解压解密,提⾼安全性   3.数据库⽇志同步     主流数据库都⽀持⽇志⽂件进⾏数据恢复(⽇志信息丰富,格式稳定),例如Oracle的归档⽇志   (数据库相关⽇志介绍,参考:)    4.阿⾥数据仓库同步⽅式     1)批量数据同步     要实现各种各样数据源与数仓的数据同步,需要实现数据的统⼀,统⼀的⽅式是将所有数据类型都转化为中间状态,也就是字符串类型。以此来实现数据格式的统⼀。     产品——阿⾥DataX:多⽅向⾼⾃由度异构数据交换服务产品,产品解决的主要问题:实现跨平台的、跨数据库、不同系统之间的数据同步及交互。     产品简介:     开源地址:     更多的介绍将会通过新开随笔进⾏介绍!(当然还有其他主流的数据同步⼯具例如kettle等!)     2)实时数据同步     实时数据同步强调的是实时性,基本原理是通过数据库的⽇志(MySQL的bin-log,Oracle的归档⽇志等)实现数据的增量同步传输。     产品——阿⾥TimeTunnel(简称TT)。TT产品本质是⼀个⽣产者、消费者模型的消息中间件     3)常见问题       1.增量数据与全量数据的合并         主要的场景是数据同步中周期全量同步,对应的解决⽅案是每次只同步变更的数据,然后和上⼀周期合并,形成最新的全量数据(选择此⽅案的原因是绝⼤多 数⼤数据平台不⽀持update操作)         具体的⽅案主要有union的联合操作(可以通过⽣成增量中间表detal)与阿⾥主推的全外连接full outer join+全量覆盖insert overwrite的形式。实例参考如下: SQL的Join语法有很多, inner join(等值连接) 只返回两个表中联结字段相等的⾏, left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录, right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录, 假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所⽰: A表 id name 1 Pirate 2 Monkey 3 Ninja 4 Spaghetti B表 id name 1 Rutabaga 2 Pirate 3 Darth Vade 4 Ninja 让我们看看不同JOIN的不同。 FULL [OUTER] JOIN (1) SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name TableA.name = TableB.name 的情况,A和B的交集有两条数据,那么 FULL OUTER JOIN的结果集, 应该是2+2+2=6条,即上⾯的交集,再加剩下的四条数据,没有匹配,以null补全。 结果集 (TableA.) (TableB.) id name id name 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null null null null 1 Rutabag
网约车大数据综合项目是一个集成了各种数据分析和可视化技术的项目,其中数据可视化是其中非常重要的一部分。数据可视化通过图表、地图等形式,将大量的数据信息以直观、易懂的方式展现出来,帮助项目团队和决策者更好地理解和利用数据。 Flask是一款轻量级的Python Web框架,ECharts是一个由百度开发的基于JavaScript的数据可视化库,它们可以很好地配合使用来实现数据可视化的需求。在网约车大数据综合项目中,我们可以利用Flask框架搭建Web应用程序的后端,通过Python语言处理数据,并结合ECharts库来实现前端数据可视化的功能。 具体来说,我们可以使用Flask来构建Web应用的后台服务器,接收用户的请求,并调用相应的数据处理函数。同时,利用ECharts库提供的丰富图表类型和交互功能,将经过处理的数据转换成直观的图表展示,例如折线图、柱状图、地图等。这样,用户就可以通过浏览器访问我们的Web应用,实时查看和分析网约车的相关数据,包括订单量、车辆分布、用户乘车轨迹等内容。 通过数据可视化flask echarts,我们不仅可以帮助项目团队更好地理解和利用网约车的大数据信息,还可以为决策者提供直观、准确的数据支持,帮助他们制定更科学合理的运营策略和规划。这将有助于提升网约车行业的整体运营效率和用户体验,进而推动行业的可持续发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值