Etcd 可观测最佳实践

简介

Etcd 是一个高可用的分布式键值存储系统,它提供了一个可靠的、强一致性的存储服务,用于配置管理和服务发现。它最初由 CoreOS 开发,现在由 Cloud Native Computing Foundation (CNCF) 维护。Etcd 使用 Raft 算法来实现数据的一致性,能保证数据在所有节点间保持同步。

Etcd 作为一个关键的分布式键值存储系统,广泛应用于 Docker、Kubernetes等分布式系统中,用于存储配置信息、服务发现、领导者选举等,它保证了集群数据的强一致性和高可用性。因此对 Etcd 可观测是非常重要的,尤其是在生产环境中,观测 Etcd 的运行指标可以帮助及时发现和解决潜在的问题,确保集群的稳定性和可靠性。

Etcd 自带 metrics 接口,可以通过 curl 命令访问默认的 “/metrics” 端点来查看可用的指标。如果 Etcd 集群配置了 TLS,还需要指定客户端证书和密钥等信息 。

curl http://<etcd-node-ip>:2379/metrics

观测云是一款统一的可观测平台,可实现对多云、云原生、中间件、应用等进行实时可观测。观测云数据的采集是通过 DataKit 来实现的,DataKit 自带的有 Etcd 采集器,不依赖 Prometheus,只需要安装 DataKit,开通 Etcd 采集器,配置 metrics url 、证书、密钥等信息,即可采集到 Etcd 指标到观测云。下面是在 Kubernetes 集群部署 DataKit 并开通 Etcd 采集器的示例。

操作步骤

部署 DataKit

登录观测云控制台,点击「集成」 -「DataKit」 - 「Kubernetes」,下载 datakit.yaml,拷贝第 3 步中的 token。

编辑 datakit.yaml ,把 token 粘贴到 ENV_DATAWAY 环境变量值中“token=”后面,设置环境变量 ENV_CLUSTER_NAME_K8S 的值并增加环境变量 ENV_NAMESPACE,这两个环境变量的值一般和集群名称对应,一个工作空间集群名称要唯一。

        - name: ENV_NAMESPACE
          value: xxxx

把 datakit.yaml 上传到可以连接到 Kubernetes 集群的主机上,执行如下命令。

kubectl apply -f datakit.yaml
kubectl get pod -n datakit

开通 Etcd 采集

KubernetesPrometheus 是 DataKit 的一个采集器,它根据自定义配置实现自动发现 Prometheus 服务并进行采集,极大简化了采集 Kubernetes 集群中 Etcd 指标的复杂度。

apiVersion: v1
kind: ConfigMap
metadata:
  name: datakit-conf
  namespace: datakit
data:
    etcd.conf: |-  
      [inputs.kubernetesprometheus]      
        [[inputs.kubernetesprometheus.instances]]
          role       = "pod"
          namespaces = ["kube-system"]
          selector   = "component=etcd,tier=control-plane"      
          scrape   = "true"
          scheme   = "https"
          port     = "2379"
          path     = "/metrics"
          interval = "60s"
      
         [inputs.kubernetesprometheus.instances.custom]
           measurement        = "etcd"
           job_as_measurement = false
           [inputs.kubernetesprometheus.instances.custom.tags]
             node_name        = "__kubernetes_node_name"
             cluster_name_k8s = "k8s-dev"
         [inputs.kubernetesprometheus.instances.auth]
           bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
           [inputs.kubernetesprometheus.instances.auth.tls_config]
             insecure_skip_verify = false
             ca_certs = ["/rootfs/etc/kubernetes/pki/etcd/ca.crt"]
             cert     = "/rootfs/etc/kubernetes/pki/etcd/peer.crt"
             cert_key = "/rootfs/etc/kubernetes/pki/etcd/peer.key"
再把 etcd.conf 挂载到 DataKit 的 /usr/local/datakit/conf.d/kubernetesprometheus/etcd.conf 下面,最后重新部署 DataKit。
        - mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/etcd.conf
          name: datakit-conf
          subPath: etcd.conf

指标

