第33章 - Go语言 云原生开发

第33章 - 云原生开发将深入探讨云原生技术及其在现代软件开发中的应用。我们将从云原生的基本概念开始,逐步介绍Kubernetes的基本使用方法,并结合具体的云服务提供商实例,通过Go语言编写的应用程序来展示如何实现云原生开发。

33.1 云原生的概念

云原生(Cloud Native)是一种构建和运行应用程序的方法,它充分利用云计算的优势,以快速、灵活、可扩展的方式开发和部署应用。云原生应用通常具备以下特点:

  • 微服务架构:将应用拆分为一系列小的服务,每个服务实现特定的业务功能,并且可以独立地进行开发、测试、部署和扩展。
  • 容器化:使用容器(如Docker)来打包应用及其依赖,确保应用在不同环境中具有一致的行为。
  • 持续集成/持续部署 (CI/CD):自动化地构建、测试和部署应用,加快软件交付速度。
  • 动态管理:利用云平台提供的服务自动管理应用的生命周期,包括负载均衡、自动扩缩容等。
  • 面向服务的架构:强调服务之间的解耦,使系统更加模块化,易于维护和更新。

33.2 Kubernetes入门

Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动部署、扩展和管理容器化的应用。Kubernetes的主要组件包括:

  • Pods:Kubernetes中最小的部署单元,可以包含一个或多个容器。
  • Services:定义了访问Pods的方式,提供负载均衡和网络服务发现。
  • Deployments:描述了应用的理想状态,Kubernetes会自动保证这个状态。
  • ReplicaSets:确保任意时刻都有指定数量的Pod副本处于运行状态。
  • Volumes:为Pods提供存储卷,支持数据持久化。

33.3 云服务提供商

云服务提供商(CSPs)提供了丰富的服务来支持云原生开发,例如:

  • 阿里云:提供了一站式的云原生解决方案,包括容器服务ACK、Serverless应用引擎SAE等。
  • AWS:Amazon Web Services 提供了广泛的云原生服务,如EKS(Elastic Kubernetes Service)、Lambda等。
  • Google Cloud:提供了GKE(Google Kubernetes Engine)等服务,支持高效管理和扩展Kubernetes集群。

33.4 结合案例及源代码

假设我们正在开发一个基于Go语言的简单Web应用,该应用将部署在一个Kubernetes集群上,并使用阿里云的容器服务ACK来管理这个集群。

应用设计

我们的应用将是一个简单的RESTful API服务器,提供用户信息的查询和创建功能。

技术栈
  • 后端:Go语言 + Gin框架
  • 数据库:MySQL
  • 容器化:Docker
  • 编排:Kubernetes
  • 云服务:阿里云容器服务ACK
源代码示例

下面是一个简单的Go应用示例,使用Gin框架实现了一个基本的API接口。

package main

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()

    // 路由处理
    r.GET("/users", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "Hello from the user service!",
        })
    })

    // 启动服务
    r.Run(":8080")
}
Dockerfile

为了容器化我们的应用,我们需要创建一个Dockerfile文件:

FROM golang:1.17-alpine as builder
WORKDIR /app
COPY . .
RUN go build -o app .

FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/app .
CMD ["./app"]
部署到Kubernetes

创建一个Kubernetes Deployment和Service来部署我们的应用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: go-web
  template:
    metadata:
      labels:
        app: go-web
    spec:
      containers:
      - name: go-web
        image: your-docker-repo/go-web-app:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: go-web-service
spec:
  selector:
    app: go-web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer
使用阿里云ACK
  1. 在阿里云控制台创建一个新的Kubernetes集群。
  2. 将上面的YAML文件应用到你的集群中,可以通过kubectl apply -f deployment.yaml命令完成。
  3. 访问Service的外部IP地址,测试你的应用是否正常工作。

33.5 优化应用性能

在云原生环境中,优化应用性能是至关重要的。以下是一些常见的优化策略:

1. 资源限制与请求

在Kubernetes中,可以为Pod设置资源限制(limits)和请求(requests),以确保每个Pod都能获得所需的资源,同时防止某个Pod占用过多资源导致其他Pod资源不足。

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: your-image
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
2. 水平自动扩展

Kubernetes提供了Horizontal Pod Autoscaler(HPA),可以根据CPU使用率或其他自定义指标自动调整Pod的数量。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: go-web-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: go-web-app
  minReplicas: 3
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
3. 缓存与CDN

使用缓存和内容分发网络(CDN)可以显著提高应用的响应时间和用户体验。例如,可以使用Redis作为缓存层,或者使用阿里云的CDN服务来加速静态资源的加载。

