使用ClickHouse和Terraform进行CI/CD

Auto Designer实战技巧:从原理图到PCB的高效设计流程 本文详细介绍了使用Auto Designer进行高效PCB设计的完整实战流程。从原理图绘制、封装检查,到PCB模块化布局、规则设置,再到智能布线与覆铜,文章系统拆解了从原理图到Gerber文件输出的核心步骤与技巧,帮助硬件工程师提升设计效率与质量,避免常见错误。 阅读详情

图片

本文字数:11047;估计阅读时间:28 分钟

审校:庄晓东(魏庄)

本文在公众号【ClickHouseInc】首发

简介

在 ClickHouse,我们致力于以 API 为先的开发方式来构建 ClickHouse Cloud。用户通过用户界面执行的每个操作都应该可以通过脚本语言执行,从而可以供其他系统利用。这意味着我们最近发布的 Cloud API 也是一个产品,具有通过 swagger 定义其行为的合同,用户可以依赖该合同。尽管我们现有的用户非常期待该 API 的发布,以满足自动化配置和取消配置、定期扩展以及灵活的配置管理等需求,但它也使我们能够开始与工具集成:首先是 Terraform。

在这篇博客文章中,我们将探讨我们的新 Terraform 提供程序以及如何使用它来解决一个常见需求:对需要针对 ClickHouse 实例进行测试的系统进行 CI/CD。作为示例,我们将介绍如何将我们的 Go 客户端测试从单体 ClickHouse Cloud 服务迁移到使用 Terraform,并仅在测试期间提供临时服务。这不仅可以帮助我们降低成本,还可以在客户端和调用之间隔离我们的测试。我们希望其他人也能从这种模式中受益,并为他们的测试基础设施带来成本节约和简化!

Terraform

Terraform 是一个由 HashiCorp 创建的开源基础设施即代码软件工具,它允许用户使用一种称为 HashiCorp 配置语言(HCL)或可选的 JSON 的声明性配置语言来定义基础设施。

基础设施即代码是通过可机器读取的定义文件而不是物理硬件配置或交互式配置工具来管理和配置计算资源的过程。这种方法已经几乎被普遍接受为管理云计算资源的手段。Terraform 作为实现这一过程的工具,已经获得了广泛的用户群和广泛的采用。

为了与 Terraform 集成并允许用户配置 ClickHouse Cloud 服务,必须实现一个提供程序插件,并且最好通过 Hashicorp 注册表提供。

身份验证

由于 ClickHouse 提供程序依赖于 ClickHouse API,因此需要认证密钥才能配置和管理服务。用户可以通过 ClickHouse Cloud 界面创建一个令牌,以及一个密钥。下面展示了这个简单的过程:

图片

用户还应该记录他们的组织 ID,如下所示。

使用提供程序

一旦令牌和密钥被创建,用户可以创建一个 .tf 文件,并声明使用提供程序。为了避免将凭据放在主文件中,token_key、token_secret 和 organization_id 被替换为 Terraform 变量。这些变量又可以在 secret.tfvars 文件中指定,该文件不应提交到源代码控制中。

main.tf


terraform {
 required_providers {
   clickhouse = {
     source = "ClickHouse/clickhouse"
     version = "0.0.2"
   }
 }
}

variable "organization_id" {
  type = string
}

variable "token_key" {
  type = string
}

variable "token_secret" {
  type = string
}

provider clickhouse {
  environment   = "production"
  organization_id = var.organization_id
  token_key     = var.token_key
  token_secret  = var.token_secret
}

secret.tfvars


token_key = "<token_key>"
token_secret = "<token_secret>"
organization_id = "<organization_id>"

假设用户已安装了 Terraform,可以使用 terraform init 命令安装提供程序。


terraform init

Initializing the backend...

Initializing provider plugins...
- Finding clickhouse/clickhouse versions matching "0.0.2"...
- Installing clickhouse/clickhouse v0.0.2...
- Installed clickhouse/clickhouse v0.0.2 (self-signed, key ID D7089EE5C6A92ED1)

Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

配置好我们的提供程序后,可以通过在上面的文件中添加几行 HCL 代码来部署 ClickHouse Cloud 服务。


variable "service_password" {
  type = string
}

