蚂蚁集团万级规模 k8s 集群 etcd 高可用建设之路

k8s高可用环境部署3(Etcd) 前言 环境和部分软件已经配置好了,接着要部署一个Etcd集群。Etcd 通常是和master部署在一起,也有人会将 etcd独立于 k8s集群之外,以便于更好地扩展etcd集群。而此次是部署在3个master上。 下面是关于Etcd的一些简单介绍: Etcd节点数: etcd 是基于raft算法的分布式键值数据库,在做决策时需要超半数节点的投票,所以 etcd集群 一般推荐奇数节点(3,5,7);etcd是高可用的,3节点etcd集群,最大容忍1台机器宕机。根据网上的资料还可以得出2个结论:设置偶数 阅读详情

蚂蚁集团运维着可能是全球最大的 k8s 集群:k8s 官方以 5k node 作为 k8s 规模化的顶峰,而蚂蚁集团事实上运维着规模达到 10k node 规模的 k8s 集群。一个形象的比喻就是,如果官方以及跟着官方的 k8s 使用者能想象到的 k8s 的集群规模是泰山,那么蚂蚁集团在官方的解决方案之上已经实现了一个珠穆朗玛峰,引领了 k8s 规模化技术的提升。 

这个量级的差异,不仅仅是量的差异,更是 k8s 管理维护的质的提升。能维护有如此巨大挑战巨量规模的 k8s 集群,其背后原因是蚂蚁集团付出了远大于 k8s 官方的优化努力。

所谓万丈高楼平地起,本文着重讨论下蚂蚁集团的在 k8s 的基石 --- etcd 层面做出的高可用建设工作:只有 etcd 这个基石稳当了,k8s 这栋高楼大厦才保持稳定性,有 tidb 大佬黄东旭朋友圈佐证【图片已获黄总授权】。

面临的挑战

etcd 首先是 k8s 集群的 KV 数据库。 

从数据库的角度来看,k8s 整体集群架构各个角色如下:

  • etcd 集群的数据库

  • kube-apiserver etcd 的 API 接口代理、数据缓存层

  • kubelet 数据的生产者和消费者

  • kube-controller-manager 数据的消费者和生产者

  • kube-scheduler 数据的消费者和生产者

etcd 本质是一个 KV 数据库,存储了 k8s 自身资源 、用户自定义的 CRD 以及 k8s 系统的 event 等数据。每种数据的一致性和数据安全性要求不一致,如 event 数据的安全性小于 k8s 自身的资源数据以及 CRD 数据。

k8s 的早期拥护者在推广 k8s 时,宣称其比 OpenStack 的优势之一是 k8s 没有使用消息队列,其延迟比 OpenStack 低。这其实是一个误解,无论是 etcd 提供的 watch 接口,还是 k8s client 包中的 informer 机制,无不表明 k8s 是把 etcd 当做了消息队列,k8s 消息的载体很多,譬如 k8s event。

从消息队列的角度来看,k8s 整体集群架构各个角色如下:

  • etcd 消息路由器

  • kube-apiserver etcd 生产者消息代理和消息广播【或者成为次级消息路由器、消费者代理】

  • kubelet 消息的生产者和消费者

  • kube-controller-manager 消息的消费者和生产者

  • kube-scheduler 消息的消费者和生产者

etcd 是推模式的消息队列。etcd 是 k8s 集群的 KV 数据库和消息路由器,充当了 OpenStack 集群中的 MySQL 和 MQ 两个角色,这样的实现貌似简化了集群的结构,但其实不然。在 large scale 规模 k8s 集群中,一般经验,首先都会使用一个单独 etcd 集群存储 event 数据:把 KV 数据和一部分 MQ 数据物理隔离开,实现了 KV 和 MQ 角色的部分分离。 如 参考文档 2 中提到美团 “针对 etcd 的运营,通过拆分出独立的 event 集群降低主库的压力”。

当 k8s 集群规模扩大时,etcd 承载着 KV 数据剧增、event 消息暴增以及消息写放大的三种压力。为了证明所言非虚,特引用部分数据为佐证:

  • etcd KV 数据量级在 100 万以上;

  • etcd event 数据量在 10 万以上;

  • etcd 读流量压力峰值在 30 万 pqm 以上,其中读 event 在 10k qpm 以上;

  • etcd 写流量压力峰值在 20 万 pqm 以上,其中写 event 在 15k qpm 以上;

  • etcd CPU 经常性飙升到 900% 以上;

  • etcd 内存 RSS 在 60 GiB 以上;

  • etcd 磁盘使用量可达 100 GiB 以上;

  • etcd 自身的 goroutine 数量 9k 以上;

  • etcd 使用的用户态线程达 1.6k 以上;

  • etcd gc 单次耗时常态下可达 15ms。

