13.云原生之常用研发中间件部署

云原生专栏大纲

文章目录

    • mysql主从集群部署
    • mysql高可用集群
      • 高可用互为主从架构
        • 互为主从架构
        • 如何实现
        • 主主复制中若是两台master上同时出现写操作可能会出现的问题
        • 该架构是否存在问题?
      • heml部署mysql高可用集群
    • nacos集群部署
      • 官网文档部署nacos
      • helm部署nacos
    • redis集群部署
      • 主从哨兵部署
      • redis cluster部署
      • 安装reids客户端redisinsight
    • zk集群部署
    • kafka集群部署
    • kafka可视化控制台
    • es集群部署
    • rocketmq集群部署
    • minio集群部署
    • SkyWalking部署
      • 使用 Docker Helm 存储库 (>= 4.3.0) 安装已发布的版本
      • 使用 master 分支安装 SkyWalking 的开发版本
    • MongoDB部署

该章节主要讲述helm安装研发常用环境,目前很多厂商都提供组件的helm安装支持,使用helm能大大降低部署难度。

mysql主从集群部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索mysql部署,配置参考
  3. 查看部署情况

image.pngimage.png
image.png

mysql高可用集群

高可用互为主从架构

互为主从架构

mysql基于主从复制可以实现互为主从,若是两个mysql都对外提供写服务可能出现数据冲突问题。为避免写冲突,master只会有一个对外提供写服务,采用keepalived+mysql实现互为主从架构。

互为主从的架构通常称为主主复制(Master-Master Replication)或双主复制(Dual-Master Replication)。在这种架构中,两个或多个 MySQL 实例充当主服务器,并且彼此互为对方的从服务器。
以下是主主复制的基本工作原理:

  1. 双向复制:每个主服务器都可以接收写操作,并将这些写操作记录到自己的二进制日志中。同时,它也会将二进制日志事件发送给其他主服务器,以便它们可以复制这些写操作到自己的数据库中。
  2. 数据同步:每个主服务器都会将其他主服务器发送的二进制日志事件应用到自己的数据库中,从而保持数据的同步。这样,每个主服务器都包含了完整的数据集,并且可以独立地处理读和写操作。
  3. 冲突解决:在主主复制中,由于每个主服务器都可以接收写操作,可能会发生冲突。例如,如果两个主服务器同时接收到对同一行数据的更新操作,那么就会发生冲突。解决冲突的方法可以通过配置冲突检测和解决策略,例如使用时间戳或自定义逻辑来确定哪个写操作应该优先。

主主复制的优点包括:

  • 冗余备份:每个主服务器都具有完整的数据集,可以作为其他主服务器的冗余备份,提供高可用性和数据冗余。
  • 读写负载均衡:由于每个主服务器都可以处理读和写操作,可以将读操作分发到不同的主服务器,实现读写负载均衡,提高系统的性能和扩展性。
  • 故障切换:如果一个主服务器发生故障,可以将应用程序的写操作切换到其他主服务器,从而实现故障切换,减少停机时间。

但是,主主复制也有一些注意事项和限制:

  • 冲突处理:需要仔细处理冲突,确保数据的一致性。冲突的解决策略需要根据具体的应用程序需求进行配置。
  • 网络延迟:由于主服务器之间需要相互复制数据,网络延迟可能会对性能产生影响。
  • 数据一致性:在主主复制架构中,需要确保应用程序的写操作只发送到其中一个主服务器,以避免数据不一致的情况发生。

总的来说,主主复制架构提供了更高的可用性、冗余备份和读写负载均衡。但是,它也需要仔细的配置和管理,以确保数据的一致性和冲突的解决。

如何实现