resource "clickhouse_service" "service" {
  name         = "example-service"
  cloud_provider = "aws"
  region       = "us-east-2"
  tier         = "development"
  idle_scaling   = true
  password  = var.service_password
  ip_access = [
  {
      source    = "0.0.0.0/0"
      description = "Anywhere"
  }
  ]
}

output "CLICKHOUSE_HOST" {
  value = clickhouse_service.service.endpoints.0.host
}

在这里,我们指定了我们期望的云提供商、区域和层级。层级可以是开发版或生产版。开发版代表 ClickHouse Cloud 中的入门产品,适用于较小的工作负载和入门项目。对于上述示例,我们启用了 idling,这样我们的服务在未使用时不会产生费用。

启用 idling_scaling 是开发版实例的唯一有效值,即不能禁用它。提供程序的未来版本将验证此设置。

我们还必须指定一个服务名称和一个可访问此服务的 IP 地址列表(在我们的示例中是任何地方),以及服务的密码。我们再次将此抽象为我们的秘密文件中的一个变量。

我们的输出声明将我们服务的端点捕获为 CLICKHOUSE_HOST 输出变量,确保一旦服务准备就绪,获取连接详细信息就变得简单了。完整的示例 main.tf 文件可以在此处找到【https://pastila.nl/?025ef1fd/d369943908f299267b8b8d488c230380】。

通过单个命令 terraform apply 加上 -var-file 选项来传递我们的秘密文件,即可部署此服务。

terraform apply -var-file=secrets.tfvars

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

# clickhouse_service.service will be created
  + resource "clickhouse_service" "service" {
    + cloud_provider = "aws"
    + endpoints    = (known after apply)
    + id           = (known after apply)
    + idle_scaling   = true
    + ip_access    = [
        + {
            + description = "Anywhere"
            + source    = "0.0.0.0/0"
          },
      ]
    + last_updated   = (known after apply)
    + name         = "example-service"
    + password     = (sensitive value)
    + region       = "us-east-2"
    + tier         = "development"
  }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

clickhouse_service.service: Creating...
clickhouse_service.service: Still creating... [10s elapsed]
clickhouse_service.service: Still creating... [20s elapsed]
clickhouse_service.service: Still creating... [30s elapsed]
clickhouse_service.service: Still creating... [40s elapsed]
clickhouse_service.service: Still creating... [50s elapsed]
clickhouse_service.service: Still creating... [1m0s elapsed]
clickhouse_service.service: Still creating... [1m10s elapsed]
clickhouse_service.service: Creation complete after 1m12s [id=fd72178b-931e-4571-a0d8-6fb1302cfd4f]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

如上所示,Terraform根据定义构建了一个计划,然后才提供服务。由于之前配置了输出,因此也会打印分配给我们服务的主机名。可以使用 terraform destroy 命令删除上述服务。

为了使Terraform对一组资源应用更改,它需要一种获取当前状态的手段,包括已提供的资源及其配置。这在一个“状态”中描述,其中包含资源的完整描述。这允许随着时间的推移对资源进行更改,每个命令都能确定采取的适当操作。在我们的简单案例中,我们将这个状态保存在上述命令运行的文件夹中。然而,状态管理是一个更加复杂的话题,有许多维护它的方法适用于真实环境,包括使用HashiCorp的云服务。当预计会有多个个体或系统在任何给定时间操作状态并且需要并发控制时,这一点尤为重要。

 一个实际的CI/CD例子

将Terraform添加到Github操作中

针对ClickHouse Cloud进行测试对于向用户提供高质量的客户端至关重要。在Terraform提供程序可用之前,我们的ClickHouse客户端是针对ClickHouse Cloud中的单个服务进行测试的,测试由Github操作进行编排。这个实例被共享给我们的客户端,每个客户端在针对存储库进行PR或提交时都会创建自己的数据库和表。虽然这是足够的,但它也存在一些局限性:

  • 单点故障。任何与此服务相关的问题,例如由于区域可用性引起的问题,都会导致所有测试失败。

  • 资源冲突。通过确保所有资源(例如表)都遵循使用客户端名称和时间戳的命名约定来避免,但这会产生后果(见下文)。

  • 资源增长和测试复杂性。确保测试可以并行运行意味着确保特定测试使用的表、数据库和用户是唯一的,以避免冲突 - 这需要在所有客户端中保持一致的样板代码。当与需要大量测试以确保在ClickHouse中覆盖功能的客户端结合使用时,这意味着可能会创建数百个表。需要进一步的测试编排以确保每个客户端在完成时删除这些表,以避免表爆炸 - 或许并不令人意外,ClickHouse并不适用于10k个表!

  • 成本效率低。尽管上述测试的查询负载并不重大,但我们的服务实际上一直处于活动状态,并且由于大量并发的DDL操作可能导致潜在的高zookeeper负载。这意味着我们使用了生产服务。此外,我们的测试需要对服务处于空闲状态进行健壮处理,以防止服务关闭。

  • 可观察性的复杂性。随着许多客户端和多个测试的运行,使用服务器日志调试测试失败变得更加复杂。

