并发
disruptor
1.概述
LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使用事件源驱动方式。业务逻辑处理器的核心是Disruptor。
Disruptor它是一个开源的并发框架,并获得2011 Duke's 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。
Disruptor主要还是作用于单个进程中的队列解决方案,不适用于分布式系统中的消息队列方案
disruptor对于处理并发任务很擅长,曾有人测过,一个线程里1s内可以处理六百万个订单,性能相当感人。
这个框架的结构大概是:数据生产端 –> 缓存 –> 消费端
缓存中的数据是主动发给消费端的,而不是像一般的生产者消费者模式那样,消费端去缓存中取数据。
可以将disruptor理解为,基于事件驱动的高效队列、轻量级的JMS
disruptor学习网站:http://ifeve.com/disruptor-getting-started
2.开发流程
- 建Event类(数据对象)
- 建立一个生产数据的工厂类,EventFactory,用于生产数据;
- 监听事件类(处理Event数据)
- 实例化Disruptor,配置参数,绑定事件;
- 建存放数据的核心 RingBuffer,生产的数据放入 RungBuffer。
kilim
源码:https://github.com/kilim/kilim
Kilim 是一个Java 协程和消息传递框架,核心特性包括:
- 基于字节码增强的轻量级协程(Task)。
- 支持无阻塞 I/O与Mailbox消息传递。
- 单线程即可管理数十万协程,避免了线程上下文切换开销。
- 与现有 Java 生态兼容(可嵌入 Spring Boot)。
相比传统线程,Kilim 的任务切换几乎无损耗,适合构建高并发服务。
Kilim 是一个强大的 Java 协程框架,通过字节码操纵技术实现了轻量级的用户态协程。 在高并发、低延迟的应用场景下,Kilim 提供了一种优雅的编程模型,使得开发者能够更加方便地编写高效且可读性强的异步代码。 尽管 Kilim 在一些特定场景下表现出色,但在选择使用之前,仍需根据实际应用需求和团队经验权衡其优劣。
- Kilim 协程相比 Java 原生线程更轻量,适合高并发应用。
- 与 Spring Boot 集成非常自然,只需配置字节码增强和依赖即可。
- 通过Task和Mailbox,可以构建轻量级并发和消息驱动系统。
如果你正面临高并发压力,Kilim 或许是比 Reactor / RxJava 更加简洁的选择。
事件驱动-Spring Integration
在复杂的企业应用中,系统往往需要处理各种 消息交互、异步任务、事件驱动流程。如果直接使用 MQ 或手写线程池,代码会变得复杂且难以维护。
Spring Integration 提供了一套基于 企业集成模式(EIP, Enterprise Integration Patterns) 的框架,能够帮助我们快速实现 消息驱动的架构,并且与 Spring Boot 无缝集成。
Integration是一个轻量级 ESB(企业服务总线),但完全基于 Spring IoC 容器和注解配置。
- 消息路由(Message Routing)
- 消息转换(Message Transformation)
- 消息过滤(Message Filtering)
- 异步任务处理(Task Executors)
- 外部系统集成(MQ、HTTP、FTP、Email 等)
Akka
在 Java 生态中,Akka 是一个非常成熟的 Actor 模型并发框架,它天然支持消息驱动、并行计算、容错和分布式集群。
Akka 是一个基于 Actor 模型 的并发框架。
- Actor 是最小的并发单元;
- 每个 Actor 只负责自己的任务;
- 通过异步消息通信,而不是共享内存;
- 框架负责调度、容错、并行、负载均衡。
可以理解为: "每个 Actor 就像一个独立的微服务,只处理它收到的消息"。
特性
- Actor 模型: Akka 基于 Actor 模型,每个 Actor 是一个独立的计算单元,通过消息传递进行通信。
- 高并发: Akka 提供了高效的并发处理机制,能够轻松处理大量并发请求。
- 分布式: Akka 支持分布式计算,可以在多个节点上运行 Actor,并且提供了透明的远程通信机制。
- 容错: Akka 提供了监督机制,能够监控和恢复失败的 Actor,确保系统的稳定性。
- 事件驱动: Akka 是事件驱动的,能够高效地处理异步事件。
- 持久化: Akka 提供了持久化机制,能够将 Actor 的状态持久化到磁盘,确保在系统崩溃后能够恢复状态。
架构:Akka 的核心架构基于 Actor 模型,主要包括以下组件:
- ActorSystem: ActorSystem 是 Akka 的核心组件,负责创建和管理 Actor。每个 Akka 应用程序都有一个或多个 ActorSystem。
- Actor: Actor 是 Akka 的基本计算单元,每个 Actor 都有一个邮箱,用于接收消息。Actor 之间通过消息传递进行通信。
- Dispatcher: Dispatcher 负责调度 Actor 的执行,决定哪个 Actor 在哪个线程上运行。
- Supervisor: Supervisor 负责监控 Actor 的状态,并在 Actor 失败时采取相应的恢复措施。
- Router: Router 用于将消息路由到多个 Actor,支持多种路由策略,如轮询、随机等。
应用场景
- 高并发应用: 如实时数据处理、消息队列、聊天系统等。
- 分布式系统: 如微服务架构、分布式计算、集群管理等。
- 容错系统: 如金融交易系统、电信系统等需要高可靠性的系统。
- 本文作者:zhangxue
- 本文链接:https://lucksnow1989.github.io/article/9.开源/并发.html
- 版权声明:本文为本人原创文章,遵循 CC 4.0 BY-NC-SA版权协议,转载请附上原文出处链接和本声明。