登录观测云控制台,点击「指标」 -「指标管理」,输入“etcd”,就能查询采集到的指标。

Etcd 采集器默认会把所有指标都采集到观测云,为了减少时间线,需要使用 pipeline,drop 未被使用的指标。登录观测云控制台,点击「管理」 -「新建Pipeline」,选择“指标”、“etcd”,drop_key(grpc_server_started_total) 即是不采集 grpc_server_started_total 指标。

完整解析规则如下:

drop_key(grpc_server_started_total)
drop_key(etcd_cluster_version) 
drop_key(etcd_debugging_auth_revision)
drop_key(etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket)
drop_key(etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count)
drop_key(etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum)
drop_key(etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket)
drop_key(etcd_debugging_disk_backend_commit_spill_duration_seconds_count)
drop_key(etcd_debugging_disk_backend_commit_spill_duration_seconds_sum)
drop_key(etcd_debugging_disk_backend_commit_write_duration_seconds_bucket)
drop_key(etcd_debugging_disk_backend_commit_write_duration_seconds_count)
drop_key(etcd_debugging_disk_backend_commit_write_duration_seconds_sum)
drop_key(etcd_debugging_lease_granted_total)
drop_key(etcd_debugging_lease_renewed_total)
drop_key(etcd_debugging_lease_revoked_total)
drop_key(etcd_debugging_lease_ttl_total_bucket)
drop_key(etcd_debugging_lease_ttl_total_count)
drop_key(etcd_debugging_lease_ttl_total_sum)
drop_key(etcd_debugging_mvcc_compact_revision)
drop_key(etcd_debugging_mvcc_current_revision)
drop_key(etcd_debugging_mvcc_db_compaction_keys_total)
drop_key(etcd_debugging_mvcc_db_compaction_last)
drop_key(etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket)
drop_key(etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count)
drop_key(etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum)
drop_key(etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket)
drop_key(etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count)
drop_key(etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum)
drop_key(etcd_debugging_mvcc_events_total)
drop_key(etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket)
drop_key(etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count)
drop_key(etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum)
drop_key(etcd_debugging_mvcc_pending_events_total)
drop_key(etcd_debugging_mvcc_range_total)
drop_key(etcd_debugging_mvcc_slow_watcher_total)
drop_key(etcd_debugging_mvcc_total_put_size_in_bytes)
drop_key(etcd_debugging_mvcc_watch_stream_total)
drop_key(etcd_debugging_mvcc_watcher_total)
drop_key(etcd_debugging_server_lease_expired_total)
drop_key(etcd_debugging_snap_save_marshalling_duration_seconds_bucket)
drop_key(etcd_debugging_snap_save_marshalling_duration_seconds_count)
drop_key(etcd_debugging_snap_save_marshalling_duration_seconds_sum)
drop_key(etcd_debugging_snap_save_total_duration_seconds_bucket)
drop_key(etcd_debugging_snap_save_total_duration_seconds_count)
drop_key(etcd_debugging_snap_save_total_duration_seconds_sum)
drop_key(etcd_debugging_store_expires_total)
drop_key(etcd_debugging_store_reads_total)
drop_key(etcd_debugging_store_watch_requests_total)
drop_key(etcd_debugging_store_watchers)
drop_key(etcd_debugging_store_writes_total)
drop_key(etcd_disk_backend_defrag_duration_seconds_bucket)
drop_key(etcd_disk_backend_defrag_duration_seconds_count)
drop_key(etcd_disk_backend_defrag_duration_seconds_sum)
drop_key(etcd_disk_backend_snapshot_duration_seconds_bucket)
drop_key(etcd_grpc_proxy_cache_hits_total)
drop_key(etcd_grpc_proxy_cache_keys_total)
drop_key(etcd_grpc_proxy_cache_misses_total)
drop_key(etcd_grpc_proxy_events_coalescing_total)
drop_key(etcd_grpc_proxy_watchers_coalescing_total)
drop_key(etcd_mvcc_db_open_read_transactions)
drop_key(etcd_mvcc_delete_total)
drop_key(etcd_mvcc_hash_duration_seconds_bucket)
drop_key(etcd_mvcc_hash_duration_seconds_count)
drop_key(etcd_mvcc_hash_duration_seconds_sum)
drop_key(etcd_mvcc_hash_rev_duration_seconds_bucket)
drop_key(etcd_mvcc_hash_rev_duration_seconds_count)
drop_key(etcd_mvcc_hash_rev_duration_seconds_sum)
drop_key(etcd_mvcc_put_total)
drop_key(etcd_mvcc_range_total)
drop_key(etcd_mvcc_txn_total)
drop_key(etcd_server_apply_duration_seconds_bucket)
drop_key(etcd_server_apply_duration_seconds_count)
drop_key(etcd_server_apply_duration_seconds_sum)
drop_key(etcd_server_client_requests_total)
drop_key(etcd_server_go_version)