33.6 确保应用安全性

在云原生环境中,安全是不可忽视的重要方面。以下是一些常见的安全措施:

1. 网络策略

Kubernetes网络策略(Network Policies)可以控制Pod之间的通信,确保只有授权的流量才能到达目标Pod。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: go-web-app-policy
spec:
  podSelector:
    matchLabels:
      app: go-web
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 8080
2. 身份验证与授权

使用OAuth2、OpenID Connect等协议进行身份验证和授权,确保只有经过认证的用户才能访问应用的敏感数据。

3. 加密传输

使用HTTPS协议加密传输数据,确保数据在传输过程中不被窃取或篡改。

33.7 利用云服务提供商的高级特性

云服务提供商通常提供许多高级特性来提升应用的可靠性和可维护性。以下是一些常见的高级特性:

1. 监控与日志

使用阿里云的ARMS(Application Real-Time Monitoring Service)和SLS(Log Service)来监控应用的性能和日志,及时发现并解决问题。

2. 备份与恢复

利用阿里云的RDS(Relational Database Service)自动备份功能,确保数据的安全性和可恢复性。

3. 服务网格

使用阿里云的服务网格ASM(Alibaba Cloud Service Mesh)来管理微服务之间的通信,提供统一的服务治理能力。

33.8 实战案例

假设我们正在开发一个电商应用,该应用需要处理大量的用户请求和数据操作。以下是具体的技术方案和步骤:

1. 应用架构
  • 前端:React应用,托管在阿里云OSS(Object Storage Service)上,使用CDN加速。
  • 后端:Go语言开发的API服务,使用Gin框架。
  • 数据库:MySQL,托管在阿里云RDS上。
  • 缓存:Redis,托管在阿里云KVStore上。
  • 消息队列:RabbitMQ,托管在阿里云MQ上。
  • 容器编排:Kubernetes,使用阿里云ACK管理。
2. 部署流程
  1. 代码仓库:将应用代码托管在GitHub或GitLab上。
  2. 持续集成/持续部署(CI/CD):使用Jenkins或GitHub Actions自动化构建和测试流程。
  3. 镜像构建:使用Docker构建应用镜像,并推送到阿里云CR(Container Registry)。
  4. Kubernetes部署:使用Helm或Kustomize管理Kubernetes资源文件,通过kubectl命令将应用部署到ACK集群。
  5. 服务发现:使用Kubernetes的Service和Ingress资源进行服务发现和路由管理。
  6. 监控与告警:使用Prometheus和Grafana监控应用性能,使用Alertmanager配置告警规则。
3. 示例代码

以下是一个简单的Go应用示例,展示了如何连接到MySQL数据库并执行查询操作:

package main

import (
    "database/sql"
    "fmt"
    "log"
    "net/http"

    _ "github.com/go-sql-driver/mysql"
    "github.com/gin-gonic/gin"
)

var db *sql.DB

func initDB() {
    var err error
    dsn := "user:password@tcp(db-service:3306)/dbname"
    db, err = sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }
    if err = db.Ping(); err != nil {
        log.Fatal(err)
    }
}

func getUser(c *gin.Context) {
    rows, err := db.Query("SELECT id, name FROM users")
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }
    defer rows.Close()

    var users []map[string]interface{}
    for rows.Next() {
        var id int
        var name string
        if err := rows.Scan(&id, &name); err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        users = append(users, map[string]interface{}{"id": id, "name": name})
    }

    c.JSON(http.StatusOK, users)
}

func main() {
    initDB()
    defer db.Close()

    r := gin.Default()
    r.GET("/users", getUser)
    r.Run(":8080")
}
4. Dockerfile
FROM golang:1.17-alpine as builder
WORKDIR /app
COPY . .
RUN go build -o app .

FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/app .
CMD ["./app"]
5. Kubernetes资源配置
apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: go-web
  template:
    metadata:
      labels:
        app: go-web
    spec:
      containers:
      - name: go-web
        image: your-docker-repo/go-web-app:latest
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_HOST
          value: "db-service"
        - name: MYSQL_PORT
          value: "3306"
        - name: MYSQL_USER
          value: "user"
        - name: MYSQL_PASSWORD
          value: "password"
        - name: MYSQL_DB
          value: "dbname"
---
apiVersion: v1
kind: Service
metadata:
  name: go-web-service
spec:
  selector:
    app: go-web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

33.9 总结

