写点什么

数据是实现微服务的难点

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

评论

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

用Apipost进行Websocket调试教程

不想敲代码

微服务 websocket 接口调试

堡垒机真的安全吗可靠吗?大家喜欢哪款?

行云管家

等保 堡垒机 等级保护 堡垒机品牌

工赋开发者社区 | 达摩院开源半监督学习框架Dash,刷新多项SOTA

工赋开发者社区

一文详解TensorFlow模型迁移及模型训练实操步骤

华为云开发者联盟

人工智能 华为云 昇腾AI 企业号 2 月 PK 榜 华为云开发者联盟

前端leetcde算法面试套路之树

js2030code

JavaScript LeetCode

开源工具系列3:Prowler

HummerCloud

云安全

KCL 与其他 Kubernetes 配置管理工具的异同 - Helm 篇 - Helm 篇 [一个自研编程语言能做什么?(系列 3)]

Peefy

Kubernetes DevOps 编程语言 #开源

2023计算机领域顶会(A类)以及ACL 2023自然语言处理(NLP)研究子方向领域汇总

汀丶人工智能

人工智能 自然语言处理 2月日更 计算语言学协

共赴元宇宙新纪元,华为云VR开发应用大赛总决赛倒计时7天!

华为云开发者联盟

人工智能 华为云 VR开发应用 企业号 2 月 PK 榜 华为云开发者联盟

云原生微服务技术趋势解读

阿里巴巴中间件

阿里云 开源 微服务 云原生

“堆外内存”这玩意是真不错,我要写进简历了。

why技术

Java 程序员 面试

对比开源丨Prometheus 服务多场景存储压测全解析

阿里巴巴中间件

阿里云 云原生 Prometheus

落地DevOps的路线图

老张

DevOps 软件工程

架构作为6

梁山伯

婚庆LED显示屏打造梦幻婚礼

Dylan

LED显示屏 led显示屏厂家 户内led显示屏

JVM参数:带你认识-X和-XX参数

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

SAP的良好业绩,能否敲响国内厂商的警钟?

ToB行业头条

ITSM | Atlassian被Gartner评为IT服务管理平台魔力象限的领导者

龙智—DevSecOps解决方案

Atlassian ITSM Gartner

助力芯片产业蓬勃发展,诚翔滤器推出光刻机过滤器

电子信息发烧客

技术交错革新,移动开发平台机会和挑战并存

FinFish

移动开发 移动开发平台 移动应用开发

Dubbo 3 之 Triple 流控反压原理解析

阿里巴巴中间件

阿里云 微服务 云原生

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

简单好上手!1分钟带你体验Apipost

叶小柒

版本控制 | 如何利用虚幻引擎进行虚拟制作,为电影制作带来更多可能

龙智—DevSecOps解决方案

游戏引擎 虚幻引擎 虚幻引擎5 虚拟制作

用javascript分类刷leetcode21.树(图文视频讲解)

js2030code

JavaScript LeetCode

DiffusionDet 用扩散模型解决目标检测

Zilliz

从焊接角度聊一聊,设计PCB的5个建议

华秋PCB

工具 PCB PCB设计 焊接

用 AI 取代人工?或许 LLMs 可以给你答案

鼎道智联

#人工智能

drools规则动态化实践

京东科技开发者

Java 规则引擎 业务逻辑 企业号 2 月 PK 榜 drl

简单了解下linux与windows两者的区别-行云管家

行云管家

Linux

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