# 云原生大数据平台搭建

云原生大数据平台搭建:从 IDC 到云的迁移之路

一、为什么选择云原生

1.1 我们面临的挑战

IDC 时代的痛点(2022 年前):

复制代码
资源管理
├── 采购周期长:新机器 2-4 周
├── 容量规划难:买多浪费,买少不够
├── 资源利用率低:平均 30%
└── 闲置成本高:闲置机器年浪费 200 万+

运维复杂度
├── 硬件故障:月均 2-3 次
├── 网络问题:排查困难
├── 扩容麻烦:需要停机
└── 多机房同步:数据一致性难保证

成本问题
├── 固定资产折旧:年 500 万+
├── 机房租金:年 100 万+
├── 电力成本:年 80 万+
└── 运维人力:15 人团队

典型事件:

2022 年双 11 前紧急扩容,采购流程走了 3 周,差点错过大促。事后盘点发现,为峰值准备的机器,平时利用率只有 25%。

1.2 云原生的核心价值

维度 IDC 模式 云原生模式 改善
资源获取 2-4 周 分钟级 1000 倍+
弹性能力 天级 秒级 实时弹性
资源利用率 30% 70%+ 2.3 倍
运维人力 15 人 5 人 67%
成本结构 固定成本 按需付费 灵活

量化收益(我们的实测):

复制代码
年度总成本对比(PB 级数据平台)
├── IDC 模式:¥850 万/年
└── 云原生:¥580 万/年(节省 32%)

1.3 云原生适用场景

推荐使用:

  • 业务波动大,需要弹性
  • 快速创业,不想重资产投入
  • 多地部署,需要全球覆盖
  • 想聚焦业务,不想运维基础设施

谨慎使用:

  • 数据量极大(10PB+),长期成本高
  • 数据敏感性极高,合规要求严
  • 网络延迟要求极严(<1ms)
  • 已有大量 IDC 投资,沉没成本高

二、云原生架构设计

2.1 整体架构

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                        用户接入层                                │
│              CDN + WAF + 负载均衡 (ALB/NLB)                      │
└─────────────────────────────────────────────────────────────────┘
                              ▲
                              │
┌─────────────────────────────────────────────────────────────────┐
│                        容器平台层                                │
│              Kubernetes 集群 (EKS/ACK/TKE)                       │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │
│  │  计算节点    │  │  计算节点    │  │  计算节点    │             │
│  │  (Spot)     │  │  (On-Demand)│  │  (Reserved) │             │
│  └─────────────┘  └─────────────┘  └─────────────┘             │
└─────────────────────────────────────────────────────────────────┘
                              ▲
                              │
┌─────────────────────────────────────────────────────────────────┐
│                        大数据服务层                              │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │
│  │  Spark on K8s│  │ Flink on K8s│  │  Trino     │             │
│  │  (批处理)    │  │  (流处理)    │  │  (查询)    │             │
│  └─────────────┘  └─────────────┘  └─────────────┘             │
└─────────────────────────────────────────────────────────────────┘
                              ▲
                              │
┌─────────────────────────────────────────────────────────────────┐
│                        存储层                                    │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │
│  │  对象存储    │  │  云数仓      │  │  云数据库   │             │
│  │  (S3/OSS)   │  │  (Snowflake)│  │  (RDS)     │             │
│  └─────────────┘  └─────────────┘  └─────────────┘             │
└─────────────────────────────────────────────────────────────────┘
                              ▲
                              │
┌─────────────────────────────────────────────────────────────────┐
│                        数据采集层                                │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │
│  │  日志采集    │  │  数据库同步  │  │  API 网关    │             │
│  │  (FluentBit)│  │  (DMS/DTS)  │  │  (APIGW)   │             │
│  └─────────────┘  └─────────────┘  └─────────────┘             │
└─────────────────────────────────────────────────────────────────┘

2.2 核心组件选型

2.2.1 云平台选择
云厂商 优势 劣势 适用场景
AWS 生态最全,全球覆盖 价格偏高,本地支持弱 出海业务
阿里云 本地支持好,性价比高 国际化弱 国内业务
腾讯云 游戏/社交优化 大数据生态一般 特定行业
华为云 政企支持好 生态相对小 政企客户