Terraform提供程序承诺提供这些问题的简单解决方案,每个客户端只需在测试开始时创建一个服务,运行其测试套件,并在完成后销毁服务。因此,我们的测试服务变得短暂。

图片

这种方法具有许多优势:

  • 测试隔离性 - 尽管测试仍然容易受到某个区域ClickHouse Cloud不可用的影响,但已经能够抵御服务问题,例如,客户端触发ClickHouse错误导致整个服务出现问题,或者客户端测试导致整个服务的配置更改。我们的客户端测试立即得到了隔离。

  • 没有资源增长和简化的测试 - 我们的服务仅存在于测试运行的生命周期内。客户端开发人员现在只需考虑由于自己的测试并发引起的资源冲突的可能性。他们还可以对整个服务进行配置更改,从而可能简化测试。

  • 成本效率低 - 较小的(dev)服务可以创建并仅存在几分钟(在大多数情况下<10分钟),从而最大程度地减少成本。

  • 简单的可观察性 - 虽然我们在测试完成时销毁服务,但服务ID会被记录下来。如果需要,可以在我们的可观察性系统中使用它来检索服务器日志。

现有工作流程

对于我们的第一个客户端,我们选择了Clickhouse Go,使用简单的Github操作,并且在代码的测试套件中封装了大量的测试复杂性。

Github操作提供了一个基于工作流的简单CI/CD平台。与Github紧密集成,用户只需在.github/workflow目录下以yml文件的形式声明性地创建工作流,每个工作流包含要运行的作业。这些作业由步骤组成,可以配置为按计划运行或针对特定事件运行,例如PR。

现有的Cloud测试包括一个配置为针对上述单体服务运行的作业。测试套件已经支持通过环境变量CLICKHOUSE_HOST和CLICKHOUSE_PASSWORD指定要执行测试的ClickHouse实例。这些变量通过Github Secrets进行填充。这还需要将环境变量CLICKHOUSE_USE_DOCKER设置为false,以禁用现有的基于docker的测试。

除了这些特定的更改之外,云测试与基于docker的单节点测试类似 - 使用矩阵来测试客户端针对不同的go版本,并使用步骤来检出代码并在运行测试之前安装go。


integration-tests-cloud:
  runs-on: ubuntu-latest
  strategy:
  max-parallel: 1
  fail-fast: true
  matrix:
    go:
      - "1.19"
      - "1.20"
  steps:
  - uses: actions/checkout@main

  - name: Install Go ${{ matrix.go }}
    uses: actions/setup-go@v2.1.5
    with:
      stable: false
      go-version: ${{ matrix.go }}

  - name: Run tests
    env:
      CLICKHOUSE_HOST: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_HOST }}
      CLICKHOUSE_PASSWORD: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_PASSWORD }}
      CLICKHOUSE_USE_DOCKER: false
      CLICKHOUSE_USE_SSL: true
    run: |
      CLICKHOUSE_DIAL_TIMEOUT=20 CLICKHOUSE_TEST_TIMEOUT=600s CLICKHOUSE_QUORUM_INSERT=3 make test

新工作流程

在迁移工作流程之前,我们需要一个简单的Terraform资源定义,用于Clickhouse服务。以下是在之前相同示例的基础上构建的,创建了一个处于开发层的服务,但引入了organization_id、token_key、token_secret、service_name和service_password的变量。我们还输出了服务ID,以帮助后续调试,并允许我们的服务从任何地方都可以访问 - 由于其临时性质,安全风险很低。以下main.tf文件存储在clickhouse-go客户端的根目录中。


