数据质量漫谈

简介: 数据质量问题无处不在,本文尝试找到一种方法,能够尽可能的发现数据质量问题并解决之。

image.png

作者 | 茂才
来源 | 阿里技术公众号

一 概述

1 数据质量问题无处不在

基本上每个用数据的同学,都遇到过以下类似的问题。

  • 表没有按时产出,影响下游,严重的甚至可能影响线上效果。
  • 打点缺失,看了报表才发现数据对不上。
  • 数据统计出来,uv大于pv,很尴尬。
  • 数据产出暴增,本来1000万的数据变成了3000万。
  • 字段里面的枚举值和注释里面的对不上,没人能解释。
  • 某些维度缺失,没法做进一步的数据分析。
  • 做了一通分析,发现结果很离谱,一点点向前分析,发现打点有问题。
  • ……

以上都是数据质量的问题。本文尝试找到一种方法,能够尽可能的发现数据质量问题并解决之。

2 数据标准

谈到数据质量,就必须了解评价数据质量的维度。DAMA UK 提出了数据质量的六个核心维度,见图1。

注:DAMA International (国际数据管理协会)成立于1980年,是一个由技术和业务专业人员组成的国际性数据管理专业协会,作为一个非营利的机构,独立于任何厂商,旨在世界范围内推广并促进数据管理领域的概念和最佳实践,为数字经济打下理论和实践基础。全球会员近万人,在世界48个国家成立有分会。

image.png

图1 数据质量维度

  • 完整性Completeness:完整性是指数据信息信息是否存在缺失的状况,常见数据表中行的缺失,字段的缺失,码值的缺失。比如虽然整体pv是正确的,但在某个维度下,只有部分打点,这就是存在完整性的问题。不完整的数据所能借鉴的价值就会大大降低,也是数据质量问题最为基础和常见的问题。常见统计sql:count( not null) / count(*)
  • 有效性Validity :有效性一般指范围有效性、日期有效性、形式有效性等主要体现在数据记录的规范和数据是否符合逻辑。规范指的是,一项数据存在它特定的格式,如:手机号码一定是11位的数字;逻辑指的是,多项数据间存在着固定的逻辑关系,如:PV一定是大于等于UV的。
  • 准确性Accuracy:准确性是指数据记录的信息是否存在异常或错误。最为常见的数据准确性错误就如乱码。其次,异常的大或者小的数据也是不符合条件的数据。准确性可能存在于个别记录,也可能存在于整个数据集,例如数量级记录错误。这类错误则可以使用最大值和最小值的统计量去审核。
  • 及时性Timeliness:及时性是指数据从开始处理到可以查看的时间间隔。及时性对于数据分析本身的影响并不大,但如果数据建立的时间过长,就无法及时进行数据分析,可能导致分析得出的结论失去了借鉴意义。比如:实时业务大盘数据,及时反映业务关键指标的情况,暴露业务指标的异常波动,机动响应特殊突发情况都需要数据的及时更新和产出。某些情况下,数据并不是单纯为了分析用而是线上策略用,数据没有及时产出会影响线上效果。
  • 一致性Consistency:一致性是指相同含义信息在多业务多场景是否具有一致性,一般情况下是指多源数据的数据模型不一致,例如:命名不一致、数据结构不一致、约束规则不一致。数据实体不一致,例如:数据编码不一致、命名及含义不一致、分类层次不一致、生命周期不一致等。
  • 唯一性Uniqueness: 在数据集中数据不重复的程度。唯一数据条数,和总数据条数的百分比。比如 count(distinct business key) / count(*),一般用来验证主键唯一性。

3 数据的生命周期

image.png

图2 数据生命周期

  • 数据接入:接入上游表输入或者其它数据源的数据。
  • 数据加工:编写sql生成目标数据表。
  • 数据产出:定时调度任务生成数据表。
  • 数据应用:下游数据分析、报表等应用数据。

