AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

在微服务中如何管理数据

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

评论

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

如何为您的企业设置内部Wiki?

Geek_da0866

【愚公系列】2022年07月 Java教学课程 07-变量和数据类型

愚公搬代码

7月月更

百度搜索打击盗版网文站点:互联网内容侵权现象为何屡禁不止

石头IT视角

有数大数据基础平台之智能运维平台EasyEagle介绍:集群队列篇

网易数帆

大数据 数据智能 数据基础设施

wallys/PD-60 802.3AT Input Output 802.3AT/AT 85% Efficiency 10/100/1000M GE Surge Protection

wallys-wifi6

MT7915/MT7975/IPQ6000

为什么知识库很重要?这是我听过最好的答案

Geek_da0866

Dao智能合约Dapp系统开发技术

薇電13242772558

智能合约 dapp DAO

AIRIOT答疑第5期|如何使用低代码业务流引擎?

AIRIOT

物联网

二进制SCA指纹提取黑科技:Go语言逆向技术

华为云开发者联盟

云计算 安全 后端

硕果累累,再获认可!「报告、标准、评测」洞见科技走在前沿

洞见科技

隐私计算

构建知识库时,如何避免最常见的几个错误?

Geek_da0866

时代潮头,华为将风帆对准数字金融的风与海

脑极体

千亿营收之后,阿里云生态有了新打法

B Impact

Java基础 ——入坑必读

攻城狮杰森

Java 7月月更

小海豚“变身”全新智能调度引擎,深入浅出在DDS的实践开发应用

白鲸开源

大数据 工作流调度 调度任务 分布式调度引擎 大数据调度

创建企业wiki,你需要知道这些

Geek_da0866

NFTScan 与 Atem Network 在 NFT 数据领域达成战略合作

NFT Research

NFT NFTScan

Flink数据源拆解分析(WikipediaEditsSource)

程序员欣宸

Java flink 7月月更

网络安全之ARP欺骗防护

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

【刷题记录】18. 四数之和

WangNing

7月月更

AWS使用EC2降低DeepRacer的训练成本DeepRacer-for-cloud的实践操作

指剑

AWS Amazon EC2 deepracer

编写一个具有搜索提示的搜索框

空城机

JavaScript 7月月更

华为云AI院长峰会在黔举行 推动人工智能产学研创新发展

极客天地

建立的知识库的7个步骤

Geek_da0866

图像处理解决方案 veImageX 技术演进之路

字节跳动视频云技术团队

计算机视觉 图像处理 图像压缩 图像增强算法

乘势而上,OceanBase推动数字支付精益增长

OceanBase 数据库

区块链开发:如何从 Solidity 智能合约中发送和取款

devpoint

区块链 Solidity 7月月更

利用Python浅尝算法分析

迷彩

算法复杂度 7月月更 算法分析

快速支持客户知识库的核心优势是什么?

Geek_da0866

如何优雅的改变this指向

bo

JavaScript 前端 7月月更

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