我们的选择:阿里云 + AWS 混合云

  • 国内业务:阿里云(成本低,支持好)
  • 海外业务:AWS(全球覆盖)
  • 数据同步:跨云数据复制
2.2.2 计算引擎
引擎 部署方式 优势 场景
Spark on K8s 容器化 弹性好,资源隔离 离线批处理
Flink on K8s 容器化 实时计算,状态管理 流处理
EMR Serverless 无服务器 免运维,按需付费 临时作业
Databricks 托管服务 优化好,协作强 ML/分析

我们的选择:

  • 核心生产:Spark/Flink on K8s(可控性强)
  • 临时作业:EMR Serverless(成本低)
  • 机器学习:Databricks(生态好)
2.2.3 存储方案
类型 服务 成本 性能 场景
对象存储 S3/OSS ¥0.12/GB/月 数据湖
云数仓 Snowflake ¥0.5/GB/月 数据仓库
云原生 HDFS EFS/NAS ¥0.8/GB/月 临时存储
块存储 EBS/云盘 ¥0.3/GB/月 数据库

我们的选择:对象存储 + 云数仓

  • 数据湖:S3/OSS(成本低,无限扩展)
  • 数据仓库:Snowflake/MaxCompute(性能好)
  • 冷热分层:智能分层存储

2.3 网络架构

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                         VPC 专有网络                             │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │                    公有子网                              │    │
│  │    ┌──────────┐  ┌──────────┐  ┌──────────┐            │    │
│  │    │  NAT GW   │  │  负载均衡  │  │  堡垒机    │            │    │
│  │    └──────────┘  └──────────┘  └──────────┘            │    │
│  └─────────────────────────────────────────────────────────┘    │
│                              │                                   │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │                    私有子网                              │    │
│  │    ┌──────────┐  ┌──────────┐  ┌──────────┐            │    │
│  │    │  K8s 节点  │  │  大数据   │  │  数据库    │            │    │
│  │    │  集群     │  │  集群     │  │  集群     │            │    │
│  │    └──────────┘  └──────────┘  └──────────┘            │    │
│  └─────────────────────────────────────────────────────────┘    │
│                              │                                   │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │                   数据子网                               │    │
│  │    ┌──────────┐  ┌──────────┐  ┌──────────┐            │    │
│  │    │  对象存储  │  │  数仓     │  │  备份存储  │            │    │
│  │    │  Gateway   │  │  Endpoint │  │  Gateway   │            │    │
│  │    └──────────┘  └──────────┘  └──────────┘            │    │
│  └─────────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────────┘

关键配置:

  • VPC 对等连接:跨 VPC 通信
  • 私有链接:不经过公网访问云服务
  • 安全组:最小权限原则

三、核心组件部署

3.1 Kubernetes 集群搭建

3.1.1 集群规划
yaml 复制代码
# 集群配置
cluster:
  name: data-platform
  region: cn-shanghai
  version: 1.28
  
  # 节点池配置
  nodePools:
    - name: spot-pool        # Spot 实例池(成本优化)
      instanceType: ecs.g7.4xlarge
      minNodes: 5
      maxNodes: 50
      spot: true
      
    - name: ondemand-pool    # 按需实例池(核心任务)
      instanceType: ecs.g7.8xlarge
      minNodes: 3
      maxNodes: 20
      spot: false
      
    - name: reserved-pool    # 预留实例池(基线负载)
      instanceType: ecs.g7.16xlarge
      minNodes: 5
      maxNodes: 10
      reserved: true
3.1.2 Terraform 部署脚本
hcl 复制代码
# main.tf - K8s 集群部署
provider "alicloud" {
  region = "cn-shanghai"
}

# VPC
resource "alicloud_vpc" "data_vpc" {
  vpc_name   = "data-platform-vpc"
  cidr_block = "10.0.0.0/16"
}

