Kafka 集群架构与高可用方案设计(二)

Kafka 集群架构与高可用方案的优化策略

合理配置参数

在 Kafka 集群的配置中,参数的合理设置对于系统的高可用性和性能表现起着关键作用。例如,min.insync.replicas参数定义了 ISR(In-Sync Replicas,同步副本)集合中的最少副本数,它直接关系到数据的持久性和一致性 。当acks设置为all或-1时,生产者需要等待 ISR 中的所有副本都确认写操作后才认为成功,此时min.insync.replicas才会生效。如果将min.insync.replicas设置为 1,虽然系统的写入性能可能会有所提升,但数据的可靠性会降低,因为只要有一个副本(通常是 Leader 副本)确认写入,生产者就会认为写入成功,一旦这个唯一确认的副本出现故障,数据就有可能丢失。为了提高数据的可靠性,建议将min.insync.replicas设置为大于 1 的值,比如在一个三副本的集群中,可以将其设置为 2,这样可以确保至少有两个副本同步了数据,即使其中一个副本出现故障,数据仍然是安全的。但如果设置过高,比如将min.insync.replicas设置为等于副本数,一旦有任何一个副本出现故障,ISR 中的副本数量就会低于min.insync.replicas的要求,此时生产者将无法写入数据,从而降低了系统的可用性。因此,在设置min.insync.replicas时,需要根据实际的业务需求和数据持久性要求来进行权衡。

unclean.leader.election.enable参数则控制着 Kafka 是否可以选举非 ISR 中的副本为 Leader。在默认情况下,该参数的值为false,这意味着只有 ISR 中的副本才有资格被选为新的 Leader,这样可以保证数据的一致性,因为 ISR 中的副本都是与 Leader 保持同步的。但在某些极端情况下,比如 ISR 中的所有副本都宕机了,如果unclean.leader.election.enable设置为false,那么该分区将无法选举出新的 Leader,从而导致服务不可用。而将其设置为true,虽然可以提高 Kafka 的可用性,使得分区 Leader 副本一直存在,不至于停止对外提供服务,但会降低数据的可靠性,因为非 ISR 中的副本可能与 Leader 副本的数据不一致,选举这样的副本为 Leader 可能会导致数据丢失。因此,在决定是否启用unclean.leader.election.enable时,需要仔细评估业务对数据一致性和可用性的要求。

定期监控与维护

定期监控与维护是确保 Kafka 集群持续稳定运行的关键措施。通过 Kafka 提供的丰富监控指标和详细日志,我们可以深入了解集群的运行状态,及时发现并解决潜在问题。Kafka 的 JMX(Java Management Extensions)接口为我们提供了一个强大的监控工具,我们可以使用 JConsole、Java Mission Control 等工具连接到 Kafka Broker 的 JMX 端口,实时监控各种关键指标,如吞吐量、延迟、磁盘使用率、网络连接数等。这些指标就像是 Kafka 集群的 “健康指标”,通过对它们的监测,我们可以及时发现集群中可能存在的性能瓶颈或故障隐患。例如,如果发现某个 Broker 节点的磁盘使用率持续过高,可能是由于该节点上存储的消息过多,导致磁盘空间不足,这时就需要及时清理过期的消息,或者增加磁盘空间,以避免因磁盘满而导致的服务异常。

除了使用 JMX 监控,还可以借助第三方监控工具,如 Prometheus 和 Grafana。Prometheus 是一个流行的开源监控解决方案,它可以高效地收集和存储 Kafka 的指标数据,而 Grafana 则是一个功能强大的数据可视化平台,能够与 Prometheus 等数据源集成,帮助我们创建自定义的 Kafka 监控仪表盘。通过这些工具,我们可以直观地看到 Kafka 集群的各项指标的变化趋势,设置合理的阈值,当指标超出阈值时及时发出报警,以便及时采取措施进行处理。例如,当发现某个 Topic 的消息堆积数量持续增加,超过了设定的阈值时,就需要检查消费者的消费速度是否过慢,或者是否存在消费者故障等问题,及时调整消费者的配置或修复故障,以避免消息堆积过多导致的系统性能下降。

