今天去面试一家做电商项目的公司,一上来就问:你是怎么解决高并发的?看来高并发这个问题在面试中是逃离不了了,现在写一点自己的理解,理解得很浅薄,但也希望能帮助大家。
我觉得要回答这个问题可以从这几个方面入手:
第一、硬件层面,服务器用更大的内存,更好的硬盘。考虑到money,这肯定不是面试官想听的答案,不过可以提上一嘴。
第二、软件层面:
1.应用服务器这块肯定是最先遭不住的,所以先搞一个niginx做负责均衡,后台多部署几台应用服务器,
将请求均匀的分发到每台服务器上,就是所谓的集群部署;
2.有了集群部署后,应用服务器的压力暂时抗住了,现在就轮到数据库这块遭不住了。这时候就要考虑分库分表了,
还有就是读写分离,将所有写的压力搞到主库master上,读的压力搞到从库slave。就是分库分表+读写分离;
3.如果访问量继续扩大,那就横向扩展数据库服务器,但是又要考虑到money的问题,所以这也行不通。再把缓存服务器
搞起,做他一个缓存集群。
4.上一步的缓存集群只是解决了读的问题,其实写的压力还是很大,这个时候就要引入消息中间键了,像各种mq之类的
东东。因为有些业务上虽然一次要写入很多条数据,但是不是都是立马要写入的。举个例子,像用户付款后,先把付钱
相关的数据存了,其他记录放在mq里,系统空闲了再慢慢来存。
说到底就是从架构层面来回答这个问题,个人觉得会更好一点,当然上面说了个大概思路,里面涉及很多技术细节,我也在
学习当中,只能靠大家自己去学习领悟了。惭愧!还有就是提醒一下面试的朋友,当你说了这些思路过后,紧接着的问题就是
分布式相关的,像你怎么解决分布式session不一致的问题,分布式事务等等。祝大家面试顺利!