来自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架构)的理想候选方案。

原文地址:http://www.infoq.com/cn/news/2017/07/managing-data-in-microservices


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

在微服务中如何管理数据相关推荐

  1. 攻克微服务中的最大难点:用户数据

    今天 数人云与大家分享的文章将探讨微服务架构的创建与开发工作当中最为困难的部分--用户数据. 只有我们摆脱自己的依赖时微服务才能起作用,换言之,存在于单一数据库上的多任务进程并不是真正的微服务.使用S ...

  2. 微服务架构下静态数据通用缓存机制

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 |  my.oschina.net/u/3971241/bl ...

  3. 如何在微服务架构下进行数据设计?

    作者:唐建法 && Mongoing中文社区 来自:http://www.mongoing.com/ 微服务是一个软件架构模式,对微服务的讨论大多集中在容器或其他技术是否能很好的实施微 ...

  4. 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事

    微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...

  5. 用户在电商网站中购买成功了,那么 TA 在微服务中经历了什么?

    题目:用户在电商网站中购买成功了,那么它在微服务中经历了什么? 当我傻啊,用户在电商网站购买成功,还在微服务中,那肯定就是有一套微服务架构的电商系统. 设计一套电商系统还不简单 简单想象一下,既然是一 ...

  6. iframe的src动态修改并刷新_微服务中配置中心Config+消息总线Bus,实现分布式自动刷新配置

    技术/杨33 一.分布式配置中心Config 一套集中的.动态的配置管理,实现统一配置微服务中的每个子服务. Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为 ...

  7. 谈谈微服务中的 API 网关(API Gateway)

    前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...

  8. api商品分享源码_谈谈微服务中的 API 网关(API Gateway)

    在本篇文章中,我们就一起来探讨一下 API 网关在整个微服务分布式架构中的一个作用. # 背景我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系, ...

  9. 一文透析 Spring Boot、微服务架构和大数据治理三者之间的故事

    微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...

最新文章

  1. c语言和gtk实现的游戏,Ubuntu下用glade和GTK+开发C语言界面程序(一)
  2. 发那科2021参数_三菱发那科常用参数对照
  3. TOMCAT常用优化
  4. 比较ArrayList和数组的区别
  5. 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(一)
  6. 数据类型的判断 c# 1614092544
  7. linux 小度 驱动_Linux硬链接和软链接
  8. 计算两个路径的父亲路径
  9. 华为 HG255D 刷openwrt trunk 支持ipv6
  10. git删除多余的tracked文件(git提示ignored tracked with git)
  11. 计算机word表格公开课ppt,word表格制作课件公开课.ppt
  12. mysql保存提示 HHH000315:Batch update returned unexpected row count from update: 1 actual row count: 0 ex
  13. seo三部曲之关键词策略
  14. 一篇读懂jvm垃圾回收
  15. THINKPHP框架的优秀开源系统推荐
  16. C++基础(1)- 声明(前向声明 Forward Declaration)与定义
  17. 马斯克“超级高铁”成功测速355km|h,不过仅比我国“复兴号”快5km|h
  18. java 调用火狐内核_[图文]自己动手做J浏览器——基于JAVA和火狐内核(gecko)
  19. 页面跳转的两种方法以及区别
  20. 64位WIN7和WIN10下关于无法安装没有数字签证的驱动程序的问题解答

热门文章

  1. 顺义教委携手华平共建视频图像综合管理平台
  2. 机器学习之决策树熵信息增量求解算法实现
  3. [iOS]应用内支付(内购)的个人开发过程及坑!
  4. 最近对kafka的移植工作
  5. Source Generator 单元测试
  6. WebSocket服务器(物联网下行通知神器)
  7. 聊一聊对外API接口的存活检查可以怎么做
  8. WPF Datagrid合并表头的思路
  9. WPF 如何实现颜色值拾取
  10. .NET架构小技巧(2)——访问修饰符正确姿势