课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习计算机编程开发技术,而今天我们就通过案例分析来了解一下,软件开发事件处理都有哪些方法。
事件处理的方式
时间处理通常分为三种常用的方式。这些方式并不互斥,它们经常会同时存在于一个大型的事件驱动系统中。
离散事件处理
用于处理离散事件:例如在社交媒体平台上发布一个帖子。离散事件处理的特征在于出现的事件之间通常并无关联,可以独立处理。
事件流处理
用于处理一系列相关联的无边界事件流,事件的记录以某种顺序呈现,并携带一些与发生的事件有关的信息。例如,当一个业务实体发生联合变更时,消费者可能会按照生产者指定的顺序进行变更,并在本地数据库中保存一份该实体的副本。由于需要关注事件处理的顺序,因此不能离散地处理这类事件。消费者需要避免条件竞争,即多个消费者实例可能会同时修改数据库中的某条记录,进而由于乱序更新而导致数据不一致。
比较有名的流事件平台,如Kafka会依赖记录的key和partitions来保留更新顺序。Kafka同时也保证对一个实体的所有变更会被某个消费者处理,避免多个消费者并行处理事件而导致并发竞争。
复杂事件处理
复杂事件处理(CEP)是一种从一系列简单事件中得出或识别复杂事件的模式。例如监控一座建筑内的温度和延误感应器,并于推断是否发生了火情,并进行持续跟踪。单独的温度变化并不足以引发报警。更具意义的是温度峰值和变化率聚合而成的群体事件,进而有可能挽救生命。
通常更多会涉及此类处理,要求事件处理器持续跟踪先前的事件,并提供一个有效的方式进行请求和聚合。
什么时候使用EDA
一些场景下可以使用事件驱动架构带来的优势:
不透明的消费者生态系统。这种情况下,生产者并不了解消费者,后者可能是一个短暂的过程,可能在短时间内来来往往!
高扇出。一个事件可能由多个不同的消费者处理的场景。
复杂的模式匹配。可能将事件串在一起来推断出更复杂的事件。(这类场景可能需要进行聚合,即上面描述的复杂事件处理)
命令查询的责任分离。CQRS是一种分离数据存储区的读取和更新操作的模式。实现CQRS可以提高应用的可扩展性和弹性(在数据一致性上进行了取舍)。这种模式通常与EDA相关。
EDA的好处
缓存和容错能力。事件消费的速率可能与生产者不同步,生产者不能为了与消费者保持一致而放慢速率。
生产者和消费者解耦,避免笨拙的点到点集成。EDA下很容易添加新的生产者和消费者,也很容易修改生产者和消费者的实现(前提是遵守约束事件记录的合同/方案)。
大规模扩展。通常会把部分部分事件流切分为若干不相关的自流,然后并行处理。随着事件的积压,我们也可以扩展消费者的数量来满足负载需求。像Kafka这样的平台会严格按序处理事件,并允许跨流进行大规模并行处理。
EDA的缺点
仅限异步处理。虽然EDA是一种有效的系统解耦模式,但它也将应用限制为异步事件处理。EDA并不能很好地处理像请求响应这样的交互(发起者必须等待响应才能继续处理)。
引入额外的复杂度。传统的客户端-服务器以及请求-响应仅会涉及两方,在采用EDA之后则引入了三方-broker,作为生产者和消费者之间的媒介。
故障掩盖。这一点比较奇特,因为它似乎与解耦系统的本质背道而驰。当系统高度耦合时,一个系统中的错误会快速传递下去,并引起我们的关注。大多数场景下,我们需要避免这种情况:当一个组件失败时,尽量减小它对其他组件的影响。故障掩盖的负面影响是,它会在不经意间隐藏本应引起我们注意的问题。可以通过为每个事件驱动的组件添加实时监控和日志来解决,但这样做也带来了新的复杂度。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。