通过本章的学习,我们深入了解了云原生开发的核心概念和技术栈,掌握了如何使用Kubernetes和阿里云服务来构建、部署和管理云原生应用。通过实际的案例和源代码,我们展示了如何优化应用性能、确保应用安全,并利用云服务提供商的高级特性来提升应用的可靠性和可维护性。

接下来我们将继续深入探讨一些高级主题,包括如何进行故障排除、如何实现多环境管理、如何进行灰度发布和蓝绿部署,以及如何利用云原生工具进行持续集成和持续部署(CI/CD)。

33.10 故障排除

在云原生环境中,故障排除是一项重要技能。以下是一些常见的故障排除方法和工具:

1. 日志分析

使用Kubernetes的kubectl logs命令查看Pod的日志,帮助诊断应用问题。

kubectl logs <pod-name>

如果应用使用了集中式日志系统(如阿里云SLS),可以通过日志搜索和分析工具来快速定位问题。

2. 事件查看

使用kubectl get events命令查看集群中的事件,了解Kubernetes资源的状态变化。

kubectl get events --sort-by=.metadata.creationTimestamp
3. 网络调试

使用kubectl exec命令进入Pod内部,使用网络工具(如curlnetstat)进行网络调试。

kubectl exec -it <pod-name> -- /bin/sh
4. 性能监控

使用Prometheus和Grafana监控应用的性能指标,如CPU使用率、内存使用率、请求延迟等。

33.11 多环境管理

在云原生开发中,通常需要管理多个环境,如开发环境、测试环境和生产环境。以下是一些常见的多环境管理方法:

1. Kubernetes命名空间

使用Kubernetes命名空间(Namespace)隔离不同的环境,每个环境使用一个独立的命名空间。

apiVersion: v1
kind: Namespace
metadata:
  name: dev
---
apiVersion: v1
kind: Namespace
metadata:
  name: test
---
apiVersion: v1
kind: Namespace
metadata:
  name: prod
2. 配置管理

使用ConfigMap和Secret管理环境变量和敏感信息,避免硬编码在代码中。

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  app.env: "dev"
  app.log.level: "debug"
---
apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  db.password: <base64-encoded-password>
3. 环境变量注入

在Deployment中注入环境变量,根据不同的环境配置不同的值。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: go-web
  template:
    metadata:
      labels:
        app: go-web
    spec:
      containers:
      - name: go-web
        image: your-docker-repo/go-web-app:latest
        ports:
        - containerPort: 8080
        envFrom:
        - configMapRef:
            name: app-config
        - secretRef:
            name: app-secret

33.12 灰度发布和蓝绿部署

灰度发布和蓝绿部署是两种常见的发布策略,可以帮助减少新版本上线的风险。

1. 灰度发布

灰度发布是指在新版本完全上线之前,先让一部分用户使用新版本,收集反馈和监控数据,再决定是否全面推广。

示例

使用Kubernetes的Ingress和Service实现灰度发布。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-web-ingress
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: go-web-canary
            port:
              number: 80
---
apiVersion: v1
kind: Service
metadata:
  name: go-web-canary
spec:
  selector:
    app: go-web-canary
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
2. 蓝绿部署

蓝绿部署是指在新版本上线时,保留旧版本的运行环境,新版本在新的环境中运行,确认无误后再切换流量到新版本。

示例

使用Kubernetes的Deployment和Service实现蓝绿部署。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-web-app-green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: go-web-green
  template:
    metadata:
      labels:
        app: go-web-green
    spec:
      containers:
      - name: go-web
        image: your-docker-repo/go-web-app:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: go-web-service
spec:
  selector:
    app: go-web-green
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

33.13 持续集成和持续部署(CI/CD)

CI/CD是现代软件开发的重要实践,可以帮助团队更快、更可靠地交付软件。以下是一些常见的CI/CD工具和实践:

1. GitHub Actions

GitHub Actions是一个强大的CI/CD工具,可以直接在GitHub仓库中配置流水线。

示例

创建一个.github/workflows/ci-cd.yml文件,配置CI/CD流水线。

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.17

    - name: Build application
      run: go build -o app .

    - name: Build Docker image
      run: docker build -t your-docker-repo/go-web-app:latest .

    - name: Push Docker image
      run: |
        echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
        docker push your-docker-repo/go-web-app:latest

    - name: Deploy to Kubernetes
      run: |
        kubectl apply -f k8s/deployment.yaml
        kubectl apply -f k8s/service.yaml
      env:
        KUBECONFIG: ${{ secrets.KUBECONFIG }}
