首页 > 编程语言 >Java高并发策略 java架构设计高并发策略和设计

Java高并发策略 java架构设计高并发策略和设计

时间:2023-09-15 10:35:03浏览次数:36  
标签:架构设计 负载 缓存 Java 请求 CDN 并发 加载

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

 

标签:架构设计,负载,缓存,Java,请求,CDN,并发,加载
From: https://www.cnblogs.com/dsj8966/p/17704293.html

相关文章

  • 「Java开发指南」在MyEclipse中的Spring开发(二)
    在上文中(点击这里回顾>>),我们主要介绍了一些Spring的基本概念、Spring项目配置及向导,本章节将继续介绍如何管理多个项目,Spring配置编辑器等,欢迎持续关注~MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论4.管理多个Beans和项目除了使用bean配置文......
  • 25届实习秋招-Java面试-JVM虚拟机面试题整理-牛客网
    JVMJVM概述:是什么-规范,有什么作用(多态,越界)Java为什么可以跨平台移植Java怎么做编译?与C语言的编译有什么区别?比较:jvmjrejdk整体的架构:内存结构内存结构/内存模型--即为运行时数据区:JVM了解过哪些版本,1.8和1.7内存结构不同的地方堆中方法区(永久代实现)改为了......
  • 25届实习秋招-Java面试-JUC多线程面试题整理-牛客网
    JUC介绍一下JUC下的锁(如何使用及应用场景)线程什么是进程:特征什么是线程:资源为什么多线程,什么使用用单线程,什么时候多线程,什么条件下多线程快。进程和线程的对比:进程如何通信,每种通信存放的介质。||线程的通信,几种方式。join进程和线程的区别,在JVM层面的体现一......
  • 25届实习/秋招-java面试-JavaSe面试题整理-牛客网
    JavaSe变量和运算符:基本数据类型介绍java中浮点数精度怎么解决,有了解过实现吗,为什么有精度问题BigDecimal,如何判断BigDecimal是否相等。如何进行计算、怎么四舍五入基本类型几种,分别占用空间int和Integer区别--包装类,int有几个字节。包装类常量池怎么判断相等的......
  • Java静态导入
    今天在看开源项目的时候发现了这样一句代码importstaticcom.abin.mallchat.common.common.service.frequencycontrol.FrequencyControlStrategyFactory.TOTAL_COUNT_WITH_IN_FIX_TIME_FREQUENCY_CONTROLLER;我虽然工作了有三年时间了,但是这样的代码还是第一次看见,看见的第一......
  • 2023秋Java开学考试代码优化
    publicclassWarehouseInformation{privateStringitemno;privateStringitemname;privateStringsuppliername;privateStringwarehousingtime;privateStringwarehousenumber;privateStringshipmenttime;privateStringwareho......
  • java实验代码1
    一、阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。原码、反码、补码是计算机中对数字的二进制表示方法。原码:将最高位作为符号......
  • 系统架构设计师 - 模拟题 - 论文题(一)
    试题一论软件系统架构评估对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了分析现有架构存在的潜在风险、检验设计中提出的质量需求......
  • Java Lambda表达式应用说明
    Lambda简介Lambda 可定义为一种简洁、可传递的匿名函数,它是推动Java8发布的最重要新特性Lambda 本质上是一个函数,虽然它不属于某个特定的类,但具备参数列表、函数主体、返回类型,甚至能够抛出异常Lambda 是匿名的,它没有具体的函数名称Lambda 允许把函数作为一个方法的参数(函数作......
  • java的jdbc插入的时候,遇到null情况报错问题
    分析原因:在执行SQL时MyBatis会自动通过对象中的属性给SQL中参数赋值,它会自动将Java类型转换成数据库的类型。而一旦传入的是null它就无法准确判断这个类型应该是什么,就有可能将类型转换错误,从而报错。解决办法:参数增加jdbcType标识数据类型。(注意:这时候参数{}前统一用#)<inser......