terraform {
  required_providers {
  clickhouse = {
    source = "ClickHouse/clickhouse"
    version = "0.0.2"
  }
  }
}

variable "organization_id" {
  type = string
}

variable "token_key" {
  type = string
}

variable "token_secret" {
  type = string
}

variable "service_name" {
  type = string
}

variable "service_password" {
  type = string
}

provider clickhouse {
  environment   = "production"
  organization_id = var.organization_id
  token_key     = var.token_key
  token_secret  = var.token_secret
}

resource "clickhouse_service" "service" {
  name         = var.service_name
  cloud_provider = "aws"
  region       = "us-east-2"
  tier         = "development"
  idle_scaling   = true
  password  = var.service_password

  ip_access = [
  {
      source    = "0.0.0.0/0"
      description = "Anywhere"
  }
  ]
}

output "CLICKHOUSE_HOST" {
  value = clickhouse_service.service.endpoints.0.host
}

output "SERVICE_ID" {
  value = clickhouse_service.service.id
}

Terraform支持通过以TF_VAR_为前缀的环境变量指定变量值。例如,要填充组织ID,我们只需设置TF_VAR_organization_id。

与以前的工作流程类似,这些环境变量的值可以通过Github加密密钥填充。在我们的情况下,我们在组织级别创建这些密钥,以便它们可以跨客户端和服务共享,这样可以简化管理。

图片

注意:我们在这里没有为服务名称设置值。除了不敏感之外,我们还希望确保这些名称在测试运行中是唯一的,这样我们就可以识别服务的来源和创建时间。

为了使Terraform在runner上可用,我们使用了hashicorp/setup-terraform操作。这会在Github操作CLI runner上安装Terraform,并公开其CLI,以便我们可以像从终端中一样进行调用。

我们的最终工作流如下所示:


integration-tests-cloud:
  runs-on: ubuntu-latest
  defaults:
  run:
    shell: bash
  strategy:
  max-parallel: 1
  fail-fast: true
  matrix:
    go:
      - "1.19"
      - "1.20"
  steps:
  - name: Check Out Code
    uses: actions/checkout@v3

  - name: Setup Terraform
    uses: hashicorp/setup-terraform@v2.0.3
    with:
      terraform_version: 1.3.4
      terraform_wrapper: false

  - name: Terraform Init
    id: init
    run: terraform init

  - name: Terraform Validate
    id: validate
    run: terraform validate -no-color

  - name: Set Service Name
    run: echo "TF_VAR_service_name=go_client_tests_$(date +'%Y_%m_%d_%H_%M_%S')" >> $GITHUB_ENV

  - name: Terraform Apply
    id: apply
    run: terraform apply -no-color -auto-approve
    env:
      TF_VAR_organization_id: ${{ secrets.INTEGRATIONS_TEAM_TESTS_ORGANIZATION_ID }}
      TF_VAR_token_key:  ${{ secrets.INTEGRATIONS_TEAM_TESTS_TOKEN_KEY }}
      TF_VAR_token_secret:  ${{ secrets.INTEGRATIONS_TEAM_TESTS_TOKEN_SECRET }}
      TF_VAR_service_password: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_PASSWORD }}

  - name: Set Host
    run: echo "CLICKHOUSE_HOST=$(terraform output -raw CLICKHOUSE_HOST)" >> $GITHUB_ENV

  - name: Service Id
    run: terraform output -raw SERVICE_ID

  - name: Install Go ${{ matrix.go }}
    uses: actions/setup-go@v2.1.5
    with:
      stable: false
      go-version: ${{ matrix.go }}

  - name: Run tests
    env:
      CLICKHOUSE_PASSWORD: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_PASSWORD }}
      CLICKHOUSE_USE_DOCKER: false
      CLICKHOUSE_USE_SSL: true
    run: |
      CLICKHOUSE_DIAL_TIMEOUT=20 CLICKHOUSE_TEST_TIMEOUT=600s CLICKHOUSE_QUORUM_INSERT=2 make test

  - name: Cleanup
    if: always()
    run: terraform destroy -no-color -auto-approve
    env:
      TF_VAR_organization_id: ${{ secrets.INTEGRATIONS_TEAM_TESTS_ORGANIZATION_ID }}
      TF_VAR_token_key:  ${{ secrets.INTEGRATIONS_TEAM_TESTS_TOKEN_KEY }}
      TF_VAR_token_secret:  ${{ secrets.INTEGRATIONS_TEAM_TESTS_TOKEN_SECRET }}
      TF_VAR_service_password: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_PASSWORD }}

