静态资源是nginx,动态使用apache
如果使用云服务,那么可以用CDN来承载静态资源
将后端服务和数据库放在同一台服务器上是“灾难”
⼀旦系统承受的压⼒稍⼤,便会⾯临“债股双杀”的局⾯:
CPU 被耗尽导致 MySQL 响应变慢;
应⽤代码需更长时间等待,虽不额外消耗 CPU 资源,却占⽤⼤量内存;
系统内存被占⽤导致 InnoDB 缓存被系统回收,进⼀步降低了 MySQL 的运⾏速度;
最终形成“内卷”和“踩踏”,系统性能急剧下降,服务可能完全崩溃。
即使是⼀台1 核 2G 的 MySQL 服务器,也能够达到 200QPS(Query Per Second,每秒执⾏的 SQL 语句数) 的每秒执⾏ SQL 语句数,⾜以⽀撑⼀个每天⼀百万 PV 的⼩⽹站
⾼并发系统遇到性能瓶颈,⼀定是某个单点资源达到了极限,例如数据库、后端云服务器、⽹络带宽等,需要找到这个瓶颈资源,拆分它,提升整个系统的容量。具体来说,有如下⼏个设计⽅向:
负载均衡:这是解决⾼并发问题的最基本和最直接的⽅式。负载均衡可以将请求分散到多个服务器上,从⽽使得每个服务器的负载保持在⼀个相对较低的⽔平,提⾼了系统的整体处理能⼒。
缓存技术:缓存是提⾼系统性能的⼀种重要⼿段。通过将经常访问的数据存储在内存中,可以⼤⼤减少对数据库的访问,从⽽提⾼系统的响应速度。
异步处理:异步处理是⼀种将耗时的操作转化为后台任务进⾏处理的⽅式,这样主线程就可以⽴即返回,不需要等待这些操作完成。这种⽅式可以提⾼系统的并发处理能⼒。
消息队列:消息队列是⼀种⽤于处理⼤量并发请求的技术。通过将请求放⼊消息队列中,然后由专门的服务进程来处理这些请求,可以避免主线程被阻塞,从⽽提⾼系统的并发处理能⼒。
数据库优化:对于数据库来说,优化SQL语句、合理设置索引、使⽤数据库集群等都可以提⾼数据库的处理能⼒,从⽽提⾼整个系统的性能。
⽔平扩展:当系统的负载达到⼀定程度时,可以通过增加更多的服务器来扩展系统的能⼒。这通常需要对系统进⾏微服务化改造,每个服务都可以独⽴地部署和扩展。
服务隔离:在⾼并发系统中,通常会有多个服务同时运⾏。为了保证服务的独⽴性和稳定性,需要将不同的服务隔离开来,避免⼀个服务的故障影响到其他服务。