数据技术篇之数据服务

news2025/1/19 20:27:36

第6章 数据服务

1.服务架构演进

  • 演进过程
    在这里插入图片描述
  • DWSOA
    在这里插入图片描述

(1)实施原理
  将业务方对数据的需求通过SOA服务的方式暴露出去。有需求驱动,一个需求开发一个或则几个接口,编写接口文档,开放给业务方调用。
(2)优点
  实现简单
(3)缺点
  接口粒度比加粗
  灵活性不高
  扩展性差
  复用率低
  开发效率低
  人力成本较高

  • OpenAPI
    在这里插入图片描述

(1)实施原理
将数据按照其统计粒度进行聚合,同样维度的数据,形成一张逻辑表,采用同样的接口描述。以会员维度为例 把所有以会员为中心的数据做成一张逻辑宽表,只要是查询会员粒度的数据,仅需要调用会员接口即可。
(2)优点
有效的收敛了接口的数量
(3)缺点
数据维度控制较难

  • SmartMQ
    在这里插入图片描述

(1)实施原理
在OpenAPI的基础上,再抽象一层,用DSL(Domain Specific Language,领域专用语言)来描述需求。
(2)优点
所有的简单查询服务减少到只有一个接口,大大降低了数据服务的维护成本。
(3)缺点
不能满足个性化的取数业务场景

  • 统一的数据服务层
    在这里插入图片描述

提供多种服务类型来满足用户需求,分别是OneService-SmartDQ、OneService-Lego、OneService-iPush、OneService-uTiming

(1)OneService-SmartDQ
元数据模型架构示意图:
在这里插入图片描述

SmartDQ 的元数据模型,简单来说,就是逻辑表到物理表的映射。
数据源
SmartDQ 支持跨数据源查询,底层支持接人多种数据源,比如MySQL、HBase、OpenSearch 等。
物理表
物理表是具体某个数据源中的一张表。每张物理表都需要指明主键由哪些列组成,主键确定后即可得知该表的统计粒度。
逻辑表
逻辑表可以理解为数据库中的视图,是一张虚拟表,也可以看作由若干主键相同的物理表构成的大宽表。 SmartDQ 对用户展现的只是逻辑表,从而屏蔽了底层物理表的存储细节。
主题
逻辑表一般会挂载在某个主题下,以便进行管理与查找

架构示意图:
在这里插入图片描述

( I )查询数据库
SmartDQ 底层支持 种数据源,数据的来源主要有两种:①实时公共层的计算作业直接将计算结果写人 HBase ;②通过同步作业将公共层的离线数据同步到对应的查询库。
(2 )服务层
元数据配置。数据发布者需要到元数据中心进行元数据配置,建好物理表与逻辑表的映射关系,服务层会将元数据加载到本地缓存中,以便进行后续的模型解析。·
主处理模块。 一次查询从开始到结果返回,一般会经过如下几步。

DSL 解析:对用户的查询 DSL 进行语法解析,构建完整的查询树。
逻辑 Query 构建:遍历查询树,通过查找元数据模型,转变为逻辑 Query
物理 Query 构建:通过查找元数据模型中的逻辑表与物理表的映射关系,将逻辑 Query 转变为物理 Query
Query 拆分:如果该次查询涉及多张物理表,并且在该查询场景下允许拆分,则将 Query 拆分为多个 SubQuery
SQL 执行:将拆分后的 SubQuery 组装成 SQL 语句,交给对应DB 执行。
结果合并:将 DB 执行的返回结果进行合井,返回给调用者。

其他模块。除了一些必要的功能(比如日志记录、权限校验等),服务中的一些模块是专门用于性能及稳定性方面的优化的。

(2)OneService-Lego
在这里插入图片描述

(1)Lego 被设计成 个面向中度和高度定制化数据查询需求、支持插件机制的服务容器。它本身只提供日志 、服务注册、 Diamond 配置监听、鉴权、数据源管理等一系列基础设施,具体 的数据服务则由服务插件提供。基于 Lego 的插件框架可以快速实现个性化需求并发布上线。
(2)Lego 采用轻量级的 Node.JS 技术核实现,适合处理高并发、低延迟的 IO 集型场景 ,目前主要支撑用户识别发码、用户识别、用户画像、人群透视和人群圈选等在线服务。底层根据需求特点分别选用 Tair、HBase、ADS 存储数据。

(3)OneService-iPush
在这里插入图片描述