定期检查 Kafka 集群的错误日志也是非常重要的。错误日志中包含了大量关于集群运行过程中出现的问题的信息,通过对这些信息的分析,我们可以快速定位故障原因,并采取相应的解决方案。比如,如果在日志中发现频繁的 Leader 选举记录,可能是由于某些 Broker 节点的稳定性问题导致的,这时就需要检查这些节点的硬件状态、网络连接等,找出问题所在并进行修复,以减少 Leader 选举的次数,提高系统的稳定性。

多数据中心部署

在当今复杂多变的分布式系统环境下,为了进一步提升系统的整体可用性,多数据中心部署 Kafka 集群成为了一种重要的方案。通过在不同的数据中心部署 Kafka 集群,我们可以实现跨区域容灾,确保在某个数据中心发生故障时,系统仍然能够正常运行。例如,在一个跨国企业的业务系统中,可能会在亚洲、欧洲和美洲的数据中心分别部署 Kafka 集群。当亚洲的数据中心因为自然灾害、网络故障或其他原因无法正常工作时,欧洲和美洲的数据中心可以继续承担业务的消息处理任务,保证业务的连续性。

多数据中心部署的 Kafka 集群有多种模式,其中比较常见的有 Hub 架构、双活架构和主备架构。Hub 架构是指一个中心的 Kafka 集群作为中央调度,对应多个本地的 Kafka 集群。这种架构的优点是只有本地用到的数据就在本地使用,多个数据中心需要用到的数据就放在中央,从本地同步到远程的次数也就只有一次,这样读取的时候,需要本地的就本地读,否则远程读,消费者只需要从一个集群读数据即可。但缺点是一个数据中心的不能访问另一数据中心的数据。双活架构则是多个集群之间保持数据同步,当一个集群挂掉时,可以直接转向另外一个,而且可以就近提供服务。然而,这种架构在集群之间同步数据时需要解决如何避免冲突、保证数据一致性的问题。主备架构有两个集群,平常只用主集群,另外一个集群只有当主集群出了问题才用。这种架构的优点是不需要担心数据访问和冲突问题,但存在一个集群的资源浪费,同时需要考虑备份的量的问题,以及恢复的过程中是否可以重复数据或者丢失部分数据 。

在实际应用中,需要根据业务的具体需求和特点来选择合适的多数据中心部署模式。同时,还需要考虑数据同步、网络延迟、数据一致性等多方面的问题,通过合理的配置和优化,充分发挥多数据中心部署的优势,提高 Kafka 集群的高可用性和可靠性,为企业的关键业务提供坚实的支持。

实际案例分析

案例背景介绍

某大型电商平台在业务飞速发展的过程中,面临着海量订单数据处理和实时数据分析的巨大挑战。每天,该平台产生的订单数量高达数百万,这些订单数据不仅包含了订单的基本信息,如订单编号、商品详情、用户信息、支付金额等,还涉及到订单的状态变化,如创建、支付、发货、收货等。同时,平台还需要实时收集和分析用户在浏览商品、添加购物车、搜索商品等过程中产生的行为数据,以优化用户体验、精准推荐商品和制定营销策略。

面对如此庞大的数据规模和复杂的业务需求,该电商平台对系统的性能和可靠性提出了极高的要求。在数据处理的及时性方面,要求能够在秒级甚至毫秒级的时间内完成订单数据的处理和入库,确保订单状态的及时更新,避免因为处理延迟导致用户体验下降或业务流程受阻。在数据的可靠性上,任何订单数据和用户行为数据都不能丢失,因为这些数据对于平台的业务分析、运营决策以及用户权益保障都至关重要。而且,随着业务的不断增长,系统需要具备良好的扩展性,能够轻松应对数据量的持续攀升。

集群架构搭建

为了满足上述业务需求,该电商平台搭建了一个规模庞大且精心设计的 Kafka 集群。在这个集群中,总共部署了 10 个 Broker 节点,这些节点分布在不同的服务器上,通过高速网络相互连接,共同构成了一个强大的消息处理网络。每个 Broker 节点都配备了高性能的 CPU、大容量的内存和高速的磁盘存储,以确保能够高效地处理和存储海量的消息数据。

在 Topic 的设计上,根据业务的不同类型和功能,创建了多个针对性的 Topic。例如,专门创建了 “orders” Topic 用于存储订单相关的数据,“user_behavior” Topic 用于收集用户行为数据,“system_logs” Topic 用于记录系统运行过程中的各种日志信息等。每个 Topic 都根据数据量和处理需求进行了细致的 Partition 划分。以 “orders” Topic 为例,由于订单数据量巨大且对处理的并行性要求高,将其划分为 50 个 Partition,这样可以充分利用多个 Broker 节点的资源,实现订单数据的并行处理,大大提高处理效率。