在Kubernetes(K8s)中实现Keepalived和MySQL的互为主从架构可以提供高可用性和故障转移的能力。下面是一个基本的步骤概述:

  1. 创建Kubernetes集群:首先,您需要创建一个Kubernetes集群,确保有足够的节点和资源来部署Keepalived和MySQL实例。
  2. 部署Keepalived:使用Kubernetes的Deployment或StatefulSet对象,部署Keepalived实例。Keepalived是一个开源的高可用性解决方案,可以用于实现虚拟IP(VIP)的故障转移和健康检查。您可以配置两个Keepalived实例,一个作为主节点,另一个作为备份节点。
  3. 配置Keepalived:在Keepalived配置中,指定VIP和健康检查的目标。Keepalived将定期检查MySQL实例的健康状态,并在主节点故障时将VIP转移到备份节点。
  4. 部署MySQL实例:使用Kubernetes的Deployment或StatefulSet对象,部署两个MySQL实例,一个作为主服务器,另一个作为从服务器。在配置MySQL实例时,确保主服务器和从服务器的复制配置正确,并且它们能够连接到正确的数据库。
  5. 配置MySQL主从复制:在MySQL实例中,配置主服务器和从服务器之间的主从复制关系。确保主服务器和从服务器之间的网络连接正常,并且复制配置正确。这样,主服务器上的写操作将被异步地复制到从服务器上,实现数据的复制和同步。
  6. 测试和监控:完成部署后,进行测试以确保Keepalived和MySQL实例的故障转移和复制功能正常工作。监控Keepalived和MySQL实例的健康状态,并及时处理任何故障或问题。
主主复制中若是两台master上同时出现写操作可能会出现的问题

在主主复制中,如果两台主服务器同时接收到对同一行数据的写操作,可能会出现以下问题:

  1. 冲突数据:由于两台主服务器同时接收到写操作,它们可能会在同一行数据上进行不同的修改,导致数据冲突。这可能会导致数据不一致的情况发生,因为每个主服务器都会复制自己接收到的写操作到其他主服务器。
  2. 数据丢失:如果两台主服务器同时进行写操作,而没有进行冲突检测和解决策略,可能会导致其中一台主服务器的写操作被覆盖或丢失。这可能会导致数据的不完整性或丢失。
  3. 数据一致性问题:由于两台主服务器之间的数据复制是异步的,复制的延迟可能导致数据在两台主服务器之间不一致。如果一个主服务器上的写操作在另一个主服务器上复制之前被读取,可能会导致读取到不一致的数据。

为了解决这些问题,可以采取以下策略:

  1. 冲突检测和解决:在主主复制中,需要配置冲突检测和解决策略。这可以通过使用时间戳、自定义逻辑或其他冲突解决算法来确定哪个写操作应该优先。例如,可以使用时间戳来判断哪个写操作更早,然后应用该操作并忽略其他写操作。
  2. 分区数据:可以将数据按照一定的规则分区,确保同一行数据只在一个主服务器上进行写操作。例如,可以根据数据的某个属性或哈希值将数据分配给不同的主服务器,从而避免冲突。
  3. 应用程序层面的冲突解决:在应用程序中处理冲突,可以通过在应用程序层面实现乐观锁或悲观锁来避免数据冲突。例如,使用乐观锁机制可以在写操作之前检查数据的版本,并在写操作时进行冲突检测和解决。
该架构是否存在问题?

在Keepalived和MySQL互为主从架构中,当主服务器(Master)宕机并切换到备份服务器(Slave)时,可能会发生事务丢失的问题。这是因为MySQL的主从复制是异步的,主服务器上的事务在复制到从服务器之前可能会丢失。
以下是一些可能导致事务丢失的情况:

  1. 主服务器宕机期间的未提交事务:如果主服务器在宕机之前有未提交的事务,这些事务将无法被复制到备份服务器,因此会丢失。
  2. 主从复制延迟:即使主服务器上的事务已经提交,由于网络延迟或复制进程的延迟,从服务器可能无法立即接收到这些事务的复制。在这段延迟期间,如果主服务器宕机,那么这些已提交但尚未复制到从服务器的事务也会丢失。

