Apache Paimon:Streaming Lakehouse is Coming

摘要:本文整理自阿里云智能开源表存储负责人,Founder of Paimon,Flink PMC 成员李劲松(花名:之信)、同程旅行大数据专家,Apache Hudi & Paimon Contributor 吴祥平、汽车之家大数据计算平台负责人邸星星、联通数科大数据高级技术专家,Apache Paimon Contributor 王云朋在 Flink Forward Asia 2023 主会场的分享。内容主要分为以下三部分:

  1. 数据分析架构从 Hive 到 Lakehouse
  2. Apache Paimon
  3. 用户对话环节:Paimon 企业实践分享

点击查看原文视频

一、数据分析架构从 Hive 到 Lakehouse

旧的数据分析架构如 Hive、Hadoop、HDFS、MapReduce、HiveSQL、Hive 存储等,如今国内外的各大企业都在逐步转向 Lakehouse 架构,即 Spark、Flink、Presto,底层的湖存储格式:Iceberg、Delta、Hudi,以及下面数据存储在 HDFS、对象存储 OSS 或 S3。

1

1.1 Lakehouse 架构的优势

之所以进行架构的转变与迁移,是因为湖仓架构为数据分析与存储带来了诸多益处。

  • 实现了计算存储分离

    旧的架构 Hadoop 计算存储都在一个集群中,若要扩容,就要计算与存储部分同时扩容,但目前,各行各业都会有庞大的数据,却不一定可以匹配足够的计算,行业现状催生了计算存储分离的需求。如此,可以实现存储变大的同时,计算资源基本维持不变,当落到 OSS 对象存储上之后,计算存储分离变得非常简单。

  • 实现了存储冷热分层

    这是对象存储带来的独特优势。对于对象存储,我们可以利用它的冷存,因为其价格相对低廉,但其冷存访问成本会上升,因此,不常使用的数据可以使用冷存,从而大大降低成本。

  • 操作更加灵活

    前面提到的两点实际上 Hive 存储也可以实现,但相较而言,Lakehouse 操作更加灵活,因为湖存储格式提供了更多的 ACID,包括 DELETE、UPDATE 之类的语法,可以让数仓的操作更加方便,而不像 Hive 只能 INSERT OVERWRITE。

  • 查询速度更快

    因为湖存储带来的 Meta 上的 skipping 可使得数据根据 Filter 条件做出更多的下推,查询性能更高。

  • 时效性到分钟级

    或许前面四点对许多企业来说没有足够的吸引力,而且旧的 Hive 非常稳定,这可能会导致企业数据分析架构的迁移动力大大降低。但是,除前面提到的四点之外,Lakehouse 架构真正给业务带来价值的是可以使得时效性从 T+1 降低到分钟级。在这个方面,Flink 是当之无愧的专家。真正能打动企业迁移湖仓架构的关键是,能否将 Flink 融入湖仓架构中。

时效性是业务迁移的核心动力,而 Flink 是降低时效性的核心计算引擎,如下图所示:

2

首先是从 Hive 架构到 Lakehouse 架构的转变来看,Lakehouse 具有许多优势,它可以让计算更加方便,可以让部分时效性有一定程度的降低。

接下来是最右侧展示的是实时数仓 Flink + Kafka + OLAP 系统,它可以将时效性给降低到每秒级。Flink 也希望将它的时效性融入离线数仓中。

但是,目前 Lakehouse 与 Flink 实时数仓两者之间是割裂的,也对应到批计算和流计算,它们是完全割裂的两套,玩法大幅不同。

那是否能有一个中间的架构将 Flink 融入到 Lakehouse,把 Streaming 和 Lakehouse 的技术做一定的结合,解锁出样新的 Streaming Lakehouse 架构,实现整条链路的实时流动,达到分钟级的延时。此外,实现所有数据的沉淀可查,数据沉淀到 Lakehouse 中。

这套架构是完全的流批一体,它是通过结合 Flink 的 Streaming 计算和 Lakehouse 实现的。

