【大数据】事件驱动的微服务架构

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 最近小编一直在接微服务转型的咨询Case,有些企业已经开始着手了,但中途发现从各个微服务的数据库中做跨表查询是个大问题,尤其当数据库自动分表存储之后。其实从数据库设计的角度,独立的数据库固然可以更好地解耦微服务架构,但很难保证数据的一致性,而且每个微服务治理团队需要维护各自的数据库,例如备份、升级等等。

最近小编一直在接微服务转型的咨询Case,有些企业已经开始着手了,但中途发现从各个微服务的数据库中做跨表查询是个大问题,尤其当数据库自动分表存储之后。其实从数据库设计的角度,独立的数据库固然可以更好地解耦微服务架构,但很难保证数据的一致性,而且每个微服务治理团队需要维护各自的数据库,例如备份、升级等等。相较而言,共享数据库可以统一所有微服务的录入标准,不会带来数据一致性问题。
今天我们讨论的不是这个,回到我们设计数据库的初衷,由于没法记录每一笔交易,我们需要一个数据库来记录数据的当前状态,但现在我们有了大数据平台和分布式的消息总线,我们已经有能力记录每条交易,通过简单的统计算法也可以得到实时的统计数据,那我们还需要数据库么?
1
小编认为伴随着微服务的应用思维,微服务的数据思维也应该有一个质的提升,作为松耦合的服务,微服务具有以下三个特点:
独立部署
有自己的数据架构(Schema)
数据只能通过自己的微服务API接口访问
回到最初的话题:如果可以将服务的事件全部记录下来,那我们只需要存储事件就行了。
2
上图是一个微服务的数据存储模型,首先用户通过服务接口(一般是一个web图形界面)从前台交互操作;然后前台将操作(比如按钮或文字输入)转化为指令传到数据写入端;写入端检查指令是否符合业务逻辑,然后生成事件(包括时间戳、事件ID,再加上原始指令)并以键值对将事件计入事件存储;最后事件存储将键值对事件持久化保存到NoSQL的数据库(比如MongoDB,Cassandra)中,以备读取请求的调用。
3
在数据读取时,用户同样与UI界面交互,一般UI界面上会预定义一些常用的查询也可以接收用户的自定义查询;然后请求被转换成标准的查询语句/命令;最后下发到NoSQL数据库获取事件的统计信息。
以事件驱动来设计微服务的数据库有五个好处:
更易将领域驱动设计(Domain Driven Design,或DDD)付诸实施
DDD是2004年由著名建模专家Eric Evans提出的:任何软件开发都不应只关注技术,业务领域才是软件开发更应关注的重点。由于每条事件都被记录下来了,所以业务之间的关联就能一目了然。比如一家医院的库房从数据库看有200箱止痛药和800箱消炎药,但不关注事件的话永远不知道80%的消炎药是伴随止痛药一起出售的。
降低服务耦合度
当微服务间有调用或依赖关系的时候,某一个服务的失效会影响到子微服务。例如服务1是一个订单系统,服务3是客户征信系统,当用户下单时,服务1会检查服务3该用户的征信标志位,但是当服务3的API不可用时就会影响到服务1的下单。
4
在这种情况下,可以将服务1的订单事件日志关联到服务3的征信日志,从事件存储中获取该标志位,或者使用消息总线做事件的关联,就完全解耦了应用层面的依赖项。
5
在实际应用中,一个单体购物系统可以拆解为客户、订单、运输、退货、货品目录等多个微服务。每个微服务都与客户信息有关联,当客户系统的微服务有事件记录时,通过侦听(Reader)更新其余微服务各自的关联库就可以了,这样即便客户系统断了,其余系统也依然可以从现有关联库中获得客户信息,等客户系统上线了再恢复更新就行了。
6

打破了读写的性能瓶颈
有SQL经验的朋友都会知道,数据库的读写调优是无法同时完成的,在资源限定的情况下,提升读取的性能一定是以牺牲写入性能为代价的。而在事件驱动的数据模型中,写入端会始终匹配读取端的速度,达到最终的一致性,在有消息总线的情况下,事件会缓存在消息总线中。
7
提高请求并发量限制
同样的,传统数据库在处理高并发时,会将处理不过来的请求任务在应用端排队,因此我们往往可以看到在每天上下午的高峰时刻,服务响应很慢的情况。
8
而每个事件由于是键值对的形式传输的,没有预定义的事务日志格式,因此通常情况下数据量非常小,在同样的带宽和磁盘IO情况下,提升了处理并发请求数的能力。当然这种模式下同样可以设立多个只读节点以提高数据读取的吞吐量。
简化了复杂信息的传输
这点也是显而易见的,传统结构化数据库只接收定义好的字段及字段类型,需要接收新属性只有修改表结构,而键值对的录入形式更加灵活。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
8天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
1天前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
【赵渝强老师】基于大数据组件的平台架构
|
1天前
|
消息中间件 供应链 架构师
微服务如何实现低耦合高内聚?架构师都在用的技巧!
本文介绍了微服务的拆分方法,重点讲解了“高内聚”和“低耦合”两个核心设计原则。高内聚强调每个微服务应专注于单一职责,减少代码修改范围,提高系统稳定性。低耦合则通过接口和消息队列实现服务间的解耦,确保各服务独立运作,提升系统的灵活性和可维护性。通过领域建模和事件通知机制,可以有效实现微服务的高效拆分和管理。
17 7
|
2天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
21 6
|
2天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
11 1
|
5天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
7天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
24 3
|
8天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
44 4
|
7天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
24 2
|
7天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
39 1
下一篇
无影云桌面