使用docker swarm搭建ruoyi集群环境

news2024/11/27 16:33:09

整体目标

项目背景

领导给到了我一个客户,客户商业模式为成本制作,成本核算。其中涉及到大量涉密数据,且与我们现有产品几乎没有兼容点(我们是一套低代码的框架,客户有很多业务二开)

测试环境给到了我6台业务机器,起初其中4台作为业务服务器,一台作为中间件,一台作为mysql。

6台机器均使用私有云部署,配置均为4c8G。

技术选型

直白的讲,物理器部署资源有限。

框架选型

开源框架:选型是ruoyi微服务框架,原因:开源免费,明星star项目,社区活跃,技术相对主流,自己也熟悉。

技术架构图

这是官方的架构图
在这里插入图片描述

系统架构图

这是我结合我们的系统 画的整体系统架构图
在这里插入图片描述

部署选型

部署方式:因为微服务框架和有限的物理机,我必然是选择集群部署的。市面上相对主流的集群部署毋庸置疑是k8s,但是作为一个之前只是后端的开发人员,在没有人指导的情况下,且有期返时间内,部署生产环境集群着实有点为难了。

K8S与docker swarm的横向对比
比较维度Docker SwarmKubernetes (k8s)
优点简单易用功能强大
与 Docker 集成紧密高度扩展性
快速部署广泛社区支持
轻量级多云支持
缺点功能相对有限学习曲线陡峭
扩展性差资源消耗大
社区和生态较少部署复杂
适用场景中小型项目大规模项目
简单应用复杂应用
初学者跨云部署
学习成本
快速上手深入掌握需要时间
拓展性
有限插件和工具丰富的插件和工具
社区完善度较小庞大
支持较少丰富的第三方支持

额外提一句:现实中,我们往往以结果为导向。虽然k8s不管是从扩展性,社区活跃度都远远超过docker swarm,但奈何学习成本高,我对于初学者不够友好(PS:国内好多站点被封了,之前用kubeadm部署,刷机后又没有资源站点了)。

学习东西是一个渐进的过程,阶段性的交付和成功,会给自己带来快乐。而一下子上来最难的,只能带来无穷的挫败和自我怀疑,最终陷入无限期的搁置(PS:难度因人而异)

docker swarm 介绍

Docker Swarm 是 Docker 提供的原生容器编排工具。它允许用户将多个 Docker 主机组合在一起,形成一个虚拟的 Docker 集群,并在这个集群上管理和部署容器。Swarm 使得用户可以通过熟悉的 Docker 命令和工具管理大规模的 Docker 容器部署。

部署方式就是一个master节点,其他worker节点加入。管理的最小单位是service,可以使用类似docker-compose的文件进行管理service。同时有多个stack,进行一组service的管理。

部署架构图

这是整体多机网络部署架构图
在这里插入图片描述

基于Redhat构建docker、docker-compose

repo配置

在这里插入图片描述

配置文件如下:

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the #mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
 
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
#failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
        http://mirrors.aliyuncs.com/centos/$releasever/BaseOS/$basearch/os/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
 
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
#failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os/
        http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/os/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/os/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
#failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/os/
        http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/os/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
 
[PowerTools]
name=CentOS-$releasever - PowerTools - mirrors.aliyun.com
#failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/PowerTools/$basearch/os/
        http://mirrors.aliyuncs.com/centos/$releasever/PowerTools/$basearch/os/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/PowerTools/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official


[AppStream]
name=CentOS-$releasever - AppStream - mirrors.aliyun.com
#failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/
        http://mirrors.aliyuncs.com/centos/$releasever/AppStream/$basearch/os/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/AppStream/$basearch/os/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

redhat因为客户买的没有注册 所以他的资源文件是空的

阿里云镜像

这个因为一些image在国外,配置一下阿里云镜像会拉取快很多

具体路径 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
按照上面的配置就可以

在这里插入图片描述

部署操作

docker

sudo yum install -y yum-utils