# 交换机
resource "alicloud_vswitch" "public_subnet" {
  vpc_id       = alicloud_vpc.data_vpc.id
  cidr_block   = "10.0.1.0/24"
  zone_id      = "cn-shanghai-a"
  vswitch_name = "public-subnet"
}

resource "alicloud_vswitch" "private_subnet" {
  vpc_id       = alicloud_vpc.data_vpc.id
  cidr_block   = "10.0.2.0/24"
  zone_id      = "cn-shanghai-b"
  vswitch_name = "private-subnet"
}

# ACK 集群
resource "alicloud_cs_managed_kubernetes" "data_cluster" {
  name_prefix            = "data-platform"
  worker_vswitch_ids     = [alicloud_vswitch.private_subnet.id]
  pod_vswitch_ids        = [alicloud_vswitch.private_subnet.id]
  worker_instance_types  = ["ecs.g7.4xlarge", "ecs.g7.8xlarge"]
  worker_number          = 5
  new_kubeconfig         = true
  load_balancer_spec     = "slb.s2.small"
  
  # 开启集群自动伸缩
  enable_auto_scaling    = true
  min_worker_number      = 3
  max_worker_number      = 50
}

# 对象存储
resource "alicloud_oss_bucket" "data_lake" {
  bucket = "company-data-lake"
  acl    = "private"
  
  lifecycle_rule {
    id      = "transition-to-ia"
    enabled = true
    
    transition {
      date          = "2024-01-01"
      storage_class = "IA"  # 低频访问
    }
  }
}

3.2 Spark on K8s 部署

3.2.1 Helm Chart 配置
yaml 复制代码
# values.yaml - Spark Operator 配置
spark-operator:
  namespace: spark-operator
  replicaCount: 2
  
  # Web UI 配置
  webHook:
    enable: true
    port: 8080
    
  # 资源配额
  resources:
    requests:
      cpu: 500m
      memory: 512Mi
    limits:
      cpu: 2000m
      memory: 4Gi

# Spark 作业默认配置
spark:
  defaultSparkVersion: "3.4.0"
  driver:
    cores: 2
    memory: 4g
    serviceAccount: spark-operator-spark
  executor:
    cores: 2
    memory: 8g
    instances: 10
3.2.2 Spark 作业提交
yaml 复制代码
# spark-job.yaml - Spark 作业定义
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: daily-etl
  namespace: data-jobs
spec:
  type: Scala
  mode: cluster
  image: "spark:3.4.0"
  mainClass: com.company.etl.DailyETL
  mainApplicationFile: "local:///opt/spark/jobs/daily-etl.jar"
  sparkVersion: "3.4.0"
  restartPolicy:
    type: OnFailure
    onFailureRetries: 3
    onFailureRetryInterval: 60
  driver:
    cores: 2
    coreLimit: "2000m"
    memory: "4g"
    labels:
      version: 3.4.0
    serviceAccount: spark-operator-spark
  executor:
    cores: 4
    coreLimit: "4000m"
    memory: "16g"
    instances: 20
    labels:
      version: 3.4.0
  # 动态资源分配
  dynamicAllocation:
    enabled: true
    initialExecutors: 5
    minExecutors: 2
    maxExecutors: 100
  # 监控配置
  monitoring:
    exposeDriverMetrics: true
    exposeExecutorMetrics: true
    prometheus:
      jmxExporterJar: "/prometheus/jmx_prometheus_javaagent.jar"
      port: 8090
3.2.3 存储集成
yaml 复制代码
# 挂载对象存储
spec:
  volumes:
    - name: data-lake
      csi:
        driver: oss.csi.alibabacloud.com
        volumeHandle: "company-data-lake"
        volumeAttributes:
          bucket: "company-data-lake"
          csi.storage.k8s.io/node-publish-secret-name: oss-secret
          csi.storage.k8s.io/node-publish-secret-namespace: data-jobs
  
  volumeMounts:
    - name: data-lake
      mountPath: /data/lake
yaml 复制代码
# flink-deployment.yaml
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: real-time-pipeline
  namespace: flink-jobs