为了减少事务丢失的风险,可以采取以下措施:

  1. 使用持久化存储引擎:选择适当的MySQL存储引擎,如InnoDB,它支持事务和持久化存储。这样,即使主服务器宕机,已提交的事务也会在数据库重新启动后恢复。
  2. 配置同步复制:将MySQL的主从复制配置为同步复制模式,这意味着主服务器上的事务必须在复制到从服务器之前进行确认。这样可以确保在主服务器宕机之前,已提交的事务已经复制到从服务器。
  3. 使用半同步复制:MySQL提供了半同步复制模式,它在主服务器上接收到事务后会等待至少一个备份服务器确认已接收该事务,然后才会提交。这可以进一步减少事务丢失的风险。
  4. 定期监控复制状态:实施监控和警报系统来监测主从复制的状态。如果出现复制延迟或错误,可以及时采取措施来解决问题,减少事务丢失的可能性。

需要注意的是,即使采取了上述措施,完全消除事务丢失的风险是很困难的。在高可用性和数据一致性之间需要进行权衡,根据业务需求和数据的重要性来选择适当的复制策略和措施。此外,定期备份数据并测试恢复过程也是重要的,以便在发生事务丢失或其他故障时能够快速恢复数据。

heml部署mysql高可用集群

RadonDB MySQL 是基于 MySQL 的开源、云原生、高可用集群解决方案。通过使用 Raft 协议,RadonDB MySQL 可以快速进行故障转移,且不会丢失任何事务。

参考:
在 Kubernetes 上部署 RadonDB MySQL 集群 | RadonDB 开源社区
https://github.com/radondb/radondb-mysql-kubernetes/blob/main/README_zh.md
在 KubeSphere 上部署 RadonDB MySQL 集群

kubesphere应用商店mysql兼容高可用:
image.png
官网部署失败,参考下述文档部署成功
容器化 | 在 Kubernetes 上部署 RadonDB MySQL 集群_helm radondb-CSDN博客
image.png

nacos集群部署

官网文档部署nacos

官方部署文档:Kubernetes Nacos 官网部署文档

  1. 下载官网项目
git clone https://github.com/nacos-group/nacos-k8s.git
  1. 快速部署
./quick-startup.sh# 脚本内容如下:
# 小编修改了部署namespace为nacos,数据持久化等可查看下载项目文件进行修改
echo "mysql mysql startup"
kubectl create -f ./deploy/mysql/mysql-local.yaml -n nacosecho "nacos quick startup"
kubectl create -f ./deploy/nacos/nacos-quick-start.yaml -n nacos
  1. 查看部署情况

image.png
image.png

helm部署nacos

  1. 添加应用仓库

image.png

https://ygqygq2.github.io/charts
https://charts.kubegems.io/kubegemsapp
  1. 进入项目空间,选择应用仓库

image.pngimage.png

  1. 在应用仓库中搜索nacos,点击nacos

image.png

  1. 选择nacos版本,点击下一步

image.png

  1. 修改values.yaml
mysql:enabled: true # 是否启用内部mysql,false使用外部需配置externalexternal:mysqlMasterHost: "mysql_master_host"mysqlDatabase: "nacos"mysqlMasterPort: "3306"mysqlMasterUser: "nacos"mysqlMasterPassword: "nacos"mysqlSlaveHost: "mysql_slave_host"mysqlSlavePort: "3306"architecture: replicationauth: #  修改nacosrootPassword: "nacos"database: "nacos"username: "nacos"password: "nacos"replicationUser: "replicator"replicationPassword: "replicator"
  1. 查看部署情况

image.png
image.png

  1. 服务暴露

image.png

  1. 访问测试

image.png

redis集群部署

主从哨兵部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索redis部署
  3. values.yaml配置修改,配置参考,常用配置如下:
配置项描述
architectureRedis架构。允许的值:standalone或replicationreplication
auth.enabled启用密码身份验证true
auth.sentinel在哨兵上也启用密码身份验证true
auth.passwordRedis密码“”
master.count
master.count要部署的 Redis 主实例数(实验性,需要额外配置)1
replica.replicaCount要部署的 Redis 副本数3
replica.configurationRedis副本节点的配置“”
sentinel.enabled在 Redis Pod 上使用 Redis Sentinel。false

