高可用
# 传统的ALL IN ONE存在的问题
- 耦合严重
- 职责不分明
- 运维成本高
- 模块大、臃肿
- 性能极限差
- 牵一发动全身
- 开发成本高、效率低下
- 组件间相互影响,一旦一个组件有问题整个服务都受影响
- 扩展性差
# 分层原则
- 数据库服务和逻辑服务分离
- 逻辑服务和接入服务分层
- 接入服务和展示服务分离
设计原则
- 分层服务功能单一 数据 逻辑 接入 展示
- 分层低耦合 接口交付
- 分层高内聚 功能聚焦单一
# 如何分层
前端框架 MVC框架分层
后端架构 按照功能水平划分 四层: 接入层、逻辑层、数据层、数据存储 接入层、逻辑层、原子服务层、数据存储 五层: 接入层、序列号层(异步消息队列)、逻辑层、数据层、数据存储
按照业务垂直拆分 房产、招聘、二手 IM、交友等
# 常遇到问题
- 数据不兼容、误删除 数据备份
# 案例
# 硬件层面设计
SOA和微服务:SOA比较粗
# 互联网主流构成
CPU 32 Processor ,每核2个处理器,开启超线程 2.5GHZ
内存 32、64、128
磁盘 SATA机械盘、SAS机械盘、SSD固态硬盘
网卡
100、1000mbs
机型分类
- 内存性 128G内存
- I/O型
- 存储型
- 计算型 GPU
服务器型号
# 应用场景
Web业务场景
- 内存型、计算型
逻辑业务场景
- 计算型
Cache应用
- 内存型
测试应用
- 虚拟机
# RAID
RAID 0
数据分条,加速读写
RAID 1 冗余
RAID10
RAID 0 + RAID 1
RAID01
RAID1 + RAID0
RAID5 分布式奇偶校验,独立磁盘
# 硬件层面高可用
RAID优化
较大的磁条大小提供较好的读取性能,特别是系统主要进行顺序读取更是如此。DB机器stripe size 都设置成128K,其他机器选择的是64K
读写策略
foce wb with no battery (不使用电池强制回写)
多机 系统多机冗余
数据多机冗余
保证高可用
# DNS
DNS域名劫持校验
- nslookup 查看address
- whois [address] 查看是不是正确域名提供商
DNS欺骗
和劫持类似
# DNS解决方案
数据合法性校验
- 数据是否完整
- 数据时效
实时监控 + 商务推动
- 语义监控
绕过自动分配DNS
使用IP地址
使用httpDNS
解决问题 LocalDNS被劫持 平均访问延迟下降 用户连接失败率下降(智能连接算法) 使用场景
需要引入SDK 移动客户端
浏览器劫持
DNS劫持
CDN劫持
网关劫持
网关劫持
HTTPS、SSL、加密
最佳实践
- 尽可能选用HttpDNS
- 基于IP直连
- 传统DNS监控、及时报警、商务推动
流量被劫持
代理劫持
链路劫持
# CDN
全局负载均衡器
局部负载均衡
# 接入层作用
- 客户端长短连接管理
- 建立与客户端通信的加密通道
- 合法性、正确性校验
- 整合内部少量的连接
- session管理
- 初步实施攻防
- 请求转发到逻辑层
逻辑层设计
垂直拆分:根据每个业务一个模块,独立进程
无状态
业务逻辑层不保存任何请求状态、数据,完全对称,负载均衡
异步调用场景
I/O,网络I/O
设置合理的超时时间、重试
服务降级
- 通过队列方式,拒绝低优先服务的
- 随机丢弃
- 关闭服务
服务幂等设计
天然幂等 - 消息设置成已读
非幂等 - 增加状态达到幂等
数据存储
多机存储
复制
故障检测
# 缓存
加速请求,响应延迟小
减少存储的读写 压力