综上,Lakehouse 架构一旦实现,将会对企业产生巨大的吸引力。但是这个融合并不容易,它的运行伴随着非常多的挑战。其面临的最大的挑战来自于湖格式。因为流技术与流当中产生的大量更新对湖存储格式带来了非常巨大的挑战。

二、Apache Paimon

2.1 Flink + Lakehouse 架构的探索

这部分分享包括 Flink 社区、阿里云在 Flink + Lakehouse 架构上的探索。

3

2023 年我们在 Lakehouse 做了很多改进。但早在 2020 年,阿里云就试图把 Flink 融入 Iceberg 中,在 Iceberg 中做了很多 Flink 的集成。Iceberg 是一种非常优秀的湖存储格式,它的架构非常简单,生态非常开放,设计非常简单。在把 Flink 融入 Iceberg 后,Iceberg 就有了 Flink 流读流写的能力,也在 Iceberg 社区推动方面支持更新能力。

但在使用过程中,我们也逐渐发现了一些问题,Iceberg 整体是针对离线设计的,它必须保持很简单的架构设计来面向各种计算引擎,这也对流更新过程中对其内核的改进带来了阻碍。因此,目前 Flink 写入 Iceberg,并不能太实时,我们更推荐在 1 小时左右的更新 SLA 保障。

在 Iceberg 中遇到困难之后,我们也在 Flink + Hudi 做了很多集成,许多企业也对这种架构进行过尝试。Hudi 原本面向 Spark,它是在 Spark 上增强其 Upsert 更新能力的 Format。Flink 在接入之后,Hudi Spark 的更新时延从小时级降低到 10 分钟。但是,在后续的进一步探索过程中也遇到了较多的问题,因为 Hudi 本身是面向 Spark,面向批计算设计的,它在架构上不符合流计算及更新的架构设计,同时 Hudi 历时已久,它有大量的 Future,这会给后面的设计带来很多架构上的挑战。 所以对于 Flink + Hudi,我们更推荐 10 分钟的 SLA 保障。

我们需要更实时的湖格式。因此,在总结了 Iceberg 和 Hudi 遇到的架构上的挑战之后,我们重新设计了新的流式数据湖格式,即 Apache Paimon,其前身是 Flink Table Store,他有着湖存储 + LSM 原生的设计,面向流更新而设计,与 Flink、Spark 都有的较好集成。

从一开始就面向两套引擎设计:Flink 的流与 Spark 的批,重新设计 Paimon 使其架构能与 Flink、Spark 集成效果都优良。它有着强大的流读流写支持,给流式湖存储带来仅 1-5 分钟的延迟。

2.2 Apache Paimon

2.2.1 架构

下图展示了 Apache Paimon 的架构图:

4

Paimon 是流批一体的湖存储格式,首先它只是一个文件格式,只是一堆代码将数据存储在 OSS 或者 HDFS 上,没有任何的服务。

可以使用 Flink CDC 来一键入湖到 Paimon 中,也可以通过 Flink SQL 或 Spark SQL 来批写、流写到 Paimon 当中。Paimon 也支持主流开源引擎,包括几乎现在所有的开源引擎。最后,Paimon 也可以被 Flink 或 Spark 流读,这也是它作为流式数据湖的特有能力之一。

目前,Paimon 有以下典型使用场景:

  1. CDC 更新入湖,可被准实时查询,并大幅简化入湖架构。

  2. 支持 Partial-Update 能力,基于相同的主键可以各个流实时地打宽,在 Paimon 当中能被分钟级给下游各种计算引擎查询。

  3. 支持流入的数据生成变更日志,给下游更好的流计算。简化流计算链路。

  4. Paimon 作为湖存储格式,有很强的 Append 处理,并给 Append 表上多了流读流写、Z-Order 排序后加速查询的能力。

2.2.2 Apache Paimon 社区发展

5

2022 年 1 月,Flink Table Store 诞生,其实两年前 Flink Forward 时,就设想过要建设新的存储,直到 Flink Table Store 第一行代码在 Flink 社区诞生;孵化一年后,2023 年 1 月份产生了正式 0.3 的版本,之后我们决定从 Flink 和社区迁到 Apache 社区,并改名为 Apache Paimon,加强了生态,不再是 Flink 存储,而是面向社区所有计算引擎的存储;同年 9 月、12 月,随着版本的相继发布,Paimon 取得了巨大的进步;今年 12 月发布 0.6 版本,更新表和 Append 表都已达到完全生产可用的状态。