在上面任何一个环节中,都可能出现数据质量的问题,提升数据质量需要从数据接入、数据加工、数据产出、数据应用、效果跟踪等全流程进行把控,全局观很重要,不拘一点,才能看的更全面。

二 如何解决数据质量问题

数据质量是数据的生命线,没有高质量的数据,一切数据分析、数据挖掘、数据应用的效果都会大打折扣,甚至出现完全错误的结论,或者导致资损。然而数据质量问题却是广泛存在的,且治理的难度很大,因为数据的生产、加工、流转、应用涉及到业务运营、生产系统、数据系统、数据产品等上下游链路几十个环节,每个环节都可能引入数据质量问题。

集团很多BU都有成体系的解决数据质量的方案,集团也有很多工具来解决数据质量问题。本文不详细介绍此类工具的使用,主要聚焦在数据开发过程中因为数据研发同学经验不足而导致的数据质量问题。

image.png

图3 数据质量解决方法

如图3所示,我认为有三种方法可以在一定程度上解决数据质量的问题。

  • 数据探查

    • 发现完整性、一致性、有效性、准确性、关联性等问题
    • 解决的数据接入和数据产出阶段的问题
  • 开发规范

    • 发现数据及时性、数据一致性、数据准确性等问题
    • 解决数据产出阶段的问题
  • 数据监控

    • 避免一致性、准确性等问题
    • 解决数据生产阶段的问题

1 数据探查

数据探查的定义一般为:数据探查是探索源数据的过程,用来理解数据结构、数据内容、数据关系以及为数据工程识别可能存在的问题。

数据探查不止用在数据质量领域,数仓开发、数据迁移等都需要对源数据进行数据探查。数据仓库的所有数据基础都是源数据(ODS),在开发数仓之前,需要对源数据进行探查,才能保证产出的数据仓库的准确性。

题库业务的数据缺少打点,数据建设主要基于业务架构的一些中间表和结果表,在开发前期,没有意识到数据探查的重要性,导致数据的准确性有严重问题,数据研发出现了大量的返工现象。

dataworks提供了数据探查的功能,可以统计基本信息、数据分布、topN、直方图等。但我试了几次一直是探查中,易用性还不是太好。

image.png

图4 数据探查基本方法

上图是数据探查的一些基本功能。

本部分介绍数据探查的一些常见方法,不成体系,只是开发过程中遇到的问题,供参考。

表探查

1)数据总量探查

数据总量探索是对ods的总体数据有初步认知,可以通过数据地图的分区信息确认,也可以通过写sql计算。

数据总量探查时要探查每日增量数据总量、全量数据总量(如有需要)。

一般情况下,数据总量探查结果要与业务方或者上游数据提供方确认是否符合预期。

2)数据产出时间和生命周期探查

在做数据探查时,需要探查数据产出时间和生命周期,对后续的任务调度和补数据有一定的帮助。

列探查

1)数据分布探查

数据分布探查是数据探查中最重要的部分,可以探测不同维度下数据的分布情况。一般情况下,有如下写法。

SELECT  result         
,COUNT(*)
FROM    xxx.table_name
WHERE dt = 'xxxxx'
GROUP BY result ;

2)枚举值探查

枚举值探查是上面数据分布探查的一种特例,探查某些维度的枚举值是否合理。一般情况下sql如下。

SELECT  DISTINCT result
FROM    xxx.table_name
WHERE dt = 'xxxxx' ;

这种探查,可以探查出很多问题,比如上游生成某枚举值只有0和1,但探查的时候探查出为空等。

3)唯一值探查

某些情况下,上游生成某些字段唯一(不一定是主键),也需要对此类情况探查,不然做join时容易出现数据膨胀问题。探查sql一般如下。

SELECT  COUNT(item_id)         
,COUNT(DISTINCT item_id)
FROM    xxx.table_name
WHERE   dt = 'xxxxx' ;

4)极值&异常值探查