spec:
  image: flink:1.17.0
  flinkVersion: v1_17
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "4"
    state.backend: rocksdb
    state.checkpoints.dir: "oss://company-data-lake/flink/checkpoints"
    state.savepoints.dir: "oss://company-data-lake/flink/savepoints"
    execution.checkpointing.interval: "60000"
    execution.checkpointing.mode: "EXACTLY_ONCE"
  serviceAccount: flink-service-account
  jobManager:
    resource:
      cpu: 2
      memory: 4096m
  taskManager:
    resource:
      cpu: 4
      memory: 16384m
  job:
    jarURI: "oss://company-data-lake/jobs/real-time-pipeline.jar"
    parallelism: 20
    upgradeMode: savepoint
3.3.2 弹性伸缩配置
yaml 复制代码
# hpa.yaml - 水平 Pod 自动伸缩
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: flink-taskmanager-hpa
  namespace: flink-jobs
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: real-time-pipeline-taskmanager
  minReplicas: 5
  maxReplicas: 50
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80

3.4 数据湖仓集成

3.4.1 Iceberg + S3/OSS
sql 复制代码
-- 创建 Iceberg 表(存储在对象存储)
CREATE TABLE prod.ods.user_behavior (
    user_id BIGINT,
    event_type STRING,
    event_time TIMESTAMP,
    page_url STRING
)
USING iceberg
LOCATION 'oss://company-data-lake/iceberg/prod/ods/user_behavior'
TBLPROPERTIES (
    'write.target-file-size-bytes' = '1073741824',
    'write.parquet.compression-codec' = 'zstd',
    'history.expire.max-snapshot-age-ms' = '604800000'
);
3.4.2 冷热数据分层
sql 复制代码
-- 配置智能分层
ALTER TABLE prod.ods.user_behavior SET TBLPROPERTIES (
    'lifecycle.transition.1.days' = '30',
    'lifecycle.transition.1.storage-class' = 'IA',
    'lifecycle.transition.2.days' = '90',
    'lifecycle.transition.2.storage-class' = 'Archive'
);

四、成本优化实践

4.1 计算成本优化

4.1.1 实例类型混用
复制代码
实例策略:
├── Spot 实例(60%):无状态作业,成本节省 70%
├── 按需实例(30%):核心生产作业,稳定可靠
└── 预留实例(10%):基线负载,长期优惠

成本对比:

复制代码
全按需实例:¥50,000/月
混合策略:  ¥28,000/月(节省 44%)
4.1.2 自动伸缩策略
yaml 复制代码
# cluster-autoscaler 配置
autoscaling:
  scaleDown:
    enabled: true
    delay: 300s  # 5 分钟无负载才缩容
    
  scaleUp:
    enabled: true
    threshold: 0.75  # CPU>75% 扩容
    
  nodeGroups:
    - spot-pool:
        priority: 1
        min: 5
        max: 50
    - ondemand-pool:
        priority: 2
        min: 3
        max: 20
4.1.3 作业调度优化
python 复制代码
# 基于成本的调度策略
def schedule_job(job, current_spot_price):
    if job.priority == 'low' and current_spot_price < threshold:
        # 低优先级作业用 Spot 实例
        return assign_to_spot_pool(job)
    elif job.priority == 'high':
        # 高优先级作业用按需实例
        return assign_to_ondemand_pool(job)
    else:
        # 中等优先级,排队等待低价 Spot
        return wait_for_spot_price_drop(job)

4.2 存储成本优化

4.2.1 数据生命周期管理
yaml 复制代码
# 生命周期策略
lifecycle:
  rules:
    - name: "ods-7d-transition"
      prefix: "ods/"
      transition:
        - days: 7
          storage_class: IA
        - days: 30
          storage_class: Archive
        - days: 365
          action: Expire
          
    - name: "dwd-30d-transition"
      prefix: "dwd/"
      transition:
        - days: 30
          storage_class: IA
        - days: 730
          action: Expire
          
    - name: "dws-90d-transition"
      prefix: "dws/"
      transition:
        - days: 90
          storage_class: IA
        - days: 1095
          action: Expire

成本节省:

