数仓工具使用Docker部署DolphinScheduler 3.2.0 (分布式任务调度系统)-单机模式

news2024/11/15 13:50:51

Apache DolphinScheduler——开源大数据调度器神器
Apache DolphinScheduler(海豚调度),国人之光,是许多国人雷锋开源在Apache的顶级项目,主要功能就是负责任务的调度处理,Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用,架构如图,大概看一下
在这里插入图片描述
架构分布图说明:
分布式 :就是可以这个组件不同的部分可以分布在不同的机器上,整体的协调工作完成任务调度;(为啥要分布式而不装在一台,因为一头牛拉一大堆物资可能会累死,除了培养更加强壮的牛以外,还可以让多头牛去拉);
去中心化:DolphinScheduler有多台master(负责发号施令,布置任务,接受成果),假设有m1,m2,m3……,也有多台worker(负责真正干活的小弟),假设有w1,w2,w3……,而这些机器都注册在zookeeper,每次任务A来的时候,都同时需要m和w,但是根据你配置的不同任务A将分到不同的m和w上,而不是单纯在一个单点上运行,提高容错性,当然如果你玩单机模式,则不存在这个概念;
易扩展:既然master,worker可以有多个,那可不可有更多,所以DolphinScheduler是支持扩容的,反之,实践中发现太败家了,需要回收一些机器,也是可以支持缩容的;
可视化DAG工作流任务调度:就是除了提供查看日志来查看任务和工作流的运行情况,还有个有序无环图可查看任务和工作流的运行情况;
处理流程中错综复杂的依赖关系:现在有要跑的项目A,B;项目A有工作流a1(内有任务一s1,任务二s2),a2(内有任务一s3,任务二s4),a3(内有任务一s5,任务二s6);项目B里面有工作流b1(内有任务一s7,任务二s8),b2(内有任务一s9,任务二s10);一般的任务调度器,都能保证一个工作流内的任务如s1,s2是有序往下运行的,当然也可并行;但是有些调度器就实现不了工作流a1和a2以及a3之间有依赖关系了,比如某些场景下必须工作流b1先跑完,才可以跑a1,a2;那更甚至的必须先跑完整个项目B才能跑 项目A就更不支持了,即项目之间有壁垒,这些都是比价差劲的,需要用户自己想办法去实现,但是DolphinScheduler这些缺陷都填了,即以上的这些复杂依赖关系,不论是工作流之间,项目之间都支持;
架构图
在这里插入图片描述
DolphinScheduler支持多种部署模式,包括单机模式(Standalone)伪集群模式(Pseudo-Cluster)集群模式(Cluster)等。
1)单机模式
单机模式下,所有的服务都集中于一个StandaloneServer进程中,并且在其中内置了注册中心Zookeeper和数据库H2,只需要配置JDK环境,就可以一键启动DolphinScheduler。
一般用于快速体验功能。
2)伪集群模式
伪集群模式是在单台机器上部署DolphinScheduler各项服务,该模式下master、worker、api server、logger server等服务都只在同一台机器上。Zookeeper和数据库需单独安装并进行相应配置。
适用于公司中正式上线前的测试集群。
3 )集群模式
集群模式与伪集群模式的区别就是在多台机器上部署DolohinScheduler各项服务,并且可以配置多个Master及多个Worker。
DolphinScheduler概述
DolphinScheduler是一个分布式、易扩展的可视化DAG工作流调度平台,致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。
DolphinScheduler组件
DolphinScheduler主要包含以下几个部分:
1)MasterServer
采用分布式无中心设计理念。
MasterServer主要负责DAG(工作流)任务切分、任务提交(提交给WorkerServer并分配任务给WorkerServer)、任务监控,并同时监听其它的MasterServer和WorkerServer的健康状态(为了做高可用,容错机制。假如有一个WorkerServer挂掉了,要把它的工作分配给别的WorkerServer;假如有一个MasterServer挂掉了,那么这个MasterServer负责的工作就要交给别的MasterServer去负责,哪个MasterServer抢到它就负责)。
2)WorkerServer
也采用分布式无中心设计理念。
WorkerServer主要负责任务的执行和提供日志服务。
3)Zookeeeper
系统中的MasterServer和WorkerServer节点都通过Zookeeper来进行集群管理和容错,zookeeper负责协调整个集群。
4)Alert
Alert服务,提供告警相关服务(电话、邮件等等)。
5)API接口
API接口层,主要负责处理前端UI的请求,比如前端要看有哪些任务再执行,执行的进度如何,都要通过API接口调用。
6)UI
UI是整个系统的前端页面,提供系统的各种可视化操作界面。
接下来就来进入实战演练呀,先是单机模式,
如果是非单例模式请看另外一篇文章:

