异地容灾与多活架构 学习笔记(第 2 部分)
实现示例:
javascript
// 基于 BGP 的网络多活
class NetworkMultiActive {
constructor() {
this.datacenters = {
telecom: {
name: '电信机房',
ip: '202.96.128.1',
carrier: 'telecom',
region: 'cn-north'
},
unicom: {
name: '联通机房',
ip: '210.22.128.1',
carrier: 'unicom',
region: 'cn-north'
},
mobile: {
name: '移动机房',
ip: '120.204.128.1',
carrier: 'mobile',
region: 'cn-north'
}
}
}
// 根据用户运营商选择机房
routeByCarrier(userCarrier) {
const dc = this.datacenters[userCarrier]
if (dc && this.isHealthy(dc)) {
return dc
}
// 回退到其他机房
return this.fallback(userCarrier)
}
// 检查机房健康状态
isHealthy(dc) {
// 实际实现:心跳检测、HTTP 探测等
return true
}
// 回退策略
fallback(carrier) {
const carriers = Object.keys(this.datacenters)
const otherCarriers = carriers.filter(c => c !== carrier)
for (const c of otherCarriers) {
if (this.isHealthy(this.datacenters[c])) {
return this.datacenters[c]
}
}
return null
}
}
// DNS 配置示例
const dnsConfig = {
domain: 'api.example.com',
records: [
{ type: 'A', carrier: 'telecom', ip: '202.96.128.1', ttl: 60 },
{ type: 'A', carrier: 'unicom', ip: '210.22.128.1', ttl: 60 },
{ type: 'A', carrier: 'mobile', ip: '120.204.128.1', ttl: 60 },
{ type: 'A', carrier: 'default', ip: '1.2.3.4', ttl: 300 } // BGP IP
]
}1.2.4 存储多活
定义:逻辑层面的多活,用户无需关心数据实际存储位置
code
存储多活架构:
┌─────────────────────────────────┐
│ 应用层 │
│ (无需关心数据存储位置) │
└─────────────┬───────────────────┘
↓
┌─────────────────────────────────┐
│ 存储虚拟化层 │
│ (统一存储接口) │
└─────────────┬───────────────────┘
↓
┌─────────┼─────────┐
│ │ │
┌───┴───┐ ┌──┴────┐ ┌──┴────┐
│存储A │ │存储B │ │存储C │
│(北京) │ │(上海) │ │(广州) │
└───────┘ └───────┘ └───────┘
特点:
- 对用户透明
- 自动数据同步
- 统一管理界面
- 异构存储支持