一提起架构师,大家都会想着高大上的感觉,其实架构师本身没有神奇,都是从菜鸟一步一步爬上去的,做多了,经验自然也有了,一个系统的架构,都是业务的拆分,好的架构会对整体的业务产生很大的影响,在架构之初,就要估算设计指标,访问量,并发量,服务器的承载力,容量设计,带宽,甚至需要要估算每个php-fpm占用的内存,以便优化php-fpm.conf
一个系统的架构分为很多,下面一张图,是本人在设计一个海外点播app后端的网关系统架构草图,以便大家熟悉架构的本质
WechatIMG370.jpeg
架构本质是将业务需求进行拆分后开始设计架构图,每个系统都每个系统需要做的事情,例如网关系统:一个用户请求,首先会经过网关系统,进行数据清洗与身份识别,黑名单,防爬虫攻击,监控API调用,系统健康等。
本篇文章是架构一个聊天系统,所以预先要调研即时聊天系统的本质
大概需求
1.大量用户登录与退出都要实时更新状态
2.消息的交互,推与拉
3.消息的ACK确认
4.消息的即时交换
5.群消息与单聊的不同
6.文件的上传与下载
7.消息的存储
8.消息的缓存
9.消息的分页
10.冷热数据
技术调研
1.主体框架采用Lumen5.7版本(画外音,当年老夫一直用着5.5开发第一版的IM)
2.即时通信TCP长连接WorkerMan
3.队列方案采用RabbitMQ
4.队列管理方案采用Horizon
5.守护进程使用supervisor
6.缓存采用Redis
7.数据库采用MySQL/TIDB(前期MySQL,后期上分布式TIDB集群,原因在于先易后难让新司机了解表结构设计)
8.不用网关系统(其实是懒的写)
现在我们画个草图
WechatIMG371.jpeg从图中我们可以看到用户的请求先经过网关系统清洗数据与身份识别后到达Nginx,Nginx在中承担了反向代理和负载均衡的作用,分别代理了Web集群与分布式的WorkerMan,数据与日志经过RabbitMQ管道去顺序的读写/缓存或数据
那么现在了解了该做什么,那么现在第一步是什么呢? 当然是去是git clone lumen... 后续请看后面的文章 lumen+ GatewayWorker
网友评论