https://blog.csdn.net/weimeilayer/article/details/141052040

首先安装部署DolphinScheduler需要docker 19x以上

1.安装docker-ce
安装依赖的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

添加Docker的阿里云yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新软件包索引

yum makecache fast

查看docker版本,这里选择25.0.5

yum list docker-ce --showduplicates |sort –r

安装docker-ce

yum install -y docker-ce-25.0.5

2.启动Docker服务

systemctl start docker             #启动Docker
systemctl enable docker.service    #设置开机自启

查看docker版本

docker --version

开始拉取dolphinscheduler镜像

docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler-standalone-server:3.2.0

启动服务
使用 standalone-server 镜像

docker run --name dolphinscheduler-standalone-server \
    -p 32000:12345 \
    -p 25333:25333 \
    -v /data/dolphinscheduler:/opt/dolphinscheduler \
    -d registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler-standalone-server:3.2.0

添加了重启策略 --restart unless-stopped,它确保容器自动重启,除非它被明确停止。这提高了服务器重新启动或容器崩溃时的可靠性。

docker run --name dolphinscheduler-standalone-server \
    -p 32000:12345 \
    -p 25333:25333 \
    -v /data/dolphinscheduler:/opt/dolphinscheduler \
    -e DOLPHINSCHEDULER_OPTS="-Xms512m -Xmx1024m" \
    --restart unless-stopped \
    -d registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler-standalone-server:3.2.0

swagger 地址:http://ip:端口/dolphinscheduler/swagger-ui/index.html
在这里插入图片描述
登录DolphinScheduler界面
启动服务后,在浏览器中输入http://ip:端口/dolphinscheduler/ui 访问DolphinScheduler.
默认的用户名:admin 密码:dolphinscheduler123
在这里插入图片描述
登录成功后进入到DolphinScheduler的管理界面。
在这里插入图片描述
然后是准备驱动,上传到 /data/dolphinscheduler/目录下

kingbase8-8.6.0.jar
mysql-connector-j-8.4.0.jar
mysql-connector-java-5.1.48.jar
ojdbc6-11.2.0.3.jar
postgresql-42.7.3.jar
DmJdbcDriver18-8.1.2.79.jar

然后进入/data/dolphinscheduler/目录

cd /data/dolphinscheduler

然后复制驱动到容器中

docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/

docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/

docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/

docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/

# 暂时可以不需要
docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/

然后有需要使用到datax的组件需要python3环境
进入容器直接执行命令

apt-get update
apt-get install -y python3 python3-pip
apt-get install -y python python-pip
python3 --version 
pip3 --version

然后有需要使用到datax的组件需要python2环境
进入容器直接执行命令

apt-get update
apt-get install -y python python-pip
python --version
pip --version

此时此刻就完成部署了,就可以测试连接了
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e0d2417ba371480893c1f7a24fed54f2.png
测试Doris 连接成功了
在这里插入图片描述