可视化修改配置,可在右上角点击编辑YAML切换:
image.png
image.png
image.png
image.png

  1. 部署情况

image.png
image.png

redis cluster部署

Helm(bitnami)部署zookeeper和kafka集群_helm bitnami-CSDN博客

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索redis-cluster
  3. values.yaml配置修改,配置参考,常用配置如下:
cluster.nodes主节点数应始终为 >= 3,否则集群创建将失败6
cluster.replicas集群中每个主节点的副本数1
cluster.externalAccess.enabled启用对 Redis 的访问false
metrics.enabled启动边车 prometheus 导出器false
  1. helm方式部署
# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 安装
helm install -n middleware redis-cluster bitnami/redis-cluster
# 查看密码
kubectl get secret --namespace "middleware" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d
# 自定义values.yaml,https://github.com/bitnami/charts/blob/main/bitnami/redis-cluster/values.yaml# 使用自定义values.yaml更新已安装redis-cluster
helm upgrade -n middleware -f values.yaml redis-cluster


参考:

在 K8S 中快速部署 Redis Cluster & Redisinsight
https://www.cnblogs.com/hacker-linner/p/15839374.html
Helm 安装 bitnami/redis 集群模式

安装reids客户端redisinsight

镜像:redislabs/redisinsight:1.9.0
容器内部数据路径:/db
使用ks可视化方式安装,不过多介绍
image.png
image.png

zk集群部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami

  2. 搜索zookeeper部署

  3. values.yaml配置修改,配置参考,常用配置如下:
    | 名字 | 描述 | 值 |
    | — | — | — |
    | replicaCount | ZooKeeper 节点数 | 1 |
    | auth.client.enabled | 启用 ZooKeeper 客户端-服务器身份验证。它使用 SASL/Digest-MD5 | false |

  4. 查看部署情况

image.pngimage.png

kafka集群部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索kafka部署
  3. values.yaml配置修改,常用配置如下,其他参考配置参考
  4. helm命令
helm install kafka bitnami/kafka \--namespace kafka --create-namespace \--set global.storageClass=<storageClass-name> \--set kubeVersion=<theKubeVersion> \--set image.tag=3.1.0-debian-10-r22 \--set replicaCount=3 \--set service.type=ClusterIP \--set externalAccess.enabled=true \--set externalAccess.service.type=LoadBalancer \--set externalAccess.service.ports.external=9094 \--set externalAccess.autoDiscovery.enabled=true \--set serviceAccount.create=true \--set rbac.create=true \--set persistence.enabled=true \--set logPersistence.enabled=true \--set metrics.kafka.enabled=false \--set zookeeper.enabled=true \--set zookeeper.persistence.enabled=true \--wait
  • –namespace kafka --create-namespace: 安装在 kafka namespace, 如果没有该 ns 就创建;
  • global.storageClass= 使用指定的 storageclass
  • kubeVersion= 让 bitnami/kafka helm 判断是否满足版本需求,不满足就无法创建
  • image.tag=3.1.0-debian-10-r22: 20220219 的最新镜像,使用完整的名字保证尽量减少从互联网 pull 镜像;
  • replicaCount=3: kafka 副本数为 3
  • service.type=ClusterIP : 创建 kafka service, 用于 k8s 集群内部,所以 ClusterIP 就可以
  • –set externalAccess.enabled=true --set externalAccess.service.type=LoadBalancer --set externalAccess.service.ports.external=9094 --set externalAccess.autoDiscovery.enabled=true --set serviceAccount.create=true --set rbac.create=true 创建用于 k8s 集群外访问的 kafka-<0|1|2>-external 服务 (因为前面 kafka 副本数为 3)
  • persistence.enabled=true: Kafka 数据持久化,容器中的目录为 /bitnami/kafka
  • logPersistence.enabled=true: Kafka 日志持久化,容器中的目录为 /opt/bitnami/kafka/logs
  • metrics.kafka.enabled=false 不启用 kafka 的监控 (Kafka 监控收集数据是通过 kafka-exporter 实现的)
  • zookeeper.enabled=true: 安装 kafka 需要先安装 zookeeper
  • zookeeper.persistence.enabled=true: Zookeeper 日志持久化,容器中的目录为:/bitnami/zookeeper
  • –wait: helm 命令会一直等待创建的结果
  1. Kafka 测试验证