总结一下,这个工作流程包括以下步骤:

  1. 通过 uses: actions/checkout@v3 将现有代码检出到runner上。

  2. 通过 uses: hashicorp/setup-terraform@v2.0.3 在runner上安装terraform。

  3. 调用 terraform init 来安装ClickHouse provider.

  4. 通过 terraform validate 命令验证已检出代码根目录中的terraform资源定义文件。

  5. 将环境变量 TF_VAR_service_name 设置为日期字符串,前缀为 go_client_tests_。这样确保我们的服务在客户端和测试运行中具有唯一的名称,并有助于调试。

  6. 运行 terraform apply 创建一个具有指定密码的Cloud服务,组织ID、令牌和密钥通过环境变量传递。

  7. 将 CLICKHOUSE_HOST 环境变量设置为前面应用步骤的输出值。

  8. 捕获服务ID以供调试目的。

  9. 基于当前的矩阵版本安装go。

  10. 运行测试 - 注意上面已设置 CLICKHOUSE_HOST。敏锐的读者会注意到我们传递环境变量使测试类似于我们之前的工作流程,以增加超时时间。但是,我们将 CLICKHOUSE_QUORUM_INSERT 降低到2。这是必需的,因为一些测试需要在查询之前在所有节点上存在数据。虽然我们之前的单体服务有三个节点,但我们较小的开发服务只有两个。

  11. 通过 terraform destroy 命令销毁服务,不管工作流是否成功(if: always())。

这些更改现在已生效!每当对存储库发出PR或提交时,更改将针对一个临时的ClickHouse Cloud集群进行测试!

图片

目前,这些测试不适用于从分支提出的PR(这需要ClickHouse组织的成员)。这是pull_request事件的标准Github策略,因为它可能导致秘密泄漏。我们计划在未来的改进中解决这个问题

结论

在本博文中,我们使用了新的Terraform提供程序为ClickHouse Cloud构建了一个CI/CD工作流,在Github actions中为测试提供临时集群。我们使用这种方法来降低在ClickHouse Cloud中进行客户端测试的成本和复杂性。

征稿启示

面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

图片

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

数据管道不是流水线,而是数据生命体征监护系统 数据管道是支撑企业数据可信流动的核心基础设施,其本质是围绕ETL/ELT构建的可观测、可演化、可追溯的数据流转体系。它基于Schema演化管理与数据契约保障结构稳定性,依托分层架构(接入/标准化/语义/服务)实现故障隔离与变更解耦,通过端到端血缘追踪和实时质量校验提升数据可信度。在电商、金融、IoT等多源异构场景中,该体系显著降低GMV偏差、报表延迟、Schema断裂等典型问题,支撑实时风控、经营分析、用户画像等关键应用。本文聚焦真实工程落地中的分层设计原则、Schema韧性实践与可观测性嵌入方法。 阅读详情

相关推荐

通过Terraform部署Gitlab CICD 管道

在将此代码推送到我们的 Gitlab 存储库之前,我们应该在同一存储库中创建管道 YAML 文件。在本文中,我们将使用 GitLab 探索和实现 Terraform 的 CI/CD 管道。在项目根目录中创建一个名为“.gitlab-ci.yml”的文件,其中包含以下内容。在此步骤中,我们将在刚刚克隆的存储库中创建 Terraform 配置。如前所述,我们将使用 Terraform 和 Gitlab 管道在 AWS 中创建一个 EC2 实例。以下是我们在 Gitlab 上实现 CI/CD 的步骤摘要。

介绍AWS Azure GCP devops Terraform 等技术 849

DevOps - (1)Terraform+阿里云实现云资源的CI/CD

一:简述 一直想写一个自己关于Terraform理解的皮毛,今天终于抽时间完成了,本文我将介绍Terraform是什么?以及如何通过Terraform在阿里云上创建硬件资源的过程。 众所周知,当企业想把企业本地内部系统对应 的完整的硬件架构资源迁移到云上时,云基础设施架构师就要根据原来系统项目搭建出一个对应的云端基础设施资源的架构,然后云运维工程师再根据设计好基础设施的架构图来创建云上资源,但是传统通过注册登录云平台,在通过一个个资源购买和配置的方式时间和容错成本太高,...