对于某些数值类的值,必要情况下可以做一下极值探查,比如求最大值、最小值、平均值。这样可以尽快发现源数据中的脏数据。

对于异常值也要探查一下,比如0、null、空字符串等。

列间探查

1)关联字段探查

通常情况下,一张表中不同字段直接有关联关系。比如曝光字段和曝光时长之间有关联关系,有曝光的一定有曝光时长,或者曝光时长大于0的情况下一定有曝光。

或者uv一定大于pv,这种方法可以对dws表进行验证。

表间探查

1)join条件探查

此种情况属于跨表探查。不同的表在做join时,除了探查join条件是否成功,还需要探查join得到的数量是否符合预期。

在题库业务中,出现过因为系统bug,下游表的join条件中,有3%左右的数据join不上,但因为前期没有做此方面的数据探查,导致用了很久才发现此问题。

还有一种情况是业务上两张表必须join上,比如消费表所有的用户都应该出现在用户表,或者所有内容都应该出现在内容维表等。

一般sql如下:

SELECT  count(DISTINCT a.itemid)
FROM    xxx.yyy_log a
LEFT JOIN (
SELECT  itemid               
FROM    xxx.zzzz               
WHERE   ds = '20210916'           ) b
ON a.itemid = b.itemid
WHERE   a.dt = '20210916'
AND     b.itemid IS NULL ;

业务探查

1)过滤条件不对

在某些情况下,需要从海量数据中,通过某些过滤条件捞出所需数据。比如客户端打点的规范是一致的,不同的端的用户日志都在一张表中,如果只分析某种数据,需要对数据进行过滤。

此过滤条件一般由业务方同学提供,在数据探查阶段要先做条件过滤,与业务方同学沟通过滤之后的数据是否符合预期。

2)业务上数据重复问题

属于表唯一性探查。此问题与唯一值的现象类似,都是数据有重复。

不同之后在于,某些情况下,虽然数据提供方称了某些列唯一,但在某些业务场景下,数据就是不唯一的。比如题库的某业务中,业务方开始说不同线索得到的q_id不一致,然而q_id来自url,在业务上url确实存在重复的情况,所以q_id有重复的情况。

但在另一种数据重复的问题往往不是业务如此,而是系统bug导致的。比如某种业务中,一本书理论上处理完之后不应该再次处理,但系统的bug导致出现一本书被处理多次的情况。

对于第一种情况,我们在建模时要考虑业务复杂性;而第二种情况,我们要做的是找到有效的数据,去掉脏数据。

3)数据漏斗问题

数据链路中数据漏斗是很关键的数据,在做初步数据探查时,也需要关注数据漏斗。每一层数据丢弃的数量(比例)都要和业务方确认。

比如某一个入库流的处理数据数量和入库数量对比,或者入库数量和入索引数量等,如果比例出现了很大的问题,需要找上游业务方修正。

4)业务上数据分布不合理

“刷子用户”的发现就是一种常见的数据分布不合理,比如某个user的一天的pv在5000以上,我们大概率怀疑是刷子用户,要把这些用户从统计中剔除,并要找到数据上游过滤掉类似用户。

一般sql如下:

SELECT  userid         
,count(*) AS cnt
FROM    xxx.yyyy_log
WHERE   dt = '20210913'
GROUP BY userid
HAVING  cnt > 5000 ;

2 数据开发规范

上面描述了很多数据探查问题,如果认真的做了数据探查,可以避免很多数据质量问题。本部分描述在数据开发环节中开发同学因为经验等原因导致的数据质量问题。

SQL编写问题

1)笛卡尔积导致数据膨胀

此问题往往发生在没有对join条件进行唯一性检查的情况下。因为右边数据不唯一,发生笛卡尔积,导致数据膨胀。如果是某些超大表,除了数据结果不对之外,会产生计算和存储的浪费。

还有一种情况,在单一分区中数据是唯一的,但join时没有写分区条件,导致多个分区同时计算,出现数据爆炸。

