高性能、高可用服务化架构要点
高性能/并发架构原则
- 无状态
- 拆分
- 服务化
- 消息队列、消息驱动
- 数据异构
- 负载均衡
- 分级缓存
- 并行化、异步
服务平滑上下线
优点
请求在升级服务时,为了不丢失任何一个请求需要扩展
- 优雅停机 graceful shutdown (关闭时,有新的请求要拒绝连接;正在进行的请求需要等结束后正常关闭)
- 扩展 RibbonLoadBalancedRetryPolicy
- 多久节点上线间隔一分钟以上
跨机房调用:
nacos本身支持异地多活
如果机房A没有服务B
那么机房A会调用机房B的服务B
分级缓存
- 客户端缓存(移动端、浏览器)
- 服务端缓存
常见缓存
- http (浏览器)缓存
- 反向代理缓存 (nginx)
- 分布式缓存 redis memcache etc.
解决系统可用性的手段
- 减少故障出现次数
- 缩短故障处理时间
服务化时间-服务治理
流量调配-权重调节
服务路由:机房感知、服务自定义分组、动态路由
调用链数据分析
监控报警
实时日志查询elk
无状态单实例故障
- 健康心跳
- 负载均衡
- 快速失败
- 超时时间
- 控制重试
- 自动恢复
有状态单实例故障
- 第三方仲裁HA数据库主备切换
自动选举
- Paxos
- Raft
服务集群故障
原因
- 容量不足
- 变更引起
- 网络故障
- bug
- etc...
解决办法
快速弹性扩容、限流、熔断&降级
CI/CD DevOps
服务器多AZ(单元化部署)
Auto Test / Code Review
服务集群故障-自我保护
限流
- 按系统负载限流
- 按业务优先限流
降级
- 依赖模块的降级
- 业务功能的降级
机房层面故障
- 网络核心故障
- 接入层故障
- 机房断电
多机房/可用区容灾
同城-多可用区部署架构-单元化、多活
架构演进方向- cloud Natice (service Mesh)
(istio)
service Mesh - envoy proxy & nginMesh
契约测试工具
- spring cloud contract
- pact
- mountebank