写点什么

在微服务中如何管理数据

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

评论

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

「架构师训练营」第 7周作业 - 性能测试

森林

凡架构必拆分,分则有度

菜根老谭

微服务 康威定律 架构思维 分治思维

实操案例:字符串哈希表操作

华为云开发者联盟

程序员 编程语言 C语言 哈希表 字符串

智能标注原理揭秘,一文读懂人工智能如何解决标注难题

百度大脑

人工智能 百度 学习 AI 百度大脑

JVM系列之:详解java object对象在heap中的结构

程序那些事

Java JVM GC JOL

MySQL库表设计小技巧

Simon

MySQL 数据库设计

tomcat 使用apr

zack

tomcat

最新:英特尔断供浪潮系内部供应链调整,现已恢复供货

Geek_116789

Flink 最佳搭档:开发部署平台 Zeppelin 的自白

Apache Flink

一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

楼下小黑哥

nginx redis 分布式 session

Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车

newbe36524

容器 微服务 Reactive .net core ASP.NET Core

Flink 1.11 Unaligned Checkpoint 解析

Apache Flink

flink

什么?不写代码也能做功能开发!- RUOYI教程

Java_若依框架教程

Java 技术 后端 开发 框架

Flask 的 url 处理器

Leetao

Python flask Web框架

来自前端童鞋对后端的吐槽@#$%^

Java小咖秀

程序员 程序人生 大前端

k8s极简史:K8s多集群技术发展的历史、现状与未来

华为云开发者联盟

Kubernetes 容器 云原生 华为云

Oracle JDK7 bug 发现、分析与解决实战

vivo互联网技术

报告|50%CRM品牌陷入竞争旋涡,破圈迫在眉睫

人称T客

架构师都该懂的 CAP 定理

闻人

架构 分布式 架构师

itchat替代品,追妹子神器,个人微信给多个好友(群)发消息,定时提醒妹子喝水

Java_若依框架教程

技术 后端 itchat 微信消息 定时提醒

架构师第七周总结

傻傻的帅

架构师

波士顿动力狗 SPOT 权威购买指北

早睡蟒

Python 人工智能 学习 波士顿动力 机械狗

计算机网络基础(七)---网络层-ICMP协议

书旅

计算机网络 网络协议 网络层

数据库周刊33丨5大国产数据库中标中国移动;Oracle7月CPU安全预警;腾讯Tbase新版本发布;“2020数据技术嘉年华”有奖话题遴选;阿里云技术面试题;APEX 实现数据库自动巡检;MYSQL OCP题库……

墨天轮

MySQL 数据库 oracle 阿里云 面试

压测脚本

LEAF

企业架构框架之DoDAF

冯文辉

企业架构

Java 面向对象知识整理

多选参数

Java 编程

金融科技的碎片化思考(上)

曲水流觞TechRill

金融科技 FinTech

网传Intel断供浪潮,英特尔:供应链调整

Geek_116789

「架构师训练营」第 7 周作业 - 总结

森林

有趣的“第二个系统”

架构精进之路

提升认知 研发体系

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