drop_key(etcd_server_id)
drop_key(etcd_server_is_leader)
drop_key(etcd_server_is_learner)
drop_key(etcd_server_learner_promote_successes)
drop_key(etcd_server_quota_backend_bytes)
drop_key(etcd_server_slow_apply_total)
drop_key(etcd_server_slow_read_indexes_total)
drop_key(etcd_server_version)
drop_key(etcd_snap_db_fsync_duration_seconds_bucket)
drop_key(etcd_snap_db_fsync_duration_seconds_count)
drop_key(etcd_snap_db_fsync_duration_seconds_sum)
drop_key(etcd_snap_db_save_total_duration_seconds_bucket)
drop_key(etcd_snap_db_save_total_duration_seconds_count)
drop_key(etcd_snap_db_save_total_duration_seconds_sum)
drop_key(etcd_snap_fsync_duration_seconds_bucket)
drop_key(etcd_snap_fsync_duration_seconds_count)
drop_key(etcd_snap_fsync_duration_seconds_sum)
drop_key(go_gc_duration_seconds)
drop_key(go_gc_duration_seconds_count)
drop_key(go_gc_duration_seconds_sum)
drop_key(go_goroutines)
drop_key(go_info)
drop_key(go_memstats_frees_total)
drop_key(go_memstats_gc_cpu_fraction)
drop_key(go_memstats_gc_sys_bytes)
drop_key(go_memstats_heap_idle_bytes)
drop_key(go_memstats_heap_inuse_bytes)
drop_key(go_memstats_heap_objects)
drop_key(go_memstats_heap_released_bytes)
drop_key(go_memstats_heap_sys_bytes)
drop_key(go_memstats_last_gc_time_seconds)
drop_key(go_memstats_lookups_total)
drop_key(go_memstats_mallocs_total)
drop_key(go_memstats_mcache_inuse_bytes)
drop_key(go_memstats_mcache_sys_bytes)
drop_key(go_memstats_mspan_sys_bytes)
drop_key(go_memstats_next_gc_bytes)
drop_key(go_memstats_other_sys_bytes)
drop_key(go_memstats_stack_inuse_bytes)
drop_key(go_memstats_stack_sys_bytes)
drop_key(go_memstats_sys_bytes)
drop_key(go_threads)
drop_key(grpc_server_msg_received_total)
drop_key(grpc_server_msg_sent_total)
drop_key(process_resident_memory_bytes)
drop_key(process_start_time_seconds)
drop_key(process_virtual_memory_bytes)
drop_key(process_virtual_memory_max_bytes)
drop_key(promhttp_metric_handler_requests_in_flight)
drop_key(promhttp_metric_handler_requests_total)

监控视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “etcd”, 选择“Etcd 监控视图”,点击“确定”。

关键指标

Etcd 的监控指标主要包括 Server、Disk 和 Network 三大类。

  • Server 指标:描述了 Etcd 服务器的状态,包括是否有 leader、leader 切换次数、已提交和已应用的提案总数、等待提交的提案数以及失败的提案数等。
  • Disk 指标:描述了磁盘操作的状态,例如 WAL fsync 调用的延迟和后端提交操作的延迟。
  • Network 指标:描述了网络状态,包括发送和接收的字节数、发送和接收失败数以及节点间的 RTT 时间等。