sudo yum install docker-ce docker-ce-cli containerd.io

sudo systemctl start docker

sudo systemctl enable docker

docker-compose

sudo curl -L “https://github.com/docker/compose/releases/download/v2.x.x/docker-compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m)” -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

docker swarm 初始化

docker swarm init

正常情况下,会出现token,如果你没有记录,也可以在manage节点

docker swarm join-token worker

查看对应的swarm的manage的token
在这里插入图片描述

然后再worker节点上 直接直接join就可以了

然后整体的一个node结构如下

在这里插入图片描述

这里我还对hostname做了修改

overlay 网络构建

十分重要

docker network create --driver overlay --subnet=10.10.0.0/24 --gateway=10.10.0.1 sangfor-network

docker中的网络是最为复杂的,同时因为我是跨机之间的网络通讯,这里使用了overlay的配置

然后再整个stack配置文件中,我使用了external: true,使用外部网络

网络查看

正常来说 当你构建完成一个service的构建之后,你要查看这个网络
docker network inspect sangfor-network
在这里插入图片描述

这里面会体现出你的container和对应的ip

需要注意是,当你的使用overlay网络的时候,如果你的某台woker机器上并没有service,那么这个overlay网络是不显示的

同时需要明确的是,查看网络中的container 只有当前机器的container才会显示

yml配置优先网段

需要明确的是,docker container内的网卡是有很多个的,他是哪个可以用就用哪个

所以这里需要结合程序的修改,就是这个preferred-networks,我写了10.10.0网段
在这里插入图片描述

通过这种方式,使得container的ip优先使用这个10.10.0网段

docker-stack部署

这里直接贴我两个的stack文件吧

docker-stack-basic.yml

version : '3.8'
services:
  cloud-mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - /data/cloud/mysql/conf:/etc/mysql/conf.d
      - ./mysql/logs:/logs
      - ./mysql/data:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    command: [
      'mysqld',
      '--innodb-buffer-pool-size=80M',
      '--character-set-server=utf8mb4',
      '--collation-server=utf8mb4_unicode_ci',
      '--default-time-zone=+8:00',
      '--lower-case-table-names=1',
      '--default-authentication-plugin=mysql_native_password'
    ]
    environment:
      MYSQL_DATABASE: 'cloud_business'
      MYSQL_ROOT_PASSWORD: 'yourpassword'
      TZ: 'Asia/Shanghai'
    networks:
      - sangfor-network
    deploy:
      placement:
        constraints:
          - node.labels.mysql == true

  cloud-redis:
    container_name: cloud-redis
    image: redis
    build:
      context: ./redis
    ports:
      - "6379:6379"
    volumes:
      - ./redis/conf/redis.conf:/home/ruoyi/redis/redis.conf
      - ./redis/data:/data
    command: redis-server /home/ruoyi/redis/redis.conf
    environment:
      - TZ=Asia/Shanghai
    networks:
      - sangfor-network
    deploy:
      placement:
        constraints:
          - node.labels.middle == true

networks:
  sangfor-network:
    external: true

docker-stack-sangfor.yml

