写点什么

数据是实现微服务的难点

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

评论

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

让虞书欣、李诞拍到停不下来!AR+AI双引擎的互动小游戏,如何打开IP新玩法?

爱奇艺技术产品团队

28天写作再次开启,你准备好来挑战了吗?

TGO鲲鹏会

28天写作 热门活动

资本之外,区块链破圈正当时

CECBC

区块链

十四五期间我国区块链技术趋势特征分析

CECBC

区块链 大数据

【LeetCode】K 连续位的最小翻转次数Java题解

Albert

算法 LeetCode 2月春节不断更

DPDK大页内存原理

赖猫

Linux DPDK

大厂必问算法!查漏补缺LeetCode必考“1024道技术点面试题”

Java架构之路

Java 程序员 架构 面试 编程语言

真牛皮!2021最新Android大厂面试真题大全,BAT大厂面试总结

欢喜学安卓

android 程序员 面试 移动开发

温故而知新!腾讯Android开发面试记录,薪资翻倍

欢喜学安卓

android 程序员 面试 移动开发

诊所数字化:诊所医护人员绩效指标评估方式

boshi

绩效 数字化转型 医疗 七日更

GitHub上爆火的Java性能优化100+小技巧!(干货建议收藏)

Java架构师迁哥

Java架构大牛之路必备“微服务架构笔记”

Java架构之路

Java 程序员 架构 面试 编程语言

电信的标准化组织

Geek_古藤模根

标准化 电信

技术需求文档,应当这么写!

穿甲兵

需求 文档

如何读懂CNN、BBC、经济学人、卫报、纽约时报?看完这本经典即可事半功倍!

wbliu85

学习 英语

linux内核协议栈 邻居协议之ARP协议处理初始化

赖猫

Linux 协议栈 Linux内核

TCP 协议灵魂问题,巩固你的网路底层基础

6.render阶段(厉害了,我有创建Fiber的技能)

全栈潇晨

React React Hooks react源码

翻译:《实用的Python编程》01_06_Files

codists

人工智能 后端 python 爬虫 数据结构与算法 文件操作

如何提升网页核心指标

Vincent

最新Hadoop的面试题总结

大数据老哥

01 | Mysql基础架构

zach

MySQL

区块链难在落地,亟需补人才缺口迎爬升期

CECBC

区块链

百度Hydra工具在移动端UI兼容性测试上的高效应用

百度Geek说

测试 UI

5.state更新流程(setState里到底发生了什么)

全栈潇晨

React React Hooks react源码

阿里面试这样问:redis 为什么把简单的字符串设计成 SDS?

程序员小富

Java redis 面试

腾讯云大神用这份“redis深度笔记”把Redis入门到精通全部精髓全部展现出来了

redis 架构 计算机

探究Python源码,终于弄懂了字符串驻留技术

华为云开发者联盟

Python 字符串 Python解释器 字符串驻留 字符

元旦立下的Flag,春节后该如何实现?

脑极体

使用 Tye 辅助开发 k8s 应用竟如此简单(三)

newbe36524

Docker 微服务 k8s dotnet

offer稳了!四面阿里面经分享,定级P6之路。

Java架构之路

Java 程序员 架构 面试 编程语言

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