指标描述单位
etcd_server_has_leader这个指标表示 Etcd 集群中是否存在 Leader。count
etcd_server_health_successetcd 服务器健康检查成功的次数count
etcd_server_health_failuresetcd 服务器健康检查失败的次数count
process_resident_memory_bytes用于表示 etcd 进程当前占用的常驻内存(resident memory)大小Bytes
etcd_server_proposals_committed_total成功提交到 Raft 日志中的提案(proposals)总数count
etcd_server_proposals_applied_total成功应用或执行(Apply)的提案(proposals)总数count
etcd_server_proposals_pending当前等待处理的提案数量count
etcd_server_proposals_failed_total失败的提案总数count
etcd_mvcc_db_total_size_in_bytes数据库的总大小Bytes
etcd_disk_wal_fsync_duration_seconds_sum当前日志执行 fsync 操作的总耗时Seconds
etcd_disk_backend_commit_duration_seconds_sum后台数据库提交操作的总耗时Seconds
etcd_network_client_grpc_received_bytes_totaletcd 服务器从客户端通过 gRPC 协议接收到的总字节数Bytes
etcd_network_client_grpc_sent_bytes_totaletcd 服务器通过 gRPC 协议发送给客户端的总字节数Bytes
etcd_server_leader_changes_seen_totalleader 的切换次数count
process_open_fds操作系统进程当前打开的文件描述符数量count
process_max_fds操作系统允许一个进程打开的最大文件描述符数量count
提案(Proposal)

Etcd 基于 Raft 实现一致性算法。在 Raft 中,任何试图更改系统状态的动作都以提案(Proposal)的形式被提出。

etcd_server_proposals_pending 表示正在等待处理的 Proposal 数量。

etcd_server_proposals_committed_total 和 etcd_server_proposals_applied_total :这两个指标分别表示成功提交到 Raft 日志中的提案数量和成功应用或执行(Apply)的提案数量。它们可以帮助监控集群处理请求的能力。如果提交和应用的提案数之间存在较大差异,可能表明集群正在处理大量请求,或者存在性能瓶颈。

etcd_server_proposals_failed_total :这个指标记录了处理失败的提案数量。提案失败可能由于多种原因,包括网络问题、集群不稳定或资源限制。监控这个指标有助于及时发现和解决影响 Etcd 集群稳定性的问题。

同步时间

etcd_disk_wal_fsync_duration_seconds_bucket 和 etcd_disk_backend_commit_duration_seconds_bucket :这两个指标反映了 Etcd 存储数据的效率,高延迟可能表明磁盘性能问题或集群过载。

WAL 日志同步时间 etcd_disk_wal_fsync_duration_seconds_bucket ,表示 WAL 日志同步到磁盘时,WAL 调用 fsync 的延迟,正常应该低于10ms,当 99 百分位的 fsync 延迟超过某个阈值(比如 100 毫秒)时触发告警。

库同步时间 etcd_disk_backend_commit_duration_seconds_bucket ,当 etcd 将其最新的增量快照提交到磁盘时,会调用 backend_commit , 正常应该低于120ms。

Leader 是否存在

etcd_server_has_leader :这个指标表示 Etcd 集群中是否存在 Leader。Leader 对于 Etcd 集群至关重要,因为它负责处理所有的写请求。0 表示不是,1表示是,如果这个值为 0,意味着集群中没有 Leader,这将导致写操作无法进行,整个集群不可用。因此,监控这个指标可以帮助及时发现集群是否处于正常工作状态。

Leader 切换频次

etcd_server_leader_changes_seen_total 指标,记录了 leader 的切换次数。当 Etcd 通过 Raft 协议选举出 leader 后,leader 应该是固定不变的。频繁的 Leader 切换可能是由于网络问题或集群不稳定造成的,这会影响集群的性能和稳定性。监控这个指标有助于发现潜在的网络问题或集群健康问题。生产环境如果在一个小时内发生超过三次的 leader 切换,需要触发告警。