2. Jenkins

Jenkins是一个流行的CI/CD工具,支持多种插件和集成方式。

示例

创建一个Jenkinsfile,配置CI/CD流水线。

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-repo/go-web-app.git'
            }
        }

        stage('Build') {
            steps {
                sh 'go build -o app .'
            }
        }

        stage('Test') {
            steps {
                sh 'go test ./...'
            }
        }

        stage('Build Docker Image') {
            steps {
                sh 'docker build -t your-docker-repo/go-web-app:latest .'
            }
        }

        stage('Push Docker Image') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'docker-credentials', usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {
                    sh '''
                        echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
                        docker push your-docker-repo/go-web-app:latest
                    '''
                }
            }
        }

        stage('Deploy to Kubernetes') {
            steps {
                withKubeConfig([credentialsId: 'kubeconfig-credentials']) {
                    sh 'kubectl apply -f k8s/deployment.yaml'
                    sh 'kubectl apply -f k8s/service.yaml'
                }
            }
        }
    }
}

33.14 总结

通过本章的学习,我们不仅深入探讨了云原生开发的核心概念和技术栈,还学习了如何进行故障排除、多环境管理、灰度发布和蓝绿部署,以及如何利用CI/CD工具实现持续集成和持续部署。

希望这些内容能够帮助你在云原生开发的道路上更进一步,构建出高效、稳定、可扩展的应用。如果你有任何问题或需要进一步的帮助,请随时联系我。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI安全:从现实关切到未来展望

近年来&#xff0c;人工智能技术飞速发展&#xff0c;从简单的图像识别到生成对话&#xff0c;从自动驾驶到医疗诊断&#xff0c;AI技术正深刻改变着我们的生活。然而&#xff0c;伴随着这些进步&#xff0c;AI的安全性和可控性问题也日益凸显。这不仅涉及技术层面的挑战&#…

nfs网络文件系统