整体来看,目前有来自社区各行各业的 120 个 Contributers,大家把 Paimon 做得更好,Star 达到 1.5k。

在 Flink Forward Asia 里,有包括来自阿里云、同程旅行、汽车之家、联通,平安等企业关于 Paimon 的实践。

三、用户对话环节:Paimon 企业实践分享

下面通过同程旅行、汽车之家、联通数字科技有限公司用户的对话,让大家更加直接地了解基于 Flink + Paimon 构建 Streaming Lakehouse 的应用实践,以及选用 Flink + Paimon 黄金组合带来的业务收益。

3.1 同程旅行基于 Apache Paimon 的湖仓应用实践

对话嘉宾

李劲松|阿里云智能开源表存储负责人,Founder of Paimon,Flink PMC 成员

吴祥平|同程旅行大数据专家,Apache Hudi & Paimon Contributor

6

用户对话环节 1 - 精彩回顾

点击观看用户对话环节 1 视频

吴祥平从事同程旅行大数据计算、湖仓相关的工作。

李劲松:早在 Flink Table Store 时期,同程旅行就已经使用了 Flink Table Store,从 Flink Table Store 生产应用上反馈了很多功能,可以分享一下同程旅行是如何发现 Flink Table Store 的?是经过了怎样的进化路线最终应用到 Paimon 的呢?

吴祥平:同程旅行实时湖仓,发展历程大概有三个:

1

(1)Spark + Apache Kudu

最开始,同程旅行与其他厂商一样,都是基于 Hive 做离线数仓,但随着实时需求的增多,引入了 Apache Kudu 组件。这条链路的特点,包括把原先发往 Hive ODS 层的数据,再发一份到 Apache Kudu 中,让一些依赖较少的项目在 Apache Kudu 上做应用。在此基础上,调起离线的 Spark 任务,使用 10 分钟或者 1 小时的调度去基于 Kudu 的原始表产生一些中间数据。

这个链路满足了一部分的需求,但我们在实践过程中也发现了很多问题,整个 Kudu 是基于 Spark 的离线调度,时延约为 10 分钟-1 小时,无法满足业务的时效性;同时 ODS 的数据一部分存在了 Hive 中,一部分存在 Kudu 中,两份数据有一定的重复,不太好复用;此外,Kudu 的维护性对数仓人员有一定难度;最后,整个 Kudu 是基于 SSD 构建的,因此整个数仓构建的成本相对较高。

(2)Flink + Apache Hudi

基于以上痛点,同程旅行在 2022 年引入了 Flink + Apache Hudi 的模式,基于此解决了一部分原先 Kudu 流式数仓的问题。首先数据复用性,我们基于 Hudi 实时更新了整个 ODS 层的表,这些表不仅可以做实时更新,在下游也可以使用。同时,也迸发出了基于 Hudi 做流读的需求。

随着实践的深入,我们发现该链路也有些问题,首先是 Hudi的同步效率,如 10+G 的表要同步 10+小时,同时同步资源也随着表的数据量加大,资源消耗也很大;其次是整个数据的一致性;此外查询效率也无法满足我们的应用场景。

(3)Flink + Paimon

因此,在今年 6 月甚至更早的时候就开始调研 Paimon。我们基于 Flink + Paimon 的实践解决了在 Hudi 上遇到的问题,包括全链路实时实践,提升了数据的读写效率,同时得益于 Paimon 的优秀设计,整个湖仓一体以及其更简单的状态管理,保障了最终数据的一致性,以及较全的表格式、主键更新等。

李劲松:目前,Paimon 在同程内部大致有多少生产作业?大约有多大的规模呢?

吴祥平:同程旅行目前已将原有基于 Hudi 的湖仓切换了约 80%到 Paimon 中,其中约有 500+任务,也基于整个 Paimon 的全链路实时化场景构建了 10+个场景,还基于 Paimon 的 Lookup 引擎做“批”,也有 10+个场景,数据量在 100TB 左右。整体的数据条数是 1000 亿左右。