在副本配置方面,为了确保数据的高可靠性和容错性,每个 Partition 都设置了 3 个副本。这些副本分布在不同的 Broker 节点上,形成了数据冗余。当某个 Broker 节点出现故障时,其他节点上的副本可以迅速接替工作,保证数据的完整性和服务的连续性。例如,如果 “orders” Topic 的某个 Partition 的 Leader 副本所在的 Broker 节点突然宕机,Kafka 会立即从该 Partition 的其他两个 Follower 副本中选举出一个新的 Leader 副本,继续处理订单数据的读写请求,整个选举过程和切换过程对于上层应用来说几乎是透明的,不会对业务的正常运行产生明显影响。

高可用方案实施

在这个电商平台的 Kafka 集群中,实施了一系列严格且有效的高可用方案。在 ISR 配置方面,根据业务对数据一致性和可用性的要求,合理设置了相关参数。例如,将min.insync.replicas参数设置为 2,这意味着在 ISR 集合中必须至少有 2 个副本与 Leader 副本保持同步,生产者才会认为消息发送成功。这样的设置在保证数据一致性的同时,也提高了系统的容错能力。当某个 Follower 副本由于网络故障或其他原因暂时无法与 Leader 副本同步时,只要 ISR 集合中还有另一个副本保持同步,系统就可以继续正常运行,不会影响消息的生产和消费。

在故障转移策略上,Kafka 的自动故障转移机制发挥了关键作用。当某个 Broker 节点发生故障时,Controller 会迅速检测到这一情况,并立即启动新的 Leader 选举流程。在选举过程中,Controller 会优先从 ISR 集合中选择与原 Leader 副本同步状态最好、日志偏移量最大的 Follower 副本作为新的 Leader。例如,当 “user_behavior” Topic 的某个 Partition 的 Leader 副本所在的 Broker 节点出现故障时,Controller 会从该 Partition 的 ISR 集合中的两个 Follower 副本中,选择日志偏移量最大的那个副本作为新的 Leader。一旦新的 Leader 选举成功,Controller 会及时更新 Kafka 集群的元数据信息,并通知所有的生产者和消费者。生产者在发送消息时,会根据更新后的元数据信息,将消息发送到新的 Leader 副本所在的 Broker;消费者在拉取消息时,也会根据新的元数据找到对应的 Leader 副本进行拉取。

通过实施这些高可用方案,该电商平台的 Kafka 集群在面对各种故障和异常情况时,都能够保持稳定的运行状态。在过去的一年中,尽管经历了多次服务器硬件故障、网络波动等问题,但 Kafka 集群的可用性始终保持在 99.9% 以上,几乎没有出现因为集群故障导致的业务中断情况。这不仅保障了订单数据和用户行为数据的可靠传输和处理,也为电商平台的实时数据分析和业务决策提供了坚实的数据基础,有力地支撑了平台业务的持续高速发展,提升了用户体验和平台的市场竞争力。

总结与展望

总结 Kafka 集群架构与高可用方案的核心要点

Kafka 集群架构凭借其精妙的设计和强大的功能,在分布式系统领域占据着举足轻重的地位。Broker 节点作为集群的基础单元,承担着消息存储与处理的重任,多个 Broker 协同工作,构建起了一个强大的消息处理网络。Topic 与 Partition 的设计,实现了消息的分类管理和物理分割,不仅方便了消息的组织和处理,还为 Kafka 的高吞吐量和水平扩展提供了有力支持。Replication 副本机制则是数据可靠性和高可用性的坚实保障,通过在不同 Broker 节点上存储多个副本,确保了即使部分节点出现故障,数据也不会丢失,服务依然能够正常运行。

在消息的生产和消费流程中,Producer 和 Consumer 扮演着关键角色。Producer 通过合理的分区策略将消息发送到指定的 Partition,确保消息能够被高效地存储和处理;Consumer 则通过订阅 Topic,从 Partition 中拉取消息进行处理,实现了消息的消费和业务逻辑的执行。而 Consumer Group Management 和 Metadata Service 则分别负责管理消费者组和维护集群的元数据信息,为 Kafka 集群的稳定运行提供了重要的支持和保障。

