当前位置: 首页 > news >正文

DolphinScheduler on k8s 云原生部署实践

文章目录

    • 前言
    • 利用Kubernetes技术
    • 云原生平台初始化迁移
    • 基于Argo CD添加GitOps
    • DolphinScheduler 在 k8s 上的服务自愈
    • 可观测性
    • 集成服务网格
    • 云原生工作流调度
    • 从HDFS升级到S3文件技术
    • 总结

前言

  1. DolphinScheduler 的高效云原生部署模式,比原始部署模式节省了95%以上的人力资源和工作时间,提升了部署效率和成本效益。
  2. 通过集成 GitOps 技术,我们提升了 DolphinScheduler 的 DevOps 管理能力,改善了软件交付效率和安全审计能力。
  3. 通过集成新的云原生技术,我们为 DolphinScheduler 增加了水平扩展、健康探测和滚动部署等功能,提升了其灵活性和适应性。
  4. 将 Prometheus 等可观测性技术整合到基础设施和服务网格中,显著提升了 DolphinScheduler 的监控功能,为其性能和健康状态提供了更深入的洞察。
  5. 与 Kubernetes 作业技术深度整合,实现了 DolphinScheduler 的混合调度器,适用于传统虚拟机和基于容器的运行环境,提升了其多样性和兼容性。

DolphinScheduler 是由 Analysys 开源的分布式、易于扩展的可视化工作流任务调度平台,解决了需要企业级问题:

  • 多源数据连接和访问:技术领域中最常见的数据源都可以访问,添加新数据源不需要太多改动。
  • 多样化、专业化和大规模数据任务管理:这涉及到大数据(Hadoop 系列、Flink 等)任务调度的问题,与传统调度器有着显著区别。
  • 图形化任务编排:提供了方便的用户体验,与商业产品具有竞争力,尤其是对于大多数无法通过拖放直接生成数据任务的国外开源产品而言。
  • 任务细节:丰富的任务、日志和运行时间轴显示,满足了开发人员对精细化数据任务管理的需求,快速定位慢 SQL 和性能瓶颈。
  • 支持各种分布式文件系统:丰富了用户对非结构化数据的选择。
  • 本地多租户管理:满足了大型组织对数据任务管理和隔离的需求。
  • 完全自动化的分布式调度算法来平衡所有调度任务。
  • 本地集群监控:可以监控 CPU、内存、连接数和 Zookeeper 状态,适用于中小企业的一站式运维。
  • 本地任务告警功能:最大程度地减少任务操作的风险。
  • 强大的社区运营:倾听客户的真实声音,不断添加新功能,持续优化客户体验。

基于早期的微服务技术,DolphinScheduler采用了服务注册表的概念,通过使用Zookeeper进行集群的分布式管理(许多大数据技术使用Zookeeper作为分布式集群管理)。Worker主节点可以任意添加,或者可以独立部署API管理和告警管理。作为一个企业级技术模块,它实现了微服务分离、独立部署和模块化管理的良好技术特性。然而,在容器化云原生应用迅速发展的时代,这种基本的技术模式存在一些不足之处:

  • 需要从头开始部署,无论是安装在物理机还是虚拟机上,DolphinScheduler都需要数百个shell操作,一个节点集群可能需要数千个shell操作。
  • 标准化的企业级DolphinScheduler涉及到管理大量基本环境,并且通常需要超过八个节点、主机和IP地址。这些基础设施信息带来了一定的管理难度。
  • 添加节点时,还需要进行数十个操作(安装Java、配置主机、设置DS Linux用户、设置免密码登录、修改安装节点配置文件),并且整个集群需要停止和重新启动。
  • 大型企业通常有多个集群来支持不同的业务单元,这将在工作负载中带来大量的重复。
  • 调度器具有一些可观察性功能,但无法与主流工具集成。
  • 整体而言,调度器仍然需要日常例行检查工作,例如调查核心Java进程异常退出。
  • 在不同的需求和场景下,调度器的配置设置缺乏有效的管理机制或工具。

解决这些技术缺陷的核心思路包括:

  • 如何将DolphinScheduler集成到当今主流的云原生技术中;
  • 如何在减少人力资源的情况下部署DolphinScheduler,是否能实现完全自动化的集群安装和部署模式;
  • 如何实现完全无服务器的DolphinScheduler,并大幅降低配置管理的管理成本;
  • 如何标准化技术组件的实现规范;
  • 是否可以实现无人监管运行,并且系统具备自我修复能力;
  • 如何构建并将其集成到现有的可观测性平台中。