李劲松:您可以分享一下整体的架构和具体的收益吗?

吴祥平:同程旅行目前主要是以联邦的 HDFS 做存储底座,中间采用全新的湖仓架构,基于 Paimon 做实时和离线的混合湖仓,使用 Paimon 不同的表引擎,上层基于 Flink、Spark、Trino、StarRocks 做查询引擎。使用这套架构之后,整个 ODS 层的同步资源节省了 30%左右,读写性能也有很大的提升,写入约提升三倍,部分查询有七倍左右的提升,效果非常明显;其次,基于 tag 能力,因为可以复用大部分重复数据,所以在导出场景上也节省了 40%左右的存储;另外,由于整个中间数据可复用,指标开发人员可以基于中间可复用的数据,开发效率提升约 50%,原先要花两个小时甚至一天的时间,现在很快就可以开发出来。

2

李劲松:可以看出,Paimon 对生产实践有很大的业务价值,可以再分享一下未来的规划吗?

吴祥平:首先,随着整个 Paimon 应用的发展,我们发现其实湖仓与原先的 Hive 有很大区别,包括一些额外的管理服务、清理服务、合并服务等,我们还希望用户能够像使用 Hive 一样使用湖仓表,所以未来会把管理服务做更好的集成;此外,我们会把现有的 Hive 数仓逐步往 Paimon 上转换,把存量的尽量都往 Lakehouse 架构上转;同时,我们也会跟进整个社区的流式血缘和数据修复能力;最后,在基于 Paimon 的流式湖仓上面更快速地构建链路。

3.2 汽车之家基于 Apache Paimon 的流式湖仓应用(邸星星&李劲松)

对话嘉宾

李劲松|阿里云智能开源表存储负责人,Founder of Paimon,Flink PMC 成员

邸星星|汽车之家大数据计算平台负责人

7

用户对话环节 2 - 精彩回顾

点击观看用户对话环节 2 视频

邸星星来自汽车之家大数据计算平台,汽车之家涵盖了看车、买车、用车、换车全生命周期,致力于帮助用户省心省时省钱。本人在大数据行业从事了九年的工作,是 Flink 较早的深度用户,在大数据方向上和开源社区有较多的互动。

3

李劲松:可以分享一下汽车之家的大数据的架构吗?以及 Flink 和 Paimon 在其中主要发挥了哪些作用?

邸星星:与前面老师分享的架构类似,同样也分了几层,如下图:

4

  • 在接入层,业务数据主要分为两部分,一部分主要来自于关系数据库,其中包括 SQLServer、MySQL 和TiDB;另一部分来自日志数据,其中日志数据有端上的,如点击流的数据,也有各种应用日志。

  • 在传输层,也是通过 AutoKafka,根据不同的业务划分出很多的集群。

  • 在计算层,以 Flink 引擎为基础,其底层运行在 YARN 或 K8S 上。

  • 在存储层我们支持各类应用场景,如关系数据库,KV 存储(特征工程或线上业务),日志检索场景的 Elasticsearch、OLAP 场景的 StarRocks、还有今天的主角 Paimon。Flink 是实时计算引擎的底座,同样的我们把 Paimon 看做是湖格式的底座,Flink + Paimon 承载了流式湖仓的能力。

李劲松:汽车之家为什么要选用 Paimon 呢?Paimon 为汽车之家解决了什么问题呢?Flink + Paimon + StarRocks 这个铁三角具体解决什么问题呢?

邸星星:其实汽车之家与前面的老师都有过类似的经历,如同程旅行,不同的是汽车之家其实是从 Iceberg 切换到 Paimon 的。因为汽车之家在 2021 年与 Iceberg 社区有比较深度的合作,当时我们也在讨论如何做湖格式的落地,最终认为 Iceberg 在流式计算上支持效果不好,在更新场景下其写吞吐能力非常高,但在数据查询效率上有一些问题,需要额外的任务把数据合并之后才能达到较好的性能。因此,汽车之家当时也是出于在流方面支持的角度选择了 Paimon。因为 Paimon 在流上支持更完备,与 Flink 有深度的集成,包括流式的读取,数据在写到 Paimon 中后,下游还可以用 Flink 再去消费 Paimon 的增量数据,同时能保证数据的有序性。还有在社区支持方面,Iceberg 是外国人的主导的社区,而 Paimon 包括 Flink 社区,与国内的人交流沟通成本低,效率高。