复制代码
全标准存储:¥60,000/月
生命周期管理:¥25,000/月(节省 58%)
4.2.2 数据压缩优化
sql 复制代码
-- 使用高效压缩算法
ALTER TABLE large_table SET TBLPROPERTIES (
    'write.parquet.compression-codec' = 'zstd',
    'write.parquet.compression-level' = '3'
);

压缩效果对比:

压缩算法 压缩比 读取速度 存储成本
无压缩 1:1 最快 基准
Snappy 2.5:1 -60%
ZSTD 3.8:1 -74%
GZIP 4.5:1 -78%

推荐:ZSTD(压缩比和速度平衡)

4.3 网络成本优化

4.3.1 跨区域流量优化
复制代码
优化策略:
├── 同区域计算 + 存储:免费
├── 跨区域复制:压缩 + 增量
├── CDN 缓存:减少回源
└── 私有链接:避免公网费用

成本对比:

复制代码
公网传输:¥0.8/GB
私有链接:¥0.1/GB(节省 87%)

五、稳定性保障

5.1 多可用区部署

yaml 复制代码
# 多 AZ 部署配置
spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 100
          podAffinityTerm:
            labelSelector:
              matchLabels:
                app: spark-driver
            topologyKey: topology.kubernetes.io/zone

部署策略:

  • 关键组件:跨 3 个可用区
  • 数据副本:至少 3 份,跨 AZ 存储
  • 故障转移:自动检测 + 自动切换

5.2 备份与恢复

5.2.1 备份策略
yaml 复制代码
# Velero 备份配置
backup:
  schedule:
    - name: daily-full-backup
      schedule: "0 2 * * *"
      ttl: 720h  # 30 天
      includedNamespaces:
        - data-jobs
        - flink-jobs
      storageLocation: oss-backup
      
    - name: hourly-incremental
      schedule: "0 * * * *"
      ttl: 168h  # 7 天
      snapshotVolumes: true
5.2.2 灾难恢复演练
bash 复制代码
# 定期 DR 演练脚本
#!/bin/bash

# 1. 模拟 AZ 故障
kubectl cordon node-az1-1
kubectl cordon node-az1-2

# 2. 验证服务自动迁移
check_service_health

# 3. 验证数据完整性
verify_data_consistency

# 4. 恢复节点
kubectl uncordon node-az1-1
kubectl uncordon node-az1-2

# 5. 生成报告
generate_dr_report

5.3 监控告警

5.3.1 监控指标
yaml 复制代码
# Prometheus 监控配置
monitoring:
  metrics:
    # 集群级别
    - kubernetes_nodes_cpu_utilization
    - kubernetes_nodes_memory_utilization
    - kubernetes_pods_running
    
    # 应用级别
    - spark_jobs_duration
    - spark_jobs_status
    - flink_taskmanager_available_slots
    - flink_jobmanager_status
    
    # 成本级别
    - cloud_cost_daily
    - cloud_cost_by_service
    - cloud_cost_by_namespace
5.3.2 告警规则
yaml 复制代码
# alerting.yaml
groups:
  - name: data-platform
    rules:
      - alert: HighNodeCPU
        expr: avg(kubernetes_nodes_cpu_utilization) > 0.85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "节点 CPU 使用率过高"
          
      - alert: JobFailure
        expr: spark_jobs_status == "failed"
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Spark 作业失败:{{ $labels.job_name }}"
          
      - alert: CostAnomaly
        expr: cloud_cost_daily > baseline * 1.5
        for: 1h
        labels:
          severity: warning
        annotations:
          summary: "成本异常:当日成本超基准 50%"

六、踩坑记录

6.1 坑 1:Spot 实例被回收

现象: 夜间 Spot 实例批量回收,作业失败

原因: 未设置多种实例类型,云厂商库存不足

解决方案:

yaml 复制代码
# 设置多种实例类型
spec:
  nodeSelector:
    spot-instance: "true"
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: instance-type
                operator: In
                values:
                  - ecs.g7.4xlarge
                  - ecs.g7.8xlarge
                  - ecs.c7.4xlarge
                  - ecs.c7.8xlarge