使用 Go 语言实现的 etcd 管理这些数据非常吃力,无论是 CPU、内存、gc、goroutine 数量还是线程使用量,基本上都接近 go runtime 管理能力极限:经常在 CPU profile 中观测到 go runtime 和 gc 占用资源超过 50% 以上。

蚂蚁的 k8s 集群在经历高可用项目维护之前,当集群规模突破 7 千节点规模时,曾出现如下性能瓶颈问题:

  • etcd 出现大量的读写延迟,延迟甚至可达分钟级;

  • kube-apiserver 查询 pods / nodes / configmap / crd 延时很高,导致 etcd oom;

  • etcd list-all pods 时长可达 30 分钟以上;

  • 2020 年 etcd 集群曾因 list-all 压力被打垮导致的事故就达好几起;

  • 控制器无法及时感知数据变化,如出现 watch 数据延迟可达 30s 以上。

如果说这种状况下的 etcd 集群是在刀锋上跳舞, 此时的整个 k8s 集群就是一个活火山:稍不留神就有可能背个 P 级故障, 彼时的整个 k8s master 运维工作大概是整个蚂蚁集团最危险的工种之一。

高可用策略

实现一个分布式系统高可用能力的提升,大概有如下手段:

  • 提升自身稳定性与性能;

  • 精细管理上游流量;

  • 保证服务下游服务 SLO。

etcd 经过社区与各方使用者这么多年的锤炼,其自身的稳定性足够。蚂蚁人能做到的,无非是使出周扒皮的本事,提高集群资源整体利用率,scale out 和 scale up 两种技术手段双管齐下,尽可能的提升其性能。

etcd 自身作为 k8s 的基石,其并无下游服务。如果说有,那也是其自身所使用的物理 node 环境了。下面分别从 etcd 集群性能提升、请求流量管理等角度阐述我们在 etcd 层面所做出的高可用能力提升工作。

文件系统升级

在山窝里飞出金凤凰,诚非易事。让 etcd 跑的更快这件事,没有什么手段比提供一个高性能的机器更短平快地见效了。 

1.使用 NVMe ssd

etcd 自身 = etcd 程序 + 其运行环境。早期 etcd 服务器使用的磁盘是 SATA 盘,经过简单地测试发现 etcd 读磁盘速率非常慢,老板豪横地把机器鸟枪换炮 --- 升级到使用了 NVMe SSD 的 f53 规格的机器:etcd 使用 NVMe ssd 存储 boltdb 数据后,随机写速率可提升到 70 MiB/s 以上。

参考文档 2 中提到美团 “基于高配的 SSD 物理机器部署可以达到日常 5 倍的高流量访问”,可见提升硬件性能是大厂的首选,能折腾机器千万别浪费人力。

2.使用 tmpfs 

NVMe ssd 虽好,理论上其读写极限性能跟内存比还是差一个数量级。我们测试发现使用 tmpfs【未禁止 swap out】替换 NVMe ssd 后,etcd 在读写并发的情况下性能仍然能提升 20% 之多。考察 k8s 各种数据类型的特点后,考虑到 event 对数据的安全性要求不高但是对实时性要求较高的特点,我们毫不犹豫的把 event etcd 集群运行在了 tmpfs 文件系统之上,将 k8s 整体的性能提升了一个层次。 

3.磁盘文件系统

磁盘存储介质升级后,存储层面能够进一步做的事情就是研究磁盘的文件系统格式。目前 etcd 使用的底层文件系统是 ext4 格式,其 block size 使用的是默认的 4 KiB。我们团队曾对 etcd 进行单纯的在单纯写并行压测时发现,把文件系统升级为 xfs,且 block size 为 16 KiB【在测试的 KV size 总和 10 KiB 条件下】时,etcd 的写性能仍然有提升空间。

但在读写并发的情况下,磁盘本身的写队列几乎毫无压力,又由于 etcd 3.4 版本实现了并行缓存读,磁盘的读压力几乎为零,这就意味着:继续优化文件系统对 etcd 的性能提升空间几乎毫无帮助。自此以后单节点 etcd scale up 的关键就从磁盘转移到了内存:优化其内存索引读写速度。

4.磁盘透明大页

在现代操作系统的内存管理中,有 huge page 和 transparent huge page 两种技术,不过一般用户采用 transparent huge page 实现内存 page 的动态管理。在 etcd 运行环境,关闭 transparent huge page 功能,否则 RT 以及 QPS 等经常性的监控指标会经常性的出现很多毛刺,导致性能不平稳。

etcd 调参