NFS(Network File system&#xff0c;网络文件系统)是由SUN公司研制的UNIX表示层协议&#xff0c;它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源&#xff0c;主要在unix系列操作系统上使用。在NFS的应用中&#xff0c;本地NFS的客户端应用可以…

mac终端配置-支持 git branch

mac 终端一般使用的是 zsh&#xff1b; 由于不想安装三方的软件&#xff0c;可以自行编写脚本实现一些效果&#xff1b; 最终效果如下&#xff0c;支持显示git 分支&#xff1a; git_branch(){branch"git branch 2>/dev/null | grep "^\*" | sed -e "…

tableau练习-制作30个图表

一、导入数据 1、导入数据 -添加-添加连接-到文件-excel格式用第一个excel导入&#xff0c;csv格式用第二个文本格式导入 2、连接数据 -从旁边这里直接拖到中间 标头连接 -日期若不一致需调节日期格式 3、保存数据 点击数据提取-再保存数据&#xff0c;保存为twbx格式 二、设计…

使用八爪鱼爬虫抓取汽车网站数据,分析舆情数据

我是做汽车行业的&#xff0c;可以用八爪鱼爬虫抓取汽车之家和微博上的汽车文章内容&#xff0c;分析各种电动汽车口碑数据。 之前&#xff0c;我写过很多Python网络爬虫的案例&#xff0c;使用requests、selenium等技术采集数据&#xff0c;这次尝试去采集小米SU7在微博、汽车…

【HarmonyOS开发实战】使用animation 和 animateTo来制作按钮动画(实现点击按钮释出更多小按钮)

如果你想在页面中添加按钮来实现页面跳转或者其他操作&#xff0c;又觉得过多的按钮太占地方&#xff0c;造成界面不美观。 那么我们可以将多个按钮“压缩”到一个按钮中&#xff0c;如下 在开始开发前&#xff0c;我们先了解一下animation和animateTo的区别。 animation&am…

国家级资质!同驭汽车获得CNAS实验室认证

近日&#xff0c;同驭汽车科技顺利通过中国合格评定国家认可委员会&#xff08;简称CNAS&#xff09;评审&#xff0c;获得《中国合格评定国家认可委员会实验室认可证书》。这标志着同驭已建立国际标准的实验室管理体系&#xff0c;产品的试验与检测技术能力达到了国际认可的准…

选择使用whisper.cpp进行语音转文字

需要将一些wav格式的语音文件转成文字&#xff08;ASR&#xff0c;STT&#xff09;&#xff0c;接到这个任务后&#xff0c;首先上网搜索有没有现成免费的工具或服务可以使用。常用的关键字如“语音转文字 免费 在线”。 搜到的很多野鸡网站&#xff0c;都可以免注册免费提供短…

消息称三星正与 OpenAI 洽谈,有望令 Galaxy AI 整合ChatGPT,三星都要和chatgpt合作了,你会使用chatgpt了吗?

还不知道怎么订阅chatgpt4.o和国外app服务的同学&#xff0c;可以看这里&#xff1a;WildCard官方平台订阅chatgpt 11 月 25 日消息&#xff0c;金融分析师 Dan Nystedt 在 X 平台透露称 OpenAI 正在与三星电子洽谈合作计划&#xff0c;讨论将其 ChatGPT 引入三星 Galaxy AI 的…

candence: 常用的一些命令: Move / Mirror / Rotate / Spain / Fix / unFix / Flipdesign

常用的一些命令 一、 Move 移动 一个可移动一个&#xff0c;也可多个 移动器件 二、 Mirror 镜像 Mirror 就是top 和 bottom 层的器件进行相互转换 三、 Rotate 旋转 移动过程中旋转 四、旋转 Spain 不能在移动中旋转 可以一次旋转一个&#xff0c;也可多个 一次旋转…

【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转rknnpytorch转onnxonnx转rkn…

Hadoop3.3.6集群安装

Hadoop3.3.6 三节点集群安装 准备工作 准备三台机器&#xff0c;大小为4c8g&#xff0c;主节点为 8c16g。并需要保证网络连通性&#xff0c;每台机器都相互ping一下 1、关闭网络防火墙 # 查看网络防火墙状态 sudo systemctl status firewalld # 立即停止 firewalld sudo sy…

计算机网络-GRE(通用路由封装协议)简介

昨天我们学习了VPN的基本概念&#xff0c;虚拟专用网络在当前企业总部与分支间广泛使用。常用的划分方法为基于协议层次有GRE VPN、IPSec VPN、L2TP VPN、PPTP VPN、SSL VPN等。其实我有考虑该怎么讲&#xff0c;因为在IP阶段好像虚拟专用网络讲得不深&#xff0c;在IE的阶段会…

Android 应用测试的各种环境问题记录(Instrumentation测试)

报错记录 failed to configure packages targetSdkVersion&#xff08;未解决&#xff09; failed to configure com.demo.test.SettingsActivityTest.testOnCreate_withNullSavedInstanceState: Package targetSdkVersion34 > maxSdkVersion32 java.lang.IllegalArgumentE…

计算机网络复习笔记(湖科大教书匠)

课程链接&#xff1a;【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】 https://www.bilibili.com/video/BV1c4411d7jb/?p61&share_sourcecopy_web&vd_sourcecd12864239c2976e9f2bce4b307393f0 一、基础概念 信息交换方式 电路交换 电话交换机接通…

探索运维新视界,CMDB的3D机房功能深度解析

在数字化转型的浪潮中&#xff0c;数据中心作为企业信息架构的核心&#xff0c;其高效、智能的管理成为了企业竞争力的关键因素之一。3D机房作为这一趋势下的创新产物&#xff0c;正逐步改变着传统机房运维的面貌。本文将结合乐维CMDB&#xff0c;深入探讨3D机房的功能细节、应…

时序论文25|ShapeFormer: 用于多变量时间序列分类的Shapelet Transformer

论文标题&#xff1a;ShapeFormer: Shapelet Transformer for Multivariate Time Series Classification 论文链接&#xff1a;https://arxiv.org/abs/2405.14608 代码链接&#xff1a;https://github.com/xuanmay2701/shapeformer. 前言 本文面向的任务是多元时间序列分类…

Unity 设计模式-状态模式(State Pattern)详解

状态模式&#xff08;State Pattern&#xff09; 状态模式&#xff08;State Pattern&#xff09; 是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态发生改变时改变其行为。状态模式将与状态相关的行为封装在独立的状态类中&#xff0c;系统在运行时根据状态的变化…

C 语言复习总结记录六

C 语言复习总结记录六 一 指针 指针是什么 &#xff1f; 指针是内存中一个最小单元的编号&#xff0c;也就是地址 指针通常是指指针变量&#xff0c;用来存放内存地址的变量 指针变量 &#xff1a;通过 &&#xff08;取地址操作符&#xff09;取出变量的内存起始地址&…

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch中的节点&#xff08;比如共20个&#xff09;&#xff0c;其中的10个选了一个master&#xff0c;另外10个选了另一个master&#xff0c;怎么办&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch中的节…