教训: Spot 实例要设置至少 4 种备选机型

6.2 坑 2:对象存储性能瓶颈

现象: Spark 读取 OSS 速度慢,作业延迟

原因: 小文件过多,API 调用频繁

解决方案:

  1. 合并小文件(目标文件大小 1GB)
  2. 使用 OSS 缓存加速
  3. 调整 Spark 并行度
sql 复制代码
-- 合并小文件
CALL prod.system.rewrite_data_files(
    table_name => 'prod.ods.user_behavior',
    options => map('strategy', 'binpack')
);

6.3 坑 3:网络费用超预期

现象: 首月账单,网络费用占 30%

原因: 跨 AZ 流量未优化,大量数据跨区传输

解决方案:

  1. 计算和存储同 AZ 部署
  2. 使用私有链接
  3. 数据本地化调度

教训: 网络成本要在设计阶段考虑

6.4 坑 4:权限管理混乱

现象: 误删生产数据,权限过大

原因: 所有作业用同一个 ServiceAccount

解决方案:

yaml 复制代码
# 按环境隔离
namespaces:
  - data-prod
  - data-staging
  - data-dev

# 按角色授权
rbac:
  - role: data-engineer
    permissions: [read, write]
    namespaces: [data-dev, data-staging]
    
  - role: data-admin
    permissions: [read, write, delete]
    namespaces: [data-prod]

七、最佳实践总结

7.1 架构设计

  1. 多可用区部署,保证高可用
  2. 计算存储分离,独立伸缩
  3. 私有网络连接,安全高效
  4. 分层存储,成本优化

7.2 成本优化

  1. Spot+ 按需 + 预留混合策略
  2. 自动伸缩,按需使用
  3. 数据生命周期管理
  4. 压缩 + 分区,减少扫描

7.3 稳定性

  1. 多 AZ 部署,跨区容灾
  2. 定期备份,快速恢复
  3. 完善监控,及时告警
  4. 定期演练,验证预案

7.4 安全合规

  1. 最小权限原则
  2. 网络隔离(VPC+ 安全组)
  3. 数据加密(传输 + 存储)
  4. 审计日志,可追溯

八、总结与展望

8.1 迁移收益

指标 IDC 模式 云原生 改善
资源获取 2-4 周 分钟级 1000 倍+
弹性能力 天级 秒级 实时
年度成本 ¥850 万 ¥580 万 -32%
运维人力 15 人 5 人 -67%
SLA 99.5% 99.9% 提升

8.2 未来规划

  1. Serverless 化:更多作业使用无服务器模式
  2. AI 增强:智能调度 + 智能运维
  3. 多云战略:避免厂商锁定
  4. 绿色计算:碳足迹监控 + 优化

作者: 大数据开发团队
版本: v1.0
最后更新: 2024-04-08
适用场景: 企业上云、云原生大数据平台建设

相关推荐
sbjdhjd2 小时前
Docker | 核心概念科普 + 保姆级部署
linux·运维·服务器·docker·云原生·面试·eureka
Project_Observer2 小时前
为您的项目选择最合适的Zoho Projects自动化巧能
大数据·运维·人工智能·深度学习·机器学习·自动化·编辑器
IT观测2 小时前
选高低温环境试验箱,品牌、生产商、厂家哪个维度更可靠?
大数据·人工智能
isNotNullX2 小时前
BI如何落地?BI平台如何搭建?
大数据·数据库·人工智能
k8s容器运维大佬3 小时前
‌原油拉升、黄金白银走低,通常利好能源与工业板块,利空贵金属与部分成长型科技股‌。
大数据·人工智能
cyber_两只龙宝3 小时前
【Nginx】Nginx实现FastCGI详解
linux·运维·nginx·云原生·php·memcached·fastcgi
qq_260241233 小时前
将盾CDN:云原生安全的发展与实践
安全·云原生
霸道流氓气质3 小时前
微服务架构开发模式-接口定义契约(路由+API规范),Controller实现业务,Feign复用接口远程调用,附详细示例
微服务·云原生·架构