Kafka 的高可用方案设计同样亮点纷呈。分区副本机制通过多副本的方式,保证了数据的冗余和一致性,即使某个副本出现故障,其他副本也能继续提供服务。ISR 机制则通过动态管理与 Leader 副本保持同步的副本集合,确保了在 Leader 副本发生故障时,能够从 ISR 集合中选举出一个可靠的新 Leader,从而保证数据的一致性和系统的可用性。自动故障转移机制则是 Kafka 高可用性的最后一道防线,当 Leader 副本出现故障时,能够迅速自动地选举出新的 Leader,确保服务的连续性,这个过程对于用户来说几乎是透明的,极大地提高了系统的可用性和稳定性。

为了进一步提升 Kafka 集群的性能和可靠性,我们还可以采取一系列优化策略。合理配置参数,如min.insync.replicas、unclean.leader.election.enable等,可以根据实际业务需求,在数据一致性和可用性之间找到最佳平衡点。定期监控与维护,通过 Kafka 提供的丰富监控指标和详细日志,及时发现并解决潜在问题,确保集群的稳定运行。多数据中心部署则可以实现跨区域容灾,进一步提升系统的整体可用性,确保在某个数据中心发生故障时,系统仍然能够正常运行。通过这些优化策略的实施,Kafka 集群能够更好地满足企业在不同场景下的业务需求,为企业的数字化转型提供强大的技术支持。

展望未来 Kafka 在分布式系统中的发展趋势

随着分布式系统技术的不断演进和业务需求的日益增长,Kafka 作为分布式消息系统的佼佼者,未来在技术创新和应用场景拓展方面都有着广阔的发展空间。

在技术创新方面,Kafka 有望在多个关键领域取得突破。Kafka 的流处理能力将得到进一步增强,KSQL 和 Kafka Streams 作为 Kafka 提供的流处理框架,未来会有更多的增强功能和性能优化。例如,KSQL 可能会支持更复杂的 SQL 语法和函数,能够处理更加复杂的流处理任务,如实时数据聚合、窗口计算、数据关联等,这将使得开发人员能够更方便地对实时数据进行处理和分析,为企业的实时决策提供更强大的数据支持。

随着 Kubernetes 等容器编排工具的普及,Kafka 在云原生环境中的部署和管理将变得更加容易。未来,Kafka 对 Kubernetes 及其他云原生平台的支持将更加完善,包括更简单的部署方式、更高效的资源利用以及更强的弹性扩展能力。这将使得企业能够更轻松地将 Kafka 集成到云原生架构中,充分利用云原生技术的优势,实现应用的快速部署、弹性扩展和高效管理。

为了满足多租户环境下的应用需求,Kafka 将继续增强其安全性和隔离性。通过更细粒度的访问控制和配额管理,Kafka 可以确保不同租户之间的数据和资源隔离,防止数据泄露和资源滥用。同时,Kafka 还将提供更好的审计和监控功能,便于管理员对多租户环境进行管理和维护,保障系统的安全稳定运行。

运维和监控是 Kafka 使用中的重要方面,未来 Kafka 将继续提升其运维和监控工具的能力。例如,Kafka Manager、Confluent Control Center 等工具的功能将得到增强,能够提供更全面、更直观的集群管理和监控功能。同时,Kafka 与 Prometheus、Grafana 等主流监控系统的集成也将更加紧密,实现对 Kafka 集群的实时监控和报警,帮助运维人员及时发现并解决问题,确保集群的高效运行。

Kafka 的存储引擎也在不断演进,分层存储(Tiered Storage)技术是一个重要的发展方向。通过将数据分层存储到不同的存储介质上,如本地磁盘和云存储,Kafka 可以根据数据的访问频率和重要性,将热点数据存储在高速的本地磁盘上,将冷数据存储在成本较低的云存储上,从而降低存储成本并提高存储效率,更好地满足企业对大规模数据存储的需求。

在应用场景拓展方面,Kafka 将在更多领域发挥重要作用。随着物联网(IoT)的快速发展,大量的设备数据需要进行实时处理和分析。Kafka 凭借其高吞吐量、低延迟的特性,能够很好地满足物联网场景下对数据处理的需求,未来有望在物联网领域得到更广泛的应用。例如,在智能家居系统中,Kafka 可以实时收集和处理各种设备的状态数据、用户的操作数据等,为用户提供智能化的家居体验。