iPush 应用产品是一个面向 TT、MetaQ 等不同消息源,通过定制滤规则,向 Web 、无线等终端推送消息的中间件平台。 iPush 核心服务器端基于高性能异步事件驱动模型的网络通信框架 Netty 实现,结合使用 Guava 缓存实现本地注册信息的存储, Filter与Server 之间的通信采用 Thrift 异步调用高效服务实现,消息基于 Disruptor 高性能的异步处理框架(可以认为是最快的消息框架)的消息队列,在服务器运行中Zookeeper 实时监控服务器状态,以及通过 Diamond 作为统一的控制触发中心.

(4)OneService-uTiming
在这里插入图片描述

(1)uTiming 是基于在云端的任务调度应用,提供批量数据处理服务,支撑用户识别、用户画像、人群圈选三类服务的离线计算,以及用户识别、用户画像、人群透视的服务数据预处理、人库。
(2)uTiming-scheduler 负责调度执行 SQL 或特定配置的离线任务,但并不直接对用户暴露任务调度接口。用户使用数据超市工具或 Lego API 建立任务。

2.最佳实践

  • 性能提升方式

(1)资源分配

剥离计算资源
查询资源分配
执行计划优化:查询拆分和查询优化

(2)缓存优化

元数据缓存
模型缓存
结果缓存

(3)查询能力

合并查询
推送服务

  • 如何保证稳定性
    (1)发布系统

元数据隔离:三个环境——日常环境、预发环境、线上环境。对应三个元数据——日常元数据、预发元数据、线上元数据。
隔离发布:资源划分、资源独占、增量更新

(2)隔离

机房隔离
分组隔离

(3)安全限制

最大返回记录数。数据库的查询强制带上 LIMIT 限制,具体数值以用户配置为准。
必传字段。每张逻辑表都会配置主键,并标识哪些字段是调用者必须传人的。这样最终的 SQL 肯定会带上这些字段的限制条件,防止对表做全表扫描。
超时时间。设置合适的超时时间,以使得超时的查询能及时终止并释放资源,保障系统不会被偶发的超时拖垮。

(4)监控

调用日志采集

采集的信息包括:
基础信息 ,包括调用时间、接口名、 方法名、返回记录数等。
调用者信息,包括调用者应用名、来源 IP 地址等。
调用信息,包括调用指标、查询筛选条件等。
性能指标,包括响应时间、是否走缓存等。
错误信息,包括出错原因、错误类型、数据源、错误堆械等。

调用监控

监控可以从以下几个方面展开:
性能趋势。总体 QPS 趋势图、 RT 趋势图、响应时长区间分布。分组性能统计、单机 QPS 统计,以对当前系统容量做评估。
零调用统计。找出最近 天无调用的表,进行下线处理,节约成本。
慢 SQL 查找。找出响应时间较长的 SQL ,及时进行优化。
错误排查。当系统的调用错误数突增时,能从错误日志中及时发现出错原因、出错的数据源等。

(5)限流、降级

限流:采用应用内的QPS保护
降级:
通过限流措施,将 QPS 置为 ,则对应的所有访问全部立即失败,防止了故障的扩散。
通过修改元数据,将存在问题的资源置为失效状态,则重新加载元数据后,对应的访问就全部失败了,不会再消耗系统资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计SSM基于WEB的心理测评系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【手把手教你】使用qstock进行量化回测