创建kafka-client pod:

kubectl run kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.1.0-debian-10-r22 --namespace kafka --command -- sleep infinity

进入到 kafka-client 中,运行如下命令测试:

kafka-console-producer.sh  --broker-list kafka-0.kafka-headless.kafka.svc.cluster.local:9092  --topic test
kafka-console-consumer.sh --bootstrap-server kafka-0.kafka-headless.kafka.svc.cluster.local:9092  --topic test --from-beginningkafka-console-producer.sh  --broker-list 10.109.205.245:9094  --topic test
kafka-console-consumer.sh --bootstrap-server 10.109.205.245:9094  --topic test --from-beginning

kafka可视化控制台

组件描述
Know Streaming专注于Kafka运维管控、监控告警、资源治理、多活容灾等核心场景。
Know Streaming github | Know Streaming官网
Kafka ManagerKafka Manager 是 Yahoo 开源的 Kafka 集群管理工具。它提供了一个直观的 Web 界面,用于监控和管理 Kafka 集群。Kafka Manager 可以显示集群的整体状态、主题和分区的详细信息,以及消费者组的偏移量等。您可以使用 Kafka Manager 进行主题和分区的管理、消费者组的监控和管理,以及执行一些集群维护任务。Kafka Manager官网
KafdropKafdrop 是一个开源的 Kafka 可视化工具,提供了一个简单易用的 Web 界面来监控 Kafka 集群。Kafdrop 可以显示 Kafka 集群中的主题、分区和消费者组的信息,并提供了实时的消息流量监控。它还支持查看消息的详细内容和偏移量的管理。Kafdrop官网
Kafka MapKafka Map 是一个开源的 Kafka 可视化工具,它提供了一个交互式的 Web 界面,用于可视化 Kafka 主题和分区之间的消息流。Kafka Map 使用图形化的方式展示了消息在不同分区之间的流动情况,帮助用户更好地理解和分析消息的传输路径。kafka-map官网

从功能的专业程度建议使用Know Streaming,关注消息分区流向建议kafka-map,轻量级的 Kafka 可视化工具建议Kafdrop

es集群部署

参考

Download Elasticsearch
Elasticsearch支持哪些插件_检索分析服务 Elasticsearch版(ES)-阿里云帮助中心
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群-腾讯云开发者社区-腾讯云

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索elasticsearch部署
  3. values.yaml配置修改,配置参考

image.png

制作安装ik分词器的es可使用上述截图中镜像作为基础镜像(推荐),也可使用plugins参数初始化安装

image.png

# 查看elasticsearch安装位置
which elasticsearch# 查看当前已安装的插件
elasticsearch-plugin list# 安装插件
elasticsearch-plugin install {插件名称}# ik分词器地址https://github.com/medcl/elasticsearch-analysis-ik/releases/
# elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.12.0/elasticsearch-analysis-ik-8.12.0.zip

