红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

数据是实现微服务的难点

  • 2016-09-04
  • 本文字数:996 字

    阅读完需:约 3 分钟

企业在创建和开发微服务的过程中,最困难的问题之一就是他们的数据。如果我们采用领域驱动设计(Domain-Driven Design,DDD)来分析业务领域并剖析数据所代表的含义,将会有助于实现微服务架构 Christian Posta 在一个关于微服务实现的系列博客文章中阐述了该理念。

Posta 是 Red Hat 的中间件主架构师,对于他来说,选择微服务架构的主要原因在于这种架构能够让负责系统不同组成部分的团队按照不同的进度来开展工作,并且能够让他们之间的相互干扰达到最小。当按照这种方式来组织团队的时候,系统架构能够反映出这种变化,并且会向微服务架构来演化。

但是,如何让团队之间的这种自治真正运转起来,这一点其实并不简单。在单体架构中,通常会使用事务并且只有一个数据库,如果每个服务都具有一个数据库,那么这会变成一项挑战,对于传统的企业来讲更是如此。

Posta 指出,在实现微服务方面,互联网公司和传统企业之间有着巨大的差异。互联网公司采用微服务的目的主要是解决大量数据和扩展性的问题,而传统企业要同时处理业务和扩展性方面的复杂性。播放影片或发送推文的复杂性要远远低于保险索赔系统的复杂性。

在为相对复杂的企业域构建微服务时,我们需要找到在这个域中不同责任的边界。在每个边界中,我们会创建领域模型,这个模型是针对业务责任所设计的,并反映了这种业务责任。针对每个边界的数据模型会由同一个边界中的领域模型来驱动。采用 DDD 的方式我们能够找到这些边界,并会为每个边界创建一个有界上下文(bounded context),每个上下文将会成为一个微服务。

在Posta 的经验中,开发人员在构建分布式系统时,会倾向于假设只有一个关系型数据库,并试图将网络的不稳定性抽象出来。跨多个服务所带来的分布式数据问题通常会通过二阶段提交来解决。与这种做法不同,Posta 相信,我们必须要寻找每个有界上下文中的事务性边界,并找到满足业务限制和不变量的最小原子单元,不要让事务传播到其他的上下文之中。

我们还需要有一种机制,能够让服务通知其他的服务发生了什么,针对这种需求,Posta 推荐使用事件。我们的服务会发布事件,描述在这个域中发生了什么,其他的服务会读取这些事件,调整它们自己的模型并将变更进行持久化。

关于这些理念的更深入描述,Posta 引用了Vaughn Vernon 发布的一系列博客文章,这些文章基于DDD 理念,描述了聚集、事务边界和有界上下文。

查看英文原文 Data is the Hard Part Working with Microservices

2016-09-04 19:002741

评论

发布
暂无评论
发现更多内容

在线YAML转Properties工具

入门小站

工具

你必须懂也可以懂的微服务系列三:服务调用

爱好编程进阶

Java 面试 后端开发

图文并茂 教你在IDEA中如何一键生成代码,提高开发效率!

爱好编程进阶

Java 面试 后端开发

大数据基础处理框架

爱好编程进阶

Java 面试 后端开发

大爆料!Github上100%好评的Java多线程池面试题

爱好编程进阶

Java 面试 后端开发

工作总结!日志打印的15个建议

爱好编程进阶

Java 面试 后端开发

开发者工具 Top 100 名单

爱好编程进阶

Java 面试 后端开发

观测云登陆阿里云计算巢,共建ISV新生态

观测云

可观测性 可观测

单例模式你不得不知道的底层原理

爱好编程进阶

Java 面试 后端开发

CDF全球调查:软件交付性能停滞不前

SoFlu软件机器人

「內元宇宙」革命 聯載

因田木

元宇宙 我富國 創世紀 陰陽五行 股權去中心化

基于华为云图像识别标签

乌龟哥哥

4月月更

Module-3:外包学生管理系统架构设计文档

Jadedev

架构训练营

模块三作业 架构设计文档

库尔斯

架构实战营

你知道Java是如何解决可见性和有序性问题的吗?

爱好编程进阶

Java 面试 后端开发

华为18级大牛整理总结:微服务设计和分布式服务框架原理实践文档

爱好编程进阶

Java 面试 后端开发

并发工具之Semaphore与Exchanger

爱好编程进阶

Java 面试 后端开发

大量示例彻底搞懂Linux查找,which,whereis

爱好编程进阶

Java 面试 后端开发

学生管理系统的架构文档

Kevin

「架构实战营」

MapReduce服务初体验

乌龟哥哥

4月月更

别找了,这是迄今为止把微服务讲的最清楚的一篇!没有之一

爱好编程进阶

Java 面试 后端开发

或许你不知道的12条SQL技巧

乌龟哥哥

4月月更

linux之lscpu命令

入门小站

历经4轮2小时,终于斩下美团offer!

爱好编程进阶

Java 面试 后端开发

哪路神仙写的421页MySQL高级笔记,涵盖MySQL所有技术!太香了

爱好编程进阶

Java 面试 后端开发

字节奋战7年,回头一看只剩下这份1857页的算法笔记了

爱好编程进阶

Java 面试 后端开发

10分钟快速入门RDS

乌龟哥哥

4月月更

刚拿的字节跳动offer“打水漂”

爱好编程进阶

Java 面试 后端开发

性能调优篇:困扰我半年之久的RocketMQ timeout exception 终于破解了

爱好编程进阶

Java 面试 后端开发

分布式shiro权限验证 二

Rubble

4月日更

再谈企业信息化的本质

秋去冬来春未远

信息化本质

数据是实现微服务的难点_语言 & 开发_Jan Stenberg_InfoQ精选文章