MySQL 运维工程师常被人称为 “调参工程师”,另一个有名的 KV 数据库 RocksDB 也不遑多让,二者可调整的参数之多到了令人发指的地方:其关键就在于针对不同存储和运行环境需要使用不同的参数,才能充分利用硬件的性能。etcd 随不及之,但也不拉人后,预计以后其可调整参数也会越来越多。

etcd 自身也对外暴露了很多参数调整接口。除了阿里集团 k8s 团队曾经做出的把 freelist 由 list 改进为 map 组织形式优化外,目前常规的 etcd 可调整参数如下:

  • write batch

  • compaction

1.write batch

像其他常规的 DB 一样,etcd 磁盘提交数据时也采用了定时批量提交、异步写盘的方式提升吞吐,并通过内存缓存的方式平衡其延时。具体的调整参数接口如下:

  • batch write number 批量写 KV 数目,默认值是 10k;

  • batch write interval 批量写事件间隔,默认值是 100 ms。

etcd batch 这两个默认值在大规模 k8s 集群下是不合适的,需要针对具体的运行环境调整之,避免导致内存使用 OOM。一般地规律是,集群 node 数目越多,这两个值就应该成比例减小。

2.compaction

etcd 自身由于支持事务和消息通知,所以采用了 MVCC 机制保存了一个 key 的多版本数据,etcd 使用定时的 compaction 机制回收这些过时数据。etcd 对外提供的压缩任务参数如下:

  • compaction interval 压缩任务周期时长;

  • compaction sleep interval 单次压缩批次间隔时长,默认 10 ms;

  • compaction batch limit 单次压缩批次 KV 数目,默认 1000。

(1)压缩任务周期

k8s 集群的 etcd compaction 可以有两种途径进行 compaction:

  • etcd 另外提供了 comapct 命令和 API 接口,k8s kube-apiserver 基于这个 API 接口也对外提供了 compact 周期参数;

  • etcd 自身会周期性地执行 compaction;

  • etcd 对外提供了自身周期性 compaction 参数调整接口,这个参数的取值范围是 (0, 1 hour];

  • 其意义是:etcd compaction 即只能打开不能关闭,如果设置的周期时长大于 1 hour,则 etcd 会截断为 1 hour。

蚂蚁 k8s 团队在经过测试和线下环境验证后,目前的压缩周期取值经验是:

  • 在 etcd 层面把 compaction 周期尽可能地拉长,如取值 1 hour,形同在 etcd 自身层面关闭 compaction,把 compaction interval 的精细调整权交给 k8s kube-apiserver;

  • 在 k8s kube-apiserver 层面,根据线上集群规模取值不同的 compaction interval。

之所以把 etcd compaction interval 精细调整权调整到 kube-apiserver 层面,是因为 etcd 是 KV 数据库,不方便经常性地启停进行测试,而 kube-apiserver 是 etcd 的缓存,其数据是弱状态数据,相对来说启停比较方便,方便调参。至于 compaction interval 的取值,一条经验是:集群 node 越多 compaction interval 取值可以适当调大。compaction 本质是一次写动作,在大规模集群中频繁地执行 compaction 任务会影响集群读写任务的延时,集群规模越大,其延时影响越明显,在 kube-apiserver 请求耗时监控上表现就是有频繁出现地周期性的大毛刺。

更进一步,如果平台上运行的任务有很明显的波谷波峰特性,如每天的 8:30 am ~ 21:45 pm 是业务高峰期,其他时段是业务波峰期,那么可以这样执行 compaction 任务:

  • 在 etcd 层面设定 compaction 周期是 1 hour;

  • 在 kube-apiserver 层面设定 comapction 周期是 30 minutes;

  • 在 etcd 运维平台上启动一个周期性任务:当前时间段在业务波谷期,则启动一个 10 minutes 周期的 compaction 任务。

其本质就是把 etcd compaction 任务交给 etcd 运维平台,当发生电商大促销等全天无波谷的特殊长周期时间段时,就可以在平台上紧急关闭 compaction 任务,把 compaction 任务对正常的读写请求影响降低到最低。

(2)单次压缩

即使是单次压缩任务,etcd 也是分批执行的。因为 etcd 使用的存储引擎 boltdb 的读写形式是多读一写:可以同时并行执行多个读任务,但是同时刻只能执行一个写任务。

为了防止单次 compaction 任务一直占用 boltdb 的读写锁,每次执行一批固定量【compaction batch limit】的磁盘 KV 压缩任务后,etcd 会释放读写锁 sleep 一段时间【compaction sleep interval】。

