Java高并发策略 java架构设计高并发策略和设计
最近在面试被问到这个问题,整理下
按照不同的层级说明
展示层
cdn静态文件加速
例如 HTML、CSS、JS、图片这些静态资源非常适合放到CDN上进行缓存。
CDN服务商的节点是全国各地的,你的一份静态文件会被缓存到各个节点,用户访问时,会自动读取最近的节点。
CDN是静态内容的常用缓存策略。
前端页面负载
1、压缩和合并资源:
压缩CSS和JavaScript文件可以减小文件大小,提高加载速度。同时,将多个CSS和JavaScript文件合并成一个文件可以减少HTTP请求次数。
2、图片优化:
使用适当的图片格式(如JPEG、PNG)和压缩工具来减小图片文件大小,同时保持较好的视觉效果。还可以使用Lazy Load技术,延迟加载页面中的图片,减少首次加载时的数据量。
3、CDN加速:
使用内容分发网络(CDN)来分发静态资源,将静态文件缓存到离用户较近的CDN节点上,减少网络延迟,提高资源加载速度。
4、预加载和预渲染:
通过预加载相关资源,如CSS、JavaScript、图片等,可以在页面加载完成前提前获取这些资源,减少后续请求的延迟。预渲染则是在后台渲染页面内容,使得用户在访问时能够立即看到完整的页面内容。
5、懒加载:
将非关键性的内容(如图片、视频等)延迟加载,当用户需要查看时再进行加载。这样可以减少首次加载时间,提升页面的响应速度。
6、缓存策略:
合理设置资源缓存策略,使得重复访问的资源可以从浏览器缓存中获取,减少对服务器的请求。可以通过设置HTTP头部来控制资源的缓存行为。
7、前端框架和库的优化:使用轻量级的前端框架或库,并保持其更新和优化。避免使用过多的第三方插件和依赖,以减少不必要的资源加载和执行时间。
业务层
将大型的业务服务纵向拆分成多个小的微服务,每个微服务负责处理特定的功能模块或业务流程。这样可以降低单个服务的负载压力,并且实现模块水平扩展。
API层
分布式架构:
将API接口进行拆分,分布式部署在多台服务器上。
每台服务器独立处理部分请求,避免单点故障,并提高整体的并发能力。
- 1
- 2
1、负载均衡:
通过云服务厂商的slb/alb等。
通过负载均衡技术将请求分发到多台服务器上,平衡服务器的负载压力。
可以使用硬件负载均衡器(如F5、Nginx)或者软件负载均衡器(如HAProxy、Apache mod_proxy_balancer)来实现。
- 1
- 2
- 3
2、限流和排队:
通过设置请求限流策略,限制同时访问接口的请求数量,防止突发大量请求导致系统崩溃。
可以使用令牌桶算法、漏桶算法、滑动窗口算法等进行限流控制。
对于超过系统承载能力的请求,可以将其放入队列中进行排队处理。
- 1
- 2
- 3
3、RPC调用
通过RPC调用服务,例如dubbo
实现接口调用服务时的负载功能,高并发时服务的动态扩容
- 1
- 2