利用Kubernetes技术

作为云原生系统技术的事实标准,Kubernetes已经给整个IT应用技术系统带来了革命性的变化。Kubernetes主要基于服务注册和发现、负载均衡、自动化软件发布和回滚、容器化隔离、软件自愈和分布式配置管理等核心技术特性。
不仅如此,还可以整合 Cloud Native Computing Foundation(CNCF)的许多优秀项目至 ds on k8s 部署:

  • DolphinScheduler的部署技术得到了改进。我们使用了Helm和Argo CD来大大简化和实现一键部署。
  • 通过Argo CD实现了配置内容的GitOps管理机制,从而实现了现代DevOps的完整审计能力。
  • Kubernetes的水平Pod自动缩放技术大大简化了应用扩展的操作难度。
  • Kubernetes的标准化健康探针技术使得调度器的所有技术组件都具备了强大的自愈能力。
  • Kubernetes和Argo CD的滚动发布技术实现了DolphinScheduler工具的优雅简单升级。
  • 使用Kube-Prometheus技术为DolphinScheduler带来了标准化的可观测性能力。
  • 强大的UI技术简化了CMDB可视化管理、基于Kubernetes的组件配置管理、应用日志管理等。

还可以向DolphinScheduler引入了更强大的工具,以获取更丰富的云原生特性:

  • 通过Kubernetes服务注册发现和Ingress技术实现了更轻松的服务访问;
  • 引入了Linkerd,将服务网格的功能引入DolphinScheduler,提高了所有API的管理和监控能力;
  • 将DolphinScheduler与Argo Workflows或标准的Kubernetes作业结合起来;
  • 引入对象存储技术MinIO,将存储非结构化数据的技术与DolphinScheduler统一起来。

云原生平台初始化迁移

部署步骤

  1. 从 GitHub 存储库的 dolphinscheduler-1.3.9.tar.gz 文件中的 ./dolphinscheduler-1.3.9/docker/kubernetes/dolphinscheduler 文件夹中获取 Helm 包:

    https://github.com/apache/dolphinscheduler/archive/refs/tags/1.3.9.tar.gz

  2. 使用以下命令来部署一个由 Kubernetes 管理的 DolphinScheduler 实例:

    kubectl create ns ds139
    helm install dolphinscheduler . -n ds139
    
  3. 有时,DolphinScheduler 用户需要集成 DataX、MySQL JDBC 驱动程序或 Oracle JDBC 驱动程序以进行 ETL 和数据库连接。我们可以下载必要的组件,构建新的 Docker 镜像,然后升级 Kubernetes 管理的 DolphinScheduler 实例:

    #Download the additional components
    https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-
    5.1.49.jar
    https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/
    https://github.com/alibaba/DataX/blob/master/userGuid.md#Create a new docker image with new tag by this Dockerfile
    FROM apache/dolphinscheduler:1.3.9
    COPY *.jar /opt/dolphinscheduler/lib/
    RUN mkdir -p /opt/soft/datax
    COPY datax /opt/soft/datax#Edit image tag of helm value.yaml file, and execute helm upgrade.
    helm upgrade dolphinscheduler -n ds139
    

一般建议在生产环境中使用独立的外部 PostgreSQL 作为 DolphinScheduler 的管理数据库。z这样,切换到外部数据库后,即使在 Kubernetes 中完全删除并重新部署 DolphinScheduler,也不需要重新创建 DolphinScheduler 的应用数据(例如用户定义的数据处理任务)。这再次证明了高可用性和数据完整性。此外,建议为 DolphinScheduler 组件配置 PersistentVolume,因为如果 pod 重新启动或升级,历史 DolphinScheduler 应用日志将会丢失。

与传统模式下执行数百个 shell 命令相比,只需修改一个配置文件,并使用单行安装命令,就可以自动安装八个 DolphinScheduler 组件,节省了大量人力成本和操作错误。对于多个 DolphinScheduler 集群,这将大大降低人力成本,业务部门的等待时间将从几天减少到不到一个小时,甚至可能十分钟内完成。

基于Argo CD添加GitOps

Argo CD 是一个基于 Kubernetes 的声明式 GitOps 持续交付工具,是 CNCF 的孵化项目,也是 GitOps 的最佳实践工具。
GitOps 对 Apache DolphinScheduler 的实现带来了以下优势:

  • 集群软件的图形化和一键式安装
  • Git 记录了完整的发布过程,实现一键回滚
  • 方便的 DolphinScheduler 工具日志查看