邸星星:关于铁三角,我们前面介绍了 Flink,Flink 是实时计算的底座,Paimon 是湖格式的底座,他们本身解决了数据的时效性问题。时效性的问题是我们最大的痛点,在很多场景下,前面曹操出行的老师也提到,高层的经营决策分析,包括一线的运营,其实不一定要实现秒级时效性,5 分钟的时效性完全满足其分析的需求。可以说大部分的分析场景无需纯实时的方案,而 Flink+Paimon 构建的流式湖仓,时效性方面刚好可以做到批和流的中间状态,实现流批一体。

而数据的应用效率方面,不得不提到 StarRocks,数据近实时地写到 Paimon 后,还可以基于 StarRocks 做查询的加速。我们内部的各个系统已经把 Paimon + StarRocks 整个应用链路都打通了,比如 IDE 开发平台、报表系统、多维分析等系统。

总之,Flink + Paimon 解决了数据时效性的问题,Paimon + StarRocks 解决了数据分析效率的问题。

李劲松:那关于上面提到的这些,汽车之家在哪些场景有相关的应用呢?

邸星星:因为 Paimon 的功能在湖格式中比较全面的,汽车之家的场景与前面大家提到的类似,如支持模型训练的实时样本,今年我们把推荐的训练样本从原来的 T+1、H+1 提升到了分钟级的时效性,主要用到了 Paimon 的部分更新能力。因为标签的拼接就是一个 Join 的操作,用传统的方式 Join,会保存大量的状态数据,如说多个流间 Join 较复杂,资源占用较高,开发成本较高。使用 Paimon 的 Partial-Update 能力,提前定义主键,然后每个流里写自己的数据,开发成本大幅降低,逻辑也比较简单。另外在一些时效性要求较高的分析、报表场景也在应用。

5

3.3 用户对话环节 3 - 联通基于 Apache Paimon 的流式数据湖应用实践

对话嘉宾

李劲松|阿里云智能开源表存储负责人,Founder of Paimon,Flink PMC 成员

王云朋|联通数科大数据高级技术专家,Apache Paimon Contributor

8

用户对话环节 3 - 精彩回顾

点击观看用户对话环节 3 视频

王云朋来自联通数字科技有限公司,今天主要介绍 Paimon 在联通的一些实践和应用。中国联通 2021 年初将原本的五家专业子公司合并成立了联通数字科技有限公司,全面整合了云计算、大数据、物联网、AI、区块链、安全等一些基础能力,打造综合的数字化产品和运营体系,来更好的赋能千行百业。我从事数据研发工作多年,目前服务于数据智能事业部的数据计算研发团队,主要负责公司的万亿级实时计算平台和流式湖仓的建设工作。

6

李劲松:联通是怎么开始使用 Paimon 的呢?以前的架构是怎样的演化过程呢?

王云朋:联通引入 Paimon 是在实时计算平台的演进中产生了一些数据关联、融合的需求,进而引进 Paimon 来解决。大家可以看到早期平台的实时处理技术是通过使用 Spark Streaming 进行微批的处理,此时主要问题是时延较高,状态支持不好。后来为了提高时效性,实现有状态的流计算,就引入了 Flink 作为计算框架。但最初的业务主要是基于事件的规则匹配它的数据的关联性比较低,随着业务的发展,有一些流流关联、流批关联、流批融合场景出现。我们当时实现的方案主要是通过使用 Flink 的状态来实现数据的关联和融合。还有一种依赖外部数据库,如 HBase Redis,因为联通的数据量级非常大,单表数据量也很大,会导致一些大状态的问题,对外部数据库的依赖也无法实现海量数据的处理。最根本的问题是在存储层面流批数据割裂,导致了数据冗余,数据一致性也难以保证,整个处理的链路非常复杂,就需要把流数据、批数据融合。后来我们希望通过使用 Flink + Paimon 架构,利用 Paimon 的流批一体读写的特性和高效实时更新能力,在流式湖仓实践方面进行探索,希望能够达到流批一体的存储、计算,简化处理架构的效果。