在 Elasticsearch 集群中,不同角色承担着不同的职责和功能。下面是关于 Elasticsearch 集群中各个角色的详细介绍:

  1. Coordinating(协调节点)角色:
    • 职责:协调节点是集群中的请求入口点,它接收来自客户端的请求并将其转发到适当的节点。它不存储数据,主要用于处理搜索请求和聚合操作。
    • 功能:
      • 路由请求:协调节点根据请求的内容将其路由到正确的数据节点,以提高集群的性能和扩展性。
      • 整合结果:协调节点将从数据节点接收到的结果进行汇总和整合,然后将结果返回给客户端。
  2. Data(数据节点)角色:
    • 职责:数据节点存储和管理实际的索引数据。
    • 功能:
      • 数据存储:数据节点负责存储索引数据,并提供对数据的增删改查操作。
      • 数据分片:数据节点将索引数据分成多个分片,每个分片可以分布在不同的节点上,以实现数据的分布式存储和处理。
      • 数据复制:数据节点可以复制数据分片,以提供高可用性和故障容错性。
  3. Ingest(数据预处理节点)角色:
    • 职责:Ingest 节点用于处理数据的预处理和转换,以便在索引之前进行必要的操作。
    • 功能:
      • 数据预处理:Ingest 节点可以执行各种数据的提取、转换和加载(ETL)操作,例如数据过滤、转换、标准化等。
      • 数据修改:Ingest 节点可以在数据进入索引之前对其进行修改和处理,以满足特定的需求和要求。
  4. Master(主节点)角色:
    • 职责:主节点管理集群的整体状态和配置。
    • 功能:
      • 集群管理:主节点负责协调集群中的各个节点,执行集群范围的操作,例如创建和删除索引、添加和删除节点等。
      • 元数据维护:主节点维护集群的元数据,包括索引的映射、分片分配、节点状态等。
      • 集群稳定性:主节点确保集群的稳定性和一致性,协调节点的选举和故障检测等操作由主节点负责。

这些角色在 Elasticsearch 集群中相互协作,共同构建一个高性能、可扩展和可靠的分布式搜索和分析平台。需要注意的是,一个节点可以同时承担多个角色,具体取决于集群的规模和配置。

rocketmq集群部署

参考:Helm 部署 RocketMQ-腾讯云开发者社区-腾讯云
https://github.com/itboon/rocketmq-helm

## 部署高可用集群,MasterSlave
## 3个 master 节点,每个 master 具有1个副节点,共6个 broker 节点
helm upgrade --install rocketmq \--namespace rocketmq-demo \--create-namespace \--set broker.size.master="3" \--set broker.size.replica="1" \--set broker.master.jvmMemory="-Xms2g -Xmx2g" \--set broker.master.resources.requests.memory="4Gi" \--set nameserver.replicaCount="3" \--set dashboard.enabled="true" \--set dashboard.ingress.enabled="true" \--set dashboard.ingress.hosts[0].host="rocketmq-ha.example.com" \rocketmq-repo/rocketmq

image.png
image.png

minio集群部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索kafka部署
  3. values.yaml配置修改,配置参考,常用配置如下:
  4. helm命令

SkyWalking部署

参考:

https://github.com/apache/skywalking-helm
k8s 部署 skywalking 并将 pod 应用接入链路追踪 - 掘金
https://www.cnblogs.com/lina-2159/p/16190984.html

使用 Docker Helm 存储库 (>= 4.3.0) 安装已发布的版本

helm install "skywalking" \oci://registry-1.docker.io/apache/skywalking-helm \--version "4.3.0" \-n "skywalking" \--set oap.image.tag=9.2.0 \--set oap.storageType=elasticsearch \--set ui.image.tag=9.2.0

image.png
image.png
image.png

使用 master 分支安装 SkyWalking 的开发版本

git clone https://github.com/apache/skywalking-kubernetescd skywalking-kubernetes/chart
helm repo add elastic https://helm.elastic.co
helm dep up skywalking

image.png

# 安装
helm install "skywalking" ./skywalking -n "skywalking" -f ./skywalking/values-my-es.yaml# 卸载
helm uninstall skywalking -n skywalking

修改values-my-es.yaml配置是否使用外部es

elasticsearch:enabled: false # 由于使用 外部的 es,所以这里需要设置为 false,因为设置为 true 会在 k8s 中部署 esconfig:               # For users of an existing elasticsearch cluster,takes effect when `elasticsearch.enabled` is falsehost: your.elasticsearch.host.or.ipport:http: 9200user: "xxx"         # [optional]password: "xxx"     # [optional]

MongoDB部署

  1. 添加应用仓库:https://charts.bitnami.com/bitnami
  2. 搜索kafka部署
  3. values.yaml配置修改,配置参考,常用配置如下:
  4. helm命令

helm 安装 MongoDB 集群