01qstock简介qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数据模块(data&…

SAS中用单因素ANOVA研究不同疗法对焦虑症的有效性

本教程将介绍如何使用SAS进行单因素方差分析。 最近我们被客户要求撰写关于单因素ANOVA的研究报告,包括一些图形和统计输出。我们想研究不同疗法对焦虑症的有效性。我们收集了以下类别的75个主题的样本: 无处理(1个n1 27)。生物…

5W3H法与SMART原则的结合使用

5W3H 5W3H分析法,又称“八何分析法”。在实际工作中,人们常常运用5W3H分析法,进行顾客分析、市场需求分析,解决计划编制的结构问题、方向问题、执行力问题。 5W3H是描述问题的手段,其具体指的是:What&…

【图像处理】深入解析LBP算法

问题 LBP是一种常见的特征描述算法,用来提取局部的纹理特征,其原理其实很简单,下面我们就来看看它是怎么一回事吧。 LBP简介 LBP(Local Binary Patterns,局部二值模式)是一种很简单但很高效的局部纹理特…

2025年DMS前装搭载或突破750万辆!多方势力搅局「融合集成」

在智能驾驶功能和舱内人机交互体验不断融合演进的过程中,基于摄像头的DMS/OMS功能正在进入新的发展周期。而在欧洲等部分国家及地区,DMS的标配(主要涉及驾驶安全的监控,比如,驾驶员疲劳、注意力分散、安全带使用、吸烟…

java工厂策略模式的开发应用

java工厂策略模式的开发应用前言准备工作具体实现测试仰天大笑出门去,我辈岂是蓬蒿人前言 大概内容: 假设我有五个车间,每一个车间生产不同的车子,想要统一管理,不关心哪个车间生产什么车;只需找一个代理…

Ajax(一)

1.客户端与服务器 1.1 服务器 上网过程中,负责存放和对外提供资源的电脑。 1.2 客户端 上网过程中,负责获取和消费资源的电脑。 2.URL地址 2.1 URL地址的概念 2.2 URL地址的组成部分 3. 分析网页的打开过程 3.1 图解客户端与服务器的通信过程 三个…

NLP学习笔记(一) RNN基本介绍

大家好,我是半虹,这篇文章来讲循环神经网络 (Recurrent Neural Network, RNN) 文章行文思路如下: 首先通过前馈神经网络引出为啥需要循环神经网络然后介绍循环神经网络的核心思想与运作方式最后拓展两个循环神经网络常见且常用的变体 在讲循…

Windows 7恢复分区丢失了怎么恢复?

问题:Windows 7恢复分区丢失 戴尔、惠普和华硕等电脑制造商现会在他们的计算机上创建一个恢复分区。恢复分区允许用户在系统出现问题时将计算机恢复到出厂默认设置。但是,由于丢失了恢复分区,因此某些用户无法将电脑恢复到出厂设置。这是一个…

析构函数可以为纯虚函数吗?纯虚函数可以有函数体吗?纯虚函数需要函数体吗?

先回答标题中中的几个问题: 析构函数可以为纯虚函数吗? yes。纯虚函数可以有函数体吗? yes。纯虚函数需要函数体吗? 一般来讲,如果析构函数是纯虚函数,那么析构函数必须要有函数体,如果是其它函…

Web前端大作业:基于bootstrap响应式页面,家具装修公司网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

最新版本APT漏洞利用工具箱

点击"仙网攻城狮”关注我们哦~不当想研发的渗透人不是好运维让我们每天进步一点点简介1.最近发现一个好用的渗透工具箱,基本包含最新热门漏洞exp,分享一下项目地址:https://github.com/White-hua/Apt_t00ls环境:jdk1.8如果双…

【深度学习】PyTorch深度学习实践 - Lecture_11_Advanced_CNN

文章目录一、GoogLe Net1.1 网络结构1.2 Inception Model1.3 11 Convolution1.4 PyTorch-GPU 实现 GoogLe Net二、Residual Net2.1 梯度消失和梯度爆炸2.2 残差模块2.3 PyTorch-GPU 实现 Simple Residual Net2.3.1 整体结构2.3.2 残差块对象2.3.3 残差网络对象2.3.4 完整代码三…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.7 案例实现TCC 模式【分析】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.7 案例实现TCC 模式【分析】38.7.1 实现TCC 模式38.7.2 TCC 的空回滚 和业务悬挂38…

Redis框架(八):大众点评项目 逻辑过期时间处理缓存击穿

大众点评项目 逻辑过期时间处理缓存击穿需求:逻辑过期时间处理缓存击穿业务实现总结SpringCloud章节复习已经过去,新的章节Redis开始了,这个章节中将会回顾Redis实战项目 大众点评 主要依照以下几个原则 基础实战的Demo和Coding上传到我的代…

七分钟教会你如何编写一个合格的测试用例

目录 1、测试用例的基本要素 2、根据测试用例去测试带来的好处 3、测试用例的设计方法 3.1、等价类 3.2、边界值 3.3、错误猜测法 3.4、场景法 3.5、因果图法 3.6、正交排列 4、怎样判断一个测试用例是好的测试用例 1、测试用例的基本要素 测试用例是为了实施测试而向…

基于LEACH和HEED的WSN路由协议研究与改进(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

Google谷歌浏览器Post请求预见strict-origin-when-cross-origin跨域问题的 解决办法

问题概述 关于这个问题,后端接口开发完成,前端功能界面和函数方法体编写完成后,博主在前后端联调的时候遇到的,接口是调用成功了,但是没有返回任何结果, 错误信息:“ Referrer Policy: strict-…

C++中二叉树的非递归遍历方法2-1

1 二叉树简介 树是一种数学上的抽象,在算法的设计与分析中起到一个中心作用。树是有n个节点的有限集合。二叉树是树的一种特殊形式,这种树的每个节点最多有2个子节点。 2 二叉树的遍历方法 二叉树的遍历分为前序遍历、中序遍历、后序遍历和层序遍历四…