这个问题很多同学在开发中遇到了多次,一定要注意。

2)join on where顺序导致结果错误

此问题也是常见问题,因为写错了on和where的顺序,导致结果不符合预期。错误case如下。

SELECT  COUNT(*)
FROM    xxx a
LEFT JOIN yyy b
ON      a.id = b.item_id
WHERE   a.dt = '${bizdate}'
AND     b.dt = '${bizdate}' ;

在上面的sql中,因为b.dt在where条件中,那么没有join上的数据会被过滤掉。

3)inner join和outer join用错问题

此问题偶发,往往是开发同学没有理解业务或者typo,导致结果不符合预期。

写完sql一定要检查,如果有可能请别的同学review sql。

4)时间分区加引号

一般情况下,分区都是string数据类型,但在写sql时,分区不写引号也可以查询出正确的数据,导致有些同学不习惯在分区上加引号。

但某些情况下,如果没有加引号,查询的数据是错误的。所以一定要在时间分区上加引号。

5)表循环依赖问题

在开发时,偶尔会出现三个表相互依赖的问题,这种情况比较少见,而且在数据开发阶段不容易发现,只有再提交任务之后才会发现。

要避免这种情况,需要明确一些开发规范。比如维表和明细表都要从ods表中查得,不能维表和明细表直接互相依赖。对于某些复杂的逻辑,可以通过中间表的形式实现重用。

6)枚举值问题

在做etl时,需要把某些枚举值转化成字符串,比如1转成是、0转成否等。

常见的写法是在sql中写case when。

但对于某种一直增长的枚举值,这种方法不合适,否则增加一种编码就要改一次sql,而且容易出现sql膨胀的问题。

推荐通过与码表join的方法解决此问题。

性能问题

1)join on where顺序的性能问题

上面提到过join的on和where执行顺序的问题,这也关系到join的性能问题。因为是先on后where,建议先把数据量缩小再做join,这也可以提升性能。

(1) 如果是对左表(a)字段过滤数据,则可以直接写在where后面,此时执行的顺序是:先对a表的where条件过滤数据然后再join b 表;

(2) 如果是对右表(b)字段过滤数据,则应该写在on 条件后面或者单独写个子查询嵌套进去,这样才能实现先过滤b表数据再进行join 操作;

如果直接把b表过滤条件放在where后面,执行顺序是:先对a表数据过滤,然后和b表全部数据关联之后,在reduce 阶段才会对b表过滤条件进行过滤数据,此时如果b表数据量很大的话,效率就会很低。因此对于应该在map 阶段尽可能对右表进行数据过滤。

我一般对右表做一个子查询。

2)小维表 map join

在Hive中

若所有表中只有一张小表,那可在最大的表通过Mapper的时候将小表完全放到内存中,Hive可以在map端执行连接过程,称为map-side join,这是因为Hive可以和内存的小表逐一匹配,从而省略掉常规连接所需的reduce过程。即使对于很小的数据集,这个优化也明显地要快于常规的连接操作。其不仅减少了reduce过程,而且有时还可以同时减少Map过程的执行步骤。参考文末链接一。

在MaxCompute中

mapjoin在Map阶段执行表连接,而非等到Reduce阶段才执行表连接,可以缩短大量数据传输时间,提升系统资源利用率,从而起到优化作业的作用。

在对大表和一个或多个小表执行join操作时,mapjoin会将您指定的小表全部加载到执行join操作的程序的内存中,在Map阶段完成表连接从而加快join的执行速度。

文档中给的例子如下:

select /*+ mapjoin(a) */
a.shop_name,
a.total_price,
b.total_price
from sale_detail_sj a join sale_detail b
on a.total_price < b.total_price or a.total_price + b.total_price < 500;

参考文末链接二。

3)超大维表 hash clustering