一旦实施完成,我们可以看到由 Argo CD 自动部署的 Pod、ConfigMap、Secret、Service、Ingress 等资源,它还显示了清单提交信息和用户名,完全记录了所有发布事件信息。同时,还可以通过一键点击回滚到历史版本。

相关资源信息可以通过kubectl命令查看:

[root@tpk8s-master01 ~]# kubectl get po -n ds139NAME                               READY   STATUS  RESTARTS           AGE
Dolphinscheduler-alert-96c74dc84-72cc9	1/1	Running	0		22m
Dolphinscheduler-api-78db664b7b-gsltq	1/1	Running	0		22m
Dolphinscheduler-master-0			1/1	Running	0		22m
Dolphinscheduler-master-1			1/1	Running	0		22m
Dolphinscheduler-master-2			1/1	Running	0		22m
Dolphinscheduler-worker-0			1/1	Running	0		22m
Dolphinscheduler-worker-1			1/1	Running	0		22m
Dolphinscheduler-worker-2			1/1	Running	0		22m[root@tpk8s-master01 ~]# kubectl get statefulset -n ds139NAME                                READY              AGE
Dolphinscheduler-master		3/3		22m
Dolphinscheduler-worker		3/3		22m[root@tpk8s-master01 ~]# kubectl get cm -n ds139NAME                                     DATA                AGE
Dolphinscheduler-alert		15		23m
Dolphinscheduler-api			1		23m
Dolphinscheduler-common		29		23m
Dolphinscheduler-master		10		23m
Dolphinscheduler-worker		7		23m[root@tpk8s-master01 ~]# kubectl get service -n ds139
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
Dolphinscheduler-api	ClusterIP	10.43.238.5	<none> 12345/TCP 23m
Dolphinscheduler-master-headless ClusterIP None	<none> 5678/TCP 23m
Dolphinscheduler-worker-headless ClusterIP None 	<none> 1234/TCP,50051/TCP 23m[root@tpk8s-master01 ~]# kubectl get ingress -n ds139NAME                               CLASS                       HOSTS ADDRESS
Dolphinscheduler		<none>		ds139.abc.com

还可以看到 Kubernetes 集群中所有 Pod 都部署在不同的主机上,例如,worker1 和 worker2 分别部署在不同的节点上。

一旦我们配置了 Ingress,我们就可以使用域名在公司的内部网络中访问 DolphinScheduler 的 Web 用户界面,让我们以 DNS 子域名 abc.com 为例:http://ds139.abc.com/dolphinscheduler/ui/#/home。我们可以在 Argo CD 中查看 Apache DolphinScheduler 的每个组件的内部日志:

使用 Argo CD,修改主节点、工作节点、API 或警报等组件的副本数量非常方便。Apache DolphinScheduler 的 Helm 配置还保留了 CPU 和内存的设置信息。在 value.yaml 文件中修改副本的设置。修改后,我们可以将其推送到公司的内部源代码系统:

master:podManagementPolicy: "Parallel"replicas: "5"
worker:podManagementPolicy: "Parallel"replicas: "5"
alert:replicas: "3"
api:replicas: "3"

只需在 Argo CD 上点击同步即可进行同步,所需的相应 pod 将被添加。

[root@tpk8s-master01 ~]# kubectl get po -n ds139NAME                                      READY   STATUS              RESTARTS            AGE
Dolphinscheduler-alert-96c74dc84-72cc9	1/1	Running		0		43m
Dolphinscheduler-alert-96c74dc84-j6zdh	1/1	Running		0		2m27s
Dolphinscheduler-alert-96c74dc84-rn9wb	1/1	Running		0		2m27s
Dolphinscheduler-api-78db664b7b-6j8rj	1/1	Running		0		2m27s
Dolphinscheduler-api-78db664b7b-bsdgv	1/1	Running		0		2m27s
Dolphinscheduler-api-78db664b7b-gsltq	1/1	Running		0		43m
Dolphinscheduler-master-0			1/1	Running		0		43m
Dolphinscheduler-master-1			1/1	Running		0		43m
Dolphinscheduler-master-2			1/1	Running		0		43m
Dolphinscheduler-master-3			1/1	Running		0		2m27s
Dolphinscheduler-master-4			1/1	Running		0		2m27s
Dolphinscheduler-worker-0			1/1	Running		0		43m
Dolphinscheduler-worker-1			1/1	Running		0		43m
Dolphinscheduler-worker-2			1/1	Running		0		43m
Dolphinscheduler-worker-3			1/1	Running		0		2m27s
Dolphinscheduler-worker-4			1/1	Running		0		2m27s