xcswswswws的博客 1250

CI-CD-PipelineOnAws:使用AWS上的Terraform for CICD管道进行基础架构自动化以托管Java Web应用程序

AWS上具有Terraform on CI / CD管道的基础架构自动化可托管Java Web应用程序。 前提条件 AWS账户 Amazon Machine Image(AMI)红帽企业版Linux 8.x Terraform required_version =“> = 0.12” 开始吧 git克隆 詹金斯·基·佩姆 ansible-key.pem tomcat-key.pem 4在Provisioner Connection Settings下提供您的私钥 文件的Provisioner连接设置目录 CI-CD-PipelineOnAws/modules/ansible/instance.tf CI-CD-PipelineOnAws/modules/jenkins/instance.tf CI-CD-PipelineOnAws/modules/tomcat/instanc

突破本地限制:Terraform远程执行与CI/CD流水线深度集成指南

Terraform是一款流行的开源工具,用于构建、变更和版本化云基础架构。它支持多种云提供商以及本地资源的配置管理,通过声明式语法实现跨平台的一致性资源部署。本文将详细介绍如何突破本地环境限制,实现Terraform的远程执行,并与CI/CD流水线进行深度集成,提升基础设施即代码(IaC)的自动化水平和协作效率。 ## 一、Terraform架构解析:远程执行的基础 要理解Terraform的

gitblog_01194的博客 774

terraform-cicd

terraform-cicd

terraform-aws-cicd:具有AWS Code Pipeline和代码构建的CICD Terraform模块

Terraform-aws-cicd Terraform模块以使用 for 创建AWS 该模块支持三个用例: GitHub-> S3(构建工件)-> Elastic Beanstalk(正在运行的应用程序堆栈) 该模块从GitHub存储库(公共或私有)获取代码,通过执行存储库中的buildspec.yml文件进行构建,将构建的工件推送到S3存储桶,并将工件部署到运行支持的堆栈之一的Elastic Beanstalk (例如Java , Go , Node , IIS , Python , Ruby等)。 GitHub-> ECR(Docker image)-> Elastic Beanstalk(运行Docker堆栈) 该模块从GitHub存储库获取代码,通过执行该存储库中的buildspec.yml和Dockerfile文件从其构建Docker映像,将该Docker映像推送至ECR存储库,并将Docker映像部署到运行Docker堆栈的Elastic Beanstalk 。 GitHub-> ECR(Docker镜像) 该模块从GitHub存储库获取代码,通过执行存储库中

Terraform介绍与安装部署

Terraform 是一种安全有效地构建、更改和版本控制基础设施的工具(基础架构自动化的编排工具)。它的目标是 "Write, Plan, and create Infrastructure as Code"(编写、规划和创建基础架构作为代码), 基础架构即代码。Terraform 几乎可以支持所有市面上能见到的云服务。具体的说就是可以用代码来管理维护 IT 资源,把之前需要手动操作的一部分任务通过程序来自动化的完成,这样的做的结果非常明显:高效、不易出错。

sre救赎之路 1万+

【Python】SimpleITK使用笔记

1. 概念 1.1 nii格式 1.2 SimpleITK 1.3 SimpleITK 图像 2. 基本操作 2.1 常见属性 2.1 读取和保存图像 2.2 SimpleITK图像数据和Numpy矩阵数据之间的转换

See_Star的博客 7897

ClickHouse:用可复现 ZIP 架构提升 AWS Lambda CI/CD 一致性

ZIP 文件更轻便,我们一直采用这种方式。它也更容易通过一个简单的脚本来实现自动化部署。

ClickHouseDB的博客 989

海康威视摄像头网线连接笔记本电脑,客户端提示:1连接设备失败。设备不在线或网络原因引起的连接超时等。(HCNetSDK.dll[7].)解决方案

