5、亿级流量如何架构设计?
答:采用高并发、高可用、高可靠的“三高”设计原则进行设计。
(1)三高设计原则
系统建设必须做到,即使个别节点宕机、网络不可用,依然能保证整个系统对用户是可用的,可以为用户正常提供服务。
1)高并发
主旨原则:系统分层、逐级限流。
服务网关层 | 负载均衡 | 将所有压力均匀地分布到许多物理节点上 |
限流措施 | 只将有效的流量转发给下游;当业务流量超过系统设计能力时,拒绝掉过载部分流量 | |
用户鉴权 | 阻止不合法用户流量 | |
安全防护 | 保护系统免受DDoS等攻击 | |
业务层 | 动静分离/前后端分离 | 通过页面缓存提高用户体验 |
异步化设计 | 先受理用户请求,再发送消息给队列 | |
熔断机制 | 进行“服务降级”来防止系统雪崩 | |
服务层 | 服务降级 | 查询降级:通过不查询数据而返回兜底数据来降低数据库压力。 写操作降级:不再去写数据库,而是切换为写Redis内存数据库加异步写库 |
分布式缓存 | ||
数据层 | 读写分离 | 将数据库分为生产库与查询库,分别予以系统优化 |
横向、纵向切分 | 分散生产库的写入压力,缓解磁盘I/O的瓶颈 | |
NoSQL数据库与大数据平台 | 实现数据分析与查询的优化 |
2)高可用
高可用:即使在面对高并发时个别节点宕机,整个系统对于用户来说仍是可用的,用户的所有请求都将予以处理,并最终反馈给用户。
网关层 | 多机房 通过DNS轮询实现多机房的访问 |
服务层 | 保证负载均衡高可用(如:Nginx的主从同步) |
应用层与服务层 | 通过Kubernetes云端部署,每个服务都至少部署在两个以上节点 |
数据节点(缓存、消息队列、数据库) | 通过主从同步实现 |
3)高可靠
这里的高可靠,特指数据的高可靠运行不丢失。可采用去中心化设计。
(2)服务治理
1)微服务
2)中台设计:业务中台、技术中台
业务中台:将业务组件抽象,将如用户权限、会员管理、仓储管理、物流管理等公共组件做成微服务,为各业务系统所使用。
技术中台:就是封装了各个业务系统所需要的技术框架,以统一的API开放出来,使上层的业务开发技术门槛降低、开发工作量减少、提升交付速度。
数据中台:整理各个业务系统的数据,建立数据存储与运算的平台,为各个系统的数据的分析与利用提供支持。
(3)各云端的转型
选择公有云设计方案:降低成本、提高安全;云技术逐渐从虚拟技术向着窗口技术甚至Serverless方向转型。系统可直接在基于分布式窗口的Docker + Kubernetes云平台上部署。
云端方案促进技术转型:首先,业务系统将拆分单体应用,采用微服务设计并进行云端部署;其次,系统设计向着分布式设计转型;采用无状态设计、降低节点间通讯、保障节点宕机的高可用与数据不丢失;最后,是DevOps自动化部署与运维平台的建设,需要搭建一个基于Git + Jenkins + Docker + Kubernetes的自动化发布平台,并通过Prometheus + Grafana进行系统监控,通过EFK进行日志监控。