如何使用Kubernetes上部署dolphinscheduler-standalone-server
创建vi dolphinscheduler-deployment.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: dolphinscheduler-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/dolphinscheduler"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dolphinscheduler-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dolphinscheduler-standalone-server
  labels:
    app: dolphinscheduler
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dolphinscheduler
  template:
    metadata:
      labels:
        app: dolphinscheduler
    spec:
      containers:
      - name: dolphinscheduler-standalone-server
        image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler-standalone-server:3.2.0
        ports:
        - containerPort: 12345
          name: api-port
        - containerPort: 25333
          name: master-port
        volumeMounts:
        - name: dolphinscheduler-storage
          mountPath: /opt/dolphinscheduler
      volumes:
      - name: dolphinscheduler-storage
        persistentVolumeClaim:
          claimName: dolphinscheduler-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: dolphinscheduler-service
  labels:
    app: dolphinscheduler
spec:
  selector:
    app: dolphinscheduler
  ports:
  - name: api-port
    protocol: TCP
    port: 12345
    targetPort: 12345
    nodePort: 32000
  - name: master-port
    protocol: TCP
    port: 25333
    targetPort: 25333
    nodePort: 25333
  type: NodePort

然后部署

kubectl apply -f dolphinscheduler-deployment.yaml

第三种在Kubernetes上部署Apache DolphinScheduler

1.建议为DolphinScheduler创建一个单独的命名空间(如果还没创建):

kubectl create namespace dolphinscheduler

2.准备ZooKeeper
DolphinScheduler依赖ZooKeeper作为协调服务。可以使用已有的ZooKeeper服务,也可以在Kubernetes上部署一个新的实例。以下是一个简单的ZooKeeper StatefulSet部署:

vi zookeeper-deployment.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zookeeper
  namespace: dolphinscheduler
spec:
  serviceName: "zookeeper"
  replicas: 3
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
    spec:
      containers:
      - name: zookeeper
        image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/zookeeper:latest
        ports:
        - containerPort: 2181
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

3.准备PostgreSQL,但是MySQL也是可以的
DolphinScheduler依赖PostgreSQL数据库存储任务信息。可以使用已有的PostgreSQL服务,也可以部署一个新的:

vi postgresql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  namespace: dolphinscheduler
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres:latest
        ports:
        - containerPort: 5432
        env:
        - name: POSTGRES_USER
          value: "dolphinscheduler"
        - name: POSTGRES_PASSWORD
          value: "Yo5WYypu0mCCheOU"
        - name: POSTGRES_DB
          value: "dolphinscheduler"

4.部署DolphinScheduler
创建DolphinScheduler的Deployment和Service资源。你需要配置环境变量来连接ZooKeeper和PostgreSQL:

vi dolphinscheduler-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dolphinscheduler
  namespace: dolphinscheduler
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dolphinscheduler
  template:
    metadata:
      labels:
        app: dolphinscheduler
    spec:
      containers:
      - name: dolphinscheduler
        image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler:latest
        ports:
        - containerPort: 12345
        - containerPort: 56789
        env:
        - name: DATABASE_HOST
          value: "plsql.dolphinscheduler.svc.cluster.local"
        - name: DATABASE_PORT
          value: "5432"
        - name: DATABASE_DATABASE
          value: "dolphinscheduler"
        - name: DATABASE_USERNAME
          value: "dolphinscheduler"
        - name: DATABASE_PASSWORD
          value: "Yo5WYypu0mCCheOU"
        - name: ZOOKEEPER_QUORUM
          value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"

  1. 配置Ingress或NodePort
    根据你的集群设置,可能需要配置Ingress或NodePort以暴露DolphinScheduler的Web UI:
vi dolphinscheduler-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: dolphinscheduler-service
  namespace: dolphinscheduler
spec:
  type: NodePort
  ports:
  - port: 12345
    targetPort: 12345
    nodePort: 30001
  - port: 56789
    targetPort: 56789
    nodePort: 30002
  selector:
    app: dolphinscheduler

最后执行

kubectl apply -f zookeeper-deployment.yaml
kubectl apply -f postgresql-deployment.yaml
kubectl apply -f dolphinscheduler-deployment.yaml
kubectl apply -f dolphinscheduler-service.yaml

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

