什么是事件驱动的微服务架构?

news2024/9/26 3:31:09

对于许多关键应用程序功能,包括流媒体和电子商务,单体架构已不再足够。随着实时事件数据和云服务使用的需求增加,许多现代应用程序,如Netflix和Lyft,已经转向了事件驱动的微服务方法。分离的微服务可以独立运行,增强代码库的适应性和可扩展性。

但是,什么是事件驱动的微服务架构,为什么应该使用它?

使用事件驱动的微服务

事件驱动的微服务结合了两种现代架构模式:微服务架构和事件驱动架构。虽然微服务可以与请求驱动的REST架构配对,但随着大数据和云平台环境的兴起,事件驱动架构变得越来越重要。

什么是微服务架构?

微服务架构是一种软件开发技术,将应用程序的进程组织为松散耦合的服务。它是一种面向服务的架构(SOA)类型。

在传统的单体结构中,所有应用程序进程本质上都是相互连接的;如果其中一部分失败,系统就会崩溃。微服务架构将应用程序进程分组为单独的服务,使用轻量级协议进行交互,提供了改进的模块化和更好的应用程序可维护性和弹性。

虽然单体应用程序可能更容易开发、调试、测试和部署,但大多数企业级应用程序都将微服务作为标准,这使得开发人员可以独立拥有组件。成功的微服务应该尽可能简单,并使用生成并发送到事件流或从事件流中消耗的消息(事件)进行通信。JSON、Apache Avro和Google Protocol Buffers是常见的数据序列化选择。

6525e25d09343485109812ccb19d3323.jpeg


什么是事件驱动架构?

事件驱动架构是一种设计模式,它结构化软件,使事件驱动应用程序的行为。事件是由actor(即人类用户、外部应用程序或其他服务)生成的有意义的数据。

我们的示例项目采用了这种架构;其核心是一个事件流平台,以两种方式管理通信:

•从编写它们的actor(通常称为发布者或生产者)接收消息•向其他actor(通常称为订阅者或消费者)发送消息

更具技术性地说,我们的事件流平台是一种软件,作为服务之间的通信层,允许它们交换消息。它可以实现各种消息模式,例如发布/订阅或点对点消息,以及消息队列。

使用事件驱动架构和事件流平台与微服务结合使用可以提供丰富的好处:

•异步通信:独立多任务的能力使服务能够在准备好时对事件做出反应,而不是在完成上一个任务之前等待。异步通信促进实时数据处理,使应用程序更具响应性和可维护性。•完全解耦和灵活性:生产者和消费者组件的分离意味着服务只需要与事件流平台和它们可以生成或消费的数据格式进行交互。服务可以遵循单一职责原则并独立扩展。它们甚至可以由使用独特技术堆栈的不同开发团队实现。•可靠性和可扩展性:事件驱动架构的异步、解耦特性进一步增强了应用程序的可靠性和可扩展性(这已经是微服务架构设计的优势)。

使用事件驱动架构,可以轻松创建对任何系统事件做出反应的服务。您还可以创建包括一些手动操作的半自动管道。 (例如,自动用户支付的管道可能包括由异常大的支付值触发的手动安全检查,然后再转移资金。)

3bff966e0c94d4defb79d160983e3d17.jpeg

示例代码

以下是一个使用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)注解来监听消息。

发展趋势

随着云计算和大数据的普及,事件驱动的微服务架构将成为未来应用程序开发的主流。它可以提供更好的可扩展性、可维护性和可靠性,使开发人员能够更快地构建和部署应用程序。此外,随着人工智能和机器学习的发展,事件驱动的微服务架构还可以用于实时数据分析和预测。

总结

事件驱动的微服务架构是一种现代架构模式,它将微服务架构和事件驱动架构结合在一起,提供了异步通信、完全解耦和灵活性、可靠性和可扩展性等优势。使用事件驱动的微服务架构,可以轻松创建对任何系统事件做出反应的服务,并创建包括一些手动操作的半自动管道。随着云计算和大数据的普及,事件驱动的微服务架构将成为未来应用程序开发的主流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/497732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

体外诊断(IVD)高速发展

体外诊断(IVD)实际一直是临床的重要组成部分。体外诊断,是指通过对人体样本(血液、体液、组织等)进行检测而获取临床诊断信息,进而判断疾病或机体功能的产品和服务,其检测原理和方法涉及免疫学、微生物学、分子生物学等…

Cursor设置中文版 以及简单实用教程集成 GPT4 的代码神器 Cursor

官网:cursor.so 快捷键 ctrl K, 中英文提交需求,(刚开始我整蹩脚的英语,后来发现支持中文) 自动写代码 自动补充代码 自己修改代码 自动检查、完善代码 自己本地测试 然后再重复上面操作直到能用 最后让它…

ZooKeeper知识回顾(分布式协调框架,本质是分布式小文件存储系统,以分布式集群部署)

Apache ZooKeeperhttps://zookeeper.apache.org/官网为: 名字.apache.org 1.zookeep概念 一个团队里面,需要一个leader,leader是干嘛用的? (分布式协调框架) 1.管理什么的咱不说。 2.外面的人,想…

AI大神吴恩达与OpenAI官方合作推出的ChatGPT提示工程课,到底在讲什么?

ChatGPT提示工程课程,吴恩达&OpenAI 概述 本课程将着重介绍指令调优LM的开发最佳实践,以帮助开发人员利用LM技术构建聊天机器人等应用程序。 亮点 📚 LM可用于快速构建软件应用程序,API可以使开发人员非常快速地构建。&#x…