在互联网大数据场景中,一致性维表的数据量都比较大,有的甚至到几亿甚至十亿的量级,在这个数据量级下做join,会这种任务往往耗时非常长,有些任务甚至需要耗费一天的时间才能产出。

在这种情况下,为了缩短执行时间,通常可以调大join阶段的instance数目,增加join阶段的内存减少spill等,但是instance的数目不能无限增长,否则会由于shuffle规模太大造成集群压力过大,另外内存的资源也是有限的,所以调整参数也只是牺牲资源换取时间,治标不治本。

Hash clustering,简而言之,就是将数据提前进行shuffle和排序,在使用数据的过程中,读取数据后直接参与计算。这种模式非常适合产出后后续节点多次按照相同key进行join或者聚合的场景。

Hash clustering是内置在MaxCompute中,不用显示的指定,很方便。

参考文末链接三。

4) 数据倾斜问题

Hive/MaxCompute在执行MapReduce任务时经常会碰到数据倾斜的问题,表现为一个或者几个reduce节点运行很慢,延长了整个任务完成的时间,这是由于某些key的条数比其他key多很多,这些Key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完。

常见的情况比如join的分布不均匀,group by的时候不均匀等。

具体的解决方法可以参考文末链接四。

3 数据监控

提交数据任务后,如何能正确及时的监控任务也是非常重要的。在数据监控方面,集团提供了很多强大的产品来解决问题,简单介绍如下。

数据及时性监控(摩萨德)

摩萨德监控是对任务运行状态的监控,包括任务运行出错、未按规定时间运行。摩萨德是对任务的监控,因此特别适合监控数据产出的实时性。比如某些表需要在几点产出,如果没有产出则报警等。当前摩萨德只能在Dataworks使用。

数据产出监控(DQC)

不同于摩萨德对任务的监控,DQC监控是对表和字段的监控,是任务运行后触发监控条件从而触发报警。

数据质量中心(DQC,Data Quality Center)是集团推出的数据质量解决方案,它可以提供整个数据的生命周期内的全链路数据质量保障服务。通过DQC,我们能够在数据生产加工链路上监控业务数据的异常性,如有问题第一时间发现,并自动阻断异常数据对下游的影响,保障数据的准确性。

DQC可以做以下监控

  • 数据产出行数波动监控
  • 业务主键唯一性监控
  • 关键字段空值监控
  • 汇总数据合理性监控

DQC的流程如下:

  • 用户进行规则配置
  • 通过定时的调度任务触发检查任务执行
  • 基于任务配置,获取样本数据
  • 基于计算返回检验结果
  • 调度根据检验结果,决定是否阻断干预(强依赖、弱依赖)

不过DQC虽然很强大,但其配置还是很繁琐的,而且要设置波动规则,需要较长时间观测,表和字段多的时候配置工作特别大。有团队研究了Auto-DQC,可以自动化监控DQC配置。

其它数据质量监控平台

其它值得关注的数据质量监控平台包括

  • Apache Griffin(Ebay开源数据质量监控平台)
  • Deequ(Amazon开源数据质量监控平台)
  • DataMan(美团点评数据质量监控平台)

三 后记

解决数据质量问题没有银弹,数据质量管理不单纯是一个概念,也不单纯是一项技术、也不单纯是一个系统,更不单纯是一套管理流程,数据质量管理是一个集方法论、技术、业务和管理为一体的解决方案。本文简单总结了我们当前遇到的数据质量问题和处理方法,也希望与对数据质量敢兴趣的同学多多交流。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

7招,实现安全高效的流水线管理

简介&#xff1a;云效团队多年来为阿里巴巴内部&#xff08;Aone&#xff09;和云上企业用户&#xff08;云效&#xff09;分别提供研发运维工具&#xff0c;并致力于打造企业级一站式的 DevOps 平台&#xff0c;更多关注不同类型的企业用户在使用过程中的管理与协作场景&#…

字节跳动最新音乐检索系统ByteCover2,检索速度提高八倍