在 v3.5 之前,compaction sleep interval 固定为 10 ms,在 v3.5 之后 etcd 已经把这个参数开放出来方便大规模 k8s 集群进行调参。类似于 batch write 的 interval 和 number,单次 compaction 的 sleep interval 和 batch limit 也需要不同的集群规模设定不同的参数,以保证 etcd 平稳运行和 kube-apiserver 的读写 RT 指标平稳无毛刺。 

运维平台

无论是 etcd 调参,还是升级其运行的文件系统,都是通过 scale up 的手段提升 etcd 的能力。还有两种 scale up 手段尚未使用:

  • 通过压测或者在线获取 etcd 运行 profile,分析 etcd 流程的瓶颈,然后优化代码流程提升性能;

  • 通过其他手段降低单节点 etcd 数据量。

通过代码流程优化 etcd 性能,可以根据 etcd 使用方的人力情况进行之,更长期的工作应该是紧跟社区,及时获取其版本升级带来的技术红利。通过降低 etcd 数据规模来获取 etcd 性能的提升则必须依赖 etcd 使用方自身的能力建设了。

我们曾对 etcd 的单节点 RT 与 QPS 性能与 KV 数据量的关系进行过 benchmark 测试,得到的结论是:当 KV 数据量增加时,其 RT 会随之线性增加,其 QPS 吞吐则会指数级下降。这一步测试结果带来的启示之一即是:通过分析 etcd 中的数据组成、外部流量特征以及数据访问特点,尽可能地降低单 etcd 节点的数据规模。

目前蚂蚁的 etcd 运维平台具有如下数据分析功能:

  • longest N KV --- 长度最长的 N 个 KV

  • top N KV --- 段时间内访问次数最多的 N 个 KV

  • top N namespace --- KV 数目最多的 N 个 namespace 

  • verb + resoure --- 外部访问的动作和资源统计

  • 连接数 --- 每个 etcd 节点的长连接数目

  • client 来源统计 --- 每个 etcd 节点的外部请求来源统计

  • 冗余数据分析 --- etcd 集群中近期无外部访问的 KV 分布

根据数据分析结果,可以进行如下工作:

  • 客户限流

  • 负载均衡

  • 集群拆分

  • 冗余数据删除

  • 业务流量精细分析

1.集群拆分

前文提到,etcd 集群性能提升的一个经典手段就是把 event 数据独立拆分到一个独立的 etcd 集群,因为 event 数据是 k8s 集群一中量级比较大、流动性很强、访问量非常高的数据,拆分之后可以降低 etcd 的数据规模并减轻 etcd 单节点的外部客户端流量。

一些经验性的、常规性的 etcd 拆分手段有:

  • pod/cm

  • node/svc

  • event, lease

这些数据拆分后,大概率能显著提升 k8s 集群的 RT 与 QPS,但是更进一步的数据拆分工作还是有必要的。依据数据分析平台提供的热数据【top N KV】量级以及外部客户访问【verb + resource】情况,进行精细分析后可以作为 etcd 集群拆分工作的依据。

2.客户数据分析

针对客户数据的分析分为 longest N KV 分析、top N namespace。

一个显然成立的事实是:单次读写访问的 KV 数据越长,则 etcd 响应时间越长。通过获取客户写入的 longest N KV 数据后,可以与平台使用方研究其对平台的使用方法是否合理,降低业务对 k8s 平台的访问流量压力和 etcd 自身的存储压力。

一般地,k8s 平台每个 namespace 都是分配给一个业务单独使用。前面提到 k8s 可能因为 list-all 压力导致被压垮,这些数据访问大部分情况下都是 namespace 级别的 list-all。从平台获取 top N namespace 后,重点监控这些数据量级比较大的业务的 list-all 长连接请求,在 kube-apiserver 层面对其采取限流措施,就可以基本上保证 k8s 集群不会被这些长连接请求打垮,保证集群的高可用。

3.冗余数据分析

etcd 中不仅有热数据,还有冷数据。这些冷数据虽然不会带来外部流量访问压力,但是会导致 etcd 内存索引锁粒度的增大,进而导致每次 etcd 访问 RT 时延增加和整体 QPS 的下降。

近期通过分析某大规模【7k node 以上】 k8s 集群 etcd 中的冗余数据,发现某业务数据在 etcd 中存储了大量数据,其数据量大却一周内没有访问过一次,与业务方询问后获悉:业务方把 k8s 集群的 etcd 当做其 crd 数据的冷备使用。与业务方沟通后把数据从 etcd 中迁移掉后,内存 key 数目立即下降 20% 左右,大部分 etcd KV RT P99 延时立即下降 50% ~ 60% 之多。

4.负载均衡