7

李劲松:刚刚您提到了数据量很大,那么具体有多少呢?

王云朋:联通的数据体量非常大,目前在流平台上面运行的流任务总数近 700 个,日增数据量约为 1000TB,日处理量的在万亿级别。目前 Paimon 表 100 多张,主要是一些主键表,单表的主键数一般在 8 亿左右,最大的表的主键数是 170 亿,写入的流量最大的一张 Paimon 表约为每天写入 1000 亿的运营商数据。

李劲松:联通目前大致的大数据的架构和应用场景能简单分享一下吗?

王云朋:在联通中,一般针对分钟级时延要求的业务,并且实时数据和离线数据有关联和融合的业务,我们会使用 Paimon 来实现。下面时比较典型的场景,即建设以用户为中心的全景视图:

8

它要将用户相关的一些基本信息、使用信息、行为信息进行关联整合、实时更新,统一支撑上层的实时订阅、实时特征、实时安全等业务。我们的建设思路是:存储层是使用 Paimon 表作为存储,数据处理层使用 Flink,数据源主要包括数据库的变更日志、用户的行为数据、最新位置、上网偏好等。数据源接入之后,ODS 先入湖,在湖上进行分层建设,建设主题湖表,主要是一些关联打宽的操作,简单的关联使用 Paimon 和 Flink 在存储层实现关联,减少状态量,实现流批一体的存储,保证了数据的一致性,处理架构也简化了很多。

据实践经验,主机资源减少了 50%左右,包括数据的订正、批量的分析,以及中间结果的实时查询都有了更好的支持。此外,社区很活跃,使用过程中遇到的问题会很快得到解决。

四、总结

综上所述,Paimon 真正实现了流批一体,把流和批融合到了一起,加上 Flink 和流批一体的计算、存储,真正融合了流和批的架构。

点击查看原文视频

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

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

相关文章

Mybatis实现增删改查的两种方式-配置文件/注解

