对于许多关键应用程序功能,包括流媒体和电子商务,单体架构已不再足够。随着实时事件数据和云服务使用的需求增加,许多现代应用程序,如Netflix和Lyft,已经转向了事件驱动的微服务方法。分离的微服务可以独立运行,增强代码库的适应性和可扩展性。
但是,什么是事件驱动的微服务架构,为什么应该使用它?
事件驱动的微服务结合了两种现代架构模式:微服务架构和事件驱动架构。虽然微服务可以与请求驱动的REST架构配对,但随着大数据和云平台环境的兴起,事件驱动架构变得越来越重要。
微服务架构是一种软件开发技术,将应用程序的进程组织为松散耦合的服务。它是一种面向服务的架构(SOA)类型。
在传统的单体结构中,所有应用程序进程本质上都是相互连接的;如果其中一部分失败,系统就会崩溃。微服务架构将应用程序进程分组为单独的服务,使用轻量级协议进行交互,提供了改进的模块化和更好的应用程序可维护性和弹性。
虽然单体应用程序可能更容易开发、调试、测试和部署,但大多数企业级应用程序都将微服务作为标准,这使得开发人员可以独立拥有组件。成功的微服务应该尽可能简单,并使用生成并发送到事件流或从事件流中消耗的消息(事件)进行通信。JSON、Apache Avro和Google Protocol Buffers是常见的数据序列化选择。
事件驱动架构是一种设计模式,它结构化软件,使事件驱动应用程序的行为。事件是由actor(即人类用户、外部应用程序或其他服务)生成的有意义的数据。
我们的示例项目采用了这种架构;其核心是一个事件流平台,以两种方式管理通信:
•从编写它们的actor(通常称为发布者或生产者)接收消息•向其他actor(通常称为订阅者或消费者)发送消息
更具技术性地说,我们的事件流平台是一种软件,作为服务之间的通信层,允许它们交换消息。它可以实现各种消息模式,例如发布/订阅或点对点消息,以及消息队列。
使用事件驱动架构和事件流平台与微服务结合使用可以提供丰富的好处:
•异步通信:独立多任务的能力使服务能够在准备好时对事件做出反应,而不是在完成上一个任务之前等待。异步通信促进实时数据处理,使应用程序更具响应性和可维护性。•完全解耦和灵活性:生产者和消费者组件的分离意味着服务只需要与事件流平台和它们可以生成或消费的数据格式进行交互。服务可以遵循单一职责原则并独立扩展。它们甚至可以由使用独特技术堆栈的不同开发团队实现。•可靠性和可扩展性:事件驱动架构的异步、解耦特性进一步增强了应用程序的可靠性和可扩展性(这已经是微服务架构设计的优势)。
使用事件驱动架构,可以轻松创建对任何系统事件做出反应的服务。您还可以创建包括一些手动操作的半自动管道。 (例如,自动用户支付的管道可能包括由异常大的支付值触发的手动安全检查,然后再转移资金。)
以下是一个使用Spring Cloud Stream实现的事件驱动的微服务架构示例代码:
// 生产者
@Service
@EnableBinding(Source.class)
public class MyProducer {
private final Source source;
public MyProducer(Source source) {
this.source = source;
}
public void sendMessage(String message) {
source.output().send(MessageBuilder.withPayload(message).build());
}
}
// 消费者
@Service
@EnableBinding(Sink.class)
public class MyConsumer {
@StreamListener(Sink.INPUT)
public void handleMessage(String message) {
System.out.println("Received message: " + message);
}
}
这里使用了Spring Cloud Stream框架,它提供了一种简单的方式来实现事件驱动的微服务架构。在生产者中,我们使用@EnableBinding(Source.class)
注解来绑定输出通道,然后使用source.output().send()
方法来发送消息。在消费者中,我们使用@EnableBinding(Sink.class)
注解来绑定输入通道,然后使用@StreamListener(Sink.INPUT)
注解来监听消息。
随着云计算和大数据的普及,事件驱动的微服务架构将成为未来应用程序开发的主流。它可以提供更好的可扩展性、可维护性和可靠性,使开发人员能够更快地构建和部署应用程序。此外,随着人工智能和机器学习的发展,事件驱动的微服务架构还可以用于实时数据分析和预测。
事件驱动的微服务架构是一种现代架构模式,它将微服务架构和事件驱动架构结合在一起,提供了异步通信、完全解耦和灵活性、可靠性和可扩展性等优势。使用事件驱动的微服务架构,可以轻松创建对任何系统事件做出反应的服务,并创建包括一些手动操作的半自动管道。随着云计算和大数据的普及,事件驱动的微服务架构将成为未来应用程序开发的主流。