怎么压缩照片到20k?

怎么压缩照片到20k?如今,手机摄影已经成为我们生活的一部分,我们经常使用手机拍照记录美好瞬间。但是,随着手机拍照像素的不断提高,照片的文件大小也越来越大,这使得手机的存储空间不够用,甚至在…

Vue核心 收集表单数据 过滤器

1.14. 收集表单数据 收集表单数据: 若: ,则v-model收集的是value值,用户输入的就是value值。若: ,则v-model收集的是value值,且要给标签配置value值。若: 没有配置input的value属性,那么收集的就是checked(勾选 or 未…

weblogic ssrf 漏洞复现

一.前言 Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。 二.环境搭建 在docker中开启环境 sudo docker-compose up -d sudo docker-compose ps #查看状态访问http://your-ip:7001/uddiexpl…

【C++】虚函数表 多态的原理 动态绑定和静态绑定

梳理虚函数表、多态原理、动静态绑定的知识 目录 一、虚函数表 二、多态的原理 三、动态绑定和静态绑定 一、虚函数表 在学习多态原理之前,我们需要了解一下虚函数表的概念 我们先一起来看下下面这段代码 // 这里常考一道笔试题:sizeof(Base)是多…

Centos7设置yum源

为什么要修改yum源呢? 因为默认的yum源下载速度很慢,所以我们需要修改yum源。我是用的阿里云的yum源 环境 虚拟机:VirtualBox 7.0.4 操作系统:CentOS 7 x86_64 查看默认的yum源 cd /etc/yum.repos.d将列出的所有默认yum源复…

unity愤怒的小鸟学习制作(一)

基础知识已经差不多了,现在开始模仿敲代码然后在模仿中熟悉软件和语法 视频链接和素材如下:视频 目录 第一部分:游戏逻辑1、新建2D工程2、创建三个场景3、导入游戏需要的资源4、开始编辑02-game4.1 裁切图片4.2 初步编辑4.3 实现小鸟的拖拽4…

【源码分析】从源码层面深度剖析Redisson实现分布式锁的原理

快速入门 引入redisson依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.0</version> </dependency>编写测试代码 public class RedissonTest {private static RedissonC…

SubMain GhostDoc Enterprise v2022 Crack

GhostDoc 是一个 Visual Studio 扩展&#xff0c;适用于需要使用可自定义模板从源代码生成 XML 注释、维护干净和最新文档、生成多种格式的帮助文档、在 Visual Studio 中使用智能源代码拼写检查器等的开发人员. GhostDoc 还有助于自动生成干净、有用的干净代码文档&#xff0c…

scratch统计距离学校远近 中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析2023年3月

目录 scratch统计距离学校远近 一、题目要求 1、准备工作 2、功能实现 二、案例分析

Elasticsearch:结合两全其美:Elasticsearch 与 BM25 和 HNSW 的混合搜索

就搜索算法而言&#xff0c;没有万能的解决方案。 不同的算法在不同的场景下效果更好&#xff0c;有时需要算法的组合才能达到最好的效果。 在 Elasticsearch 中&#xff0c;一种流行的组合搜索算法的方法是使用混合搜索&#xff0c;将用于文本搜索的 BM25 算法与用于最近邻搜索…

数据结构与算法十 并查集

一 并查集 并查集是一种树型的数据结构 &#xff0c;并查集可以高效地进行如下操作&#xff1a; 查询元素p和元素q是否属于同一组合并元素p和元素q所在的组 1.1 并查集结构 并查集也是一种树型结构&#xff0c;但这棵树跟我们之前讲的二叉树、红黑树、B树等都不一样&#xf…

【Stable Diffusion】基本概念之hypernetwork

1.基本概念 hypernetwork&#xff0c;中文名为超网络&#xff0c;是一种神经网络架构,它允许动态生成神经网络的参数(权重)。简而言之,hypernetwork可以生成其他神经网络。 在Stable Diffusion中,hypernetwork被用于动态生成分类器的参数&#xff0c;为Stable Diffusion模型添加…

牛客刷SQL题Day5

SQL69 返回产品并且按照价格排序 select prod_name , prod_price from Products where prod_price between 3 and 6 select prod_name , prod_price from Products where 6>prod_price and prod_price >3 踩坑1&#xff1a; between......and.......包括边界。 踩坑2&am…

ES6之箭头函数

文章目录 前言一、定义二、简化1.当函数参数只有一个时2.当函数体只有一条return语句时 三、注意1.箭头函数的this2.不能作为构造函数实例化对象3.不能使用argument变量 总结 前言 简单的讲&#xff0c;箭头函数是将原function关键字和函数名删掉的一种简写函数形式。 一、定义…

二维体光子晶体的平面波展开法代码

%书上的代码&#xff0c;和FEM符合的更好 %在这个代码里试着把单位原胞的相对介电常数分布画出来 %这个代码的单位原胞的中心就是(0,0)点&#xff0c;也就是坐标原点 %The program for the computation of the PhC photonic %band structure for 2D PhC. %Parameters of the st…

Jvm --java虚拟机(上)

为什么学习jvm 如果你这辈子只甘心做一个平庸的Java码农&#xff0c;那么你可以利用阅读本文的时间去学习其他新的技术知识&#xff0c;但是如果你想成为一个更更更更优秀的中高级程序员&#xff01;那么请继续阅读本文&#xff0c;希望这篇文章会对你有所帮助&#xff0c;那么…