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

本文涉及的产品
服务治理 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 
相关文章
|
20天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
1月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
43 3
|
1月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
20天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
140 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
19天前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
149 36
微服务架构解析:跨越传统架构的技术革命
|
5天前
|
存储 SQL 分布式计算
大数据时代的引擎:大数据架构随记
大数据架构通常分为四层:数据采集层、数据存储层、数据计算层和数据应用层。数据采集层负责从各种源采集、清洗和转换数据,常用技术包括Flume、Sqoop和Logstash+Filebeat。数据存储层管理数据的持久性和组织,常用技术有Hadoop HDFS、HBase和Elasticsearch。数据计算层处理大规模数据集,支持离线和在线计算,如Spark SQL、Flink等。数据应用层将结果可视化或提供给第三方应用,常用工具为Tableau、Zeppelin和Superset。
79 8
|
22天前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
50 8
|
1月前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
54 1
服务架构的演进:从单体到微服务的探索之旅
|
26天前
|
消息中间件 运维 Kubernetes
后端架构演进:从单体到微服务####
本文将探讨后端架构的演变过程,重点分析从传统的单体架构向现代微服务架构的转变。通过实际案例和理论解析,揭示这一转变背后的技术驱动力、挑战及最佳实践。文章还将讨论在采用微服务架构时需考虑的关键因素,包括服务划分、通信机制、数据管理以及部署策略,旨在为读者提供一个全面的架构转型视角。 ####
35 1
|
29天前
|
弹性计算 运维 开发者
后端架构优化:微服务与容器化的协同进化
在现代软件开发中,后端架构的优化是提高系统性能和可维护性的关键。本文探讨了微服务架构与容器化技术如何相辅相成,共同推动后端系统的高效运行。通过分析两者的优势和挑战,我们提出了一系列最佳实践策略,旨在帮助开发者构建更加灵活、可扩展的后端服务。