version : '3.8'
services:
  cloud-portainer:
    image: portainer/portainer-ce:latest
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./portainer/data/:/data
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "9000:9000"
    deploy:
      placement:
        constraints:
          - node.labels.portainer == true
      resources:
        limits:
          cpus: '0.50'
          memory: 500M
    networks:
      - sangfor-network

  cloud-nacos:
    image: nacos/nacos-server
    build:
      context: ./nacos
    environment:
      - MODE=standalone
      - TZ=Asia/Shanghai
    volumes:
      - ./nacos/logs/:/home/nacos/logs
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/liveness"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      - sangfor-network
    deploy:
      placement:
        constraints:
          - node.labels.middle == true

  cloud-nginx:
    image: nginx:1.0
    ports:
      - "80:80"
    volumes:
      - ./nginx/html/dist:/home/cloud/projects/cloud-ui
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
      - ./nginx/conf.d:/etc/nginx/conf.d
    environment:
      - TZ=Asia/Shanghai
    networks:
      - sangfor-network
    deploy:
      placement:
        constraints:
          - node.labels.master == true

  cloud-gateway:
    image: registry.cn-hangzhou.aliyuncs.com/sangfor_authine/cloud_gateway:1.0
    ports:
      - "8080:8080"
    environment:
      TZ: Asia/Shanghai
    deploy:
      placement:
        constraints:
          - node.labels.master == true
    networks:
      - sangfor-network

  cloud-auth:
    image: registry.cn-hangzhou.aliyuncs.com/sangfor_authine/cloud_auth:1.0
    ports:
      - "9200:9200"
    environment:
      - TZ=Asia/Shanghai
    networks:
      - sangfor-network

  cloud-modules-system:
    image: registry.cn-hangzhou.aliyuncs.com/sangfor_authine/cloud_system:1.0
    ports:
      - "9201:9201"
    environment:
      - TZ=Asia/Shanghai
    networks:
      - sangfor-network

  cloud-modules-gen:
    image: registry.cn-hangzhou.aliyuncs.com/sangfor_authine/cloud_gen:1.0
    ports:
      - "9202:9202"
    environment:
      - TZ=Asia/Shanghai
    networks:
      - sangfor-network

  cloud-modules-job:
    image: registry.cn-hangzhou.aliyuncs.com/sangfor_authine/cloud_job:1.0
    ports:
      - "9203:9203"
    environment:
      - TZ=Asia/Shanghai
    networks:
      - sangfor-network

  cloud-modules-file:
    image: registry.cn-hangzhou.aliyuncs.com/sangfor_authine/cloud_file:1.0
    ports:
      - "9300:9300"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./cloud/uploadPath:/home/cloud/uploadPath
    networks:
      - sangfor-network

  cloud-visual-monitor:
    image: registry.cn-hangzhou.aliyuncs.com/sangfor_authine/cloud_monitor:1.0
    ports:
      - "9100:9100"
    environment:
      - TZ=Asia/Shanghai
    networks:
      - sangfor-network

networks:
  sangfor-network:
    external: true

label标签固定

这里可以看到有些service我是固定在某些机器上的,当然前提是你要给你的机器打标签

标签这么打就行了

docker node update --label-add work_node3=true work_node3

我这边打标签分为几种常见场景

1.外部异构系统需要公用redis和mysql

2.portainer 需要在master节点上监控

3.nacos配置我是固定ip的(这里面应该是可以直接使用service名称代替ip的)

端口开放

有些端口需要对外开放,docker swarm中部分port也要打开

开放端口如下

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

sudo firewall-cmd --reload

在这里插入图片描述

image托管

我这里偷懒了 我不想搭建harbor了

我直接把我的阿里云镜像仓库贡献出来了

这些相关的操作文档还是很多的

portainer可视化构建

portainer的构建方式在之前的stack中有

他的最大意义在于可视化的操作,降低scale和查看日志都比较方便

贴几张图

在这里插入图片描述

这里面service和stack他会自动抓取的
在这里插入图片描述

对于容器也可以做一些调配
在这里插入图片描述

查看nacos 内网ip

这个很重要,之前我一直跨机服务的时候 调度不通

查到最后是我的内网nacos ip注册的有问题,这也是前面网络声明网段和我使用preferred-networks的原因

记得在服务列表里面查看自己的ip
在这里插入图片描述

异常情况与排查思路

遇到了太多了卡点和异常了,我现在只记得一些关键卡点和排查思路了

Overlay网络问题

最一开始部署的时候,redis和mysql其实使用docker-compose部署的,然后发现我业务内部调用mysql网络不通。

我不服气,我把swarm集群中的网络改成了外部可以访问 增加了–attachable,但最后发现不行。

还是要放在一个网络里面,所以最后我把之前docker-compose build的mysql和redis 切换为stack部署了(切换代价很小,因为都做了挂载,数据不会丢失)

服务无法调度问题