不仅如此,基于 Argo CD 的 GitOps 技术为整个 DolphinScheduler 工具提供了图形化、自动化、可追溯、可审计和强大的 DevOps、回滚和监控功能,而无需对 DolphinScheduler 进行任何代码修改。

DolphinScheduler 在 k8s 上的服务自愈

众所周知,当代的IT环境总是处于不稳定状态。换句话说,我们的技术系统将服务器、操作系统和网络的各种故障视为集群中的常规事件。当最终用户无法通过浏览器正常访问 DolphinScheduler 的任务管理页面,或者 DolphinScheduler 无法运行常规的大数据任务时,已经为时已晚。

然而,在 DolphinScheduler 转向云原生之前,它只能依靠日常监控来检查主节点/工作节点/API等组件是否正常运行,通过 DolphinScheduler 管理UI,或者通过 jps 检查Java进程是否存在。当企业拥有数百个调度环境时,这不仅会花费大量时间,而且更重要的是,系统的可用性将面临巨大风险。

值得注意的是,Kubernetes 技术本身可以自动重启和恢复标准化应用程序的有状态和部署类型,甚至 CRD 本身也可以自动重启和恢复。当应用程序失败时,会记录异常事件,并重新拉取应用程序以重新启动应用程序,Kubernetes 将记录 pod 重新启动的次数,以便技术人员可以快速定位故障。

除了标准化的自愈机制外,还有主动的健康监控方法。通过构建一个服务接口来主动探测正在运行 DolphinScheduler 的 pod,使用 livenessProbe 机制,当检测次数超过失败重试次数时,该机制可以自动重启 pod。此外,通过使用 readinessProbe,Kubernetes 集群可以在探测器捕获异常时自动切断对异常 pod 的流量,并在异常事件消失后自动恢复对 pod 的流量请求。

livenessProbe:enabled: trueinitialDelaySeconds: "30"periodSeconds: "30"timeoutSeconds: "5"failureThreshold: "3"successThreshold: "1"
readinessProbe:enabled: trueinitialDelaySeconds: "30"periodSeconds: "30"timeoutSeconds: "5"failureThreshold: "3"successThreshold: "1"

可观测性

我们知道,Prometheus 已经成为云原生系统中监控工具的事实标准,将 DolphinScheduler 的标准监控整合到 Prometheus 系统中对我们来说是最合理的选择。Kube-Prometheus 技术可以监控 Kubernetes 集群中的所有资源。StatefulSet、命名空间和 Pod 是 DolphinScheduler 的三个主要资源特性。通过 Kube-Prometheus 技术,可以自动进行 CPU、内存、网络、IO、副本等方面的常规监控,无需额外的开发或配置。

我们在 Kubernetes 中使用 Kube-Prometheus operator 技术,在部署后自动监控 Apache DolphinScheduler 的每个组件的资源。但请注意,Kube-Prometheus 的版本需要与 Kubernetes 的主版本对应。

集成服务网格

作为数据服务提供商,DolphinScheduler 通过服务网格技术实现了服务链接的可观察性管理,并将其纳入内部服务治理系统中。

DolphinScheduler 不仅需要通用资源监控,还需要服务调用链的监控技术。通过服务网格技术,可以实现 DolphinScheduler 的内部服务调用以及 DolphinScheduler API 的外部调用的可观察性分析,优化 DolphinScheduler 产品的服务。

此外,作为数据工具的服务组件,DolphinScheduler 可以通过服务网格工具无缝集成到企业的内部服务模式中。它使得具有 TLS 服务通信能力、客户端服务通信重试机制和跨集群服务注册发现等功能成为可能,而无需修改 DolphinScheduler 的代码。通过服务网格技术,可以实现对 Apache DolphinScheduler 的 API 外部服务调用和内部调用的可观察性分析,从而优化 Apache DolphinScheduler 产品服务。

我们使用了 Linkerd 作为服务网格产品进行集成,这也是 CNCF 出色的毕业项目之一。通过修改 Apache DolphinScheduler Helm 中 value.yaml 文件中的注释,并重新部署,可以快速将网格代理 sidecar 注入到 DolphinScheduler 的 master、worker、API、alert 等组件中。

annotations:linkerd.io/inject: enabled

还可以观察组件之间通信的服务质量,包括每秒请求的数量:

云原生工作流调度