k8s 平台运维人员一般都有这样一条经验:etcd 集群如果发生了启停,需要尽快对所有 k8s kube-apiserver 进行一次重启,以保证 kube-apiserver 与 etcd 之间连接数的均衡。其原因有二:

  • kube-apiserver 在启动时可以通过随机方式保证其与 etcd 集群中某个节点建立连接,但 etcd 发生启停后,kube-apiserver 与 etcd 之间的连接数并无规律,导致每个 etcd 节点承担的客户端压力不均衡;

  • kube-apiserver 与 etcd 连接数均衡时,其所有读写请求有 2/3 概率是经过 follower 转发到 leader,保证整体 etcd 集群负载的均衡,如果连接不均衡则集群性能无法评估。

通过 etcd 运维平台提供的每个 etcd 的连接负载压力,可以实时获取集群连接的均衡性,进而决定运维介入的时机,保证 etcd 集群整体的健康度。

其实最新的 etcd v3.5 版本已经提供了 etcd 客户端和 etcd 节点之间的自动负载均衡功能,但这个版本才发布没多久,目前最新版本的 k8s 尚未支持这个版本,可以及时跟进 k8s 社区对这个版本的支持进度以及时获取这一技术红利,减轻平台运维压力。 

未来之路

通过一年多的包括 kube-apiserver 和 etcd 在内的 k8s 高可用建设,目前 k8s 集群已经稳定下来,一个显著的特征是半年内 k8s 集群没有发生过一次 P 级故障,但其高可用建设工作不可能停歇 --- 作为全球 k8s 规模化建设领导力象限的蚂蚁集团正在挑战 node 量级更大规模的 k8s 集群,这一工作将推动 etcd 集群建设能力的进一步提升。

前面提到的很多 etcd 能力提升工作都是围绕其 scale up 能力提升展开的,这方面的能力还需要更深层次的加强:

  • etcd 最新 feature 地及时跟进,及时把社区技术进步带来的开源价值转换为蚂蚁 k8s 平台上的客户价值

  • 及时跟进阿里集团在 etcd compact 算法优化、etcd 单节点多 multiboltdb 的架构优化以及 kube-apiserver 的服务端数据压缩等 etcd 优化工作【见参考文档 1】,对兄弟团队的工作进行借鉴和反馈,协同作战共同提升

  • 跟进蚂蚁自身 k8s 平台上 etcd 的性能瓶颈,提出我们自己的解决方案,在提升我们平台的技术价值的同时反哺开源

除了关注 etcd 单节点性能的提升,我们下一步的工作将围绕分布式 etcd 集群这一 scale out 方向展开。前面提到的 etcd 集群拆分工作,其本质就是通过分布式 etcd 集群的方式提升 etcd 集群整体的性能:该集群的数据划分方式是依据 k8s 业务层面的数据类型进行的。

该工作可以进一步拓展为:不区分 KV 的业务意义,从单纯的 KV 层面对把数据根据某种路由方式把数据写入后端多 etcd 子集群,实现 etcd 集群整体的冷热负载均衡。

分布式 etcd 集群的实现有两种方式:proxyless 和 proxy based:proxy based etcd 分布式集群的请求链路是 client[kube-apiserver] -> proxy -> etcd server,而谓的 proxyless 分布式 etcd 集群的请求链路是 client[kube-apiserver] -> etcd server。

proxy based etcd 分布式集群的好处是可以直接基于 etcd 社区提供的 etcd proxy 进行开发,后期亦可回馈社区,实现其开源价值、技术价值和客户价值的统一。但经过测试:按照测试发现,kube-apiserver 经过 proxy 向 etcd 发起读写请求后 RT  和 QPS 降低 20% ~ 25%。所以下一步的工作重点是开发 proxyless etcd 集群。

目前的拆分后的 etcd 分布式集群本质或者 67% 的概率是 proxy based 分布式集群:kube-apiserver 的请求大概有三分之二的概率是经过 follower 转发到 leader,此处的 follower 本质就是一个 proxy。如果 kube-apiserver 所有请求都是与 leader 直连后被处理,理论上当前的 k8s 集群的 RT 和 QPS 就有 67% * 20% ≈ 13.4% 的性能收益。

proxyless etcd 分布式集群的缺点是如果把 proxy 的路由逻辑放入 kube-apiserver 中,会造成 kube-apiserver 版本升级成本增加,但相比于至少 20% 【将来通过 etcd 集群规模扩充这个收益肯定会更大】的收益,这个仅仅影响了 kube-apiserver 单个组件的版本升级的成本是值得的。

除了 multiple etcd clusters 的思路外,数据中间件团队基于 OBKV 之上实现了 etcd  V3 API ,算是另一种比较好的技术路线,颇类似于本文开头黄东旭提到的在 tikv 之上 etcd  V3 API 接口层,可以称之为类 etcd 系统,目前相关工作也在推进中。