通俗的讲就是我服务到了nginx,做完转发进入gateway 调不通auth权限。

第一反应其实也是网路问题,最后排查思路是 进入到gateway的容器内部

docker exec -it a927a4a68b2d /bin/bash

然后curl auth服务
在这里插入图片描述

这就是ping的通的

但是真实调研的时候 因为使用的是fegin

他们用的是这个serviceName
在这里插入图片描述

这里面的service名称 要等于nacos的名称
在这里插入图片描述

然后域名访问如下:
在这里插入图片描述

这样服务就基本没啥问题了

naocs 配置

这个完全是我因为我不太熟悉导致的问题

这个yml配置里面 就是cloud-auth-dev配置
在这里插入图片描述

naocs配置中心里面配置保持一致就可以‘

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

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

相关文章

黑马微服务拆分2 (路由 登录 配置)

会利用微服务网关做请求路由 会利用微服务网关做登录身份校验 会利用Nacos实现统一配置管理 会利用Nacos实现配置热更新 今天粗略的完成了黑马笔记里边的代码实现 其实本身黑马商城的源码就写的逻辑有漏洞,加上对业务没有仔细分析 导致出现的bug调试了很久 这…

如何判断自己的数据格式适合使用json还是Excel的形式存入neo4j数据库

判断自己的数据格式适合使用JSON还是Excel的形式存入Neo4j数据库,主要取决于数据的复杂性、规模、结构、以及你或你的团队对这两种格式的熟悉程度。以下是一些关键因素,可以帮助你做出决策: 数据的复杂性: 如果你的数据包含大量的…

【Zynq UltraScale+ RFSoC】~~~

Zynq UltraScale RFSoC 系列为 5G 无线和射频级模拟应用引入了颠覆性的集成和架构突破,可直接支持整个 5G sub-6GHz 频段。这个创新系列现已开始批量生产。此设计演示展示了多通道(8T8R 或 16T16R)Zynq UltraScale RFSoC 评估工具工具工具&am…

ICMP 和 IGMP 的区别

ICMP 和 IGMP 协议 IP 层分支图 ICMP(Internet Control Message Protocol,因特网控制信息协议) 用于补充 IP 传输数据报的过程中,发送主机无法确定数据报是否到达目标主机。 ICMP 报文分为出错报告报文和查询报文两种。 若数据…

C语言 | Leetcode C语言题解之第263题丑数

题目&#xff1a; 题解&#xff1a; bool isUgly(int n) {if (n < 0) {return false;}int factors[] {2, 3, 5};for (int i 0; i < 3; i) {while (n % factors[i] 0) {n / factors[i];}}return n 1; }

python:本机摄像头目标检测实时推理(使用YOLOv8n模型)

本文将介绍如何使用本机摄像头进行目标检测实时推理的python代码。 文章目录 一、下载YOLO权重文件二、环境配置三、完整代码 一、下载YOLO权重文件 https://github.com/ultralytics/ultralytics?tabreadme-ov-file 拉到网页最下面&#xff0c;选择适合的模型&#xff0c;下…

Armv8/Armv9架构的学习大纲-学习方法-自学路线-付费学习路线

本文给大家列出了Arm架构的学习大纲、学习方法、自学路线、付费学习路线。有兴趣的可以关注&#xff0c;希望对您有帮助。 如果大家有需要的&#xff0c;欢迎关注我的CSDN课程&#xff1a;https://edu.csdn.net/lecturer/6964 ARM 64位架构介绍 ARM 64位架构介绍 ARM架构概况…

56、本地数据库迁移到阿里云

现有需求&#xff0c;本地数据库迁移到阿里云上。 库名xy102表 test01test02test01 test023条数据。1、登录阿里云界面创建免费试用ECS实列。 阿里云登录页 (aliyun.com)](https://account.aliyun.com/login/login.htm?oauth_callbackhttps%3A%2F%2Fusercenter2.aliyun.com%…

