1.
目标定义:明确业务需要横向扩展的对象(web 前端、API 网关、异步任务、数据库读取等),确定 RTO/RPO、峰值并发、每秒请求数(QPS)和预算。
架构选择:选择“台湾自有云 + 公有云或外部机房”混合方式(例如 台湾品牌 VPS 作为主机群,AWS/GCP/阿里云作为弹性扩缩资源或备援)。绘制拓扑:负载均衡层、应用层、数据层、缓存层、对象存储与CDN。
2.
步骤一:选链路方式。小规模用 site-to-site OpenVPN/StrongSwan,生产建议购买云厂商的专线(Direct Connect / Express Connect),或使用SD-WAN。
OpenVPN 快速示例(台湾服务器为 server):/etc/openvpn/server.conf 关键项:
port 1194 proto udp dev tun server 10.8.0.0 255.255.255.0 push "route 10.0.0.0 255.255.255.0"
StrongSwan 示例(ipsec.conf)用于 IPSec/IKE:配置双方公网 IP、ESP 加密算法与预共享密钥,启动并测试 ping。务必在防火墙开放 UDP 500/4500 与 ESP。
3.
选择 LB:台服品牌若提供云 LB,可优先使用;否则用 HAProxy 或 Nginx 做反向代理/负载均衡。HAProxy 基本配置:
global maxconn 20000 defaults mode http timeout connect 5s frontend http-in bind *:80 default_backend servers backend servers balance roundrobin server s1 10.0.0.11:80 check server s2 10.0.0.12:80 check
部署多节点 LB(至少两台)并做浮动 IP 或 VRRP(Keepalived)实现高可用。
4.
容器化:将应用封装成 Docker 镜像,编写 Dockerfile,推送镜像到私有镜像仓库(Harbor 或 Docker Registry)。
Kubernetes 部署示例(在台湾服务器集群 + 公有云节点混合):
1) 在控制节点执行: kubeadm init --apiserver-advertise-address=<控制节点IP> --pod-network-cidr=10.244.0.0/16
2) 在每个工作节点执行 kubeadm join
3) 安装网络插件(如 Calico 或 Flannel):kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
混合集群注意点:标签节点来源(node-labels),并用 nodeSelector / nodeAffinity 控制工作负载落到台湾节点或云端节点。
5.
在 Kubernetes 中使用 HorizontalPodAutoscaler 根据 CPU/内存或自定义指标扩缩 Pod。示例 YAML:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: myapp-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: myapp minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60
节点扩缩:使用 Cluster-Autoscaler,将云端可弹性伸缩的节点池设置为目标,确保当 Pod 无法调度时自动向公有云申请节点。
6.
读写分离(MySQL)实操:
1) 在主库开启 binlog:my.cnf 设置 server-id=1、log-bin=mysql-bin;重启 MySQL。
2) 在从库执行 CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4; START SLAVE;
3) 应用层使用 ProxySQL 或 HAProxy 做读写路由(写到主、读到从)。
分片:针对写入量极大或数据量非常大的场景,设计水平分片规则(按用户 ID 范围或取模)。在应用层实现路由表或使用中间件(例如 Vitess、Citus)。
7.
缓存:部署 Redis 或 Memcached 做热点数据缓存。Redis 高可用采用主从 + Sentinel 或 Redis Cluster。
对象存储:将静态文件(图片、日志、备份)放到对象存储(S3 兼容或台湾品牌对象存储),减少磁盘 IO 与主机负担。
CDN:将静态资源与大文件接入 CDN,配置回源为台湾服务器或对象存储。设置合理的缓存策略(Cache-Control, ETag),并使用压缩与图片优化。
8.
答:混合部署主要风险是跨链路的网络延迟与丢包,尤其当应用频繁进行同步写或强一致性要求高时。解决办法:把强一致性写入限制在同一可用区/同一数据中心,用异步复制或事件总线(Kafka)同步到异地;关键接口采用重试与幂等设计;对延迟敏感的请求尽量本地化处理。
9.
答:先对业务进行分层:稳定且成本敏感的长期负载放台湾私有云,突发峰值或临时扩容放公有云。设定弹性节点池并使用基于时间或事件的扩容策略,结合自动化关闭闲置资源(如使用预留实例/节假日策略)来优化成本。同时采用缓存与 CDN 降低跨云请求。
10.
答:采用蓝绿/滚动升级策略:在 Kubernetes 中用 RollingUpdate 或蓝绿部署控制器。数据库升级通过主从切换(先写到新主再回写)或使用双写镜像一致性校验。故障恢复方面,定期演练 DR(灾难恢复)计划,确保数据备份(异地备份)与自动切换(DNS、LB 健康检查、BGP 或 Anycast)可快速生效。