总之,随着我们 k8s 规模越来越大,蚂蚁集团 etcd 整体工作的重要性就日益凸显。 如果说前期 etcd 的高可用建设之路是在泥泞小道上蹒跚前行,那么以后的 etcd 高可用建设之路必是康庄大道 --- 道路越走越宽广!

参看文档

参考文档 1:

https://www.kubernetes.org.cn/9284.html

参考文档 2:

https://tech.meituan.com/2020/08/13/openstack-to-kubernetes-in-meituan.html

作者简介

于雨(github @AlexStocks),dubbogo 社区负责人,一个有十一年服务端基础架构和中间件研发一线工作经验的程序员。

陆续参与和改进过 Redis/Pika/Pika-Port/etcd/Muduo/Dubbo/dubbo-go/Sentinel-go 等知名项目,目前在蚂蚁集团可信原生技术部大规模 k8s 集群调度团队从事容器编排工作,参与维护全球规模最大的 Kubernetes 生产集群之一,致力于打造规模化、金融级、可信的云原生基础设施。

欢迎对 Serverless 自动伸缩技术、自适应混合部署技术以及 Kata/Nanovisor 等安全容器技术感兴趣的同行或者 2022 届应届毕业生加入我们。

联系邮箱 xiaoyun.maoxy@antgroup.com 或者 yuyu.zx@antgroup.com。

【 ‌infrastructure】【数据中心】【AI infra】第十篇 智能计算数据中心解决方案集成测试和交付知识体系01 编号类型领域模块子模块学科知识点及详细数学建模与数值设计(推导/边界/示例)关联知识、标准、法律法规、论文、工业实践1.1架构智算集成总体拓扑业务/管理/数据/参数面分离系统架构、队列论、网络流四平面隔离:业务面带宽B_b、数据面B_d(对象/数仓ETL)、参数面B_p(NCCL AllReduce)、管理面B_m(Prometheus/API)。总成本C=Σ(N_server·C_s+N_sw·C_sw+N_dpu·C_dpu)+C_power;约束B_p≥模型梯度量G/t_step。示例:千卡A100、 阅读详情

相关推荐

Rope DFM一键整合包AI脸部替换教程:使用DeepFaceLab模型实现专业级视频和直播脸部替换

在AI脸部替换工具中,Rope凭借其出色的自动遮罩处理拔得头筹,结合DFM模型中的DFL XSeg遮罩处理,效果更是提升了一个台阶。因为在训练模型时,它已经通过大量的侧脸图片进行训练,达到了单张图片无法企及的效果。然而,想要通过DeepFaceLab获得专业级的效果,不仅难度大,时间成本也相当高,训练模型也是个不小的挑战。举个简单的例子,使用图片脸部替换时,如果佩戴眼镜,脸部替换后的可能会显得很假。另外,在视频中,比如歌手演唱时,话筒遮挡住脸部,这种场景也可以通过遮罩训练后的模型来处理,呈现出更逼真的效果。

m0_72580657的博客 8162

kubeadm部署k8s 1.26.0版本高可用集群

kubeadm部署k8s 1.26.0版本高可用集群

ApexPredator的博客 1635

车企常用架构、通信设计、需求管理工具全汇总

车辆技术是个系统工程,比较大,需要多人协作。“协作”往往需要工具参与,才能保证协作过程的高效、有条不紊。 【文章系转载,出处见图片水印】 今天我们就来捋一捋汽车行业常用的架构、网络开发工具~ Preevision 大名鼎鼎的Preevision,来自大名鼎鼎的Vector。 个人觉得,它是Vector公司最牛逼、最神秘、最高高在上的产品,犹如空谷回响、千里传音,但是很少看到它真正落地。 它最引以为傲的,或许是在给客户做介绍的时候,说“我们甚至能够精确到每一根线束的长度”,但是反观.

MaveDiao的博客 3485

Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

zhengzaifeidelushang的博客 2483

UWB 多传感器通信的纳秒无线位置和时钟同步方法

利用UWB高精度的特点,实现多节点下的无线时钟同步和定位。通过优化硬件架构,减少不确定延迟的影响,系统可以提供纳秒级时钟同步消息

DT程序员的博客 1329

【学习系列】SAP RAP 2:创建第一个RAP应用

本文介绍了从零开始创建基于SAP RAP(ABAP RESTful Application Programming Model)的Fiori应用的完整流程。首先说明了学习RAP需要结合官方文档和教程,并提供了相关资源链接。文章详细讲解了开发环境的准备要求,包括系统版本、开发工具和基本知识。重点演示了如何通过8个步骤创建支持CRUD操作和草稿功能的RAP应用:1)创建数据库表;2)定义CDS视图实体;3)创建投影视图;4)定义行为;5)创建行为投影;6)定义服务;7)绑定服务;8)添加UI注解。