Spring -- 三层架构

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 应用分层 介绍 在阿里的开发手册里,关于工程结构部分,定义的常见工程的应用分层结构 那么什么是应用分层呢? 应用分层是一种软件开发设计思想,他将应用程序分层N个层次.这N个层次分别负责各…

JVM:JavaAgent技术

文章目录 一、Java工具的介绍二、Java Agent技术1、介绍2、静态加载模式3、动态加载模式 三、搭建java agent静态加载模式环境1、创建maven项目2、编写类和premain方法3、编写MANIFEST.MF文件4、使用maven-assembly-plugin进行打包5、创建Spring Boot应用 一、Java工具的介绍 …

Vscode离线下载对应版本的ms-python.vsix

一、查看vscode的版本号和发行时间 vscode界面中Help-About查看版本号和发行时间&#xff0c;ms-python的发行时间需要和这个时间相近&#xff1a; 二、在github仓库中查看ms-python有什么版本&#xff0c;以及发行时间 github仓库路径 https://github.com/microsoft/vsco…

算法学习笔记(Hello算法)—— 时间复杂度

1.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间&#xff0c;而是算法运行时间随着数据量变大时的增长趋势。 // 算法 A 的时间复杂度&#xff1a;常数阶 void algorithm_A(int n) {System.out.println(0); }// 算法 B 的时间复杂度&#xff1a;线性阶 void algo…

计算机网络入门 -- TCP详解

计算机网络入门 – TCP详解 1.TCP协议 1.1 报文格式 1.32位序号&#xff1a;该条TCP数据携带的起始序号。 2.32位确认序号&#xff1a;期望对方发送数据从那个序号开始发送。 3.4位首部长度&#xff1a;最大为0xF(15)&#xff0c;指的是TCP头部长度。 首部长度 4 位首部长…

huawei USG6001v1学习---防火墙高可靠性(双机热备)

1.什么是双机热备 如图&#xff1a;当左图的防火墙发生故障时&#xff0c;整个系统都会收到影响&#xff0c;而右图即使有防火墙发生故障&#xff0c;但是还有一台防火墙做备份&#xff0c;相对于只有一台防火墙&#xff0c;要可靠些。 由于防火墙上不仅需要同步配置信息&…

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作&#xff0c;本次操作需要java8的版本&#xff0c;将之前安装的java17卸…

大模型学习笔记 - LLM模型架构

LLM 模型架构 LLM 模型架构 1. LLM 核心模型 Transformer2. 详细配置 2.1 归一化方法2.2 归一化模块位置2.3 激活函数2.4 位置编码 2.4.1 绝对位置编码2.4.2 相对位置编码2.4.3 旋转位置编码 RoPE2.4.4 ALiBi位置编码 2.5 注意力机制 2.5.1 完整自注意力机制2.5.2 稀疏注意力机…

【QT】QT 概述(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)

一、Qt 背景介绍 1、什么是 Qt Qt 是一个跨平台的 C 图形用户界面应用程序框架。 它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展。Qt 为开发者提供了一种基于组件的开发模式&#xff0c;开发者可以通过简单的拖拽和…

Puromycin(嘌呤霉素)— pac基因筛选抗生素

Puromycin是由Streptomyces alboniger&#xff08;白黑链霉菌&#xff09;产生的一种氨基糖苷类抗生素&#xff0c;可抑制原核细胞和真核细胞的肽基转移。Puromycin可抑制革兰氏阳性菌、多种动物细胞和昆虫细胞的生长&#xff0c;但是真菌和革兰氏阴性菌对Puromycin具有抗性&am…

大屏系统类优质UI风格

大屏系统类优质UI风格

JetBrains IDE 使用git进行多人合作开发教程

以下DEMO可以用于多人共同开发维护一个项目时&#xff0c;使用Git远程仓库的实践方案 分支管理 dev&#xff1a;开发分支test&#xff1a;测试分支prod&#xff1a;生成分支 个人开发也最起码有一个masterdev&#xff0c;作为主分支和当前开发分支。master永远是稳定版本&am…