写点什么

在微服务中如何管理数据

  • 2017-07-05
  • 本文字数:1190 字

    阅读完需:约 4 分钟

来自 Stitch Fix 团队的工程副总裁 Randy Shoup 在 QCon 纽约 2017 会议上讨论了如何在基于微服务的应用中管理数据和隔离持久化。他还介绍了将事件(Event)作为微服务的第一类构造。他介绍自己的团队将机器学习技术应用到了业务的各个组成部分,比如购买、库存管理以及风格推荐等。

个性化推荐会基于库存运行机器学习,从而创建出推荐的算法。这些推荐算法随后会被全国范围内的设计师所监管,从而形成个性化风格的推荐。

微服务架构是渐进演化的。像 eBay Twitter Amazon 这样的组织都经历了一些架构的迭代,从单体应用转换成了微服务。

微服务除了具有单一的目的、定义良好的接口、模块化和独立性之外,还需要负责隔离持久化。Shoup 讨论了一些持久化的方式,比如操作自己的数据存储或使用持久化服务。在第一种方式中,会将数据存储在自己的数据库实例中,这个实例是由服务团队拥有并进行运维的。而如果采用持久化服务的话,我们会将数据存储在数据库的一个单独的模式中,由其他团队或第三方供应商以服务的方式进行运维。数据应该是与服务的其他消费者相隔离的。

事件是微服务架构中的第一类构造。它们代表了现实世界是如何运作的并且保证应用符合一定的领域要求,比如在金融方面。事件是服务接口的重要组成部分,它应该包含服务产生的所有事件以及服务消费的所有事件。

从单体共享数据库抽取微服务一般涉及到如下几个步骤:

  • 创建服务:服务边界应该包含服务本身以及它所面对的数据库;
  • 应用要使用服务:通过使用新创建的服务,让应用与共享数据库解耦;
  • 将数据转移至私有数据库:然后将数据从共享数据库转移至新的私有数据库。这不会对客户端应用造成任何影响,因为它们已经不直接依赖于数据库;
  • 重复操作:为应用中需要抽取成独立微服务的其他业务功能采用相同的过程。

Shoup 还讨论到微服务用例涉及到共享数据(Shared Data)、连接(join)以及事务。

共享数据:创建的服务是单一系统记录(System of Record,SoR)的并且拥有自己的所有数据。数据的其他副本是只读的,只是非权威(non-authoritative)的缓存。为了访问共享数据,我们有三个可选方案:同步查找(一个服务调用另外的服务来获取数据)、具有缓存的异步事件或共享元数据库;

连接:将数据切分为单独的服务会让连接变得很困难。在微服务领域中,我们可以在客户端应用中进行数据连接,或者是通过监听两个服务的事件,创建“物化视图(Materialized Views)”,并在本地存储中维护非规格化(denormalized)的两个数据集的连接结果。

事务:在单体应用中,事务管理非常容易,但是在微服务架构中却非常困难,因为数据被拆分到了多个不同的服务中了。我们可以将事务实现为一种工作流,它会按照倒序使用补偿操作从而形成一种回滚机制。很多现实系统已经采用了这种方式,比如支付处理和费用审批的系统。这些流程也是采用功能即服务( Serverless 架构)的理想候选方案。

查看英文原文 Managing Data in Microservices

2017-07-05 19:006457

评论

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

嵌入式 Linux 入门(五、Shell 脚本编程上:认识 Shell 脚本)

矜辰所致

Linux Shell shell脚本编程 10月月更

SENSORO 付刘伟:图分析在城市治理服务的应用与落地

SENSORO

智慧城市 图数据库 图数据 数据服务

算法 | 使用栈计算表达式

甜点cc

Go 算法 10月月更

小间距LED显示屏视频拼接器的技术要求

Dylan

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

ClickHouse 冷热分离存储在得物的实践

得物技术

数据库 Clickhouse 存储 日志平台 企业号十月 PK 榜

前端技术培训需要什么条件

小谷哥

SHAREit X Databend | 跨多云 Data Mesh 大数据平台: Why, What and How

Databend

欢迎光临2022年的汽车穿梭餐厅

澳鹏Appen

人工智能 语音识别 数据标注 语音标注 语音数据

手把手教你成为荣耀开发者:帐号管理这样做

荣耀开发者服务平台

开发者 手机 安卓 荣耀 honor

AMD x 稀土掘金 1024码上掘金编程挑战赛来了!

猿始人

1024程序员节

极客时间架构训练营模块三作业

李晨

武汉前端编程培训的就业前景怎么样

小谷哥

开源时代下,怎样强化自己的应用安全

Geek_99967b

小程序

VLAN原理和配置,交换机创建vlan的多种方法、三种接口模式的作用和配置方法、Access、Trunk、Hybrid接口的特性以及配置方法和命令

Python-派大星

10月月更

西安java开发培训学习哪家机构好

小谷哥

优秀开源云原生工具推荐——系列3

HummerCloud

开源 云原生 开源云工具 10月月更

一份阿里内部GC面试手册,仅一周Github获赞96.9K

程序知音

Java JVM Java虚拟机 java架构 后端技术

超级App成为Gartner预测的战略技术,软件降本增效是否能进一步提速?

Speedoooo

小程序 Gartner预测 超级app 小程序化 超级应用

eNSP常用命令 华为模拟器eNSP常用命令

Python-派大星

10月月更

北京大数据学习培训机构哪个好

小谷哥

Linux---Linux中Ubuntu镜像之下搭建FTP服务

木偶

Linux ubuntu ftp 10月月更

数十倍的数据量增长,传统 OLAP 还能应对吗?

Kyligence

大数据 金融行业 OLAP技术

交换机:广播风暴产生原因与解决方法、STP生成树协议 ,根桥(根交换机)、备份根桥、非根交换机、根端口、指定端口、非根非指定端口、桥ID

Python-派大星

10月月更

大数据培训机构该怎么来选择?

小谷哥

写过vue自定义指令吗,原理是什么?

bb_xiaxia1998

Vue

9个计算机的“网络层”知识点

华为云开发者联盟

开发 华为云 网络层 企业号十月 PK 榜

用昇腾AI护航“井下安全”

华为云开发者联盟

人工智能 安全 华为云 企业号十月 PK 榜

前端安全沙箱怎样解决开源的安全问题

Geek_99967b

小程序

教你如何解决T+0的问题

华为云开发者联盟

大数据 华为云 企业号十月 PK 榜

10分钟完成模型开发!合合信息智能文字识别服务平台亮相1024程序员节

合合技术团队

人工智能 文档 识别 摩尔纹

盘点 | 主流跨平台软件开发技术方案

Speedoooo

小程序 APP开发 跨端开发 小程序容器 小程序化

在微服务中如何管理数据_QCon_Srini Penchikala_InfoQ精选文章