1.环境 电脑:联想笔记本电脑(win10系统) 摄像头:海康威视DS-2CD3T20D-i5,4mm 连接方式:直接用网线将摄像头和摄像头连接 2.问题: 客户端出现如下提示: 3. 解决流程: 1.确认网线是否有问题:我的网线指示灯常亮,并且设备能够被搜索到,只是一直显示离线 2.按照网上教程直接配置摄像头的ip地址与电脑同一网段:登录失败。 错误码为 HCNetSDK.dll[7].(连接设备失败。设备不在【海康威视吧】_百度贴吧 失败了,没有反应 3.查看有线网卡的地

weixin_48911487的博客 3万+

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 507

toxic-repos真实案例揭秘:从React.js到ClickHouse,知名开源项目是如何被“投毒“的?

toxic-repos 是一个开源项目"投毒"(Protestware)事件追踪数据库,收录了 800+ 条真实案例,记录了知名开源项目被植入政治标语、恶意代码、区域封锁和 DDoS 工具的全过程。无论是正在使用 React.js 的前端工程师,还是部署 ClickHouse、Kubernetes 的运维人员,都值得了解这些供应链安全威胁是如何发生的,以及如何快速识别与防护。 ## 一、什么是"

gitblog_00319的博客 1094

VC Spyglass:Lint实战指南之TCL脚本自动化解析

本文详细介绍了如何利用TCL脚本实现VC Spyglass Lint检查的自动化流程。通过实战指南,从基础脚本编写到高级参数化技巧,帮助数字IC设计工程师摆脱手动操作,提升验证效率,并实现与CI/CD流程的集成。

h3i4j的博客 796

ClickHouse版本管理实战指南:5步实现企业级零风险升级

ClickHouse作为实时分析数据库的核心价值在于其卓越的查询性能和海量数据处理能力,但版本迭代过程中的稳定性保障是企业技术决策者必须面对的关键挑战。本文将从实战角度出发,深度解析ClickHouse版本管理的核心策略,帮助企业构建安全可靠的升级体系。 ## 🔍 版本升级前的风险评估与诊断框架 在启动任何版本升级前,必须建立全面的风险评估体系。ClickHouse的快速迭代特性意味着每个新

gitblog_00214的博客 280

深入浅出AXI协议(2)——通道及信号

本文我们继续AXI协议的学习,我们将讨论5个通道的具体内容和相对应的信号。这一部分的内容现在对于大家来说可能很难理解,但是没有关系,随着学习的深入,我们会逐步讲解这里面的所有现在,现在只需要把它们当作一个可以查阅的手册,快速阅读有一个基本的印象即可。

apple_53311083的博客 1798

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341)

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341) Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。Drupal在某些情况下,通过文件模块或者子系统上传恶意文件触发XSS漏洞。

qq_51577576的博客 2208

Nomad Job编排实战:gh_mirrors/infra4/infra服务部署与管理完全手册

想要掌握云原生时代的服务编排技术吗?本文将为您详细介绍如何通过Nomad Job编排实战来部署和管理gh_mirrors/infra4/infra项目。作为E2B Cloud的底层基础设施,这个开源项目提供了完整的AI代码解释平台解决方案,让您能够快速搭建自己的云原生环境。 ## 📋 什么是E2B Infrastructure? E2B Infrastructure是一个基于Nomad和Te

gitblog_00899的博客 1137

使用virtuoso gds转lef操作方法

2) 然后,需要创建Pin,这里Pin的概念不同于label/text,是有实际金属的,二者的区别类似于pr中的port和terminal。1) 首先,需要画prBoundary,这个用drawing层的prBoundary画是不行的,不过建议pr阶段就把prBoundary转到gds里,在virtuoso layout中画prBoundary就比较容易。另外,用Create - Create Pin也可以创建pin,更适用于PG pin,操作时先给pg shape打label,最好放正中间。

m0_61544122的博客 1379

学历不占优,如何通过高价值技术技能实现薪资跃升?

在技术领域,掌握核心技能是提升个人市场竞争力的关键。从原理上看,企业为技术付费的本质是购买“解决问题的能力”。因此,具备高需求、高壁垒的垂直技术能力,如云原生基础设施即代码(IaC)和实时数据处理,能直接创造商业价值,成为开发者突破职业瓶颈的硬通货。云原生技术通过容器化、编排和自动化,构建了弹性可扩展的现代应用架构基础;而大数据实时计算框架则能高效处理海量数据流,驱动业务决策。这些技能组合不仅市场需求明确,更能通过项目实战转化为可验证的工程能力。对于希望在短期内实现收入增长的开发者而言,系统性地构建诸如Te