DeveloperMrMeng的博客 1499

解读如何打造支撑万亿规模的K8s集群?

大家好,我是韩先超。国内最早一批K8S布道者。如今大公司都在引进K8s人才,学习K8s是进入名企的一条捷径。今天,我们就从一线大厂技术实战案例入手,带领大家解锁K8s技能树。01为什么大厂...

weixin_38320674的博客 1957

解释多智能体强化学习(Multi-Agent Reinforcement Learning)(面试题200合集,中频、重要)

多智能体强化学习通过扩展传统强化学习框架,研究多个智能体在动态、交互环境中的策略优化问题。它既有理论上的挑战(如非平稳性和均衡求解),也有广泛的实际应用前景。数学上,它依赖马尔可夫博弈模型,核心是设计算法让智能体在合作或竞争中达到最优。

qq_38334677的博客 990

对etcd进行数据拆分

我们现在是一个k8s集群,多个租户共同使用,包括如果后期有新用户上云,申请到的资源同样也会以node节点的形式加入到现有的master节点,这样当一定规模的服务运行在集群中,势必会增加etcd的负担,整个ku8集群的数据都是存放在etcd中,只有进行合理的拆分,才能提升etcd的性能。 进行etcd拆分的情况如下图: 老版本的etcd仍然提供服务,只存储pod、svc等信息。新版本的etcd提供着存储ku8的events信息。 之前就是因为把所有数据存放到一套etcd集群,出现events信息太多导致et

qq_44397993的博客 1513

2025.05.30【转录组】|Ribo-seq数据流程详解(一 质量控制)

本文详细介绍了Ribo-seq数据的质控分析流程,重点讲解了使用fastp进行原始数据质控的关键步骤和参数设置。作者通过Snakemake自动化流程示例,展示了如何去除接头序列、过滤低质量reads、生成质控报告等操作。文章强调高质量的Ribo-seq数据对转录后调控和翻译动态研究的重要性,并提供了兼顾数据质量和下游分析需求的参数配置建议。该流程有助于研究人员规范高效地完成Ribo-seq数据质控,为后续分析提供可靠数据基础。

785

Ubuntu系统等保3级配置核查与加固

虽然这种方法在某些老旧的系统中仍然有效,但现代Linux发行版通常不推荐使用hosts.deny和hosts.allow文件来管理防火墙规则,因为它们的功能已经被更现代的防火墙管理工具(如iptables或firewalld)所取代。如果你想禁止特定的环境变量,可以从这个列表中移除它们,或者如果你想完全阻止所有环境变量的传递,可以将其设置为空。你可以通过ssh-keygen生成密钥对,并将公钥添加到用户的~/.ssh/authorized_keys文件中。修改配置后,需要重启SSH服务以使更改生效。

悦分享 183

蚂蚁集团于雨:万级规模 K8S 集群 Etcd 高可用建设之路

- 前言 -蚂蚁集团运维着可能是全球最大的 k8s 集群:k8s 官方以 5k node 作为 k8s 规模化的顶峰,而蚂蚁集团事实上运维着规模达到 10k node 规模的...

中生代技术 1181

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度复盘 | 蚂蚁集团万级规模 k8s 集群基建之路

写在前面:本文作者于雨(github @AlexStocks),dubbogo 社区负责人,十一年服务端基础架构和中间件研发一线工作经验的程序员。陆续参与和改进过 Redis/Pika/Pika-Port/etcd/Muduo/Dubbo/dubbo-go/Sentinel-go 等知名项目,目前在蚂蚁集团可信原生技术部大规模 k8s 集群调度团队从事容器编排工作,参与维护全球规模最大的 Kubernetes 生产集群之一,致力于打造规模化、金融级、可信的云原生基础设施。 蚂蚁集团运维着可能是全球最大的 k

云布道师 663

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蚂蚁大规模 Sigma 集群 Etcd 拆分实践

文|杜克伟(花名:苏麟 ) 蚂蚁集团高级开发工程师 负责蚂蚁 Kubernetes 集群的稳定性方面的工作 专注于集群组件变更、稳定性风险保障 本文 15738 字 阅读 20 分钟 前 言 为了支撑蚂蚁业务的迭代升级,蚂蚁基础设施今年启动了 Gzone 全面云化项目。要求 Gzone 需与已经云化的 Rzone 合并部署在同一个集群,Sigma 单集群实际管理的节点规模将超过万台,单集群承担的业务也将更加复杂。 因此我们启动了大规模 Sigma 集群的性能优化方案,在请求延迟上期望能够对齐社区标准,不因规