helm pull bitnami/mongodb
tar -xzvf mongodb-14.10.1.tgz
helm -n mongodb install mongodb ./mongodb

image.png

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

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

相关文章

Unity类银河恶魔城学习记录7-8 P74 Pierce sword源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Sword_Skill.cs using System; using System.Collections; using System.C…

VSCode提交代码到git操作指南

前言 点个赞&#xff0c;嘿嘿&#xff01; 直奔主题 一直都有疑问vscode如何将代码提交给git。告别小乌龟&#xff01;告别命令&#xff01; 操作步骤 第一步 登录git账号新建一个仓库&#xff0c;千万不要点击初始化仓库&#xff0c;不然只能clone了&#xff01;&#xff…

Ethernet/IP转Modbus TCP网关

产品功能 1 YC-EIP-TCP工业级EtherNet/IP 网关 2 Modbus TCP 转 EtherNet/IP 3支持ModBus主从站 4 即插即用 无需编程 轻松组态 ,即实现数据交互 5导轨安装 支持提供EDS文件 6 EtherNET/IP与ModBus互转数据透明传输可接入PLC组态 支持CodeSys/支持欧姆龙PLC 支持罗克韦尔(AB) 典…

【MATLAB源码-第151期】基于matlab的开普勒化算法(KOA)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 开普勒优化算法&#xff08;Kepler Optimization Algorithm, KOA&#xff09;是一个虚构的、灵感来自天文学的优化算法&#xff0c;它借鉴了开普勒行星运动定律的概念来设计。在这个构想中&#xff0c;算法模仿行星围绕太阳的…

opencv图像腐蚀

腐蚀&#xff08;Erosion&#xff09;是一种形态学图像处理操作&#xff0c;用于移除图像中的小白点、细小物体或者边缘。它通过将结构元素应用于图像上的像素来实现。 以下是opencv实现图像腐蚀的代码 #include <opencv2/highgui/highgui.hpp> #include <opencv2/im…

IntelliJ IDEA 2023:创新不止步,开发更自由 mac/win版

IntelliJ IDEA 2023激活版是一款强大而智能的集成开发环境(IDE)&#xff0c;为开发者提供了一系列先进的功能和工具&#xff0c;帮助他们更高效地编写、调试和测试代码。 IntelliJ IDEA 2023 软件获取 IntelliJ IDEA 2023继承了其前代版本的优秀基因&#xff0c;并在此基础上进…

用 Python 自动化处理无聊的事情

“编程最棒的部分就是看到机器做一些有用的事情而获得的胜利。用 Python 将无聊的事情自动化将所有编程视为这些小小的胜利&#xff1b;它让无聊变得有趣。” Hilary Mason&#xff0c;数据科学家兼 Fast Forward Labs 创始人 “我很享受打破东西然后把它们重新组合起来的乐趣…

【JavaEE】_前端POST请求使用json向后端传参

目录 1. 关于json 2. 通过Maven仓库&#xff0c;将Jackson下载导入到项目中 3. 使用Jackson 3.1 关于readValue方法 3.2 关于Request.class类对象 3.3 关于request对象的属性类型 3.4 关于writeValueAsString 前端向后端传递参数通常有三种方法&#xff1a; 第一种&…

BTC网络 vs ETH网络

设计理念 BTC 网络 比特币是一种数字货币&#xff0c;旨在作为一种去中心化的、不受政府或金融机构控制的电子货币。其主要目标是实现安全的价值传输和储存&#xff0c;比特币的设计强调去中心化和抗审查。 ETH 网络 以太坊是一个智能合约平台&#xff0c;旨在支持分散的应…

Windows系统x86机器安装(麒麟、统信)ARM系统详细教程

本次介绍在window系统x86机器上安装国产系统 arm 系统的详细教程。 注&#xff1a;ubuntu 的arm系统安装是一样的流程。 1.安装环境准备。 首先&#xff0c;你得有台电脑&#xff0c;配置别太差&#xff0c;至少4核8G内存&#xff0c;安装window10或者11都行&#xff08;为啥…

