刘朝辉 liuzhaohui@camera360

Post on 30-Nov-2021

11 views 0 download

Transcript of 刘朝辉 liuzhaohui@camera360

从私有云到AWS的无缝迁移刘朝辉

liuzhaohui@camera360.com

01

我们是谁

• 品果科技

• 专注于移动影像服务

• 全球超过4.5亿用户

• 多款app产品

宝贝相册

02

提纲

目标

抽象

具象

细节

风险

03

目标

私有云

AWS

现状

目标

业务复制

流量切换

无缝迁移

04

业务抽象

Load balancer

End user

Service logic

Data storage

Service

05

目标分解

Load balancer

End user

Service logic

Data storage

Service

Load balancer

Service logic

Data storage

私有云 AWS

Step 1.1

Step 2

Step 1.2

Step 0

End user

Step 3

06

业务具象化

Nginx

End user

PHP

Mongodb+redis

Service

ELB

Nginx+PHP

Mongodb+redis

私有云 AWS

Step 1.1

Step 2

Step 1.2

Step 0

End user

Step 3

07

细节和风险

• 依赖业务

• 业务逻辑+负载均衡

• 数据存储

• 流量切换

• 善后工作

08

Step0--依赖业务

• 响应变慢/超时问题

–跨IDC延迟变大、网络不稳定

–业务是否容忍

• 解决办法

–依赖业务迁移(避免)

–改造业务(容忍)

09

Step1--业务逻辑+负载均衡

• 迁移部署除数据外的所有功能– Nginx+PHP+ELB部署并测试

– EC2(c3系列),AMI,VPC,subnet

– Redis缓存先部署上(空)

–脚本/定时任务,根据业务情况而定

• ELB– TCP转发,开启Proxy Protocol支持携带用户IP

– HTTP转发,X-Forwarded-For

–支持SSL/HTTPS,需要上传证书

10

中间状态1

Nginx

End user

PHP Service

ELB

Nginx+PHP

私有云 AWS

testing

redis Mongodb redis

EC2

11

Step2--数据存储

• Mongodb

–主从复制

– EC2(r3系列), EBS(SSD)

–数据量、网络质量/带宽

– sharding

• 建议提前测试

–数据复制时长

–现有系统压力

12

Mongodb sharding

13

Step2--数据存储

• Shard–独立复制每个shard

– AWS这边节点可先设置优先级0(不会被选为主)

• Config server–按照配置列表里逆序迁移(stoprsyncstart

new)

–最好不要变更机器名(迁移步骤复杂)

• 其他–期间最好关闭Balancing

14

Step2--数据存储

• 缓存失效

–对缓存的依赖程度(响应时间、命中率)

–数据库承载能力(雪崩)

• 根据情况

–直接数据库扛

–缓存迁移

–预热

15

中间状态2-1

Nginx

End user

PHP Service

ELB

Nginx+PHP

私有云 AWS

testing

redisMongodb(master)

redisMongodb

(slave)

EC2

16

中间状态2-2

Nginx

End user

PHP Service

ELB

Nginx+PHP

私有云 AWS

testing

redisMongodb

(slave)redis

Mongodb(master)

EC2

17

Step3--流量切换

• 修改DNS解析

–如果做了CDN,可能需要CDN修改回源

• 原IDC做反向代理(建议)

–解决DNS生效长尾

18

中间状态3

Nginx

End user

PHP Service

ELB

Nginx+PHP

私有云 AWS

redisMongodb

(slave)redis

Mongodb(master)

End user

转发

DNS切换

EC2

19

善后工作

• 密切观察

–压力、日志、统计、反馈

• 定时任务

• 清理资源

20

最终状态

Service

ELB

Nginx+PHP

AWS

redisMongodb

End user

EC2

21

TIPS

• 做好充足准备

–技术调研

–实地测试

–详细计划

–步骤细化到命令

–关键点做预案

• 还是心里没底?

–联系AWS技术人员