监控器(告警)

通过合理配置监控器,可以及时处理 etcd 故障,观测云也提供了相应的模板供客户参考使用。

Leader 监控器

值为 0 触发紧急告警。

Leader 频繁切换监控

如需更多监控器可以按照实际生产需求进行配置。

总结

总之,对 Etcd 进行可观测,是确保分布式系统稳定运行的关键步骤,观测云是一款实用的可观测产品,建议把生产环境中 Etcd 接入观测云,使用观测云的监控器对重要指标进行监控告警。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI运动抽取转3D动画

用的Wonder Studio&#xff0c;不免费哈&#xff0c;也不能试了&#xff0c;都要钱。只能看别人的经验。 网址https://wonderdynamics.com/ 先别激动&#xff0c;参考别人的评论 登录后&#xff08;google登录&#xff09;界面如下 收费情况 视频教程 https://www.youtube.co…

【记录】VSCode|自用设置项

文章目录 1 基础配置1.1 自动保存1.2 编辑区自动换行1.3 选项卡换行1.4 空格代替制表符1.5 开启滚轮缩放 2 进阶设置2.1 选项卡不自我覆盖2.2 选项卡限制宽度2.3 选项卡组限制高度2.4 字体设置2.5 字体加粗2.6 侧边栏2.7 沉浸式代码模式 Zen Mode2.8 设置 Zen 模式的选项卡组 3…

深入了解 kotlinx-datetime:配置与使用指南

深入了解 kotlinx-datetime&#xff1a;配置与使用指南 在Kotlin多平台开发中&#xff0c;处理日期和时间是常见的需求。kotlinx-datetime库提供了强大且简洁的API来帮助开发者应对这一挑战。本文将详细介绍如何配置kotlinx-datetime库&#xff0c;并通过生动的示例演示其核心…

远程:HTTP基本身份验证失败。提供的密码或令牌不正确,或者您的账户启用了两步验证,您必须使用个人访问令牌而不是密码。

问题描述&#xff1a; remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token insteadof a password. See http://gitlab.cnovit.com/help/topics/git/troubleshooting…

从 Hadoop 迁移到数据 Lakehouse 的架构师指南

从 Hadoop 到数据湖仓一体架构的演变代表了数据基础架构的重大飞跃。虽然 Hadoop 曾经以其强大的批处理能力统治着大数据领域&#xff0c;但如今的组织正在寻求更敏捷、更具成本效益和现代化的解决方案。尤其是当他们越来越多地开始实施 AI 计划时。根本没有办法让 Hadoop 为 A…

C++ 类与对象(中) 默认成员函数

我们知道在类中&#xff0c;有成员变量和成员函数&#xff0c;我们可以通过创造不同的成员函数来实现这个类不同的功能&#xff0c;如果我们创造一个类&#xff0c;却不实现它的成员函数会如何呢&#xff1f;这个就涉及到类中的默认成员函数的概念了。但在本文我们主要介绍以下…

【Dash】feffery_antd_components 按钮组件的应用

一、feffery_antd_componenet 中的 AntdFloatButton 和 AntdFloatButtonGroup AntdFloatButton 和 AntdFloatButtonGroup 是两个用于创建悬浮按钮和悬浮按钮组的组件。 AntdFloatButton 是单个悬浮按钮组件&#xff0c;它提供了多种属性来定义按钮的外观及行为。AntdFloatBut…

WebView渲染异常导致闪退解决方案

背景&#xff1a; App主页面使用了大量WebView容器(10个以上)显示图表信息&#xff0c;最新发现bugly上面出现一些关于浏览器Native Crash&#xff0c;如下&#xff1a; 经排查&#xff0c;是WebView渲染失败导致Crash&#xff0c;可以通过webView.loadUrl("chrome://cra…

Pycharm搭配miniConda(Anaconda的轻量版本)建立虚拟环境管理不同项目不同依赖