C++--map和set

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.2 map 3.3 multiset 3.4 multimap 4.底层结构 4.3红黑树与AVL树的比较 1. 关联式容器 前面我们已经接触过 STL 中的部分容器,比如: vector 、 list 、 deque、 forward_list(…

自建CDN/WAF解决方案--GoEdge

目录 概述 核心功能 典型应用场景 优点 适用对象 安装 使用 域名准备 DNSPOD的API秘钥申请 添加DNS厂商账号 添加集群 添加节点 添加网站 工作原理 概述 GoEdge 是一款高性能的、支持多种功能的反向代理服务器,通常用于流量管理、负载均衡、安全防护等…

layui2.9 树组件默认无法修改节点图标,修改过程记录下

官方文档树组件 data 参数值&#xff0c;未提供icon属性配置 需要修改源码 layui.js, 搜索图片中标记部分 查找到之后&#xff0c;修改为 <i class“‘(i.icon || “layui-icon layui-icon-file”)’”> 如图&#xff1a; 修改完成后&#xff0c;即可在data中添加icon…

Mysql双主双从

双主双从 1.安装Mysql1.1 查看linux版本1.2 下载Mysql安装包1.3 上传并解压1.4 安装Mysql1.5 编辑端口号1.6 Mysql启动命令1.7 更新密码 2.搭建Mysql主从复制2.1 搭建Master主服务器2.1.1 修改mysql配置文件2.1.2 重启Mysql服务2.1.3 创建Slave用户, 并授权2.1.4 查看主服务器当…

RTOS实战项目之实现多任务系统

文章目录 一、RTOS引入二、任务的引入2.1 任务的定义2.2 理解C函数的内部机制2.3 ARM架构2.4 汇编指令2.5 怎么保存函数的现场①要保存什么②保存现场的几种场景 三、FreeRTOS中怎么创建任务四、通过链表深入理解调度机制4.1 优先级与状态4.2 调度方法 五、创建任务—伪造现场5…

Python青少年简明教程:赋值语句

Python青少年简明教程&#xff1a;赋值语句 变量赋值是指将一个值分配给变量的过程。Python 支持多种形式的赋值&#xff08;assignment&#xff09;&#xff0c;包括基本赋值、多重赋值、链式赋值和解包赋值等。 为了深入理解Python赋值语句机制&#xff0c;先了解一下id()函数…

[Meachines] [Easy] Legacy nmap 漏洞扫描脚本深度发现+MS08-067

信息收集 IP AddressOpening Ports10.10.10.4TCP:135,139,445 $ nmap -p- 10.10.10.4 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows n…

战略合作篇白皮书:深度革新,赋能企业跃迁

01背景 企业数字化转型已经成为当今商业环境中不可避免的趋势&#xff0c;主要有以下几个原因&#xff1a; 技术发展&#xff1a;随着信息技术的迅猛发展和普及&#xff0c;企业面临着数字化转型的迫切需求。云计算、大数据、人工智能等技术正在改变商业模式和运营方式&#xf…

【C++第十四章】进阶模板

【C第十四章】进阶模板 非类型模板参数&#x1f9d0; 我们创建一个类&#xff0c;可以用模板开一个大小的为N的数组&#xff0c;这样优于用宏来定义N&#xff0c;因为可以在创建对象时可以根据需求更改数组大小。我们称在模板定义中使用的不依赖于模板类型的参数为非类型模板参…

当前A股平均市盈率

再写一篇【不务正业】的 2023-08-23A股平均市盈率 来自乐咕乐股网 当前A股市盈率是否为低点&#xff1f; 不言而喻 ‌当前A股市场的市盈率确实处于相对低位。‌ 根据东方财富Choice最新数据显示数据&#xff0c;截至2024年8月23日&#xff0c;全A市盈率为13.06倍&#xff0c;…

(贪心) LeetCode 45. 跳跃游戏 II

原题链接 一. 题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n …

《加油吧少年》热播 编剧蔡璧鸿:创作需要对幽默保持高度关注

近日&#xff0c;校园剧《加油吧少年》正在热播中&#xff0c;该剧以学渣视角&#xff0c;讲述他在高中校园与学霸&#xff0c;女神&#xff0c;死党一起学习&#xff0c;成长和努力拼搏的故事&#xff0c;《加油吧少年》自播出后&#xff0c;便以轻松幽默&#xff0c;诙谐搞笑…

2024口碑最好的四大游泳耳机大揭秘,游泳教练全方位测评分析!

游泳&#xff0c;作为一种全身性的锻炼方式&#xff0c;越来越受到人们的青睐。在水下&#xff0c;人们渴望能够聆听到美妙的音乐&#xff0c;让游泳变得更加有趣和放松。游泳耳机的出现&#xff0c;正是为了满足这一需求。它们不仅能够提供防水、防汗的功能&#xff0c;还能在…

软件测试——自动化测试selenium常用函数

目录 元素的定位cssSelectorxpathxpath语法&#xff1a; 元素定位函数 操作测试对象窗口切换窗口窗口设置大小窗口切换屏幕截图关闭窗口 等待强制等待隐式等待显示等待 浏览器导航弹窗警告弹窗确认弹窗提示弹窗 文件上传浏览器参数设置 元素的定位 web⾃动化测试的操作核⼼是能…

RFID光触发标签在多行业的应用与效益差异

在当今数字化和智能化的浪潮下&#xff0c;RFID技术已成为众多行业优化运营、提升竞争力的关键手段。RFID光触发标签作为这一技术的创新成果&#xff0c;以其独特的性能特点&#xff0c;正逐渐在各个领域发挥着重要作用。 一、RFID光触发标签的特点与参数 &#xff08;一&…

优惠券秒杀项目

一、添加优惠券的同时&#xff0c;将优惠券信息&#xff0c;以及用户列表放到redis中 Override Transactional public void addSeckillVoucher(Voucher voucher) {// 保存优惠券save(voucher);// 保存秒杀信息SeckillVoucher seckillVoucher new SeckillVoucher();seckillVou…

linux dig域名DNS 查询与iptables域名ip访问流量限制;PTR 反向解析从 IP 地址到域名的映射

一、域名 dns查询 在 Linux 系统中&#xff0c;你可以使用多种工具和技术来进行 DNS 查询和 IP 限制。以下是一些常用的方法和工具&#xff1a; DNS 查询 dig 命令&#xff1a; dig 是一个强大的命令行工具&#xff0c;用于查询 DNS 信息。 dig example.com你可以指定查询类型…

【TCP】核心机制:滑动窗口、流量控制和拥塞控制

文章目录 滑动窗口窗口滑动滑动窗口丢包 流量控制拥塞控制窗口大小变化过程 滑动窗口 有一类算法题&#xff0c;就是通过滑动窗口的思想来解决的&#xff0c;算法中的“滑动窗口”借鉴自 TCP 的滑动窗口 TCP 是要保证可靠传输的>代价&#xff0c;降低了传输的效率&#xf…

【机器学习】3. 欧式距离,曼哈顿距离,Minkowski距离,加权欧式距离

Euclidean - L2 norm L2范数 D ( A , B ) ( a 1 − b 1 ) 2 ( a 2 − b 2 ) 2 . . . D(A,B) \sqrt{(a_1-b_1)^2(a_2-b_2)^2 ...} D(A,B)(a1​−b1​)2(a2​−b2​)2... ​ Manhattan D ( A , B ) ∣ a 1 − b 1 ∣ ∣ a 2 − b 2 ∣ . . . D(A,B) \sqrt{|a_1-b_1||a_…

全网最简单的Java设计模式【九】策略模式-实战中最常用的设计模式之一

策略模式是一种行为设计模式&#xff0c;它允许你定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可以相互替换。该模式让算法的变化独立于使用算法的客户。在实际开发中&#xff0c;策略模式可以帮助我们减少大量的 if-else 或 switch 条件判断语句&…