在微服务中如何管理数据

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

本文作者:Srini Penchikala

来源:51CTO

时间: 2024-10-27 14:53:23

在微服务中如何管理数据的相关文章

多租户微服务中使用Java Config注册HSF服务

有了速卖通中间件的spring-boot-starter-hsf,在基于Spring Boot微服务中使用HSF,是件简单而惬意的事情. 我们首先来看最简单的服务注册 @HSFProvider(serviceInterface = QasHsfService.class, serviceVersion = "1.0.0.qas", serviceGroup = "HSF") public class QasHsfServiceImpl implements QasH

云存储服务中可证明数据持有及恢复技术研究

云存储服务中可证明数据持有及恢复技术研究 陈兰香 许力 综述了可证明数据持有及恢复技术在国内外的研究现状,讨论了云存储服务的安全性与可靠性需求,并研究云存储服务对可证明数据持有及恢复方案的特殊要求,从而明确在云存储环境下可证明数据持有及恢复技术的研究方向. 关键词-云存储:存储安全:可靠性:数据持有性验证:数据恢复 temp_12072000019852.pdf

《Hadoop大数据分析与挖掘实战》——1.5节餐饮服务中的大数据应用

1.5 餐饮服务中的大数据应用随着餐饮企业规模不断增大,餐饮企业的数据也在不断增长.一个大的餐饮企业可能有很多分店,各个分店的数据综合起来就形成"大数据",但是,如何针对这些"大数据"进行应用分析,得到有价值的信息?餐饮企业如果可以预测销售额,那么餐厅就能在销售的淡季适当调整生产活动,降低运营支出:提前部署营销策略,盘活淡季资源.未雨绸缪,方能做到有备无患.餐饮企业针对大数据做销售额预测,不仅可以考虑各种情况,比如,地理位置.价格.特色.环境舒适度.服务质量等,综合

谷歌已经对其地图服务中的朝鲜数据作出更新

摘要: 上图为平壤先前的地图,下图为谷歌更新数据后平壤的地图 北京时间1月29日下午消息,谷歌周三宣布,已经对其地图服务中的朝鲜数据作出了更新,增加了更多地理位置的详细信息. 上图为平壤先前的地图,下图为谷歌更新数据后平壤的地图 北京时间1月29日下午消息,谷歌周三宣布,已经对其地图服务中的朝鲜数据作出了更新,增加了更多地理位置的详细信息. 谷歌将这一成果归功于"公民制图师社区",借助于地图制作工具Google Map Maker,世界上所有人都可以为谷歌地图的更新作出贡献,提交旅游景

在微服务中使用领域事件

稍微回想一下计算机硬件的工作原理我们便不难发现,整个计算机的工作过程其实就是一个对事件的处理过程.当你点击鼠标.敲击键盘或者插上U盘时,计算机便以中断的形式处理各种外部事件.在软件开发领域,事件驱动架构(Event Driven Architecture,EDA)早已被开发者用于各种实践,典型的应用场景比如浏览器对用户输入的处理.消息机制以及SOA.最近几年重新进入开发者视野的响应式编程(Reactive Programming)更是将事件作为该编程模型中的一等公民.可见,"事件"这个

论UI架构在微服务中的重要性

在德国柏林所举办的microXchg大会上,Stefan Tilkov进行了一场名为"Wait, what!? Our microservices have actual human users?"的演讲.Tilkov表示,目前对于微服务的各种讨论都倾向于以后端的主题为中心,例如API的风格.服务的查找以及伸缩等等.他认为是时候对微服务应用中最重要的一部分,即用户界面(UI)部分的结构设计多加关注了,这一点是至关重要的. Tilkov是innoQ的联合创始人之一及首席顾问,他在这次演讲

在微服务中保证服务的一致性

在近期举办的QCon London大会上,Ben Stopford在他的演讲中极力主张拥抱去集中化的思想.构建基于服务的系统,并通过流处理工具解决分布式状态所引起的问题. Stopford目前任职于Confluent,参与Kafka的开发工作.对他来说,构建基于服务的系统的理由有很多,包括松耦合.边界上下文.易于扩展等等,这些特性让我们能够构建出可以随着时间的推移而不断改进的系统.但是,通过这种方式,我们实质上是在创建分布式的系统,而分布式系统自有其本身的复杂性,并且在延迟与故障等方面还存在着种

营销服务中客户管理的四个问题

在http://www.aliyun.com/zixun/aggregation/39658.html">营销服务每天的帐务管理活动中,有四个问题人们经常问到.我把其称为"帐务管理的四个问题".这些问题应用于在线媒体策划者和绝大多数的广告公司员工. 这四个问题方法论可应用于生活和工作中的任何事情:设想一下这四个问题你每天在问,有95%的或是更多的你必须去做.然后,每天问你自己或是你的团队. 在从事客户管理工作时,以下这四个问题,对于广告公司项目主管.帐号主管以及媒体策划

融数数据基于DevOps的微服务架构演进之路

主题:互联网架构  融数数据基于DevOps的微服务架构演进之路 - 融数数据CTO  王东 讲师介绍 王东: 现任融数数据北京研发中心CTO,负责公司大数据平台.微服务框架以及DevOps平台的研发工作:  毕业于天津大学,毕业后一直从事软件相关研发和架构设计工作,曾经在普元软件任资深架构师.IBM GBS任咨询经理.亚马逊任架构师等,后加入创业公司,从事研发和管理工作:  热爱编程,喜欢钻研新技术,对于微服务.企业架构.大数据以及DevOps有浓厚的兴趣.  谈谈微服务 近年来微服务热度逐渐