weixin_33853794的博客 355

【在 WSL2 GUI 中使用 pulseaudio 播放声音】

最近在搞一个Linux项目,由于WSL2中需要用到声音外放,无奈只能潜心研究。后来就使用了一种折中的方式替代,那就是pulseaudio。目前来讲WSL2对硬件外设的支持还是不太友好,关于USB的支持我之前在其他文章中已经论述过了,这里不讨论。1、Windows11别忘记打开声音2、可能有一定延迟,因为是通过网络传输的。3、效果的话只能见仁见智了,如果不能满足要求就安装一个实实在在的Ubuntu吧!

jiexijihe945的博客 4530

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Maple未来路线图:OpenTelemetry生态集成与功能扩展展望

Maple作为一款基于OpenTelemetry + ClickHouse的开源可观测性平台,正在快速发展以满足现代分布式系统的监控需求。本文将深入探讨Maple的未来发展蓝图,重点介绍其OpenTelemetry生态集成计划与功能扩展路线图。🎯 ## 当前架构概览 Maple采用现代化的微服务架构,包含多个核心组件: - **前端应用**:基于TanStack Router的SPA应用,

gitblog_00943的博客 715

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WrenAI企业级容器化部署终极指南:5大策略优化GenBI性能与资源效率

WrenAI作为开源的生成式商业智能引擎,通过开放的上下文层为AI代理提供可信的文本到SQL转换能力,支持超过22种数据源的无缝集成。在企业级部署场景中,容器化是确保WrenAI高性能、高可用性的关键技术路径。本文将深入探讨WrenAI容器化部署的最佳实践,涵盖从基础架构设计到生产级优化的完整生命周期,帮助企业技术团队实现60%的启动时间优化和40%的资源利用率提升。 ## 1. WrenAI容

gitblog_00240的博客 588

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

开源软件评估与商业化潜力分析

开源软件已成为现代技术生态的核心组成部分,尤其在云原生、AI和大数据领域。其价值不仅体现在免费使用,更在于社区驱动的快速迭代和生态共建。从技术维度看,优秀的开源项目通常具备先进的架构设计(如微服务、声明式API)、良好的扩展性和性能基准。社区健康度同样关键,包括活跃的贡献者分布、快速的Issue响应和透明的治理机制。在商业化方面,开源项目通过开放核心模式、插件市场和增值服务等创新路径实现盈利。对于开发者而言,参与开源不仅是技术提升的途径,更能带来职业发展的杠杆效应,如面试优势、薪资溢价和创业资源。

weixin_34302798的博客 384

valdi-vivaldi VS Code 插件全解析:设备日志实时输出、打包安装与版本演进

> **导读**:valdi-vivaldi 是 Valdi 项目自带的 VS Code 扩展,用于在热重载(Hot Reload)运行时把 Valdi 设备日志直接输出到 VS Code 的 Output 面板中,免去开发者来回切换终端查看日志的麻烦。本文以该插件官方变更日志([valdi/vscode_plugin/CHANGELOG.md](https://link.gitcode.com/

gitblog_00090的博客 543

AI代理技能库选型指南:Awesome Agent Skills 完整上手与配置方法

Awesome Agent Skills 是一个经人工筛选的 AI代理技能 合集,收录 1500+ 个由 Anthropic、Google、Microsoft、Vercel、Cloudflare、OpenAI 等官方团队与社区贡献的 Agent技能,兼容 Claude Code、Codex、Gemini CLI、Cursor 等主流 AI 编程助手。本文从安装、选型到实战流程,给出可直接执行的操作

gitblog_01132的博客 790

Dittofeed云部署:AWS架构设计

Dittofeed是一个开源的全渠道客户互动平台,支持通过邮件、短信、Webhook、移动推送等多种渠道发送广播消息或创建自动化用户旅程。本文将深入探讨如何在AWS云环境中设计和部署Dittofeed的高可用架构。 ## 架构核心组件 ### 数据存储层 ```mermaid graph TB subgraph "数据存储层" P[(PostgreSQL用户...

gitblog_00534的博客 784
上一篇: 在 ClickHouse 中使用聚合组合器
下一篇: ClickHouse 24.3 版本发布说明
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值