要成为真正的云原生调度工具,DolphinScheduler需要能够调度云原生作业流程。

DolphinScheduler调度的任务都是在固定的Pod中执行。在这种模式下,任务开发技术的隔离要求相对较高。

特别是在Python语言环境下,团队中会存在不同版本的Python基础和依赖包,甚至版本之间的差异可能会出现数百种组合。依赖包的轻微差异就会导致Python程序运行错误。这也是阻止DolphinScheduler运行大量Python应用程序的障碍。建议采取以下方法,以便DolphinScheduler能够快速与Kubernetes作业系统集成,并具有强大的任务隔离和并发能力:

  • 使用标准的Kubernetes API系统进行作业提交。可以通过kubectl命令行或REST API直接提交任务。
  • 将kubectl命令文件上传到DolphinScheduler,并通过DolphinScheduler的shell任务提交。
  • 使用Argo Workflows项目的Argo CLI命令或REST API命令进行提交。

无论是Kubernetes还是Argo Workflows,都需要添加watch功能,因为Kubernetes是一种异步技术,需要等待任务完成。

在这里,我们以Argo Workflows为例,我们可以在DolphinScheduler中创建一个新的shell任务或步骤,并将以下命令粘贴到其中。结果,我们可以将常规的数据作业(例如数据库SQL作业、Spark作业或Flink作业)和云原生作业结合起来,执行更全面的作业流程。例如,这个作业是一个Hive SQL任务,用于导出Web应用的用户点击数据:

beeline -u "jdbc:hive2://192.168.1.1:10006" --outputformat=csv2 -e "select * from database.user-click" > user-click.csv 

这个示例作业是一个Python Tensorflow任务,用于通过训练数据构建机器学习模型。该作业通过HTTP方式运行。首先,我们运行该作业:
通过HTTP方式运行Python Tensorflow作业

curl --request POST -H "Authorization: ${ARGO_TOKEN}" -k \--url https://argo.abc.com/api/v1/workflows/argo \--header 'content-type: application/json' \--data '{"namespace": "argo","serverDryRun": false,"workflow": {"metadata": {"name": "python-tensorflow-job","namespace": "argo"},"spec": {"templates": [{"name": "python-tensorflow","container": {"image": "tensorflow/tensorflow:2.9.1","command": ["python"],"args": ["training.py"],"resources": {}}}],"entrypoint": "python-tensorflow","serviceAccountName": "argo","arguments": {}}}}'

然后我们可以检查工作信息和状态:

#Http way to check the Python Tensorflow job information and status
curl --request GET -H "Authorization: ${ARGO_TOKEN}" -k \--url https:/argo.abc.com/api/v1/workflows/argo/python-tensorflow-job

从HDFS升级到S3文件技术

分布式算法是云原生技术领域之一,比如谷歌的Kubeflow技术,它完美地结合了TensorFlow和Kubernetes。分布式算法通常使用文件,而S3是存储大型数据文件的事实标准,这些文件可以很容易地访问。当然,DolphinScheduler还集成了MinIO技术,通过简单的配置可以实现S3文件管理。

首先,通过修改Helm value.yaml文件中的configmap部分,将其指向一个MinIO服务器。

configmap:DOLPHINSCHEDULER_OPTS: ""DATA_BASEDIR_PATH: "/tmp/dolphinscheduler"RESOURCE_STORAGE_TYPE: "S3"RESOURCE_UPLOAD_PATH: "/dolphinscheduler"FS_DEFAULT_FS: "s3a://dfs"FS_S3A_ENDPOINT: "http://192.168.1.100:9000"FS_S3A_ACCESS_KEY: "admin"FS_S3A_SECRET_KEY: "password"

在MinIO中存储文件的桶的名称称为“dolphinscheduler”。用户通过DolphinScheduler UI上传的共享文件存储在这个文件夹中。

总结

作为一款新一代的云原生大数据工具,Apache DolphinScheduler 有望在将来与 Kubernetes 生态系统中更多优秀的工具和功能集成,以满足多样化的用户群体和场景需求。ds 将来的规划路线包括下边:

  • 使用 sidecar 定期删除 worker 作业日志,实现轻松的运维管理
  • 与 Argo Workflows 更深入地集成,用户可以通过 API、CLI 等在 Apache DolphinScheduler 中调用 Argo Workflows 进行单一作业、DAG 作业和定期作业
  • 使用 HPA(Horizontal Pod Autoscaling)自动调整 DolphinScheduler 的任何组件的规模,实现更具弹性的运行环境,并处理不确定的工作负载
  • 集成 Spark 操作器和 Flink 操作器,进行全面的云原生分布式计算
  • 实现多云和多集群的分布式作业调度,并加强无服务器和 FAAS 类架构属性。