翻唱识别&#xff08;CSI&#xff09;是音乐信息检索&#xff08;MIR&#xff09;领域的一项重要任务&#xff0c;在歌曲搜索&#xff0c;音乐分发&#xff0c;曲库整理&#xff0c;智能推荐等场景下有着重要作用&#xff0c;被誉为下一代音乐识别技术。 近期&#xff0c;字节…

Serverless 场景排查问题利器 : 函数实例命令行操作

简介&#xff1a;实例命令行功能的推出希望能消除用户使用 Serverless 的“最后一公里”&#xff0c;直接将真实的函数运行环境展现给用户。 背景介绍 全托管的 Serverless 计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力&#xff0c;在 Serverless 落地…

从运维域看 Serverless 真的就是万能银弹吗?

简介&#xff1a;极客时间《Serverless 入门课》作者秦粤最新文章: 再次讨论正当时的 Serverless。文章分为三个部分&#xff0c;分别是 复杂化for 云开发商; 简化 for 开发者&#xff0c;以及团队使用 Serverless 的最佳场景。 作者说 在开始本篇内容前我想与各位开发者达成几…

多任务学习模型之ESMM介绍与实现

简介&#xff1a;本文介绍的是阿里巴巴团队发表在 SIGIR’2018 的论文《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》。文章基于 Multi-Task Learning (MTL) 的思路&#xff0c;提出一种名为ESMM的CVR预估模型&#xff…

java pinyin4j 首字母_通讯录之按汉字首字母排序 --java--pinyin4J

最近开发手机端OA系统通讯录时遇到了用汉字首字母排序的问题&#xff0c;各种谷歌后发现了一个轮子pinyin4J&#xff0c;这个轮子是可以将汉字转换成字母拼音&#xff0c;个人觉得很好用&#xff0c;完美的解决了排序的问题&#xff0c;分享一下。一.工具介绍pinyin4j是一个支持…

助力开源生态繁荣,统信软件建设中国桌面操作系统根社区

继 React、SUSE、RedHat 宣布对俄罗斯停服后&#xff0c;近日 Ubuntu 开发商 Canonical 在俄乌冲突下也宣布对俄罗斯企业停止支持和专业服务。 这给我们敲醒了警钟&#xff1a;因为Ubuntu 事件瞄准桌面操作系统&#xff0c;桌面操作系统用户庞大&#xff0c;其安全性属于系统级…

一文详解 | 开放搜索兼容Elasticsearch做召回引擎

简介&#xff1a;开放搜索发布开源兼容版&#xff0c;支持阿里云Elasticsearch做搜索召回引擎&#xff0c;本文详细介绍阿里云ES用户如何通过接入开放搜索兼容版丰富行业分词库&#xff0c;提升查询语义理解能力&#xff0c;无需开发、算法投入&#xff0c;即可获得淘系同款搜索…

人人都是 Serverless 架构师 | 现代化 Web 应用开发实战

简介&#xff1a;本篇实战将介绍如何以超低成本构建动态的 Web 站点&#xff0c;并且实现灵活扩展&#xff0c;限流等效果&#xff0c;最后再跟大家聊一聊“现代应用”的相关概念。 相信很多同学都有过想要拥有自己的 Web 站点的想法&#xff0c;但是如果想要搭建动态的站点&a…

Gartner:如何在中国成功应用多云模式

作者 | Gartner研究总监 杜勇 供稿 | Gartner 当前&#xff0c;中国政府鼓励行业企业通过云计算技术来实施数字化转型&#xff0c;从而加速经济增长。许多企业机构已部署了私有云和单一供应商混合云&#xff0c;以实现这一目标。为了满足全球业务和本地业务需要分别部署在不同的…

java socket 线程池_程序员:java使用线程池和TCP实现简单多轮聊天系统

最近在做物联网项目,需要使用TCP和传感器进行双向交互,通过这种渠道,找到了下面的代码,写成博客主要也是为了记录一下,以后用到随时可以看。代码实现服务端package com.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.…

