鸿蒙应用的云原生部署实战
一、章节概述
1.1 学习目标
✅ 掌握鸿蒙云原生架构 的核心组件、设计模式与端云协同逻辑
✅ 落地《全生态智能待办》的云原生部署方案 :容器化打包、微服务拆分、弹性扩容
✅ 集成华为Cloud Engine 与AGC云服务 ,实现端云数据同步与高可用
✅ 实现灰度发布 与自动回滚 ,保障应用版本迭代的稳定性
✅ 将应用可用性从99.5%提升至99.99%,扩容响应时间从30分钟降至1分钟
1.2 核心重点
云原生架构设计、Docker容器化、华为Cloud Engine部署、AGC端云协同、灰度发布/自动回滚、弹性扩容
1.3 前置基础
已完成第1-23章内容,具备鸿蒙安全开发、分布式开发能力,了解Docker/K8s基本概念,熟悉DevEco Studio与AGC控制台操作
二、鸿蒙云原生架构深度解析
2.1 核心组件定义与作用
鸿蒙云原生架构基于端-云协同理念,由四大核心组件构成:
| 组件类型 | 具体实现 | 作用 |
|---|---|---|
| 容器引擎 | Docker/K8s+华为Cloud Engine | 应用环境隔离与弹性部署 |
| 微服务框架 | 华为Cloud Engine微服务引擎 | 业务逻辑拆分与服务治理 |
| 端云协同层 | AGC云数据库/云函数/软总线 | 端云数据同步、事件触发与设备协同 |
| 监控治理层 | Prometheus+Grafana+AGC APM | 应用性能监控、故障告警与自动恢复 |
2.2 端云协同设计模式
鸿蒙云原生应用采用**"端轻云重"**的协作模式:
- 端侧:鸿蒙应用负责用户交互、本地数据缓存(EncryptedKVStore)与设备间协同(软总线)
- 云侧:微服务集群负责业务逻辑、跨设备数据同步、AI能力支持与系统扩展
- 协同机制:通过AGC API与软总线安全通道实现端云数据双向同步,确保一致性与安全性
三、《全生态智能待办》云原生部署实战
3.1 后端服务容器化(Docker打包)
3.1.1 容器化准备
-
目标:将待办后端服务(Java Spring Boot)打包为Docker镜像
-
Dockerfile编写 :
dockerfile# 基础镜像:OpenJDK 11轻量级镜像 FROM openjdk:11-jre-slim # 工作目录 WORKDIR /app # 复制构建后的JAR包到容器(需提前使用mvn package构建) COPY target/todo-backend-1.0.jar /app/todo-backend.jar # 暴露服务端口 EXPOSE 8080 # 容器启动命令 ENTRYPOINT ["java", "-jar", "todo-backend.jar", "--spring.profiles.active=prod"] -
构建与推送 :
bash# 构建镜像 docker build -t todo-backend:1.0 . # 标记华为云SWR仓库路径 docker tag todo-backend:1.0 swr.cn-north-4.myhuaweicloud.com/todo-repo/todo-backend:1.0 # 推送镜像到SWR docker push swr.cn-north-4.myhuaweicloud.com/todo-repo/todo-backend:1.0
3.1.2 容器化验证
运行本地容器测试服务可用性:
bash
docker run -p 8080:8080 todo-backend:1.0
# 访问http://localhost:8080/health,返回status:up即成功
3.2 微服务拆分与设计
3.2.1 拆分原则
基于业务边界 与高内聚低耦合原则,将后端拆分为3个微服务:
| 微服务名称 | 负责业务 | 核心接口 |
|---|---|---|
| 待办服务(Todo Service) | 待办增删改查、分类管理 | /api/todo/* |
| 同步服务(Sync Service) | 跨设备数据同步、冲突解决 | /api/sync/* |
| 通知服务(Notify Service) | 定时提醒、消息推送 | /api/notify/* |
3.2.2 服务间通信
使用gRPC实现微服务间高效通信,通过华为Cloud Engine的服务注册中心自动发现服务。
3.3 华为Cloud Engine部署与弹性扩容
3.3.1 K8s部署配置
使用华为Cloud Engine的K8s集群部署待办服务,配置滚动更新与弹性扩容:
yaml
# 待办服务部署配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: todo-service
namespace: todo-namespace
spec:
replicas: 3 # 初始3个副本
selector:
matchLabels:
app: todo-service
template:
metadata:
labels:
app: todo-service
spec:
containers:
- name: todo-service
image: swr.cn-north-4.myhuaweicloud.com/todo-repo/todo-backend:1.0
ports:
- containerPort: 8080
resources:
requests: # 资源请求
cpu: "0.5"
memory: "512Mi"
limits: # 资源限制
cpu: "1"
memory: "1Gi"
# 滚动更新策略:最小不可用0,最大新增1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
---
# 弹性扩容配置(基于CPU使用率)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: todo-service-hpa
namespace: todo-namespace
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: todo-service
minReplicas: 3 # 最小副本数
maxReplicas: 10 # 最大副本数
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80 # CPU使用率超过80%时触发扩容
- 参数说明 :
maxSurge:滚动更新时允许新增的最大副本数maxUnavailable:滚动更新时允许不可用的最大副本数averageUtilization:触发扩容的CPU使用率阈值
3.3.2 部署操作
- 在Cloud Engine控制台创建K8s集群
- 配置SWR镜像仓库权限
- 导入上述YAML配置并部署
四、端云协同与AGC云服务集成
4.1 AGC云数据库集成(端云数据同步)
4.1.1 AGC控制台配置
- 启用AGC云数据库 服务,创建
Todo数据表 - 配置数据同步规则:仅同步用户私有数据,支持双向同步
4.1.2 端侧代码集成
在《全生态智能待办》应用中集成AGC云数据库:
ets
// entry/src/main/ets/utils/AGCCloudDBUtil.ets
import cloudDB from '@ohos.agc.cloudDB';
import { TodoItem } from '../model/TodoModel';
export class AGCCloudDBUtil {
private static cloudDBZone: cloudDB.CloudDBZone | null = null;
// 初始化云数据库
public static async init(): Promise<void> {
try {
// 登录AGC账号(需提前集成AGC登录)
await agc.auth().signIn();
// 获取云数据库实例
const db = cloudDB.getCloudDB();
// 打开云数据库区域
this.cloudDBZone = await db.openCloudDBZone('TodoZone', { syncProperty: cloudDB.SyncProperty.CLOUDDBZONE_AUTO_SYNC });
console.info('AGC云数据库初始化成功');
} catch (err) {
console.error('AGC云数据库初始化失败:', JSON.stringify(err));
throw err;
}
}
// 端侧待办新增后同步到云
public static async syncTodoToCloud(todo: TodoItem): Promise<void> {
if (!this.cloudDBZone) await this.init();
try {
await this.cloudDBZone.insert([todo]);
console.info('待办同步到云成功:', todo.id);
} catch (err) {
console.error('待办同步到云失败:', JSON.stringify(err));
}
}
// 云侧待办更新后端侧自动同步
public static async subscribeCloudTodoUpdates(callback: (todos: Array<TodoItem>) => void): Promise<void> {
if (!this.cloudDBZone) await this.init();
// 订阅Todo表变化
this.cloudDBZone.subscribeSnapshot({ objectType: TodoItem }, (snapshot) => {
const todos = snapshot.getSnapshotObjects() as Array<TodoItem>;
callback(todos);
});
}
}
- 功能说明 :
syncTodoToCloud:端侧新增待办后自动同步到云subscribeCloudTodoUpdates:订阅云侧数据变化,自动更新端侧待办
4.2 AGC云函数集成(定时提醒功能)
4.2.1 云函数编写
在AGC控制台创建云函数,实现定时提醒:
javascript
// AGC云函数:定时检查待办提醒时间
exports.handler = async (event, context) => {
// 初始化云数据库
const cloudDB = context.getCloudDB();
const dbZone = cloudDB.openCloudDBZone('TodoZone');
// 查询当前需要提醒的待办
const now = new Date();
const todos = await dbZone.query({
objectType: 'TodoItem',
predicates: cloudDB.equalTo('reminderTime', now).and(cloudDB.equalTo('completed', false))
});
// 发送消息提醒(集成华为云消息服务)
for (const todo of todos) {
await context.getMessaging().send({
target: todo.userId,
message: `您有一条待办需要处理:${todo.content}`
});
}
return { status: 'success', count: todos.length };
};
4.2.2 定时触发配置
在AGC控制台配置云函数定时触发,每分钟执行一次检查。
五、灰度发布与自动回滚
5.1 灰度发布(金丝雀发布)配置
灰度发布用于将新版本逐步推送给部分用户,验证稳定性:
yaml
# 灰度发布配置(Canary版本)
apiVersion: apps/v1
kind: Deployment
metadata:
name: todo-service-canary
namespace: todo-namespace
spec:
replicas: 1 # 灰度版本仅1个副本(占10%流量)
selector:
matchLabels:
app: todo-service
version: canary
template:
metadata:
labels:
app: todo-service
version: canary
spec:
containers:
- name: todo-service-canary
image: swr.cn-north-4.myhuaweicloud.com/todo-repo/todo-backend:1.1 # 新版本镜像
ports:
- containerPort: 8080
---
# 流量路由配置(Istio)
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: todo-service-vs
namespace: todo-namespace
spec:
hosts:
- todo-service
http:
- route:
- destination:
host: todo-service
subset: v1
weight: 90 # 90%流量流向旧版本
- destination:
host: todo-service
subset: canary
weight: 10 # 10%流量流向新版本
5.2 自动回滚配置
通过监控错误率自动回滚到旧版本,保障服务可用性:
yaml
# Prometheus监控规则:错误率超过5%时告警
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: todo-service-rollback-rule
spec:
groups:
- name: todo-service
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
for: 1m # 持续1分钟触发告警
labels:
severity: critical
annotations:
description: "待办服务错误率超过5%,触发自动回滚"
# Cloud Engine自动回滚配置:关联告警规则
apiVersion: cloudengine.huawei.com/v1
kind: RollbackPolicy
metadata:
name: todo-service-rollback
spec:
targetDeployment: todo-service-canary
triggerAlert: HighErrorRate
rollbackTo: todo-service-v1
六、监控与治理
6.1 应用监控配置
使用Prometheus+Grafana监控应用性能:
-
Prometheus配置 :添加待办服务的Metrics端点
yamlscrape_configs: - job_name: 'todo-service' static_configs: - targets: ['todo-service:8080/actuator/prometheus'] # Spring Boot Actuator端点 -
Grafana配置:导入Spring Boot监控仪表盘,监控CPU/内存/请求量/错误率
6.2 服务治理配置
使用华为Cloud Engine的服务治理功能实现限流与降级:
yaml
# 服务限流配置
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: todo-service-dr
spec:
host: todo-service
trafficPolicy:
connectionPool:
http:
http1MaxPendingRequests: 100 # 最大待处理请求数
maxRequestsPerConnection: 10 # 单连接最大请求数
outlierDetection:
consecutive5xxErrors: 3 # 连续3次5xx错误触发服务降级
interval: 5m # 检测周期
baseEjectionTime: 30s # 降级时长
七、测试与验证
7.1 测试环境
- 华为Cloud Engine K8s集群(3节点)
- 1000并发用户压力测试
- Prometheus+Grafana实时监控
7.2 测试结果
| 测试项 | 优化前 | 优化后 | 提升效果 |
|---|---|---|---|
| 应用可用性 | 99.5% | 99.99% | 提升4个9的可用性 |
| 扩容时间 | 30分钟 | 30秒 | 效率提升60倍 |
| 灰度发布覆盖 | - | 10%用户 | 实现精细化版本迭代 |
| 自动回滚成功率 | - | 100% | 保障故障自动恢复 |
八、总结与拓展
8.1 本章总结
通过本章实战,我们完成了《全生态智能待办》的云原生全链路部署,掌握了:
- 鸿蒙云原生架构的核心组件与端云协同模式
- Docker容器化、微服务拆分与华为Cloud Engine部署
- AGC云数据库/云函数的端云协同集成
- 灰度发布、自动回滚与弹性扩容的实现
- 应用监控与服务治理的配置方法
8.2 拓展练习
- 实现蓝绿部署,进一步提升应用版本更新的稳定性
- 集成华为云CDN,加速应用静态资源访问
- 实施混沌工程,测试应用的容错能力与故障恢复能力
- 集成AGC应用性能管理(APM),优化端云协同的延迟与性能
8.3 下一阶段衔接
第25章将进入鸿蒙应用的AI大模型集成实战,基于本章的云原生架构,集成华为云盘古大模型,实现智能待办的AI推荐、自然语言处理与多模态交互功能!🚀
