Java高并发常见架构、处理方式、api调优

Java高并发常见架构

1. 分层架构

采用分层设计(如Controller-Service-DAO),结合线程池隔离不同层级的任务,避免资源竞争。例如,Web层使用NIO(如Netty),业务层使用异步处理。

2. 事件驱动架构

基于消息队列(如Kafka、RocketMQ)解耦系统组件,通过事件发布/订阅模式实现异步处理,提升吞吐量。

3. 微服务架构

将系统拆分为独立服务,结合Spring Cloud Alibaba或Dubbo实现分布式事务和限流,避免单点瓶颈。

4. 读写分离与分库分表

数据库层通过MyCAT或ShardingSphere拆分数据,配合主从复制降低单库压力。


高并发处理方式

无锁编程

使用CAS(如AtomicInteger)或LongAdder替代同步锁,减少线程阻塞。例如:

java 复制代码
AtomicInteger counter = new AtomicInteger();
counter.incrementAndGet();

线程池优化

根据任务类型选择线程池策略:

  • CPU密集型:线程数 = CPU核心数 + 1
  • IO密集型:线程数 = CPU核心数 * (1 + 平均等待时间/平均计算时间)
    示例:
java 复制代码
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);

分布式锁

使用Redisson或Zookeeper实现跨JVM的锁机制,避免超卖问题:

java 复制代码
RLock lock = redissonClient.getLock("orderLock");
lock.lock();
try {
    // 业务逻辑
} finally {
    lock.unlock();
}

异步化处理

通过CompletableFuture或RxJava将同步调用转为异步,例如:

java 复制代码
CompletableFuture.supplyAsync(() -> queryData())
    .thenApplyAsync(data -> process(data))
    .exceptionally(ex -> handleError(ex));

API调优策略

减少锁粒度

使用细粒度锁(如ConcurrentHashMap的分段锁)替代synchronized全局锁:

java 复制代码
ConcurrentHashMap<String, Object> cache = new ConcurrentHashMap<>();
cache.put("key", value);

缓存优化

多级缓存(本地缓存+Redis)减少数据库访问。例如Guava Cache设置过期策略:

java 复制代码
Cache<String, Object> localCache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .build();

序列化加速

选用高效的序列化工具(如Protobuf、Kryo),替代JSON:

java 复制代码
Kryo kryo = new Kryo();
kryo.writeObject(output, obj);

连接池配置

调整数据库连接池参数(如HikariCP):

properties 复制代码
# 最大连接数 = 并发请求数 / 每个请求平均耗时
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.connection-timeout=3000

JVM参数调优

针对高并发场景调整GC策略:

bash 复制代码
-XX:+UseG1GC -Xmx4g -Xms4g -XX:MaxGCPauseMillis=200

流量控制

使用Guava RateLimiter或Sentinel限流:

java 复制代码
RateLimiter limiter = RateLimiter.create(100); // 每秒100个请求
if (limiter.tryAcquire()) {
    // 处理请求
}

以上方案需根据实际业务场景组合使用,通过压测工具(如JMeter)验证效果,持续监控(如Prometheus+Granfa)调整参数。

相关推荐
JacksonMx8 分钟前
ContentCachingRequestWrapper 实战:解决请求体“只能读一次”的官方方案
java·spring boot·spring
hz5678911 分钟前
好视通视频会议解决方案:需求分析、平台架构与价值实现(2026 完整版)
架构·音视频·实时音视频·需求分析·信息与通信
微石科技19 分钟前
医疗设备维保如何从被动维修转向预防管理?宁波微石科技让运行数据提前发信号
java·后端·struts
SomeB1oody24 分钟前
【RustyML入门】5.1. 回归指标
开发语言·后端·机器学习·rust·教程
学计算机的计算基26 分钟前
TCP 传输层硬核整理:三次握手、四次挥手、拥塞控制一次讲透
java·网络·笔记·网络协议·算法
heimeiyingwang29 分钟前
【架构实战】消息队列选型与异步架构设计:从Kafka到RabbitMQ,一次聊透
架构·kafka·rabbitmq
龙虾PRO35 分钟前
2026 DeepSeek Harness 部署完整教程:npx 一键启动至 Python SDK 全流程接入
开发语言·python
都叫我大帅哥43 分钟前
@EnableTransactionManagement 详解:Spring 声明式事务的基石
java·spring
2602_959960922 小时前
大厂Java面试:Spring Boot、JVM、Redis、Kafka与Elasticsearch在内容社区UGC场景下的实战拷问
java·jvm·spring boot·redis·面试题
小新讲网安3 小时前
WiFi安全攻防实战:WPA3新协议与传统破解技术全解析
开发语言·网络·安全·php·漏洞·nmap·漏洞检测