需求 pip安装的版本会在全局环境下生效,导致不用的项目使用的是同一套环境,容易出现别人的项目跑的好好的,到了自己电脑就不能跑的问题需求 1.不同的项目可以设置不同的环境,同时支持自动切换环境2.便捷,轻量化管理当前的环境 如果可以,最好有一个可视化的平台,anaconda倒是支…

图像分割-DeepLab

DeepLabV3源码链接&#xff1a;https://github.com/bubbliiiing/deeplabv3-plus-pytorch&#xff08;打不开私信我获取&#xff09; 一、简介 一般的模型如Unet一般用于医学领域&#xff0c;小目标&#xff0c;如细胞分割。 为了增大感受野&#xff08;从而更好的获得全局特征…

docker 镜像详解

Docker镜像是一种轻量级、可移植的软件打包格式&#xff0c;它包含了运行应用程序所需的一切&#xff0c;是构建和分发应用程序的基础。以下是对Docker镜像的详细解释&#xff1a; 一、镜像的定义 镜像本质上是一个只读文件&#xff0c;包含了文件系统、源码、库文件、依赖、…

wordcloud 字体报错

wordcloud 字体报错 词云库报错&#xff1a;Only supported for TrueType fonts字体文件问题pillow版本的问题wordcloud版本问题&#xff08;我的最终解决方案&#xff09; 词云库报错&#xff1a;Only supported for TrueType fonts 字体文件问题 解决方法 写绝对路径 &…

【CSS3】css开篇基础(4)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

二百七十一、Kettle——ClickHouse增量导入数据清洗记录表

一、目的 在完成错误数据表任务后&#xff0c;需要对每条错误数据的错误字段及其字段值进行分析 Hive中原有SQL语句和ClickHouse现有SQL语句很大不同 二、Hive中原有代码 2.1 表结构 --31、静态排队数据清洗记录表 create table if not exists hurys_db.dwd_data_clean_…

洞察前沿趋势!2024深圳国际金融科技大赛——西丽湖金融科技大学生挑战赛技术公开课指南

在当前信息技术与“互联网”深度融合的背景下&#xff0c;金融行业的转型升级是热门话题&#xff0c;创新与发展成为金融科技主旋律。随着区块链技术、人工智能技术、5G通信技术、大数据技术等前沿科技的飞速发展&#xff0c;它们与金融领域的深度融合&#xff0c;正引领着新型…

uniapp:sqlite最详细教程,小白可直接粘贴复制

新建uniapp项目,需要4个页面, loading 启动页:打开数据库,判断数据表是否存在,表内是否有数据,创建数据表的逻辑。 register 注册页:数据表已存在,但是没有数据,需要进入该页面注册第一条数据 index 首页:展示数据列表内的数据,可修改默认,添加新数据 edit 编辑:编…

linux面试题复习

前言 现在只是初版&#xff0c;很多格式我还没有改好&#xff0c;会慢慢修改订正。 可能用到的网址&#xff1a;在线 EXCEL 到 MARKDOWN 转换器。 参考了很多网上的面试题和外网上的面试题&#xff1a; 参考文档&#xff1a; 程序员的50大Linux面试问题及答案 Top 60 Linux …

机床发那科转profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 网关采集发那科机床数据 2 5 用PROFINET IO协议转发数据 5 6 案例总结 7 1 案例说明 设置网关采集发那科机床数据把采集的数据转成profinet IO协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX网关是协议转换网关&a…

【安当产品应用案例100集】024-BYOE及BYOK在IaaS场景中的应用

在云计算环境中&#xff0c;尤其是涉及到敏感数据时&#xff0c;企业用户可能会选择自带加密工具或密钥&#xff08;即BYOE或BYOK&#xff09;&#xff0c;以确保数据在传输和存储过程中的安全性。这种方式可以防止云服务提供商访问或泄露加密数据&#xff0c;增强数据保护。 …

OpenCV视觉分析之目标跟踪(1)计算密集光流的类DISOpticalFlow的介绍

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 这个类实现了 Dense Inverse Search (DIS) 光流算法。更多关于该算法的细节可以在文献 146中找到。该实现包含了三个预设参数集&#xff0c;以提…