aws服务的图标含义
Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
通常,我们设计一个事件处理模型的程序有两种思路
轮询方式
线程不断轮询访问相关事件发生源有没有发生事件,有发生事件就调用事件处理逻辑。
事件驱动方式
事件发生时主线程把事件放入事件队列,在另外线程不断循环消费事件列表中的事件,调用事件对应的处理逻辑处理事件。事件驱动方式也被称为消息通知方式,其实是设计模式中观察者模式的思路。
借用 O'Reilly 大神关于事件驱动模型解释图
主要包括4个基本组件:
事件队列(event queue): 接收事件的入口,存储待处理事件
分发器(event mediator): 将不同的事件分发到不同的业务逻辑单元
事件通道(event channel): 分发器与处理器之间的联系渠道
事件处理器(event processor): 实现业务逻辑,处理完成后会发出事件,触发下一步操作
可以看到,相对传统轮询模式,事件驱动有如下优点:
可扩展性好 ,分布式的异步架构,事件处理器之间高度解耦,可以方便扩展事件处理逻辑
高性能 ,基于队列暂存事件,能方便并行异步处理事件
下图描述了Netty进行事件处理的流程。Channel是连接的通道,是ChannelEvent的产生者,而ChannelPipeline可以理解为ChannelHandler的集合。
ChannelEvent是数据或者状态的载体,例如传输的数据对应MessageEvent,状态的改变对应ChannelStateEvent。当对Channel进行操作时,会产生一个ChannelEvent,并发送到ChannelPipeline。ChannelPipeline会选择一个ChannelHandler进行处理。这个ChannelHandler处理之后,可能会产生新的ChannelEvent,并流转到下一个ChannelHandler。
我们引用Netty官方包里的一个例子,一个简单的EchoServer,它接受客户端输入,并将输入原样返回。
EchoServerHandler是这里的业务处理逻辑
其中MessageEvent就是一个事件。这个事件携带了一些信息(ChannelBuffer),例如这里egetMessage()就是消息的内容,而EchoServerHandler则描述了处理这种事件的方式,一旦某个事件触发,相应的Handler则会被调用,并进行处理(解码成了一个数据对象),并生成了一个新的MessageEvent,并传递给下一步进行处理。
在Netty里,所有事件都来自ChannelEvent接口,这些事件涵盖监听端口、建立连接、读写数据等网络通讯的各个阶段。而事件的处理者就是ChannelHandler,这样,不但是业务逻辑,连网络通讯流程中底层的处理,都可以通过实现ChannelHandler来完成了。事实上,Netty内部的连接处理、协议编解码、超时等机制,都是通过Handler完成的。
参考: https://githubcom/code4craft/netty-learning/blob/master/publish/allmd
对企业来说,获得灵敏性是一项重大挑战。无论是金融交易员希望在国外市场获得套利机遇,还是企业在接到零售商客户大量退货的消息后及时调整生产线,以及保险公司经理们期望根据变化万千的因素开发出一种新的风险管理产品,无不要求企业迅速采取有效的响应措施。由此,及时响应实时的变化和事件成为了企业级架构的最重要需求。
SOA和EDA的结合
根据Gartner观点,现代的、灵活的企业IT架构模式应该是面向服务的(SOA)和事件驱动的(EDA)。
SOA把功能编制成松散耦合的组件组成的统一服务包,这些组件可使用标准的消息传送协议进行相互联系,从而使IT基础架构与业务流程相一致。SOA解决了访问来自不同系统的数据流这个问题。
EDA是设计和创建应用程序的方法,这些应用程序中的事件所触发的消息可以在独立的、非耦合的模块之间传递,这些模型彼此并不知晓对方。EDA极大地改进了企业响应不同的、表面上毫无关联事件的能力。通过提供瞬时过滤、聚合和关联事件的能力,EDA可以快速地检测出事件并判断它是机会还是威胁,从而帮助组织机构快速、恰当地响应这些事件。
用SOA的思想设计EDA架构(即事件驱动SOA)近年来蓬勃兴起。EDSOA将SOA的“请求一响应”和事件驱动架构(EDA)的“事件发布订阅”模式结合起来,支持快速和广泛的响应。其目的就是扩展SOA以便能在海量的数据流里发现有价值的事件。
EDSOA结合了实时系统、数据流管理和复杂事件处理的经验,并将其用于业务应用的开发。用户和系统可以了解影响其业务运行状态的微秒级变化,并且立刻知道哪些事情是需要特别注意的。
如何实现事件驱动SOA
将服务和事件处理流程结合起来能带来非常大的敏捷性。然而,今天基于Java的解决方案并不能支持二者结合的需求,至少到目前为止是这样的。这是因为基于Java的中间件产品根本就不是为了从容处理复杂事件处理规则而设计的,因此,基于Java的EDSOA面临的主要挑战是延迟和吞吐量。它使得危机发生时,迟迟没有启动事件处理机制。
基于Java的中间件产品需要针对事件优化的其特殊的运行环境,以便在事件处理方面提供有保障的停顿时间、每秒几万个事件、可扩展的集群功能,它还需要高级服务,用于动态、数据驱动事件定义。最后,基于Java的中间件产品还需要一套工具、框架和组件,用于构建、部署及监控事件驱动应用。
2007年,BEA发布了业内最全面的事件驱动型SOA套件。作为该套件中的主要产品,BEA推出了BEA WebLogicEvent Server,这是业内首款、也是唯一款面向事件驱动型应用的Java应用服务器。
通过将BEA WebLogic EventServer与BEA WebLogic RealTime相结合,实现了关键的事件驱动型SOA功能,并为最终的事务处理提供了坚实基础。这些产品与被客户广泛选用的BEA AqualogicService Bus、BEA AqualogicBPM Suite和BEA AqualogicEnterprise Repository,以及用于解决方案生命周期管理的复杂工具一起,构成了面向关键任务型和事件驱动型应用的高度集成化、高性能的平台。
0条评论