金融级分布式架构 2206

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

攀登规模化的高峰 - 蚂蚁集团大规模 Sigma 集群 ApiServer 优化实践

文|唐博(花名:博易 蚂蚁集团技术专家) ​ 谭崇康(花名:见云 蚂蚁集团高级技术家) 本文 10316 字 阅读 18 分钟 ▼ 蚂蚁集团运行着全球最大的 Kubernetes*(内部称为 Sigma)* 集群之一。Kubernetes 社区官方以 5K node 作为 Kubernetes 规模化的事实标准,而蚂蚁集团在 2019 年的时候,就已经维护着单集群规模超过 1W node 的 Kubernetes 集群。 这不仅仅是单集群节点量级上的差异,更是业务规模的差异,业务多样化和复杂度上

金融级分布式架构 857

SOFAChannel#25 直播预告 |蚂蚁大规模 Kubernetes 集群无损升级实践

Kubernetes 已经成为行业内,容器编排的标准。越来越多的企业开始在生产中使用 Kubernetes,拥抱云原生。Kubernetes 为什么要持续迭代升级?大规模集群下升级过程将面...

金融级分布式架构 379

caas k8s主控节点如何查询_灵活、高效的云原生集群管理经验:用 K8s 管理 K8s

作者 | 淮右、临石导读:单 K8s 集群为用户提供了 Namespace 级别的隔离能力,理论上支持不超过 5K Node、15W Pod。多 K8s 集群则解决了单集群的资源隔离、故障隔离难题,打破可支持节点数、Pod 数的限制,但与此同时也带来了集群管理复杂度的上升;尤其在专有云场景中,K8s 工程师不可能像在公有云中一样快速触达客户环境,运维成本被进一步放大。因此如何低成本、高效率、自动化...

weixin_42514736的博客 150

蚂蚁集团沈凋墨:Kubernetes-微内核的分布式操作系统

蚂蚁集团读完需要17分钟速读仅需 6 分钟本文内容主要基于王益最近给 SQLFlow 和 ElasticDL 团队的分享。沈凋墨和章海涛、武毅、闫旭、张科等一起总结。这个总结解释了 SQ...

中生代技术 1314

云原生计算动态周报7.26-8.1

业界要闻 1.百度天合云原生平台通过可信云“全栈容器云解决方案”测评 摘要:7月27-28日,由中国信息通信研究院、中国通信标准化协会联合主办的“2021可信云大会”在京正式召开。会上,信通院公布了最新的可信云容器评估结果,百度智能云的天合云原生平台(CCE_Stack)通过了可信云“全栈容器云解决方案”测评,成为国内首批通过此测评的云厂商之一。 2.云原生安全白皮书中文版 摘要:其中涉及的核心安全概念包括:防范未经授权的访问(包括人的操作和非人实体的操作),资源的生命周期应当尽量...

百度云原生计算的博客 278

CNCF案例研究:蚂蚁金服

CNCF案例研究:蚂蚁金服 蚂蚁金服利用Kubernetes的高速增长策略 公司:蚂蚁金服地点:中国杭州行业:金融服务 挑战 蚂蚁金服于2014年10月正式成立,源自2004年推出的全球最大的在线支付平台支付宝。该公司还利用技术创新提供众多其他服务。随着支付宝处理其全球9亿多用户(通过其本地和全球合作伙伴)的交易量 - 在2017年双十一的高峰期每秒256,000笔交易,以及2018年...

weixin_44100234的博客 363

SOFA Weekly | Layotto、SOFABoot 发布新版本、QA 整理

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)是...

金融级分布式架构 376

SOFAJRaft:蚂蚁开源的高性能Java分布式一致性组件

在分布式系统中,多个节点如何高效地达成数据一致性,是构建高可用服务的核心难题。Raft协议通过Leader选举、日志复制和安全性约束,提供了一套简洁且可实现的共识算法。SOFAJRaft作为蚂蚁集团开源的工业级Java实现,不仅完整支持Raft协议,还针对性能进行了多线程复制、批量提交与线性一致读等优化,使其在生产环境中具备金融级可靠性。开发者可以将其作为嵌入式Java库,直接集成到自己的应用里,快速构建配置中心、注册中心、分布式锁或自研存储系统。相比独立部署的ZooKeeper或etcd,SOFAJRaf

weixin_29258297的博客 289
上一篇: 我们做出了一个分布式注册中心
下一篇: SOFA Weekly | Layotto、SOFABoot 发布新版本、QA 整理
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值