在边缘计算场景中,Kafka 也将大有可为。边缘计算强调在数据源附近进行数据处理,以减少数据传输延迟和带宽消耗。Kafka 可以在边缘节点上部署,实现对边缘数据的实时采集、处理和转发,为边缘计算提供强大的消息处理能力。例如,在工业自动化场景中,Kafka 可以实时处理来自各种传感器和设备的数据,实现设备的实时监控和故障预警。

Kafka 还可能在人工智能、区块链等新兴领域与相关技术进行深度融合。在人工智能领域,Kafka 可以作为数据管道,将训练数据实时传输给人工智能模型,实现模型的实时训练和更新;在区块链领域,Kafka 可以用于区块链节点之间的消息传递和数据同步,提高区块链系统的性能和可扩展性。这些新兴领域的应用拓展,将进一步推动 Kafka 技术的发展和创新,为企业创造更多的价值。

Kafka 集群架构与高可用方案的设计和优化是一个持续演进的过程。作为技术爱好者和从业者,我们应保持敏锐的技术洞察力,紧跟 Kafka 的发展步伐,不断学习和探索新的技术和应用场景,将 Kafka 的优势充分发挥出来,为分布式系统的发展贡献自己的力量。无论是在大数据处理、实时流计算,还是在新兴的物联网、边缘计算等领域,Kafka 都有着巨大的潜力和广阔的应用前景,让我们共同期待 Kafka 在未来能够创造更多的精彩!

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

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

相关文章

47-Oracle ASH报告解读

上一期生成了ASH报告后,就需要解读报告关键信息。ASH的使用可以快速定位瞬时性能问题。生产环境的场景时间紧、任务重,但是必须要结合具体业务分析,同时借助其他工具做报告做趋势分析。 一、ASH 技术原理​ ​1. 核心机制​ ​采样原理​&a…

“本地化思维+模块化体验”:一款轻量数据中心监控系统的真实测评

“本地化思维模块化体验”:一款轻量数据中心监控系统的真实测评 在数据中心运维逐步精细化的今天,一款真正贴合本地用户习惯、设计有温度的系统并不多见。近期体验了一款功能全面、逻辑清晰的监控平台,给人留下了深刻印象。并不是广。今天就从…

词编码模型有哪些

词编码模型有哪些 词编码模型在高维向量空间的关系解析与实例说明 如Word2Vec、BERT、Qwen等 一、高维向量空间的基础概念 词编码模型(如Word2Vec、BERT、Qwen等)的核心是将自然语言符号映射为稠密的高维向量,使语义相近的词汇在向量空间中位置接近。以Qwen模型为例,其…

elementui el-select 获取value和label 以及 对象的方法

获取 el-select 的 value 和 label 值 在 Element UI 的 el-select 组件中,可以通过以下方法获取选项的 value 和 label 值。 1、绑定 v-model 获取 value el-select 通常通过 v-model 绑定 value 值,直接访问绑定的变量即可获取当前选中的 value。…

树莓派与嵌入式系统实验报告

一、Linux 系统编译工具链实践:mininim 源码编译 虚拟机 Ubuntu 编译流程 环境配置问题 编译时遇到虚拟机无法联网的情况,通过连接个人热点解决(校园网限制导致无法访问外部资源)。 执行 ./bootstrap 时报错 gnulib-tool: command…

IDEA部署redis测试

新建springboot,项目改为:testredis E:\ideaproject\testredis\src\main\java\org\example\testredis\TestredisApplication.java 代码为: package org.example.testredis;import org.springframework.boot.SpringApplication; import org.…

旅游服务礼仪实训室:从历史演进到未来创新的实践探索

一、旅游服务礼仪实训室的历史演进:从礼制规范到职业化培养 旅游服务礼仪实训室的建设并非一蹴而就,其发展历程与人类对礼仪认知的深化及职业教育体系的完善密切相关。 1. 古代礼仪教育的萌芽 礼仪作为社会行为规范,最早可追溯至中国夏商周…

Could not find a declaration file for module ‘..XX‘.

