写点什么

数据是实现微服务的难点

  • 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:003207

评论

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

专注写作:Ulysses for Mac中文版

真大的脸盆

Mac markdown编辑器 Mac 软件 文本编辑 文本管理工具

近两年功能增加最多!Kubernetes 1.27 正式发布

Daocloud 道客

Kubernetes 云原生

BSN-DDC应用合约解读汇总(2023年一季度)

BSN研习社

2023年MQTT Broker技术选型时需要考虑的7个因素

EMQ映云科技

云原生 物联网 IoT mqtt 企业号 4 月 PK 榜

有史以来最完整包SpringBoot学习笔记整合,该有的应有尽有

会踢球的程序源

Java 后端 Spring Boot CLI

2023最新版Java面试八股文大全PDF版限时分享,含700道高频面试题

会踢球的程序源

Java 架构 java面试 Java工程师 八股文

中移链系统合约管控功能介绍

BSN研习社

Unity 之 使用原生UGUI实现随手移动摇杆功能经典实例

陈言必行

Unity 三周年连更

数据库原理及MySQL应用 | 约束

TiAmo

数据库 MySQL数据库 三周年连更 数据库约束

从ReentrantLock角度解析AQS

Java AQS 并发

openEuler、龙蜥Anolis、统信UOS系统下编译GreatSQL二进制包

GreatSQL

欧洲 KubeCon 2023 前瞻|相约全球顶级云原生开源盛会

Daocloud 道客

云原生 HPC cncf 调度器 #Kubernetes#

【Linux】之【磁盘】相关的命令及解析[df、du、iostat、iotop]

A-刘晨阳

Linux 三周年连更 磁盘空间

Java程序控制结构

timerring

Java

Java开发人员必知的常用类库,这些你都知道吗?

会踢球的程序源

#java

RocketMQ入门:(整合springboot)单机部署&集群部署

Java你猿哥

Java RocketMQ Spring Boot 架构师

跨平台应用开发进阶(四十三)一文走近网络层抓包工具:WhireShark

No Silver Bullet

网络层 抓包工具 三周年连更

如何使用 taosKeeper 做好监控工作,时序数据库 TDengine 3.0 监控工具详解

TDengine

大数据 tdengine 物联网 时序数据库 数据监控

vivo全球商城:电商交易平台设计

vivo互联网技术

分布式事务 订单管理 架构设计 多租户 交易平台

安全沙箱技术的原理、应用程序的安全性和稳定性

没有用户名丶

Vue.js 数据双向绑定的实现

格斗家不爱在外太空沉思

Vue ES6 三周年连更

狂追ChatGPT:开源社区的“平替”热潮

OneFlow

华秋干货分享:SMT钢网文件的DFA(可焊性)设计

华秋电子

SpringBoot 多Module Proguard混淆(Gradle)

Java你猿哥

spring Spring Boot proguard

成都.NET线下技术沙龙倒计时一天

MASA技术团队

.net 开发者 MASA Stack

Java数组、排序和查找

timerring

Java

Spring自定义参数解析器设计

京东科技开发者

spring 自定义参数解析器 参数解析器 企业号 4 月 PK 榜

BSN-DDC基础网络详解(八):部署自定义智能合约

BSN研习社

Spider实战-抓取视频

浅辄

三周年连更

平安证券与易观千帆达成合作,拓宽用户服务新路径

易观分析

金融 证券 经济

还傻傻分不清MySQL回表查询与索引覆盖?

架构精进之路

MySQL 数据库 三周年连更

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