写点什么

数据是实现微服务的难点

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

评论

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

MySQL数据库的安装与使用

若尘

MySQL 数据库

《精通比特币》学习笔记(第二章)

棉花糖

区块链 读书笔记

2021程序员春招必备:Java面试知识点+答案(7大分类 5000字解析)

比伯

Java 编程 架构 面试 程序人生

翻译:《实用的Python编程》03_05_Main_module

codists

Python

AI数学基础之:概率和上帝视角

程序那些事

人工智能 AI 程序那些事 概率论

不知不觉不假思索——可供性

Justin

心理学 28天写作 游戏设计

科技强国梦的百度式注脚:扎根土壤、拥抱变局、眺望星空

脑极体

MySQL数据库DDL、DML详解

若尘

MySQL

工作三年,小胖问我:什么是生产者消费者模式?菜到抠脚!

一个优秀的废人

Java 多线程 阻塞队列 生产者与消费者

Nydia

从JVM底层原理分析数值交换那些事

秦怀杂货店

JVM 交换数值

Elasticsearch Analyzer 分词器

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

【回溯算法】经典题:求目标和的组合方案 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

(28DW-S8-Day13) 在线教育班型和角色

mtfelix

28天写作

程序员成长第十九篇:要不要转管理岗?

石云升

程序员 28天写作 职场经验 管理经验 3月日更

Elasticsearch Index Management 索引管理

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

windows 搭建ftp服务

xiezhr

vsftpd ftp ftp服务 文件服务 3月日更

聊聊园区网中的专网架构

冯骐

运维 网络 VRF 虚拟路由表

Java的锁

并发编程

Kubelet从入门到放弃系列:GPU加持

DCOS

AI gpu Kubernetes 云原生

三十而已

ES_her0

28天写作 3月日更

dubbo 源码 v2.7 分析:通信过程及序列化协议

程序员架构进阶

架构 RPC 七日更 dubbo源码 3月日更

聊聊我对SCRM的理解

boshi

CRM 七日更

迎战大厂!“金三银四”和春招通过率达95%的Java面试要点集锦

Java 程序员 架构 面试

2021抖音面经分享:Java进阶核心知识集/算法刷题宝典(金三银四必备)

比伯

Java 编程 架构 面试 程序人生

Kubectl Plugin 推荐(一)| 可观测性篇

郭旭东

kubectl kubectl plugin

关于写作的一点小想法「Day 13」

道伟

28天写作

通俗易懂!看了不会忘的网络面试知识点

编程 架构 面试

Wireshark数据包分析学习笔记Day1

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

无线网络的用户隔离功能

项目汇报会复盘

Geek_XOXO

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