1. 添加 Vue 声明文件 如果您还没有为 .vue 文件创建类型声明,可以通过创建一个新的类型声明文件来解决该问题。 步骤: 在您的项目根目录下创建一个名为 shims-vue.d.ts 的文件(您可以选择其他名称,但建议使用常见名称以便于识…

OpenCV CUDA模块设备层-----反正切(arctangent)函数atan()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对输入的 uchar1 像素值(范围 [0, 255]),先归一化到 [0.0, 1.0] 浮点区间,然后计算其反正切值 at…

java中常见的排序算法设计介绍

排序算法 复杂度原地排序冒泡排序算法逻辑时间复杂度:最好O(n),最坏和平均O(n^2)冒泡排序:稳定性算法 选择排序算法逻辑时间复杂度:最好,最坏和平均都是O(n^2)选择排序:不稳定性算法 插入排序算法逻辑时间复杂度:最好O…

深度学习系列81:MCP快速上手

MCP 是一种开放协议,通过标准化的服务器实现,使 AI 模型能够安全地与本地和远程资源进行交互。MCP 可帮助你在 LLM 之上构建智能代理和复杂的工作流。MCP 采用客户端-服务器架构,主机应用程序可以连接到多个服务器。 这里用个demo展示一下如何…

【Python机器学习(一)】NumPy/Pandas手搓决策树+使用Graphviz可视化(以西瓜书数据集为例)

下题来源于笔者学校的《模式识别与机器学习》课程的作业题,本文将通过使用NumPy处理数学运算,Pandas处理数据集,Graphviz实现决策树可视化等Python库来实现决策树算法及其格式化。 导入用到的Python库: import numpy as np import pandas as pd from graphviz import Digr…

react-activation 组件级缓存解决方案

文章目录 一、KeepAlive 组件二、AliveScope 容器三、useAliveController Hook四、生命周期五、完整示例 react-activation 主要解决 React 项目中的「页面缓存」需求(是第三方库&#xff0c;非React 官方)&#xff0c;类似于 Vue 中的 <KeepAlive>&#xff1a; 功能说明…

CentOS 7内核升级方案

关于升级 CentOS 7 系统内核至 4.19 版本的可执行升级方案,可根据实际情况进行调整和完善,希望能对大家有所帮助: 一、升级背景与目的 随着业务的发展和系统稳定性的要求,当前 CentOS 7 系统所使用的内核版本 3.10.0-1160.el7.x86_64 已经无法满足部分新功能需求以及面临…

树莓派实验实践记录与技术分析

一、内核驱动开发&#xff1a;hello 模块实现 驱动程序代码 #include <linux/init.h> #include <linux/module.h> static int __init hello_init(void) { printk(KERN_INFO "hello kernel\n"); return 0; } module_init(hello_init); static void …

【秦九绍算法】小红的 gcd

题目 牛客网&#xff1a;小红的 gcd 题目分析 我们知道&#xff0c;求gcd就用欧几里得算法&#xff08;辗转相除法&#xff09;&#xff1a;gcd(a,b)gcd(b,a mod b)。但是这题的a非常大&#xff0c;最大是一个1e6位数&#xff0c;无法使用任何数据类型存储。如果使用高精度…

AWS服务监控之EC2内存监控

首先在IAM里找到角色&#xff0c;创建角色&#xff0c;选择EC2 然后在被监控的机器上安装cloudwatch-agent 官方链接在本地服务器上安装 CloudWatch 代理 - Amazon CloudWatch wget https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-a…

鸿蒙 ArkWeb 和 H5混编开发

ArkWeb Web 相关标准技术(HTML/CSS/JS)&#xff0c;是业内支持性最广泛的技术&#xff0c;可以在最广泛的平台下实现“一次编写到处运行”&#xff1b;大部分对性能无需极致要求的应用页面&#xff0c;都可以使用 Web 技术来实现。 鸿蒙 ArkWeb Kit&#xff08;方舟 Web&…

设计模式-迪米特法则(Law of Demeter, LoD)

迪米特法则&#xff08;Law of Demeter, LoD&#xff09; 别名&#xff1a;最少知识原则&#xff08;Least Knowledge Principle&#xff09; 核心思想&#xff1a;一个对象应尽可能少地与其他对象发生交互&#xff0c;只与直接的朋友&#xff08;成员变量、方法参数、方法返回…

python获取AB直线间任意一点经纬度

获取AB直线间任意一点经纬度 1、目标 已知A点经纬度,距离;B点经纬度,距离,如果C点在AB之间,且知道C点距离,求C点的经纬度信息。 目标:在AB这条直线上,根据给定的距离(从A点开始沿直线到某点的距离)来求该点的经纬度。 2、方法 首先计算AB的总长度(大圆距离),…