高可用

2020/12/14 笔记高可用

# 传统的ALL IN ONE存在的问题

  • 耦合严重
  • 职责不分明
  • 运维成本高
  • 模块大、臃肿
  • 性能极限差
  • 牵一发动全身
  • 开发成本高、效率低下
  • 组件间相互影响,一旦一个组件有问题整个服务都受影响
  • 扩展性差

# 分层原则

  • 数据库服务和逻辑服务分离
  • 逻辑服务和接入服务分层
  • 接入服务和展示服务分离

设计原则

  1. 分层服务功能单一 数据 逻辑 接入 展示
  2. 分层低耦合 接口交付
  3. 分层高内聚 功能聚焦单一

# 如何分层

  1. 前端框架 MVC框架分层

  2. 后端架构 按照功能水平划分 四层: 接入层、逻辑层、数据层、数据存储 接入层、逻辑层、原子服务层、数据存储 五层: 接入层、序列号层(异步消息队列)、逻辑层、数据层、数据存储

    按照业务垂直拆分 房产、招聘、二手 IM、交友等

# 常遇到问题

  • 数据不兼容、误删除 数据备份

# 案例

image-20201212110047337

push

image-2020121211051935

# 硬件层面设计

SOA和微服务:SOA比较粗

# 互联网主流构成

  • CPU 32 Processor ,每核2个处理器,开启超线程 2.5GHZ

  • 内存 32、64、128

  • 磁盘 SATA机械盘、SAS机械盘、SSD固态硬盘

  • 网卡

    100、1000mbs

机型分类

  • 内存性 128G内存
  • I/O型
  • 存储型
  • 计算型 GPU

服务器型号

image-20201212172750428

# 应用场景

Web业务场景

  • 内存型、计算型

逻辑业务场景

  • 计算型

Cache应用

  • 内存型

测试应用

  • 虚拟机

# RAID

  • RAID 0

    数据分条,加速读写 image-20201212174136134

  • RAID 1 冗余 image-20201212174241906

  • RAID10

    RAID 0 + RAID 1 image-20201212174511087

  • RAID01

    RAID1 + RAID0 image-2020121217461658

  • RAID5 分布式奇偶校验,独立磁盘

    image-20201212175332459

# 硬件层面高可用

  • RAID优化

    较大的磁条大小提供较好的读取性能,特别是系统主要进行顺序读取更是如此。DB机器stripe size 都设置成128K,其他机器选择的是64K

  • 读写策略

    foce wb with no battery (不使用电池强制回写)

  • 多机 系统多机冗余

    数据多机冗余

    保证高可用

# DNS

DNS域名劫持校验

  1. nslookup 查看address
  2. whois [address] 查看是不是正确域名提供商

DNS欺骗

和劫持类似

# DNS解决方案

数据合法性校验

  • 数据是否完整
  • 数据时效

实时监控 + 商务推动

  • 语义监控

绕过自动分配DNS

  • 使用IP地址

  • 使用httpDNS

    解决问题 LocalDNS被劫持 平均访问延迟下降 用户连接失败率下降(智能连接算法) 使用场景

    需要引入SDK 移动客户端

浏览器劫持

  • DNS劫持

  • CDN劫持

  • 网关劫持

  • 网关劫持

    HTTPS、SSL、加密

最佳实践

  • 尽可能选用HttpDNS
  • 基于IP直连
  • 传统DNS监控、及时报警、商务推动

流量被劫持

  • 代理劫持

  • 链路劫持

# CDN

全局负载均衡器

局部负载均衡

image-20201212211310306

image-20201212211430406

image-20201212214241919

image-20201212214354899

# 接入层作用

  • 客户端长短连接管理
  • 建立与客户端通信的加密通道
  • 合法性、正确性校验
  • 整合内部少量的连接
  • session管理
  • 初步实施攻防
  • 请求转发到逻辑层

image-20201212221109576

逻辑层设计

垂直拆分:根据每个业务一个模块,独立进程

无状态

业务逻辑层不保存任何请求状态、数据,完全对称,负载均衡

异步调用场景

I/O,网络I/O

image-20201213103746705

设置合理的超时时间、重试

服务降级

  • 通过队列方式,拒绝低优先服务的
  • 随机丢弃
  • 关闭服务

服务幂等设计

天然幂等 - 消息设置成已读

非幂等 - 增加状态达到幂等

数据存储

多机存储

复制

故障检测

image-20201213181743684

image-20201213181930640

image-20201213182022710

image-20201213182150671

image-20201213182248063

image-2020121318253142

image-2020121318264570

image-20201213182737071

image-20201213182853441

image-2020121318293625

image-20201213183020154

image-20201213183342964

image-20201213183519087

image-20201213183548452

# 缓存

加速请求,响应延迟小

减少存储的读写 压力

image-20201213184554476

image-2020121318464845

image-20201213184931737

image-20201213185143236

image-20201213185333393

image-20201213190032550

image-2020121319013813

image-2020121319042461

# 性能评估

image-20201213191643799

image-20201213192009650

image-20201214233937625

image-20201217221132439

image-20201217221210711

image-20201217221434833

image-20201217221458703

image-20201217221645975

image-20201217221759935

image-20201217222046596

image-20201217223820293

image-20201217223947676

image-20201217224351812