抖音视频评论批量下载软件|抖音数据抓取工具

随着业务需求的增长&#xff0c;抖音视频的下载需求也日益增加。传统的方式是通过逐个复制粘贴分享链接来下载视频&#xff0c;这种操作效率低下且耗时费力。为了解决这一问题&#xff0c;我们开发了一款基于C#的抖音视频评论批量下载软件&#xff0c;旨在实现通过关键词自动批…

Web服务器群集:OpenEuler 部署 LAMP(LNMP) 基础服务

目录 一、实验 1.环境 2. 网络配置 3. MobaXterm远程连接 4. apache 2.4.58 源码编译安装 5. php 8.3.1源码编译安装 6.配置httpd 连接 php-fpm 6. nginx 1.24.0源码编译安装 7. mysql 8.0.36安装 二、问题 1.MobaXterm设置右键复制粘贴 2.OpenEuler如何查看CPU的核…

使用Node.js开发一个文件上传功能

在现代 Web 应用程序开发中&#xff0c;文件上传是一个非常常见且重要的功能。今天我们将通过 Node.js 来开发一个简单而强大的文件上传功能。使用 Node.js 来处理文件上传可以带来许多好处&#xff0c;包括简单的代码实现、高效的性能和灵活的配置选项。 首先&#xff0c;我们…

【kubernetes】关于k8s集群的资源发布方式(灰度/滚动发布)

目录 一、常见的发布方式 二、详解kubectl陈述式方式做灰度发布&#xff08;金丝雀发布&#xff09; 步骤一&#xff1a;先基于deployment控制器创建pod&#xff0c;然后发布 步骤二&#xff1a;基于命令行灰度发布 步骤三&#xff1a;测试等到版本稳定以后&#xff0c;再完…

远程解难:苹果手机投屏到Windows电脑,给爸妈演示手机操作

明窗净几夜未央&#xff0c; 键盘轻敲解忧忙。 父母笑颜消难题&#xff0c; 孝心科技共光芒。 QQ、微信、小红书等社交软件不仅年轻人在用&#xff0c;老年人也逐步使用社交软件建立起自己的朋友圈。但这些“新”软件对于部分老年人来说还是太复杂&#xff0c;这就难免需要年…

Mysql常见用法(2)

目录​​​​​​​ mysql 约束 primary key 主键的基本使用 notnull(非空) unique(唯一) foreign key(外键) check 自增长 mysql索引 索引的原理 索引的类型 索引的使用 --添加索引 删除索引&#xff1a; -- 修改索引 &#xff0c; 先删除&#xff0c;在添加新…

liunx单机项目部署

文章目录 1.liunx简介2.liunx的jdk安装2.liunx的tomcat安装3.liunx的mysql安装4.单机项目部署 1.liunx简介 Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GNU套件&#xff0c;故得此称呼&#xff09;&#xff0c;是一种免费…

【C语言】学生宿舍信息管理系统

目录 项目说明 1. 数据结构设计 2. 功能实现 3. 主菜单设计 4. 文件操作 5. 系统使用 项目展示 1.主菜单功能界面 ​编辑 2.添加信息 3.查询信息 4.修改信息 5.删除信息 6.退出程序 项目完整代码 结语 在这篇博客中&#xff0c;我们将探讨如何使用C语言来开发…

【Hudi】核心概念

https://www.bilibili.com/video/BV1ue4y1i7na?p17&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf 大数据新风口&#xff1a;Hudi数据湖&#xff08;尚硅谷&Apache Hudi联合出品&#xff09; 1 基础概念 1.1 时间轴(TimeLine) 1.2 文件布局(File Layout) 1.3 索引(In…

JavaWeb个人学习01

1:RequestParam(defaultValue "默认的值") 这个可以在一个参数的前面写上 要是前端不传值进来的话 这个形参就是你定义的默认值 2: slf4j 对应的是日志的输出 log.info("参数是 {}", detail); 3: 分页插件 PageHelper 用法: 准备工作: 引入依赖 …