聚焦 | 数据湖分析如何面向对象存储OSS进行优化?

简介: 最佳实践,以DLA为例子。DLA致力于帮助客户构建低成本、简单易用、弹性的数据平台,比传统Hadoop至少节约50%的成本。其中DLA Meta支持云上15+种数据数据源(OSS、HDFS、DB、DW)的统一视图,引入多租户、元数据发现,追求边际成本为0,免费提供使用。DLA Lakehouse基于Apache Hudi实现,主要目标是提供高效的湖仓,支持CDC及消息的增量写入,目前这块在加紧产品化中。DLA Serverless Presto是基于Apache PrestoDB研发的,主要是做联邦交互式查询与轻量级ETL。

背景

 

数据湖当前在国内外是比较热的方案,MarketsandMarkets (https://www.marketsandmarkets.com/Market-Reports/data-lakes-market-213787749.html)市场调研显示预计数据湖市场规模在2024年会从2019年的79亿美金增长到201亿美金。一些企业已经构建了自己的云原生数据湖方案,有效解决了业务痛点;还有很多企业在构建或者计划构建自己的数据湖。Gartner 2020年发布的报告显示(https://www.gartner.com/smarterwithgartner/the-best-ways-to-organize-your-data-structures/)目前已经有39%的用户在使用数据湖,34%的用户考虑在1年内使用数据湖。随着对象存储等云原生存储技术的成熟,一开始大家会先把结构化、半结构化、图片、视频等数据存储在对象存储中。当需要对这些数据进行分析时,会选择比如Hadoop或者阿里云的云原生数据湖分析服务DLA进行数据处理。对象存储相比部署HDFS在分析性能上面有一定的劣势,目前业界做了广泛的探索和落地。

 

一、基于对象存储分析面临的挑战

1、什么是数据湖

Wikipedia上说数据湖是一类存储数据自然/原始格式的系统或存储,通常是对象块或者文件,包括原始系统所产生的原始数据拷贝以及为了各类任务而产生的转换数据,包括来自于关系型数据库中的结构化数据(行和列)、半结构化数据(如CSV、日志、XML、JSON)、非结构化数据(如email、文档、PDF、图像、音频、视频)。

 

从上面可以总结出数据湖具有以下特性:

  • 数据来源:原始数据、转换数据
  • 数据类型:结构化数据、半结构化数据、非结构化数据、二进制
  • 数据湖存储:可扩展的海量数据存储服务

2、数据湖分析方案架构
image.png

主要包括五个模块:

  • 数据源:原始数据存储模块,包括结构化数据(Database等)、半结构化(File、日志等)、非结构化(音视频等);
  • 数据集成:为了将数据统一到数据湖存储及管理,目前数据集成主要分为三种形态外表关联、ETL、异步元数据构建;
  • 数据湖存储:目前业界数据湖存储包括对象存储以及自建HDFS。随着云原生的演进,对象存储在扩展性、成本、免运维有大量的优化,目前客户更多的选择云原生对象存储作为数据湖存储底座,而不是自建HDFS。
  • 元数据管理:元数据管理,作为连接数据集成、存储和分析引擎的总线;
  • 数据分析引擎:目前有丰富的分析引擎,比如Spark、Hadoop、Presto等。

 

3、面向对象存储分析面临的挑战

 

对象存储相比HDFS为了保证高扩展性,在元数据管理方面选择的是扁平的方式;元数据管理没有维护目录结构,因此可以做到元数据服务的水平扩展,而不像HDFS的NameNode会有单点瓶颈。同时对象存储相比HDFS可以做到免运维,按需进行存储和读取,构建完全的存储计算分离架构。但是面向分析与计算也带来了一些问题:

 

  • List慢:对象存储按照目录/进行list相比HDFS怎么慢这么多?
  • 请求次数过多:分析计算的时候怎么对象存储的请求次数费用比计算费用还要高?
  • Rename慢:Spark、Hadoop分析写入数据怎么一直卡在commit阶段?
  • 读取慢:1TB数据的分析,相比自建的HDFS集群居然要慢这么多!
  • ......

4、业界面向对象存储分析优化现状

上面这些是大家基于对象存储构建数据湖分析方案遇到的典型问题。解决这些问题需要理解对象存储相比传统HDFS的架构区别进行针对性的优化。目前业界做了大量的探索和实践:

 

  • JuiceFS:维护独立的元数据服务,使用对象存储作为存储介质。通过独立元数据服务来提供高效的文件管理语义,比如list、rename等。但是需要部署额外服务,所有的分析读取对象存储依赖该服务;
  • Hadoop:由于Hadoop、Spark写入数据使用的是基于OutputCommitter两阶段提交协议,在OutputCommitter V1版本在commitTask以及commitJob会进行两次rename。在对象存储上面进行rename会进行对象的拷贝,成本很高。因此提出了OutputCommitter V2,该算法只用做一次rename,但是在commitjob过程中断会产生脏数据;
  • Alluxio:通过部署独立的Cache服务,将远程的对象存储文件Cache到本地,分析计算本地读取数据加速;
  • HUDI:当前出现的HUDI、Delta Lake、Iceberg通过metadata的方式将dataset的文件元信息独立存储来规避list操作 ,同时提供和传统数据库类似的ACID以及读写隔离性;
  • 阿里云云原生数据湖分析服务DLA:DLA服务在读写对象存储OSS上面做了大量的优化,包括Rename优化、InputStream优化、Data Cache等。

 

二、DLA面向对象存储OSS的架构优化

 

由于对象存储面向分析场景具有上面的问题,DLA构建了统一的DLA FS层来解决对象存储元信息访问、Rename、读取慢等问题。DLA FS同时支持DLA的Serverless Spark进行ETL读写、DLA Serverless Presto数据交互式查询、Lakehouse入湖建仓数据的高效读取等。面向对象存储OSS的架构优化整体分为四层:

 

  • 数据湖存储OSS:存储结构化、半结构化、非结构化,以及通过DLA Lakehouse入湖建仓的HUDI格式;
  • DLA FS:统一解决面向对象存储OSS的分析优化问题,包括Rename优化、Read Buffer、Data Cache、File List优化等;
  • 分析负载:DLA Serverless Spark主要读取OSS中的数据ETL后再写回OSS,Serverless Presto主要对OSS上面建仓的数据进行交互式查询;
  • 业务场景:基于DLA的双引擎Spark和Presto可以支持多种模式的业务场景。

image.png

三、DLA FS面向对象存储OSS优化技术解析

 

下面主要介绍DLA FS面向对象存储OSS的优化技术:

 

1、Rename优化

在Hadoop生态中使用OutputCommitter接口来保证写入过程的数据一致性,它的原理类似于二阶段提交协议。

 

开源Hadoop提供了Hadoop FileSystem的实现来读写OSS文件,它默认使用的OutputCommitter的实现是FileOutputCommitter。为了数据一致性,不让用户看到中间结果,在执行task时先把结果输出到一个临时工作目录,所有task都确认输出完成时,再由driver统一将临时工作目录rename到生产数据路径中去。如下图:

image.png

由于OSS相比HDFS它的Rename操作十分昂贵,是copy&delete操作,而HDFS则是NameNode上的一个元数据操作。在DLA的分析引擎继续使用开源Hadoop的FileOutputCommitter性能很差,为了解决这个问题,我们决定在DLA FS中引入OSS Multipart Upload特性来优化写入性能。

 

3.1 DLA FS支持Multipart Upload模式写入OSS对象

 

阿里云OSS支持Multipart Upload功能,原理是把一个文件分割成多个数据片并发上传,上传完成后,让用户自己选择一个时机调用Multipart Upload的完成接口,将这些数据片合并成原来的文件,以此来提高文件写入OSS的吞吐。由于Multipart Upload可以控制文件对用户可见的时机,所以我们可以利用它代替rename操作来优化DLA FS在OutputCommitter场景写OSS时的性能。

 

基于Multipart Upload实现的OutputCommitter,整个算法流程如下图:


image.png

利用OSS Multipart Upload,有以下几个好处:

 

  • 写入文件不需要多次拷贝。可以看到,本来昂贵的rename操作已经不需要了,写入文件不需要copy&delete。另外相比于rename,OSS 的completeMultipartUpload接口是一个非常轻量的操作。
  • 出现数据不一致的几率更小。虽然如果一次要写入多个文件,此时进行completeMultipartUpload仍然不是原子性操作,但是相比于原先的rename会copy数据,他的时间窗口会缩短很多,出现数据不一致的几率会小很多,可以满足绝大部分场景。
  • rename中的文件元信息相关操作不再需要。经过我们的统计,算法1中一个文件的元数据操作可以从13次下降到6次,算法2则可以从8次下降到4次。

 

OSS Multipart Upload中控制用户可见性的接口是CompleteMultipartUpload和abortMultipartUpload,这种接口的语义类似于commit/abort。Hadoop FileSystem标准接口没有提供commit/abort这样的语义。

 

为了解决这个问题,我们在DLA FS中引入Semi-Transaction层。

 

3.2 DLA FS引入Semi-Transaction层

 

前面有提到过,OutputCommitter类似于一个二阶段提交协议,因此我们可以把这个过程抽象为一个分布式事务。可以理解为Driver开启一个全局事务,各个Executor开启各自的本地事务,当Driver收到所有本地事务完成的信息之后,会提交这个全局事务。

 

基于这个抽象,我们引入了一个Semi-Transaction层(我们没有实现所有的事务语义),其中定义了Transaction等接口。在这个抽象之下,我们把适配OSS Multipart Upload特性的一致性保证机制封装进去。另外我们还实现了OSSTransactionalOutputCommitter,它实现了OutputCommitter接口,上层的计算引擎比如Spark通过它和我们DLA FS的Semi-Transaction层交互,结构如下图:

image.png

下面以DLA Serverless Spark的使用来说明DLA FS的OSSTransactionalOutputCommitter的大体流程:

 

  1. setupJob。Driver开启一个GlobalTransaction,GlobalTransaction在初始化的时候会在OSS上新建一个隐藏的属于这个GlobalTransaction的工作目录,用来存放本job的文件元数据。
  2. setupTask。Executor使用Driver序列化过来的GlobalTransaction生成LocalTransaction。并监听文件的写入完成状态。
  3. Executor写文件。文件的元数据信息会被LocalTransaction监听到,并储存到本地的RocksDB里面,OSS远程调用比较耗时,我们把元数据存储到本地RocksDB上等到后续一次提交能够减少远程调用耗时。
  4. commitTask。当Executor调用LocalTransaction commit操作时,LocalTransaction会上传这个Task它所相关的元数据到OSS对应的工作目录中去,不再监听文件完成状态。
  5. commitJob。Driver会调用GlobalTransaction的commit操作,全局事务会读取工作目录中的所有元数据中的待提交文件列表,调用OSS completeMultipartUpload接口,让所有文件对用户可见。

 

引入DLA FS的Semi-Transaction,有两个好处:

  • 它不对任何计算引擎的接口有依赖,因此后面可以比较方便的移植到另外的一个计算引擎,通过适配可以将它所提供的实现给Presto或者其它计算引擎使用。
  • 可以在Transaction的语义下添加更多的实现。例如对于分区合并的这种场景,可以加入MVCC的特性,在合并数据的同时不影响线上对数据的使用。

 

2、InputStream优化

用户反馈OSS请求费用高,甚至超过了DLA费用(OSS请求费用=请求次数×每万次请求的单价÷10000)。调查发现,是因为开源的OSSFileSystem在读取数据的过程中,会按照512KB为一个单位进行预读操作。例如,用户如果顺序读一个1MB的文件,会产生两个对OSS的调用:第一个请求读前512KB,第二个请求读后面的512KB。这样的实现就会造成读大文件时请求次数比较多,另外由于预读的数据是缓存在内存里面的,如果同时读取的文件比较多,也会给内存造成一些压力。

image.png

因此,在DLA FS的实现中,我们去掉了预读的操作,用户调用hadoop的read时,底层会向OSS请求读取从当前位置到文件结尾整个范围的数据,然后从OSS返回的流中读取用户需要的数据并返回。这样如果用户是顺序读取,下一个read调用就自然从同一个流中读取数据,不需要发起新的调用,即使顺序读一个很大的文件也只需要一次对OSS的调用就可以完成。

 

另外,对于小的跳转(seek)操作,DLA FS的实现是从流中读取出要跳过的数据并丢弃,这样也不需要产生新的调用,只有大的跳转才会关闭当前的流并且产生一个新的调用(这是因为大的跳转读取-丢弃会导致seek的延时变大)。这样的实现保证了DLA FS的优化在ORC/Parquet等文件格式上面也会有减少调用次数的效果。


image.png

3、Data Cache加速

基于对象存储OSS的存储计算分离的架构,通过网络从远端存储读取数据仍然是一个代价较大的操作,往往会带来性能的损耗。云原生数据湖分析DLA FS中引入了本地缓存机制,将热数据缓存在本地磁盘,拉近数据和计算的距离,减少从远端读取数据带来的延时和IO限制,实现更小的查询延时和更高的吞吐。

 

3.1 Local Cache架构

我们把缓存的处理逻辑封装在DLA FS中。如果要读取的数据存在于缓存中,会直接从本地缓存返回,不需要从OSS拉取数据。如果数据不在缓存中,会直接从OSS读取同时异步缓存到本地磁盘。

 

image.png

3.2 Data Cache命中率提高策略

这里以DLA Serverless Presto来说明如何提高DLA FS的local Cache的命中率提高。Presto默认的split提交策略是NO_PREFERENCE,在这种策略下面,主要考虑的因素是worker的负载,因此某个split会被分到哪个worker上面很大程度上是随机的。在DLA Presto中,我们使用SOFT_AFFINITY提交策略。在提交Hive的split时,会通过计算split的hash值,尽可能将同一个split提交到同一个worker上面,从而提高Cache的命中率。


image.png

使用_SOFT_AFFINITY_策略时,split的提交策略是这样的:

  1. 通过split的hash值确定split的首选worker和备选worker。
  2. 如果首选worker空闲,则提交到首选worker。
  3. 如果首选worker繁忙,则提交到备选worker。
  4. 如果备选worker也繁忙,则提交到最不繁忙的worker。

四、DLA FS带来的价值

1、Rename优化在ETL写入场景的效果

客户在使用DLA过程中,通常使用DLA Serverless Spark做大规模数据的ETL。我们用TPC-H 100G数据集中的orders表进行写入测试,新建一个以o_ordermonth字段为分区的orders_test表。在Spark中执行sql:"insert overwrite table `tpc_h_test`.`orders_test` select * from `tpc_h_test`.`orders`"。使用同样的资源配置,使用的Spark版本一个为开源Spark,另外一个为DLA Serverless Spark,将它们的结果进行对比。

image.png

从图中可以得出:

  • 这次优化对算法1和算法2都有比较大的提升。
  • 算法1和算法2开启这个特性以后都会得到优化,但是算法1更明显。这是由于算法1需要进行两次rename,并且有一次rename是在driver上单点进行的;算法2是各executor进行分布式rename操作且只要进行一次。
  • 在当前这个数据量下,算法1和算法2在开启这个特性之后,差距没有那么明显。两种方式都不需要进行rename操作,只不过是completeMultipart是否是在driver上单点执行(算法2我们的改造是completeMultipartUpload在commitTask的时候执行),大数据量可能仍会有比较大的影响。

 

2、InputStream优化在交互式场景的效果

DLA客户会使用DLA的Serverless Presto对多种格式进行分析,比如Text、ORC、Parquet等。下面对比基于DLA FS以及社区OSSFS在1GB Text及ORC格式的访问请求次数。


image.png

1GB Text文件分析的请求次数对比

image.png

  • Text类调用次数降低为开源实现的1/10左右;
  • ORC格式调用次数降低为开源实现1/3左右;
  • 平均来看可以节省OSS调用费用60%到90%;

 

3、Data Cache在交互式场景的效果

我们针对社区版本prestodb和DLA做了性能对比测试。社区版本我们选择了prestodb 0.228版本,并通过复制jar包以及修改配置的方式增加对oss数据源的支持。我们对DLA Presto CU版512核2048GB通社区版本集群进行了对比。

 

测试的查询我们选择TPC-H 1TB数据测试集。由于TPC-H的大部分查询并不是IO密集型的,所以我们只从中挑选出符合如下两个标准的查询来做比较:

 

  1. 查询中包含了对最大的表lineitem的扫描,这样扫描的数据量足够大,IO有可能成为瓶颈。
  2. 查询中不涉及多个表的join操作,这样就不会有大数据量参与计算,因而计算不会先于IO而成为瓶颈。

 

按照这两个标准,我们选择了对lineitem单个表进行查询的Q1和Q6,以及lineitem和另一个表进行join操作的Q4、Q12、Q14、Q15、Q17、Q19和Q20。

 

可以看到Cache加速能管理在这几个query都有明显的效果。

image.png

 

五、云原生数据湖最佳实践

 

最佳实践,以DLA为例子。DLA致力于帮助客户构建低成本、简单易用、弹性的数据平台,比传统Hadoop至少节约50%的成本。其中DLA Meta支持云上15+种数据数据源(OSS、HDFS、DB、DW)的统一视图,引入多租户、元数据发现,追求边际成本为0,免费提供使用。DLA Lakehouse基于Apache Hudi实现,主要目标是提供高效的湖仓,支持CDC及消息的增量写入,目前这块在加紧产品化中。DLA Serverless Presto是基于Apache PrestoDB研发的,主要是做联邦交互式查询与轻量级ETL。DLA支持Spark主要是为在湖上做大规模的ETL,并支持流计算、机器学习;比传统自建Spark有着300%的性价比提升,从ECS自建Spark或者Hive批处理迁移到DLA Spark可以节约50%的成本。基于DLA的一体化数据处理方案,可以支持BI报表、数据大屏、数据挖掘、机器学习、IOT分析、数据科学等多种业务场景。


image.png

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

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

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

相关文章

如何把极坐标化为直角坐标_2019高考100题之063(极坐标)

分析&#xff1a;如果你对过原点的直线的参数方程(xtcosθ&#xff0c;ytsinθ(参数t∈R))理解透彻了&#xff0c;那么极坐标也就没有任何问题了&#xff0c;特别是对于ρ<0的理解&#xff0c;就和t<0类似.教材上说了不作特殊说明&#xff0c;ρ都是大于零的&#xff0c;…

c语言队列作用,队列(C语言)

一、定义一种可以实现“先进先出”的存储结构。二、分类1、链式队列&#xff1a;用链表实现。2、静态队列&#xff1a;用数组实现。静态队列通常都必须是循环队列。3、循环队列(1)循环队列需要几个参数来确定&#xff1f;需要2个参数来确定&#xff1a;front、rear(2)循环队列各…

2021银行共探转型新动能:大行酝酿质变 小行跨越数字鸿沟

2021年&#xff0c;我国“十四五”规划开篇启程&#xff0c;数字经济蓬勃发展&#xff0c;银行业紧跟国家发展大局&#xff0c;全力推进数字化转型向纵深发展&#xff0c;探寻行业新动能&#xff0c;积极参与全社会数字生态建设&#xff0c;为数字中国高质量发展贡献金融力量。…

如何构建一个拖垮整个公司的运维系统

简介&#xff1a; 人肉运维&#xff0c;不在 DevOps 中转型&#xff0c;就在自动化中消亡。云化时代的运维&#xff0c;需要的是高铁&#xff0c;而不是“跑的更快的马车”。6月25日&#xff0c;数智创新行上海站智能运维专场&#xff0c;期待您的参与。 原文链接 本文为阿里云…

idea 安装php插件_免费版的 IDEA 为啥不能使用 Tomcat ?

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 2 分钟。来自&#xff1a;https://urlify.cn/2Ifiiiidea有两大版本&#xff0c;一个是Ultimate版本&#xff0c;一个是Community版&#xff0c;ultimate是需要收费的&#xff0c;Community版是开源免费的。然…

RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

简介&#xff1a; 随着公司业务的不断发展&#xff0c;流量也在不断增长。我们发现生产中的一些重大事故&#xff0c;往往是被突发的流量冲跨的&#xff0c;对流量的治理和防护&#xff0c;保障系统高可用就尤为重要。 作者&#xff5c;梁勇 ​ 背景 ​ 哈啰已进化为包括两轮…

休闲食品行业如何数字化升级,腾讯云和卫龙辣条一起打了个样

11月26日&#xff0c;腾讯云与卫龙集团达成战略合作&#xff0c;双方将整合各自优势资源&#xff0c;助力卫龙集团建设专有云平台&#xff0c;围绕生产、运营、管理层面进行全链路数字化&#xff0c;加速卫龙集团转型升级&#xff0c;打造休闲食品行业标杆。 作为一家年销售超过…

Vite + React 组件开发实践

简介&#xff1a; 毫不夸张的说&#xff0c;Vite 给前端带来的绝对是一次革命性的变化。或者也可以说是 Vite 背后整合的 esbuild 、 Browser es modules、HMR、Pre-Bundling 等这些社区中关于 JS 编译发展的先进工具和思路&#xff0c;在 Vite 这样的整合推动下&#xff0c;给…

canvas全局合成画月牙_GIF动态图,视频?都能用Python转换成字符画图像

字符画是一种由字母、标点或其他字符组成的图画&#xff0c;它产生于互联网时代&#xff0c;在聊天软件中使用较多&#xff0c;本文我们看一下如何将自己喜欢的图片转成字符画。静态图片首先&#xff0c;我们来演示将静态图片转为字符画&#xff0c;功能实现主要用到的 Python …

开发者看过来,5 行代码实现身份认证,Authing 如何做到的?

在没有学编程前&#xff0c;可能我们不会想到看起来简单的注册登录功能&#xff0c;其实并不简单&#xff0c;背后可能需要考虑&#xff1a; 1、支持用户用手机验证码、邮箱验证码登录&#xff1b; 2、用户连续登录失败&#xff0c;为了防止暴力破解&#xff0c;需考虑 24 小…

用c语言绘制自定义图形,Android使用自定义View绘图

使用自定义 View 绘图实例 MyViewCanvasDemo 自定义一个名为 MyView 的 View 类&#xff0c;并在其 onDraw() 方法中绘制简单的图像&#xff0c;运行效果如图 1 所示。图 1 简单的 View 绘图实例 MyViewCanvasDemo 没有使用布局文件&#xff0c;而是将自定义的 MyView 对象显示…

如何构建企业出海的“免疫力“?深入解读阿里云CDN安全能力

简介&#xff1a; 随着信息技术快速发展与应用&#xff0c;产业数字化和智能化趋势正日益加深&#xff0c;企业信息安全与防护被提升到前所有未有的高度。阿里云CDN经过10多年的技术发展时间&#xff0c;已逐步构筑一个边缘云的安全网络立体防护体系&#xff0c;包含了全链路安…

使用率激增 250%,这份报告再次将 Serverless 推向幕前

简介&#xff1a; 本文是对 Datadog 最新的一份 Serverless 报告的解读&#xff0c;欢迎大家留言讨论。 每项新技术的产生和演进过程中&#xff0c;都会有他自己的拥趸&#xff0c;也会有持怀疑论者。Serverless 的美在于他可以尽可能的解放客户在基础设施上的投入&#xff0c;…

dev用不了_跟风喊AMD YES?很多生产力项目,你必须用IU

大家好&#xff0c;我是小匠。现在的电脑市场中&#xff0c;高喊AMD YES几乎已经成为了一种政治正确了&#xff0c;尤其是在所谓的“生产力需求”的领域中。各大评测结果中也几乎都是AMD吊打Intel的局面。然而AU真的在所有生产力项目中都吊打IU吗&#xff1f;我可以负责任的告诉…

云计算到底是谁发明的?

作者 | 小枣君来源 | 鲜枣课堂&#xff08;ID&#xff1a;xzclasscom&#xff09;大家都在讨论云计算、云原生&#xff0c;那你知道云计算是谁发明的吗&#xff1f;说到云计算的起源&#xff0c;公众普遍认为&#xff0c;谷歌前 CEO 埃里克施密特是云计算概念的第一个提出者。2…

c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...

C语言中静态变量是什么意思&#xff0c;有什么作用&#xff0c;static在数据类型前面表示什么最近刚看了C存储类的章节。所以来说说。C语言为变量提供了⑤种不同的存储模型&#xff0c;或者说是存储类。①个变量可以用存储时期描述&#xff0c;也可以用作用域描述&#xff0c;也…

如何专业化监控一个Kubernetes集群?

简介&#xff1a; 本文会介绍 Kubernetes 可观测性系统的构建&#xff0c;以及基于阿里云云产品实现 Kubernetes 可观测系统构建的最佳实践。 作者&#xff1a;佳旭 阿里云容器服务技术专家 引言 Kubernetes 在生产环境应用的普及度越来越广、复杂度越来越高&#xff0c;随之而…

如何构建一个拖垮整个公司的备份系统

简介&#xff1a; 在如今“数据即资产”的时代&#xff0c;有备才能无患。备份就像备胎&#xff0c;虽然大多人都知道备胎很重要&#xff0c;却很少有人检查。不发生点什么&#xff0c;你永远不知道TA对你有多重要。 原文链接 本文为阿里云原创内容&#xff0c;未经允许不得转…

6.7K Star 的知名开源项目源码,该怎么看?

作者 | 一只图雀来源 | 程序员巴士心理认知要到位首先要认识到&#xff0c;看源码是一个开始比较枯燥、同时时间跨度相对比较长的一个过程。所以看源码的第一步是找到自己想要了解领域、或者自己所在业务领域高度相关的项目&#xff0c;并且在这个领域比较出名&#xff0c;且维…

网站建设中 模板_网站建设之模板网站的缺点

随着网站建设市场的日益成熟&#xff0c;许多的自助建站平台纷纷涌入建站市场&#xff0c;甚至许多主机供应商也与一些自助建站平台达成了战略合作&#xff0c;买服务器赠送模板网站。那么我们进行网站建设时是选择专业建站公司的定制网站还是模板站呢&#xff1f;看完模板网站…