面试准备专题——高并发高性能网站设计
#高并发应对方案
架构方面
-
分层
对系统架构的分层,分为展示层,业务层,服务层,数据层等,可以使得分工明确,实现解耦,便于管理
按业务种类分层,可以实现服务化,解耦。
- 分布式(即模块服务化)
不同的功能模块以服务的方式在不同服务器上提供,可以分解单台服务器的负担
-
集群
在分布式的基础上,对访问频率高的模块再进行集群部署,通过负载均衡协同对外提供服务,可以分解高并发量模块对服务器的压力
前端
-
DNS
实现同一个域名转发到不同IP,负载均衡。
- CDN
就近访问,用户将会访问存放热点资源和静态资源的最近的服务器。
反向代理(缓存静态资源,无需后端服务支持)
应用层
- 应用缓存
即应用服务器本地缓存热点资源(对象形式),减少对数据库访问次数
- 分布式缓存
数据特征:热点数据,读比写多,不会马上失效),例如terracotta的bigmemory
- 异步
一方面可以应用在单机多线程中,将业务线程放入队列处理。另一方面可以应用在分布式系统中,通过分布式消息实现服务请求相应的异步
异步可以加快网站响应速度,有效实现高并发的销峰。
数据库
读写分离(主从数据库)
数据库拆分(垂直/水平)
必用数据库(容灾)
框架缓存(例如Hibernate的一二级缓存)
#高并发带来的问题和解决方案
事务问题(一致性)
容器事务管理
锁机制
隔离机制
状态问题(session)
- 用cooke记录sesion
缺点是有大小限制,另外不稳定,客户端可能关闭浏览器导致数据丢失,且不安全
- session复制
即集群中的服务器都持有一份sesion,每次有数据变化时需要同步给其他服务器,适合小规模网站
- session绑定
由负载均衡服务器将客户的IP/cookie与session绑定,实现会话粘滞。
但这种方案缺乏高可用性,因为客户的关闭浏览器可能会改变cookie,客户端IP也可能变化,服务器端也可能宕机导致session丢失。
- session服务器
包含两个层面,
一个是利用分布式缓存,可以实现会话的保持,适合一般集群需求
另一个是独立session服务器,适合更高要求的需求,例如单点登录(SSO)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C#多线程编程精要:从用户线程到线程池的效能进化论
· 如何反向绘制出 .NET程序 异步方法调用栈
· 领域驱动设计实战:聚合根设计与领域模型实现
· 突破Excel百万数据导出瓶颈:全链路优化实战指南
· 如何把ASP.NET Core WebApi打造成Mcp Server
· C#开发的Panel滚动分页控件 - 开源研究系列文章
· ShadowSql之开源不易
· 如何反向绘制出 .NET程序 异步方法调用栈
· C#多线程编程精要:从用户线程到线程池的效能进化论
· 上周热点回顾(5.5-5.11)