快速了解高并发解决方案

对《高并发的哲学原理》的个人总结,原书地址如下https://pphc.lvwenhan.com/

本书的核心思想就是拆分,服务细化拆分+多资源并行。

通用设计方法

例子:每秒100万次http请求

通过架构解决性能问题,在面对并发需求时,在架构上进行优化最为简单,并且对系统稳定性影响最低,也是最容易获得收益的方法。架构优化可通过拿其他资源来交换性能,即空间换时间。

通过以下方案逐步将系统性能上限的100 qps提升到100万qps。

  • 动静资源分开部署

是部分场景下收益最大的一步,可以将90%的流量压力转移出去。

Apache和Nginx的区别:nginx处理请求是异步非阻塞的,apache是阻塞型的。Nginx处理大并发静态请求效率高于其他软件,可作为负载均衡服务器,可承受3万以上并发连接数,是Apache的10倍。4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,占用3GB以上内存,Nginx在3万并发连接下,消耗不到2GB内存。

  • 使用云服务

如果把静态资源交给云服务商的CDN来承载,还可以获得90%的CPU节省。CDN流量费比云主机的流量费更便宜。

  • 数据库独立部署

如果使用了nginx承载全部静态资源,云主机还是扛不住流量就需要增加数据库服务器。如果后端代码和数据库部署在同一台机器上是"灾难架构",出于成本考虑,大多数低流量管理系统都会放在同一台机器上。

系统承受能力稍微加大,会面临以下局面:

  1. cpu耗尽导致mysql相应变慢
  2. 代码需更长时间等待,虽不耗cpu资源,却内存占用加大
  3. 内存占用导致innnodb缓存回收,降低了mysql运行速度
  4. 最终形成"内卷"和"踩踏",系统性能急剧下降,服务可能完全崩溃

MYSQL单独部署

将mysql和后端代码进行隔离,数据库的性能就能达到可观的水平。一台1核2G的mysql服务器能够达到200qps,足以支撑100万浏览量的小网站

未完待续

相关推荐
没有bug.的程序员8 小时前
Java锁优化:从synchronized到CAS的演进与实战选择
java·开发语言·多线程·并发·cas·synchronized·
zhujian826379 小时前
二十九、【鸿蒙 NEXT】异步锁实现并发控制
华为·harmonyos·并发·异步锁
且去填词9 小时前
并发模式(Patterns):Worker Pool 与 Pipeline 模式实现
golang·并发·数据流水线
C雨后彩虹5 天前
volatile 实战应用篇 —— 典型场景
java·多线程·并发·volatile
没有bug.的程序员5 天前
Java 并发容器深度剖析:ConcurrentHashMap 源码解析与性能优化
java·开发语言·性能优化·并发·源码解析·并发容器
roman_日积跬步-终至千里6 天前
【多线程编程】CompletableFuture 使用指南(基础篇):从原理到 API
并发
这周也會开心8 天前
多线程与并发-知识总结1
java·多线程·并发
C雨后彩虹10 天前
synchronized高频考点模拟面试过程
java·面试·多线程·并发·lock
曲幽16 天前
FastAPI + TinyDB并发陷阱与实战:告别数据错乱的解决方案
python·json·fastapi·web·并发·queue·lock·文件锁·tinydb
七夜zippoe20 天前
Python并发与并行编程深度剖析:从GIL原理到高并发实战
服务器·网络·python·并发·gil