阿里云李飞飞:中国数据库的时与势

简介&#xff1a;数据库、操作系统和中间件并列为三大基础软件&#xff0c;无论是在银行存取款&#xff0c;还是进行健康码查询&#xff0c;我们的日常应用和企业业务背后都离不开数据库。可以说&#xff0c;没有数据库&#xff0c;就难以构建数字化底座。过去的40多年&#xf…

阿里巴巴超大规模 Kubernetes 基础设施运维体系介绍

简介&#xff1a;ASI 作为阿里集团、阿里云基础设施底座&#xff0c;为越来越多的云产品提供更多专业服务&#xff0c;托管底层 K8s 集群&#xff0c;屏蔽复杂的 K8s 门槛、透明几乎所有的基础设施复杂度&#xff0c;并用专业的产品技术能力兜底稳定性&#xff0c;让云产品只需…

数据库资深“学霸”再启程,专访数据库初创公司矩阵起源全球 CTO 田丰博士

师出名门&#xff0c;工业界履历从大厂首席工程师到创业公司 CTO&#xff0c;并能一直从事底层系统的核心研发工作&#xff0c;可能是很多优秀技术人向往的光鲜履历。不过抛弃大厂的光鲜稳定工作和成功的创业项目&#xff0c;再次加入初创公司&#xff0c;则需要比常人更大的魄…

Spring官方RSocket Broker 0.3.0发布: 快速构建你的RSocket架构

简介&#xff1a;Spring官方的RSocket Broker其实开发已经非常久了&#xff0c;我以为会伴随着Spring Cloud 2021.0发布的&#xff0c;但是没有发生。不过Spring RSocket Broker还是发布了最新的0.3版本&#xff0c;虽然还是预览版&#xff0c;但目前已经可用&#xff0c;考虑官…

Redis 6 中的多线程是如何实现的!?

作者 | 张彦飞allen来源 | 开发内功修炼Redis 是一个高性能服务端的典范。它通过多路复用 epoll 来管理海量的用户连接&#xff0c;只使用一个线程来通过事件循环来处理所有用户请求&#xff0c;就可以达到每秒数万 QPS 的处理能力。下图是单线程版本 Redis 工作的核心原理图单…

如何构建流量无损的在线应用架构 | 专题开篇

简介&#xff1a;本篇是整个《如何构建流量无损的在线应用架构》系列的第一篇&#xff0c;这一系列共三篇&#xff0c;旨在使用最为朴素的语言将影响在线应用流量稳定性的技术问题做一个归类&#xff0c;这些问题的解决方案有的只是一些代码层面的细节&#xff0c;有的需要工具…

云原生时代的运维体系进化

简介&#xff1a;基于容器、Kubernetes 等云原生技术&#xff0c;提供的开放社区标准、不可变基础设施、声明式 API 会成为企业 CloudOps 的最佳实践&#xff0c;也将在这个基础上推进数据化、智能化体系建设&#xff0c;将运维复杂性进一步下沉&#xff0c;让企业可以聚焦于自…

企业如何从 0 到 1 构建整套全链路追踪体系

简介&#xff1a;本文将分享 ARMS 在全链路追踪领域的最佳实践&#xff0c;分享主要分为四部分。首先&#xff0c;是对分布式链路追踪的整体简介。其次&#xff0c;是对 ARMS 在分布式链路追踪领域的核心能力进行介绍。然后&#xff0c;介绍如何从 0 到 1 构建整套全链路追踪体…

React18 的 useEffect 新特性为什么被疯狂吐槽?

作者 | 零一来源 | 前端印象react18 已经出来一段时间了&#xff0c;create-react-app 默认安装的 React 版本也已经是 18&#xff0c;不知道有没有小伙伴发现自己有点看不懂 React 了&#xff1f;import { useEffect, useState } from reactfunction App () {const [data, set…