如何设计这样的系统架构,今天使用“用餐”的思想来跟大家说说。当大家在商城逛累肚子也饿了,大家会找餐饮那层,有些人吃西餐,有些人吃中餐,你选择了中餐,这时餐厅领位员会让你取号,然后轮到你的时候就领你到指定位置上,当你下单点好菜,后厨就会分工做菜,把做好的放到传菜窗口,传菜员就会送到你座上,最后吃完买单走人。

  上面的场景每个步骤都蕴藏着设计理念,简单理解就是分层,然后各层把自己那块功能做到极致,这样每天千万,乃至上亿的订单数据,都能应付,下面用表格来对比:

层级 功能模块 技术类比 作用说明
入口层 负载均衡 餐厅领位员 平均分配客户到不同区域
业务层 微服务集群 后厨分工(炒菜/面点) 订单处理/支付/库存管理等
缓冲层 消息队列 传菜窗口 异步处理订单流转
数据层 数据库集群+缓存 仓库+传菜员记事本 持久化存储+热点数据加速
1、入口层(也叫接入层),主要负责

(1)负载均衡:可以用HAProxy/Nginx/LVS实现流量分发

(2)CDN加速:静态资源上CDN,减少源站压力

(3)限流熔断:对服务接口做限流或熔断

2、业务层,主要负责

(1)微服务拆分:按领域或服务拆,独立部署和扩展

(2)无状态设计:服务实例无状态,利于动态扩缩容,应当流量洪峰

(3)异步化处理:区分核心和非核心链路,通过消息来削峰填谷

3、数据层,主要负责

(1)分库分表:可按用户ID哈希分库,避免单表过大

(2)读写分离:主从集群,写主库+读从库

(3)多级缓存:本地缓存、redis缓存,db内置缓存等

小结:其实每天产生一千万的订单数据,折算QPS(每秒请求)大概是100多,考虑特殊节日和时间点的突发涌流,系统设计思想就是“分流”,如上面的例子,每层都在分流,并具备横向扩展。当然现实系统,还要考虑容灾与监控等,例如:多机房部署、全链路监控、自动化运维等等,技术实现还得考虑事务一致性、补偿机制,冷热分离等,这样就可以支持千万级业务需求。如果公司前期没多少预算,可以用某云服务,这样等业务量上来了,再实现自建数据库集群+实现同城双活架构,包括用硬件来加速系统的性能等动作。


无界行者
1 声望0 粉丝

技术产品实践,记录美好生活