相关文章:

DolphinScheduler on k8s 云原生部署实践

文章目录 前言利用Kubernetes技术云原生平台初始化迁移基于Argo CD添加GitOpsDolphinScheduler 在 k8s 上的服务自愈可观测性集成服务网格云原生工作流调度从HDFS升级到S3文件技术总结 前言 DolphinScheduler 的高效云原生部署模式&#xff0c;比原始部署模式节省了95%以上的人…...

JVM将虚拟机分成了哪几块区域?

Java 8之后&#xff0c;JVM&#xff08;Java Virtual Machine&#xff09;继续沿用原有的内存区域划分&#xff0c;主要包括以下几个部分&#xff1a; 1、堆&#xff08;Heap&#xff09;&#xff1a; 用途&#xff1a;存储对象实例&#xff0c;几乎所有通过new关键字创建的对…...

【热门话题】WebKit架构简介

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 WebKit架构简介一、引言二、WebKit概览1. 起源与发展2. 模块化设计 三、WebCore…...

顶顶通呼叫中心中间件-话术编辑器机器人转人工坐席配置(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-话术编辑器机器人转人工座席配置(mod_cti基于FreeSWITCH) 配置方法 一、ACD排队转接 二、伴随转接 比如你设置的通知规则是任意满足一个就通知那么通话时间设置为10 秒那样他只要通话时间到10秒他就会转坐席。 如果要转人工的时侯转手机可以这样配置 把…...

【嵌入式开发 Linux 常用命令系列 8 -- shell 命令 basename 介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 shell 命令 basenamedf 命令 shell 命令 basename 在 shell 脚本中&#xff0c;可以使用 basename 命令来获取文件的基本名称&#xff08;不带路径的部分&#xff09;。以下是如何将文件名赋值给变量的示例&#xff1a; file_pat…...

使用docker部署MongoDB数据库

最近由于工作需要搭建MongoDB数据库&#xff1a;将解析的车端采集的数据写入到数据库&#xff0c;由于MongoDB高可用、海量扩展、灵活数据的模型&#xff0c;因此选用MongoDB数据库&#xff1b;由于现公司只有服务器&#xff0c;因此考虑容器化部署MongoDB数据&#xff0c;特此…...

3. WiFi基本原理

1. WiFi简介 WiFi的全称是Wireless Fidelity。它是一种无线网络通信技术&#xff0c;由Wi-Fi联盟拥有&#xff0c;目的是改善基于IEEE 802.11标准的无线网络产品之间的互通性&#xff0c;允许电子设备在没有物理连接的情况下进行高速数据传输。此外&#xff0c;WiFi也被视为IE…...

详解人工智能(概念、发展、机遇与挑战)

前言 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门新兴的技术科学&#xff0c;是指通过模拟、延伸和扩展人类智能的理论、方法、技术和应用系统&#xff0c;以实现对人类认知、决策、规划、学习、交流、创造等智能行为的模拟、延伸和扩展…...

flyway的使用

什么是flyway Flyway是一个开源的数据库版本控制工具&#xff0c;用于在应用程序的开发和部署过程中管理数据库结构的变化。它允许开发团队使用简单的脚本语言&#xff08;通常是SQL&#xff09;来描述数据库的变化&#xff0c;并将这些脚本应用于目标数据库。Flyway还提供了版…...

web渗透测试漏洞复现:ZooKeeper未授权漏洞复现

web渗透测试漏洞复现 1. ZooKeeper未授权漏洞复现1.1 ZooKeeper简介1.2 ZooKeeper漏洞复现1.3 ZooKeeper漏洞修复建议1. ZooKeeper未授权漏洞复现 1.1 ZooKeeper简介 ZooKeeper 是一个分布式的、开源的协调服务,最初由雅虎开发,现隶属于 Apache 软件基金会,是Google的Chub…...

算法错题本

这里写目录标题 错题本注意数据的耦合性对于无解情况的处理思路一组数据以0为结束标记&#xff0c;如何输入到数组中&#xff0c;并计数多个数据进行比较链表删除重复元素的启发循环体里谨慎写类型定义并初始化&#xff08;一般写上就是错&#xff09;队列中读取队尾元素数组当…...

绝地求生:爷青回!老版艾伦格回归?雨天雾天的艾伦格你还记得吗?

爷青回&#xff01;老版艾伦格回归&#xff1f;雨天雾天的艾伦格你还记得吗&#xff1f; 嗨&#xff0c;我是闲游盒~ 早在很久前&#xff0c;就有许多玩家吐槽艾伦格越改越没那味了&#xff0c;没之前的真实感了等等.... ◆ PUBG官方发布了一条推文&#xff0c;其中就有类似老版…...

10秒钟用python接入讯飞星火API(保姆级)

正文&#xff1a; 科大讯飞是中国领先的人工智能公众公司&#xff0c;其讯飞星火API为开发者提供了丰富的接口和服务&#xff0c;以支持各种语音和语言技术的应用。 步骤一&#xff1a;注册账号并创建应用 首先&#xff0c;您需要访问科大讯飞开放平台官网&#xff0c;注册一个…...

认识什么是Webpack

目录 1. 认识Webpack 1.1. 什么是Webpack?&#xff08;定义&#xff09; 1.2. 使用Webpack 1.2.1. 需求 1.2.2. 步骤 1.3. 入口和出口默认值 1.3.1. 需求代码如下 2. 修改Webpack打包入口和出口 2.1. 步骤&#xff1a; 2.2. 注意 3. Webpack自动生成html文件 3.1.…...

vulhub打靶记录——healthcare

文章目录 主机发现端口扫描FTP—21search ProPFTd EXPFTP 匿名用户登录 web服务—80目录扫描search openemr exp登录openEMR 后台 提权总结 主机发现 使用nmap扫描局域网内存活的主机&#xff0c;命令如下&#xff1a; netdiscover -i eth0 -r 192.168.151.0/24192.168.151.1…...

css实现更改checkbox的样式;更改checkbox选中后的背景色;更改checkbox选中后的icon

<input class"check-input" type"checkbox"> .check-input {width: 16px;height: 16px;} /* 设置默认的checkbox样式 */input.check-input[type"checkbox"] {-webkit-appearance: none; /* 移除默认样式 */border: 1px solid #999;outl…...

绿联 安装Mysql数据库

绿联 安装Mysql数据库 1、镜像 mysql:5.7 数据库5.7.x系列。 mysql:8 数据库8.x.x系列&#xff0c;安装方式相同。 2、安装 2.1、拉取镜像 拉取5.7.x版本的镜像。 2.2、基础设置 重启策略&#xff1a;第三或第四项均可。 2.3、网络 桥接即可。 2.4、命令 在原有的“mys…...

PyQt ui2py 使用PowerShell将ui文件转为py文件并且将导入模块PyQt或PySide转换为qtpy模块开箱即用

前言 由于需要使用不同的qt环境&#xff08;PySide&#xff0c;PyQt&#xff09;所以写了这个脚本&#xff0c;使用找到的随便一个uic命令去转换ui文件&#xff0c;然后将导入模块换成qtpy这个通用库(支持pyside2-6&#xff0c;pyqt5-6)&#xff0c;老版本的是Qt.py(支持pysid…...

javascript中的浅拷贝和深拷贝

浅拷贝&#xff1a;拷贝的是引用类型数据的第一层&#xff1a;数组或者对象&#xff1a;的地址 深拷贝&#xff1a;通过不断的递归进行拷贝 原理普及&#xff1a;在js中引用类型的变量储存的时候引用类型数据的地址&#xff0c;因此当地址被重新赋值新的对象的时候&#xff…...

vue 实现自定义分页打印 window.print

首先这里是我自定义了打印界面才实现的效果&#xff0c;如果不用自定义界面实现&#xff0c;应该是一样的吧。具体可能需要自己去试试看 我的需求是界面有两个表格&#xff0c;点击全部打印&#xff0c;我需要把第一表格在打印是第1页&#xff0c;第二个表格是第二页 如图&…...

基于 Erlang 的随机账户分配机制

当你在网上注册新账户时&#xff0c;平台如何为你生成一个独特的用户名或编号呢&#xff1f;这背后其实有一套精心设计的系统。本文将带你了解一种使用 Erlang 语言开发的随机账户分配系统&#xff0c;它既快速又可靠。 ## 随机分配的简单步骤 我们可以将这个过程想象成一个装…...

数码论坛系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)电子科技数码爱好者交流信息新闻畅聊讨论评价

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…...

时序预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络时间序列预测

时序预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSTM【24年新算法】…...

探索设计模式的魅力:AI大模型如何赋能C/S模式,开创服务新纪元

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 AI大模型如何赋能C/S模式&#xff0c;开创服务新纪元 数字化飞速发展的时代&#xff0c;AI大模型…...

2024年NAND价格市场继续上涨

TrendForce发布了最新的NAND闪存市场价格走势预测。根据其报告&#xff0c;在2024年第二季度&#xff0c;NAND闪存合同价格将进一步呈现两位数的增长&#xff0c;叠加前一季度的增长。不过&#xff0c;客户端SSD的价格涨幅预计在第二季度将不超过15%&#xff0c;相比于2024年第…...

分布式算法 - ZAB算法

ZAB算法是用于实现分布式系统中的原子广播的核心算法&#xff0c;它被广泛应用于ZooKeeper分布式协调服务中。 ZAB算法由两个主要阶段组成&#xff1a;崩溃恢复阶段和消息广播阶段。 在崩溃恢复阶段&#xff0c;当一个ZooKeeper节点启动或者领导者节点崩溃重启时&#xff0c;…...

Java设计之道:色即是空,空即是色

0.引子 我们的这个世界上&#xff0c;存在这么一种东西&#xff1a; 第一&#xff1a;它不占据任何3D之体积&#xff0c;即它没有Volume第二&#xff1a;它也不占据任何2D之面积&#xff0c;即它没有Area第三&#xff1a;它也不占据任何1D之长度&#xff0c;即它没有Length 总…...

深度学习:基于PyTorch的模型解释工具Captum

深度学习&#xff1a;基于PyTorch的模型解释工具Captum 引言简介示例安装解释模型的预测解释文本模型情绪分析问答 解释视觉模型特征分析特征消融鲁棒性 解释多模态模型 引言 当我们训练神经网络模型时&#xff0c;我们通常只关注模型的整体性能&#xff0c;例如准确率或损失函…...

公司官网怎么才会被百度收录

在互联网时代&#xff0c;公司官网是企业展示自身形象、产品与服务的重要窗口。然而&#xff0c;即使拥有精美的官网&#xff0c;如果不被搜索引擎收录&#xff0c;就无法被用户发现。本文将介绍公司官网如何被百度收录的一些方法和步骤。 1. 创建和提交网站地图 创建网站地图…...

机器学习模型——SVM(支持向量机)

基本概念&#xff1a; Support Vector Machine &#xff08;支持向量机&#xff09;: 支持向量&#xff1a;支持或支撑平面上把两类类别划分开来的超平面的向量点。 机&#xff1a;一个算法 SVM是基于统计学习理论的一种机器学习方法。简单地说&#xff0c;就是将数据单元…...

制作俄语网站/南宁网站推广营销

传入一个需要比较的字符串。例如 [value compare:"********"] &#xff0c;返回 NSOrderedSame。 options:(NSStringCompareOptions)传入 NSStringCompareOptions 枚举的值 enum{NSCaseInsensitiveSearch 1,//不区分大小写比较NSLiteralSearch 2,//区分大小写比较N…...

如何制作网站后台/b站推广入口2023破解版

npm install laravel-echo-server -g安装了之后在其他目录无法执行&#xff0c;找不到命令&#xff0c;在windows下可以直接使用&#xff0c;在linux下需要配置下环境变量 npm prefix -g 该命令可以看到node全局环境的目录在哪里 将node环境中bin目录中的生成的 laravel-echo-…...

雄安专业网站建设方案/域名访问网站怎么进入

词汇&#xff1a;embracing 包围支持的embracemanufacture制造ECMA:European Computer Manufactures Associationinfrastructure 基础设施Mono是一个由Novell公司(由Ximian发起&#xff0c;并由Miguel de lcaza领导的&#xff0c;一个致力于开创.NET在Linux上使用的开源工程。M…...

厦门做网站价格/无锡百姓网推广

HashMap的构造方法 //默认负载因子值 static final float DEFAULT_LOAD_FACTOR 0.75f; //HashMap最大容量:2的30次方 static final int MAXIMUM_CAPACITY 1 << 30; //当前HashMap所能容纳的键值对的最大值&#xff0c;超过就会进行扩容 int threshold; //负载因子 fina…...

百度权重查询方法/东莞百度推广优化排名

为什么80%的码农都做不了架构师&#xff1f;>>> 运行一下 python manage.py sycdb 报错&#xff1a; ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb 运行&#xff1a; pip install mysql-python 报错&#xff1a;EnvironmentError…...

汕头市门户网站建设/关键词查询工具有哪些

netstat -ntpl kill -9 PID...