解决方案:数据技术篇之实时技术

优采云 发布时间: 2022-12-23 06:25

  解决方案:数据技术篇之实时技术

  第 5 章实时技术

  在大数据系统中,离线批处理技术可以满足很多数据使用场景的需求,但在DT时代,每天面对的信息瞬息万变,越来越多的应用场景对数据的时效性提出了更高的要求。 要求。 数据的价值是时效性的。 当一条数据产生时,如果不能及时处理并在业务系统中使用,数据就无法保持最高的“新鲜度”和价值最大化。 因此,阿里巴巴提出了流式实时处理技术来补充离线批处理技术。

  流式数据处理一般具有以下特点:

  时效性高

  常驻代表团

  高性能要求

  应用限制

  5.1 流式架构

  按功能分,主要包括:

  资料采集

  数据处理

  数据存储

  数据服务

  按数据采集类型可分为:

  数据库变更日志:如MySQL binlog log、Hbase hlog log、OceanBase change log、Oracle change log等。

  引擎访问日志:如用户访问网站产生的Apache引擎日志、搜索引擎的接口查询日志等。

  数据采集原则:

  数据大小限制:当达到限制条件时,当前采集的新数据将被视为一批(例如一批512KB)。

  time threshold limit:当时间达到一定条件时,会将目前采集的新数据也作为一个batch,避免数据量小的时候不一直采集(比如写一个batch in 30秒)

  消息系统和数据中间件

  消息系统:

  消息系统是数据库变更的上游,其数据延迟远低于数据中间件,但支持的吞吐量有限。 一般用作业务数据库变更的消息传递,如下单、支付等消息。

  消息中间件:

  作为数据交换平台,将采集的数据分发到下游处理大业务数据(每天几十TB的容量)

  时间敏感的吞吐量

  消息系统

  毫秒

  低的

  数据中间件

  第二

  高的

  阿里采用的六九三引擎系统是阿里源提供的流计算系统:

  流计算系统涵盖了从数据采集到数据生产的所有环节,力求保障流计算的严谨可靠发展。 SQL语义提供的流式数据分析能力(StreamSQL),让流式数据分析的门槛不复存在。 它在Storm的基础上包裹了一层SQL语义,方便开发者通过编写SQL实现实时计算,无需关心计算状态的细节,大大提高开发效率,降低流计算的门槛。 当然,它也支持传统模式的开发,就像Hadoop中的Hive MapReduce关系一样,根据不同的应用场景选择不同的方式。 此外,StreamCompute还提供流计算开发平台。 在该平台上,无需登录服务器操作即可完成应用的相关运维,大大提高了运维效率。

  业界广泛使用的流计算系统:

  Twitter的开源Storm系统

  雅虎的开源S4系统

  阿帕奇公园流媒体

  

  弗林克

  流数据处理原理,以Storm为例:

  spout:topology的输入,从数据中间件中读取数据,按照自定义的分发规则发送给下游的bolt。 可以有多个输入源。

  bolt:业务处理单元,可以根据处理逻辑分为多个步骤,其中的数据分布规则也是自定义的。

  实时任务的典型问题:

  (1)去重指标

  去重分为:

  精确的重复数据删除。 在这种情况下,必须保留详细数据。 当遇到内存问题时,可以使用数据倾斜来处理,可以将一个节点的内存压力分摊到多个节点上。

  模糊去重。当需要去重的详细数据量非常大,对业务的准确性要求不高时,可以使用相关的去重算法,将内存占用降低到千分之一甚至万分之一,提高内存利用率

  去重方法:

  ①布隆过滤器

  该算法是位数组算法的应用,不保存真正的明细数据,只保存明细数据哈希值对应的标记位。 当然会出现hash值冲突,但是错误率是可以控制的,计算出来的去重值比真实值要小。 使用该算法存储1亿条数据只需要100MB的空间。

  适用于统计精度不高,统计维度值较多的场景。 比如统计全网各个商户的UV数据显示,记录数达到千万条。因为各个维度之间,Bloom filter是可以共享的

  ② 基数估计

  该算法还利用散列的原理,根据数据的分散程度估计现有数据集的边界,从而得到去重值的近似和。 此处估计的重复数据删除值可能大于或小于实际值。 使用该算法存储1亿条数据只需要几KB的内存。

  适用场景:统计精度不高,统计维度很粗。 比如整个市场的UV数据,每天只有一条记录。 基数估计不能在各个维度的值之间共享。 比如统计全天几个小时的UV数据,需要24个基数估计对象,不适合细粒度的统计场景。

  (2) 数据倾斜

  解决方案:

  ①去重指标入桶

  通过对去重后的值进行分桶,将相同的值放入同一个桶中进行去重,最后将每个桶中的值相加得到总值。 在这里,CPU 和内存资源。

  ② 非重复指标的桶

  数据随机分布到每个桶中,最后汇总每个桶的值,主要是利用每个桶的CPU容量。

  (3) 交易处理

  保证交易的幂等性:

  ① 超时时间:由于数据处理是分批进行的,当一批数据处理超时后,将从拓扑的spout端重新发送数据。 另外,批量处理的数据量不宜过大,应增加限流功能(限制一批数据的记录数或容量等),避免数据处理超时。

  ② 交易信息:每批数据都会附带一个交易ID信息。 在重传的情况下,开发者可以根据交易信息判断数据第一次到达和重传时的不同处理逻辑。

  ③ 备份机制:开发者需要保证内存数据可以通过外存恢复,因此需要将计算中使用的中间结果数据备份到外存。

  实时任务在运行过程中,会计算出很多维度和指标,这些数据需要存储在存储系统中,用于恢复或关联。 涉及三种类型的数据:

  中间计算结果:在实时应用处理过程中,会保存一些状态(如去重指标的详细数据),用于发生故障时利用数据库中的数据恢复内存站点。

  最终结果数据:指经过ETL处理后的实时结果数据。 这些数据是实时更新的,写入频率非常高,可以直接供下游使用。

  维表数据:在离线计算系统中,通过同步工具导入到在线存储系统中,实现实时任务与实时流数据的关联。 维度表的使用将在后面的章节中讨论。

  对于海量数据的实时计算,一般采用非关系型数据库来应对大量的并发读写。 以下是数据统计中表名设计的一些时间体会:

  (1)表名设计

  设计规则:汇总层识别+数据域+主维度+时间维度

  例如:dws_trd_slr_dtr,表示汇总层的交易数据,按照卖家主维度(slr)+截至当日0点(dtr)统计汇总。

  这样做的好处是,所有主维度相同的数据都放在一张物理表中,避免了表太多,难以维护。 另外从表名可以直观的看出存储了哪些数据内容,方便排查问题。

  (2) rowkey设计

  设计规则:MD5+主维度+维度标识+子维度1+时间维度+子维度2

  例如:卖家ID的MD5前四位+卖家ID+app+一级类目ID+ddd+二级类目ID

  

  使用MD5的前四位作为rowkey的第一部分,可以对数据进行哈希处理,使服务器整体负载均衡,避免热点。 上例中卖家ID在主维度,查数据时必须传入。 每个统计维度都会生成一个维度ID,用于rowkey上的区分。

  5.2 流数据模型

  流式数据模型一般分为五层:

  (1)ODS:改变订单粒度的过程,一个订单有多条记录。

  (2) DWD:订单粒度的支付记录,一个订单只有一条记录

  (3) DWS:卖家实时交易金额,一个卖家只有一条记录,指标实时刷新。

  (4)ADS:外卖专区的实时交易金额,仅供外卖商家使用

  (5)DIM:订单商品类别与行业对应关系的维度表。

  在流计算中,经常需要将两个实时流关联一个主键,得到对应的时间安排。下图是订单信息表和支付信息表的关系*敏*感*词*

  在上面的例子中,两个表的数据是实时采集的,每有一条新的数据到来,就在内存中的另一张表的当前全量数据中查找。 如果能找到,则表示关联成功,直接输出: 如果没有找到,则将数据放入内存中自己表的数据集中等待。 另外,无论关联是否成功,都需要将内存中的数据备份到外部存储系统中。 当任务重启时,可以从外部存储系统恢复内存数据,保证数据不丢失。 因为重启时,任务继续运行,不会重新运行之前的数据。

  另外,订单记录的变更可能会发生多次(比如订单的多个字段被多次更新)。 这种情况下,需要根据订单ID进行去重,避免A表和B表多次关联成功; 否则输出到下游会有多条记录,这样得到的数据会重复。

  (1) 为什么要用维表

  数据未及时准备好

  无法准确获取全量最新数据

  资料乱序

  (2)维表的使用形式

  满载

  增量加载

  5.3 大促特色及保障

  毫秒延迟

  洪峰明显

  高安全性

  (1) 如何优化实时任务

  独享资源与共享资源策略

  合理选择缓存机制,尽量减少读写库的次数

  合并计算单元以降低拓扑级别

  共享内存对象以避免字符复制

  平衡高吞吐量和低延迟

  (2) 如何保证数据链路

  进行多机房容灾和异地容灾。下图是多机房容灾*敏*感*词*

  (3) 如何进行压力测试

  数据压测:数据压测主要是洪流存储压测,就是把数小时甚至几天的数据累积起来,在某个时刻全部释放。

  产品压力测试:

  ① 产品本身的压力测试

  采集大屏服务器所有读操作的url,通过压测平台进行压测流量回放,按照QPS目标:500次/秒进行压测。 在压测过程中,迭代优化服务器性能,提升大屏应用的数据处理性能。

  ② 前端页面稳定性测试

  在浏览器中打开大屏页面,进行8-24小时的前端页面稳定性测试。 监控大屏前端JS对客户端浏览器的内存和CPU消耗,检测并修复前端JS内存泄露等问题,提高前端页面的稳定性。

  解决方案:目前网站怎么优化才好?浅析当下网站优化的新思维新方法

  网站优化在这个行业由来已久,许多优化方法已经约定俗成,并被反复采纳和使用。 不得不说,搜索引擎的算法日新月异,用旧的概念和方法做优化可能有点偏。 需要一些新思路和新方法。 这些东西需要长期观察和总结最新的优质站点。

  1、不要老是传统的企业网站。 营销网站更受搜索引擎欢迎。

  传统的网站模式千篇一律,缺乏新意,造成了人们的视觉疲劳。 一个营销网站,利用适当的图文,直观地展示产品的特点和优势,才能吸引大家的眼球。

  

  2、网站内部页面细节需要更新,内部链接网络要逐步编制。

  尝试阅读新闻列表页面上的部分内容介绍。 以往的企业网站大多直接展示新闻标题列表; 公司简介和联系我们页面。 侧边栏最好设置新闻推荐等一些栏目,避免内链太少; 尽量在商品详情页的侧边栏展示一些商品推荐,增加商品的丰富度; 在新闻详情页下,最好设置相关阅读等,增加文章的连贯性。 总而言之,内部内容应该编成网络。

  3、网站关键词不一定越少越好。

  很多人有一个误区,认为关键词设置的越少,网站赋予这个关键词的权重越高,这个词越容易出现。 有一定的道理,但这种现象在实际操作中并不明显。 关键词设置要遵循的原则是关键词一定要有相关性,尽量多设置,十几个也可以。 那么文章的信息量就尽可能的大,质量就尽可能的高,体现出这些关键词的密度。 关键词会一个接一个的出现,带动一个接一个,互相影响,更好的达到优化效果。

  

  4.外链作用不大,反链却很有用。

  外链现在是一个辅助功能,优质的外链平台越来越少,所以做好内链显得更为重要。 尽可能多做高质量的友情链接,对网站是非常有利的。

  5、优质的内链和流量起到核心作用。

  内链怎么做,首先内容一定要高质量,尽量伪原创和原创,即使是粘贴复制,也尽量插入一些图片修改一下。 一天四五篇新闻是正确的做法。 一个制作精良的网站每天必须有四篇新闻文章。 无论你多么原创,它都是无用的。 流量不用多说,正规的引流必不可少。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线