环境准备 1.数据库表tb_brand -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand(-- id 主键id int primary key auto_increment,-- 品牌名称brand_name varchar(20),-- 企业名称company_name varchar(20),-- 排序字段ordered int…

[Flutter]WebPlatform上运行遇到的问题总结

[Flutter]WebPlatform上运行遇到的问题总结 目录 [Flutter]WebPlatform上运行遇到的问题总结 写在开头 正文 Q1、不兼容判断 Q2、跨域问题 其他 写在结尾 写在开头 Flutter项目已能在移动端完美使用后,想看看在桌面端等使用情况 基于Flutter3.0后已支持Wi…

前端框架中的状态管理(State Management)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

李沐-《动手学深度学习》-- 01-预备知识

一、线性代数知识 1. 矩阵计算 a. 矩阵求导 ​ 当y和x分别为标量和向量时候,进行求导得到的矩阵形状,矩阵求导就是矩阵A中的每一个元素对矩阵B中的每一个元素求导 ​ 梯度指向的是值变化最大的方向 ​ 分子布局和分母布局: b. 常识 ax…

知识付费平台搭建?找明理信息科技,专业且高效

明理信息科技知识付费saas租户平台 在当今数字化时代,知识付费已经成为一种趋势,越来越多的人愿意为有价值的知识付费。然而,公共知识付费平台虽然内容丰富,但难以满足个人或企业个性化的需求和品牌打造。同时,开发和…

群晖NAS+DMS7.0以上版本+无docker机型安装zerotier

测试机型:群晖synology 218play / DSM版本为7.2.1 因218play无法安装docker,且NAS系统已升级为7.0以上版本,按zerotier官网说法无法安装zerotier, 不过还是可以通过ssh终端和命令方式安装zerotier。 1、在DSM新建文件夹 用于存放zerotier脚…

2023我的编程之旅-地质人的山和水

引言 大家好,我是搞地质的。外行人有的说我们游山玩水,有的说我们灰头土脸,也有的说我们不是科学。 而我说,这是一门穷极一生青春,值得奉献的行业。这是一门贴近民生,又拥抱自然的学科。他的真理性在于探…

进阶学习——Linux系统安全及应用

目录 一、系统安全加固 1.账号安全基本措施 1.1系统账号清理 1.1.1延伸 1.2密码安全控制 1.3命令历史限制 1.4终端自动注销 二、使用su命令切换用户 1.用途及用法 2.密码验证 3.限制使用su命令的用户 4.查看su操作记录 5.sudo(superuse do)…

stable diffusion 人物高级提示词(一)头部篇

一、女生发型 prompt描述推荐用法Long hair长发一定不要和 high ponytail 一同使用Short hair短发-Curly hair卷发-Straight hair直发-Ponytail马尾high ponytail 高马尾,一定不要和 long hair一起使用,会冲突Pigtails2条辫子-Braid辫子只写braid也会生…

数据库开发必备神器:DataGrip 工具安装指南

DataGrip是一款强大的跨平台数据库集成开发环境,全能数据库工具,支持多种数据库系统,包括MySQL,PostgreSQL,Oracle等;提供智能代码编辑功能,包括语法高亮、代码补全等,提升开发效率。…

Qt/QML编程学习之心得:Linux下Thread线程创建(26)

GUI设计中经常为了不将界面卡死,会用到线程Thread,而作为GUI设计工具,Qt也提供了一个这样的类,即QThread。 QThread对象管理程序中的一个控制线程。线程QThread开始在run()中执行。默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环。 也可以通过…

YTM32的低功耗PowerDown模式及唤醒管理器WKU模块

文章目录 Introduction专门的唤醒源管理器WKU外部的唤醒引脚内部的触发信号 进入PowerDown模式的操作流进入低功耗模式配合使用的其他模块 性能指标低功耗电流唤醒时间 Conclusion Introduction YTM32的低功耗系统中有设计了多种工作模式,功耗从高到低,…

Spring之 国际化:i18n

1、i18n概述 国际化也称作i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化。通常来讲,软件中的国…

2.6 KERNEL LAUNCH

图2.15在vecAdd函数中显示最终主机代码。此源代码完成了图2.6.中的骨架。2.12和2.15共同说明了一个简单的CUDA程序,该程序由主机代码和设备内核组成。该代码是硬接的,每个线程块使用256个线程。然而,使用的线程块的数量取决于向量&#xff08…

java基于SSM的游戏商城的设计与实现论文

基于SSM的游戏商城的设计与实现 摘 要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于游戏信息的管理和控制,采用人工登记的方式保存相关数据,这种以…

【C++】- 类和对象(!!C++类基本概念!this指针详解)

类和对象 引入类类的定义类的访问限定操作符类的作用域类的实例化类对象模型this指针 引入类 在 C中,引入了一个新的定义----------类。类是一种用户自定义的数据类型,用于封装数据和行为。类可以看作是一个模板或蓝图,描述了一组相关的数据和…

Android 集成vendor下的模块

Android 集成vendor下的模块 ,只需要在 PRODUCT_PACKAGES 加上对应的模块名,编译的时候就会执行对应模块的bp文件,集成到系统中 PRODUCT_PACKAGES \WallpaperPicker \Launcher3 \com.nxp.nfc Android11 Framework Vendor下自定义系统…

SpringBoot 如何 返回页面

背景 RestController ResponseBody Controller Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。 Mapping ResponseBody 也会出现同样的问题。 解…

nginx访问路径匹配方法

目录 一:匹配方法 二:location使用: 三:rewrite使用 一:匹配方法 location和rewrite是两个用于处理请求的重要模块,它们都可以根据请求的路径进行匹配和处理。 二:location使用: 1:简单匹配…

SSH 密钥身份验证和管理

安全外壳协议(Security Shell Protocol)是一种应用于计算机网络的安全通信协议,其提供的服务可用于保护网络上的连接和数据传输安全性,其核心思想是为网络上的两台计算机之间搭建一个安全的外壳,以保护数据传输的安全性…