Files
microservices/_book/5-event-driven-data-management-for-microservices.html
2019-07-13 03:00:33 +08:00

1343 lines
209 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>5、事件驱动数据管理 · 微服务:从设计到部署</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="oopsguy.com">
<link rel="stylesheet" href="gitbook/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-splitter/splitter.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-tbfed-pagefooter/footer.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-image-captions/image-captions.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="5-event-driven-data-management-for-microservices.html" />
<link rel="prev" href="4-service-discovery.html" />
<style>
@media only screen and (max-width: 640px) {
.book-header .hidden-mobile {
display: none;
}
}
</style>
<script>
window["gitbook-plugin-github-buttons"] = {"repo":"oopsguy/microservices-from-design-to-deployment-chinese","types":["star","watch"],"size":"small"};
</script>
</head>
<body>
<div class="book">
<div class="book-summary">
<nav role="navigation">
<ul class="summary">
<li>
<a href="http://oopsguy.com" target="_blank" class="custom-link">Oopsguy 的博客</a>
</li>
<li>
<a href="https://github.com/oopsguy/microservices-from-design-to-deployment-chinese" target="_blank" class="custom-link">《微服务:从设计到部署》</a>
</li>
<li class="divider"></li>
<li class="chapter " data-level="1.1" data-path="./">
<a href="./">
Introduction
</a>
</li>
<li class="chapter " data-level="1.2" data-path="0-foreword.html">
<a href="0-foreword.html">
0、前言
</a>
</li>
<li class="chapter " data-level="1.3" data-path="1-introduction-to-microservices.html">
<a href="1-introduction-to-microservices.html">
1、微服务简介
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="1-introduction-to-microservices.html">
<a href="1-introduction-to-microservices.html#building-monolithic-applications">
1.1、构建单体应用
</a>
</li>
<li class="chapter " data-level="1.3.2" data-path="1-introduction-to-microservices.html">
<a href="1-introduction-to-microservices.html#marching-toward-monolithic-hell">
1.2、走向单体地狱
</a>
</li>
<li class="chapter " data-level="1.3.3" data-path="1-introduction-to-microservices.html">
<a href="1-introduction-to-microservices.html#tackling-the-complexity">
1.3、微服务-解决复杂问题
</a>
</li>
<li class="chapter " data-level="1.3.4" data-path="1-introduction-to-microservices.html">
<a href="1-introduction-to-microservices.html#the-benefits-of-microservices">
1.4、微服务的优点
</a>
</li>
<li class="chapter " data-level="1.3.5" data-path="1-introduction-to-microservices.html">
<a href="1-introduction-to-microservices.html#the-drawbacks-of-microservices">
1.5、微服务的缺点
</a>
</li>
<li class="chapter " data-level="1.3.6" data-path="1-introduction-to-microservices.html">
<a href="1-introduction-to-microservices.html#summary">
1.6、总结
</a>
</li>
<li class="chapter " data-level="1.3.7" data-path="1-introduction-to-microservices.html">
<a href="1-introduction-to-microservices.html#microservices-in-action">
微服务实战NGINX Plus 作为反向代理服务器
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html">
2、使用 API 网关
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#introduction">
2.1、简介
</a>
</li>
<li class="chapter " data-level="1.4.2" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#direct-client-to-microservice-communication">
2.2、客户端与微服务直接通信
</a>
</li>
<li class="chapter " data-level="1.4.3" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#using-an-api-gateway">
2.3、使用 API 网关
</a>
</li>
<li class="chapter " data-level="1.4.4" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#benefits-and-drawbacks-of-an-api-gateway">
2.4、API 网关的优点与缺点
</a>
</li>
<li class="chapter " data-level="1.4.5" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#implementing-an-api-gateway">
2.5、实施 API 网关
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.5.1" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#performance-and-scalability">
2.5.1、性能与扩展
</a>
</li>
<li class="chapter " data-level="1.4.5.2" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#using-a-reactive-programming-model">
2.5.2、使用响应式编程模型
</a>
</li>
<li class="chapter " data-level="1.4.5.3" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#service-invocation">
2.5.3、服务调用
</a>
</li>
<li class="chapter " data-level="1.4.5.4" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#service-discovery">
2.5.4、服务发现
</a>
</li>
<li class="chapter " data-level="1.4.5.5" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#handling-partial-failures">
2.5.5、处理局部故障
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4.6" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#summary">
2.6、总结
</a>
</li>
<li class="chapter " data-level="1.4.7" data-path="2-using-an-api-gateway.html">
<a href="2-using-an-api-gateway.html#microservices-in-action">
微服务实战NGINX Plus 作为 API 网关
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html">
3、进程间通信
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#introduction">
3.1、简介
</a>
</li>
<li class="chapter " data-level="1.5.2" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#interaction-styles">
3.2、交互方式
</a>
</li>
<li class="chapter " data-level="1.5.3" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#defining-apis">
3.3、定义 API
</a>
</li>
<li class="chapter " data-level="1.5.4" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#evolving-apis">
3.4、演化 API
</a>
</li>
<li class="chapter " data-level="1.5.5" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#handling-partial-failure">
3.5、处理局部故障
</a>
</li>
<li class="chapter " data-level="1.5.6" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#ipc-technologies">
3.6、IPC 技术
</a>
</li>
<li class="chapter " data-level="1.5.7" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#asynchronous-message-based-communication">
3.7、异步、基于消息的通信
</a>
</li>
<li class="chapter " data-level="1.5.8" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#synchronous-request-response-ipc">
3.8、同步的请求/响应 IPC
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.8.1" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#rest">
3.8.1、REST
</a>
</li>
<li class="chapter " data-level="1.5.8.2" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#thrift">
3.8.2、Thrift
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.9" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#message-formats">
3.9、消息格式
</a>
</li>
<li class="chapter " data-level="1.5.10" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#summary">
3.10、总结
</a>
</li>
<li class="chapter " data-level="1.5.11" data-path="3-inter-process-communication.html">
<a href="3-inter-process-communication.html#microservices-in-action">
微服务实战NGINX 与应用程序架构
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.6" data-path="4-service-discovery.html">
<a href="4-service-discovery.html">
4、服务发现
</a>
<ul class="articles">
<li class="chapter " data-level="1.6.1" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#why-use-service-discovery">
4.1、为何使用服务发现
</a>
</li>
<li class="chapter " data-level="1.6.2" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#the-client-side-discovery-pattern">
4.2、客户端发现模式
</a>
</li>
<li class="chapter " data-level="1.6.3" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#the-server-side-discovery-pattern">
4.3、服务端发现模式
</a>
</li>
<li class="chapter " data-level="1.6.4" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#the-service-registry">
4.4、服务注册中心
</a>
</li>
<li class="chapter " data-level="1.6.5" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#service-registration-options">
4.5、服务注册方式
</a>
</li>
<li class="chapter " data-level="1.6.6" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#the-self-registration-pattern">
4.6、自注册模式
</a>
</li>
<li class="chapter " data-level="1.6.7" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#the-third-party-registration-pattern">
4.7、第三方注册模式
</a>
</li>
<li class="chapter " data-level="1.6.8" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#summary">
4.8、总结
</a>
</li>
<li class="chapter " data-level="1.6.9" data-path="4-service-discovery.html">
<a href="4-service-discovery.html#microservices-in-action">
微服务实战:灵活的 NGINX
</a>
</li>
</ul>
</li>
<li class="chapter active" data-level="1.7" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html">
5、事件驱动数据管理
</a>
<ul class="articles">
<li class="chapter " data-level="1.7.1" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management">
5.1、微服务与分布式数据管理问题
</a>
</li>
<li class="chapter " data-level="1.7.2" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html#event-driven-architecture">
5.2、事件驱动架构
</a>
</li>
<li class="chapter " data-level="1.7.3" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html#achieving-atomicity">
5.3、实现原子性
</a>
</li>
<li class="chapter " data-level="1.7.4" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions">
5.4、使用本地事务发布事件
</a>
</li>
<li class="chapter " data-level="1.7.5" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log">
5.5、挖掘数据库事务日志
</a>
</li>
<li class="chapter " data-level="1.7.6" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html#using-event-sourcing">
5.6、使用事件溯源
</a>
</li>
<li class="chapter " data-level="1.7.7" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html#summary">
5.7、总结
</a>
</li>
<li class="chapter " data-level="1.7.8" data-path="5-event-driven-data-management-for-microservices.html">
<a href="5-event-driven-data-management-for-microservices.html#microservices-in-action">
微服务实战NGINX 与存储优化
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.8" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html">
6、选择部署策略
</a>
<ul class="articles">
<li class="chapter " data-level="1.8.1" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html#motivations">
6.1、动机
</a>
</li>
<li class="chapter " data-level="1.8.2" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html#multiple-service-instances-per-host-pattern">
6.2、单主机多服务实例模式
</a>
</li>
<li class="chapter " data-level="1.8.3" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html#service-instance-per-host-pattern">
6.3、每个主机一个服务实例模式
</a>
<ul class="articles">
<li class="chapter " data-level="1.8.3.1" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html#service-instance-per-virtual-machine-pattern">
6.3.1、每个虚拟机一个服务实例模式
</a>
</li>
<li class="chapter " data-level="1.8.3.2" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html#service-instance-per-container-pattern">
6.3.2、每个容器一个服务实例模式
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.8.4" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html#serverless-deployment">
6.4、Serverless 部署
</a>
</li>
<li class="chapter " data-level="1.8.5" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html#summary">
6.5、总结
</a>
</li>
<li class="chapter " data-level="1.8.6" data-path="6-choosing-deployment-strategy.html">
<a href="6-choosing-deployment-strategy.html#microservices-in-action">
微服务实战:使用 NGINX 在不同主机上部署微服务
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.9" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html">
7、重构单体应用为微服务
</a>
<ul class="articles">
<li class="chapter " data-level="1.9.1" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html#overview-of-refactoring-to-microservices">
7.1、微服务重构概述
</a>
</li>
<li class="chapter " data-level="1.9.2" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html#strategy-1-Stop-digging">
7.2、策略一:停止挖掘
</a>
</li>
<li class="chapter " data-level="1.9.3" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html#strategy-2-split-frontend-and-backend">
7.3、策略二:前后端分离
</a>
</li>
<li class="chapter " data-level="1.9.4" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html#strategy-3-extract-services">
7.4、策略三:提取服务
</a>
<ul class="articles">
<li class="chapter " data-level="1.9.4.1" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html#prioritizing-which-modules-to-convert-into-services">
7.4.1、优先将哪些模块转换为微服务
</a>
</li>
<li class="chapter " data-level="1.9.4.2" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html#how-to-extract-a-module">
7.4.2、如何提取模块
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.9.5" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html#summary">
7.5、总结
</a>
</li>
<li class="chapter " data-level="1.9.6" data-path="7-refactoring-a-monolith-into-microservices.html">
<a href="7-refactoring-a-monolith-into-microservices.html#microservices-in-action">
微服务实战:使用 NGINX 征服单体
</a>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本书使用 GitBook 发布
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="." >5、事件驱动数据管理</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<h1 id="5&#x3001;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6570;&#x636E;&#x7BA1;&#x7406;">5&#x3001;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6570;&#x636E;&#x7BA1;&#x7406;</h1>
<p>&#x672C;&#x4E66;&#x4E3B;&#x8981;&#x4ECB;&#x7ECD;&#x5982;&#x4F55;&#x4F7F;&#x7528;&#x5FAE;&#x670D;&#x52A1;&#x6784;&#x5EFA;&#x5E94;&#x7528;&#xFF0C;&#x8FD9;&#x662F;&#x672C;&#x4E66;&#x7684;&#x7B2C;&#x4E94;&#x7AE0;&#x3002;<a href="1-introduction-to-microservices.html">&#x7B2C;&#x4E00;&#x7AE0;</a>&#x4ECB;&#x7ECD;&#x4E86;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x6A21;&#x5F0F;&#xFF0C;&#x8BA8;&#x8BBA;&#x4E86;&#x4F7F;&#x7528;&#x5FAE;&#x670D;&#x52A1;&#x7684;&#x4F18;&#x70B9;&#x4E0E;&#x7F3A;&#x70B9;&#x3002;<a href="2-using-an-api-gateway.html">&#x7B2C;&#x4E8C;</a>&#x548C;<a href="3-inter-process-communication.html">&#x7B2C;&#x4E09;&#x7AE0;</a>&#x63CF;&#x8FF0;&#x4E86;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x5185;&#x901A;&#x4FE1;&#x65B9;&#x5F0F;&#x7684;&#x5BF9;&#x6BD4;&#x3002;&#x7B2C;&#x56DB;&#x7AE0;&#x63A2;&#x8BA8;&#x4E86;&#x4E0E;&#x670D;&#x52A1;&#x53D1;&#x73B0;&#x76F8;&#x5173;&#x7684;&#x5185;&#x5BB9;&#x3002;&#x5728;&#x672C;&#x7AE0;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x7A0D;&#x5FAE;&#x505A;&#x4E86;&#x70B9;&#x8C03;&#x6574;&#xFF0C;&#x7814;&#x7A76;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x4E2D;&#x51FA;&#x73B0;&#x7684;&#x5206;&#x5E03;&#x5F0F;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x95EE;&#x9898;&#x3002;</p>
<p><a id="microservices-and-the-problem-of-distributed-data-management"></a></p>
<h2 id="51&#x3001;&#x5FAE;&#x670D;&#x52A1;&#x548C;&#x5206;&#x5E03;&#x5F0F;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x95EE;&#x9898;">5.1&#x3001;&#x5FAE;&#x670D;&#x52A1;&#x548C;&#x5206;&#x5E03;&#x5F0F;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x95EE;&#x9898;</h2>
<p>&#x5355;&#x4F53;&#x5E94;&#x7528;&#x901A;&#x5E38;&#x6709;&#x4E00;&#x4E2A;&#x5355;&#x4E00;&#x7684;&#x5173;&#x7CFB;&#x578B;&#x6570;&#x636E;&#x5E93;&#x3002;&#x4F7F;&#x7528;&#x5173;&#x7CFB;&#x578B;&#x6570;&#x636E;&#x5E93;&#x7684;&#x4E00;&#x4E2A;&#x4E3B;&#x8981;&#x4F18;&#x70B9;&#x662F;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <a href="https://en.wikipedia.org/wiki/ACID" target="_blank">ACID &#x4E8B;&#x52A1;</a>&#xFF0C;&#x8FD9;&#x4E9B;&#x4E8B;&#x52A1;&#x63D0;&#x4F9B;&#x4E86;&#x4EE5;&#x4E0B;&#x91CD;&#x8981;&#x4FDD;&#x969C;&#xFF1A;</p>
<ul>
<li><strong>&#x539F;&#x5B50;&#x6027;&#xFF08;Atomicity&#xFF09;</strong> &#x2014; &#x6240;&#x4F5C;&#x51FA;&#x7684;&#x66F4;&#x6539;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;&#x4E0D;&#x53EF;&#x5206;&#x5272;</li>
<li><strong>&#x4E00;&#x81F4;&#x6027;&#xFF08;Consistency&#xFF09;</strong> &#x2014; &#x6570;&#x636E;&#x5E93;&#x7684;&#x72B6;&#x6001;&#x59CB;&#x7EC8;&#x4FDD;&#x6301;&#x4E00;&#x81F4;</li>
<li><strong>&#x9694;&#x79BB;&#x6027;&#xFF08;Isolation&#xFF09;</strong> &#x2014; &#x5373;&#x4F7F;&#x4E8B;&#x52A1;&#x5E76;&#x53D1;&#x6267;&#x884C;&#xFF0C;&#x4F46;&#x5B83;&#x4EEC;&#x770B;&#x8D77;&#x6765;&#x66F4;&#x50CF;&#x662F;&#x4E32;&#x884C;&#x6267;&#x884C;</li>
<li><strong>&#x6C38;&#x4E45;&#x6027;&#xFF08;Durable&#xFF09;</strong> &#x2014; &#x4E00;&#x65E6;&#x4E8B;&#x52A1;&#x63D0;&#x4EA4;&#xFF0C;&#x5B83;&#x5C06;&#x4E0D;&#x53EF;&#x64A4;&#x9500;</li>
</ul>
<p>&#x56E0;&#x6B64;&#xFF0C;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x53EF;&#x4EE5;&#x5F88;&#x5BB9;&#x6613;&#x5730;&#x5F00;&#x59CB;&#x4E8B;&#x52A1;&#x3001;&#x66F4;&#x6539;&#xFF08;&#x63D2;&#x5165;&#x3001;&#x66F4;&#x65B0;&#x548C;&#x5220;&#x9664;&#xFF09;&#x591A;&#x884C;&#x8BB0;&#x5F55;&#xFF0C;&#x5E76;&#x63D0;&#x4EA4;&#x4E8B;&#x52A1;&#x3002;</p>
<p>&#x4F7F;&#x7528;&#x5173;&#x7CFB;&#x578B;&#x6570;&#x636E;&#x5E93;&#x7684;&#x53E6;&#x4E00;&#x5927;&#x597D;&#x5904;&#x662F;&#x5B83;&#x63D0;&#x4F9B;&#x4E86; SQL&#xFF0C;&#x8FD9;&#x662F;&#x4E00;&#x79CD;&#x58F0;&#x660E;&#x5F0F;&#x548C;&#x6807;&#x51C6;&#x5316;&#x7684;&#x67E5;&#x8BE2;&#x8BED;&#x8A00;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x8F7B;&#x677E;&#x5730;&#x7F16;&#x5199;&#x4E00;&#x4E2A;&#x67E5;&#x8BE2;&#x7EC4;&#x5408;&#x6765;&#x81EA;&#x591A;&#x4E2A;&#x8868;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4E4B;&#x540E;&#xFF0C;RDBMS &#x67E5;&#x8BE2;&#x8BA1;&#x5212;&#x7A0B;&#x5E8F;&#x5C06;&#x786E;&#x5B9A;&#x6267;&#x884C;&#x67E5;&#x8BE2;&#x7684;&#x6700;&#x4F73;&#x65B9;&#x5F0F;&#x3002;&#x4F60;&#x4E0D;&#x5FC5;&#x62C5;&#x5FC3;&#x5982;&#x4F55;&#x8BBF;&#x95EE;&#x6570;&#x636E;&#x5E93;&#x7B49;&#x5E95;&#x5C42;&#x7EC6;&#x8282;&#x3002;&#x56E0;&#x4E3A;&#x4F60;&#x6240;&#x6709;&#x7684;&#x5E94;&#x7528;&#x6570;&#x636E;&#x90FD;&#x5B58;&#x653E;&#x5728;&#x540C;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#xFF0C;&#x56E0;&#x6B64;&#x5F88;&#x5BB9;&#x6613;&#x67E5;&#x8BE2;&#x3002;</p>
<p>&#x5F88;&#x4E0D;&#x5E78;&#x7684;&#x662F;&#xFF0C;&#x5F53;&#x6211;&#x4EEC;&#x8F6C;&#x5411;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x65F6;&#xFF0C;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x5C06;&#x53D8;&#x5F97;&#x975E;&#x5E38;&#x590D;&#x6742;&#x3002;&#x56E0;&#x4E3A;&#x6BCF;&#x4E2A;&#x5FAE;&#x670D;&#x52A1;&#x6240;&#x62E5;&#x6709;&#x7684;&#x6570;&#x636E;<a href="http://microservices.io/patterns/data/database-per-service.html" target="_blank">&#x5BF9;&#x5F53;&#x524D;&#x5FAE;&#x670D;&#x52A1;&#x6765;&#x8BF4;&#x662F;&#x79C1;&#x6709;&#x7684;</a>&#xFF0C;&#x53EA;&#x80FD;&#x901A;&#x8FC7;&#x5176;&#x63D0;&#x4F9B;&#x7684; API &#x8FDB;&#x884C;&#x8BBF;&#x95EE;&#x3002;&#x5C01;&#x88C5;&#x6570;&#x636E;&#x53EF;&#x786E;&#x4FDD;&#x5FAE;&#x670D;&#x52A1;&#x677E;&#x8026;&#x5408;&#x3001;&#x72EC;&#x7ACB;&#x6F14;&#x8FDB;&#x3002;&#x5982;&#x679C;&#x591A;&#x4E2A;&#x670D;&#x52A1;&#x8BBF;&#x95EE;&#x76F8;&#x540C;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5F53;&#x6A21;&#x5F0F;&#xFF08;schema&#xFF09;&#x66F4;&#x65B0;&#x65F6;&#xFF0C;&#x9700;&#x8981;&#x8017;&#x65F6;&#x534F;&#x8C03;&#x66F4;&#x65B0;&#x6240;&#x6709;&#x670D;&#x52A1;&#x3002;</p>
<p>&#x66F4;&#x7CDF;&#x7CD5;&#x7684;&#x662F;&#xFF0C;&#x4E0D;&#x540C;&#x7684;&#x5FAE;&#x670D;&#x52A1;&#x5E38;&#x5E38;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7C7B;&#x578B;&#x7684;&#x6570;&#x636E;&#x5E93;&#x3002;&#x73B0;&#x4EE3;&#x5E94;&#x7528;&#x5B58;&#x50A8;&#x548C;&#x5904;&#x7406;&#x7740;&#x5404;&#x79CD;&#x6570;&#x636E;&#xFF0C;&#x800C;&#x5173;&#x7CFB;&#x578B;&#x6570;&#x636E;&#x5E93;&#x5E76;&#x4E0D;&#x4E00;&#x5B9A;&#x662F;&#x6700;&#x4F73;&#x9009;&#x62E9;&#x3002;&#x5728;&#x67D0;&#x4E9B;&#x573A;&#x666F;&#xFF0C;&#x67D0;&#x4E9B; NoSQL &#x6570;&#x636E;&#x5E93;&#x53EF;&#x80FD;&#x6709;&#x66F4;&#x65B9;&#x4FBF;&#x7684;&#x6570;&#x636E;&#x6A21;&#x578B;&#xFF0C;&#x63D0;&#x4F9B;&#x4E86;&#x66F4;&#x597D;&#x7684;&#x6027;&#x80FD;&#x548C;&#x53EF;&#x6269;&#x5C55;&#x6027;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5B58;&#x50A8;&#x548C;&#x67E5;&#x8BE2;&#x6587;&#x672C;&#x7684;&#x670D;&#x52A1;&#x9002;&#x5408;&#x4F7F;&#x7528;&#x6587;&#x672C;&#x641C;&#x7D22;&#x5F15;&#x64CE;&#xFF08;&#x5982; Elasticsearch&#xFF09;&#x3002;&#x7C7B;&#x4F3C;&#x5730;&#xFF0C;&#x5B58;&#x50A8;&#x793E;&#x4EA4;&#x56FE;&#x6570;&#x636E;&#x7684;&#x670D;&#x52A1;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x56FE;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x4F8B;&#x5982; Neo4j&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x57FA;&#x4E8E;&#x5FAE;&#x670D;&#x52A1;&#x7684;&#x5E94;&#x7528;&#x901A;&#x5E38;&#x6DF7;&#x5408;&#x4F7F;&#x7528; SQL &#x548C; NoSQL &#x6570;&#x636E;&#x5E93;&#xFF0C;&#x5373;&#x6240;&#x8C13;&#x7684;<a href="http://martinfowler.com/bliki/PolyglotPersistence.html" target="_blank">&#x6DF7;&#x5408;&#x6301;&#x4E45;&#x5316;</a>&#xFF08;polyglot persistence&#xFF09;&#x65B9;&#x5F0F;&#x3002;</p>
<p>&#x5206;&#x533A;&#x7684;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x6DF7;&#x5408;&#x6301;&#x4E45;&#x5316;&#x67B6;&#x6784;&#x6709;&#x8BB8;&#x591A;&#x4F18;&#x70B9;&#xFF0C;&#x5305;&#x62EC;&#x4E86;&#x677E;&#x8026;&#x5408;&#x7684;&#x670D;&#x52A1;&#x4EE5;&#x53CA;&#x66F4;&#x597D;&#x7684;&#x6027;&#x80FD;&#x548C;&#x53EF;&#x6269;&#x5C55;&#x6027;&#x3002;&#x7136;&#x800C;&#xFF0C;&#x5B83;&#x4E5F;&#x5F15;&#x5165;&#x4E86;&#x4E00;&#x4E9B;&#x5206;&#x5E03;&#x5F0F;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x65B9;&#x9762;&#x7684;&#x6311;&#x6218;&#x3002;</p>
<p>&#x7B2C;&#x4E00;&#x4E2A;&#x6311;&#x6218;&#x662F;&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#x4E1A;&#x52A1;&#x7684;&#x4E8B;&#x52A1;&#x5728;&#x591A;&#x4E2A;&#x670D;&#x52A1;&#x4E4B;&#x95F4;&#x4FDD;&#x6301;&#x4E00;&#x81F4;&#x6027;&#x3002;&#x8981;&#x4E86;&#x89E3;&#x6B64;&#x95EE;&#x9898;&#xFF0C;&#x8BA9;&#x6211;&#x4EEC;&#x5148;&#x6765;&#x770B;&#x4E00;&#x4E2A;&#x5728;&#x7EBF; B2B &#x5546;&#x5E97;&#x793A;&#x4F8B;&#x3002;Customer Service &#xFF08;&#x987E;&#x5BA2;&#x670D;&#x52A1;&#xFF09;&#x7EF4;&#x62A4;&#x5BA2;&#x6237;&#x76F8;&#x5173;&#x7684;&#x4FE1;&#x606F;&#xFF0C;&#x5305;&#x62EC;&#x4FE1;&#x7528;&#x989D;&#x5EA6;&#x3002;Order Service &#xFF08;&#x8BA2;&#x5355;&#xFF09;&#x8D1F;&#x8D23;&#x7BA1;&#x7406;&#x8BA2;&#x5355;&#xFF0C;&#x5E76;&#x4E14;&#x5FC5;&#x987B;&#x9A8C;&#x8BC1;&#x65B0;&#x8BA2;&#x5355;&#x6CA1;&#x6709;&#x8D85;&#x8FC7;&#x5BA2;&#x6237;&#x7684;&#x4FE1;&#x7528;&#x989D;&#x5EA6;&#x3002;&#x5728;&#x6B64;&#x5E94;&#x7528;&#x7684;&#x5355;&#x4F53;&#x7248;&#x672C;&#x4E2D;&#xFF0C;Order Service &#x53EF;&#x4EE5;&#x7B80;&#x5355;&#x5730;&#x4F7F;&#x7528; ACID &#x4E8B;&#x52A1;&#x6765;&#x68C0;&#x67E5;&#x53EF;&#x7528;&#x4FE1;&#x7528;&#x989D;&#x5EA6;&#x5E76;&#x521B;&#x5EFA;&#x8BA2;&#x5355;&#x3002;</p>
<p>&#x76F8;&#x6BD4;&#x4E4B;&#x4E0B;&#xFF0C;&#x5728;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x4E2D;&#xFF0C;ORDER &#xFF08;&#x8BA2;&#x5355;&#xFF09;&#x548C; CUSTOMER &#xFF08;&#x987E;&#x5BA2;&#xFF09;&#x8868;&#x5BF9;&#x5176;&#x5404;&#x81EA;&#x7684;&#x670D;&#x52A1;&#x90FD;&#x662F;&#x79C1;&#x6709;&#x7684;&#xFF0C;&#x5982;&#x56FE; 5-1 &#x6240;&#x793A;&#xFF1A;</p>
<figure id="fig1.7.1"><img src="resources/5-1.png" alt="&#x56FE; 5-1&#x3001;&#x6BCF;&#x4E2A;&#x5FAE;&#x670D;&#x52A1;&#x90FD;&#x6709;&#x5404;&#x81EA;&#x7684;&#x6570;&#x636E;"><figcaption>&#x56FE; 5-1&#x3001;&#x6BCF;&#x4E2A;&#x5FAE;&#x670D;&#x52A1;&#x90FD;&#x6709;&#x5404;&#x81EA;&#x7684;&#x6570;&#x636E;</figcaption></figure>
<p>Order Service &#x65E0;&#x6CD5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE; CUSTOMER &#x8868;&#x3002;&#x5B83;&#x53EA;&#x80FD;&#x4F7F;&#x7528; Customer Service &#x63D0;&#x4F9B;&#x7684; API&#x3002;Order Service &#x53EF;&#x80FD;&#x4F7F;&#x7528;&#x4E86;<a href="https://en.wikipedia.org/wiki/Two-phase_commit_protocol" target="_blank">&#x5206;&#x5E03;&#x5F0F;&#x4E8B;&#x52A1;</a>&#xFF0C;&#x4E5F;&#x79F0;&#x4E3A;&#x4E24;&#x9636;&#x6BB5;&#x63D0;&#x4EA4;&#xFF08;2PC&#xFF09;&#x3002;&#x7136;&#x800C;&#xFF0C;2PC &#x5728;&#x73B0;&#x4EE3;&#x5E94;&#x7528;&#x4E2D;&#x901A;&#x5E38;&#x662F;&#x4E0D;&#x53EF;&#x884C;&#x7684;&#x3002;<a href="https://en.wikipedia.org/wiki/CAP_theorem" target="_blank">CAP &#x5B9A;&#x7406;</a>&#x8981;&#x6C42;&#x4F60;&#x5728;&#x53EF;&#x7528;&#x6027;&#x4E0E; ACID &#x5F0F;&#x4E00;&#x81F4;&#x6027;&#x4E4B;&#x95F4;&#x505A;&#x51FA;&#x9009;&#x62E9;&#xFF0C;&#x53EF;&#x7528;&#x6027;&#x901A;&#x5E38;&#x662F;&#x66F4;&#x597D;&#x7684;&#x9009;&#x62E9;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x8BB8;&#x591A;&#x73B0;&#x4EE3;&#x6280;&#x672F;&#xFF0C;&#x5982;&#x5927;&#x591A;&#x6570; NoSQL &#x6570;&#x636E;&#x5E93;&#xFF0C;&#x90FD;&#x4E0D;&#x652F;&#x6301; 2PC&#x3002;&#x7EF4;&#x62A4;&#x670D;&#x52A1;&#x548C;&#x6570;&#x636E;&#x5E93;&#x4E4B;&#x95F4;&#x7684;&#x6570;&#x636E;&#x4E00;&#x81F4;&#x6027;&#x81F3;&#x5173;&#x91CD;&#x8981;&#xFF0C;&#x56E0;&#x6B64;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x53E6;&#x4E00;&#x5957;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x3002;</p>
<p>&#x7B2C;&#x4E8C;&#x4E2A;&#x6311;&#x6218;&#x662F;&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#x4ECE;&#x591A;&#x4E2A;&#x670D;&#x52A1;&#x4E2D;&#x68C0;&#x7D22;&#x6570;&#x636E;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x6211;&#x4EEC;&#x5047;&#x8BBE;&#x5E94;&#x7528;&#x9700;&#x8981;&#x663E;&#x793A;&#x4E00;&#x4E2A;&#x987E;&#x5BA2;&#x548C;&#x4ED6;&#x6700;&#x8FD1;&#x7684;&#x8BA2;&#x5355;&#x3002;&#x5982;&#x679C; Order Service &#x63D0;&#x4F9B;&#x4E86;&#x68C0;&#x7D22;&#x5BA2;&#x6237;&#x8BA2;&#x5355;&#x7684; API&#xFF0C;&#x90A3;&#x4E48;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5E94;&#x7528;&#x7AEF;&#x8FDE;&#x63A5;&#xFF08;join&#xFF09;&#x6765;&#x68C0;&#x7D22;&#x6570;&#x636E;&#x3002;&#x5E94;&#x7528;&#x4ECE; Customer Service &#x4E2D;&#x68C0;&#x7D22;&#x5BA2;&#x6237;&#xFF0C;&#x5E76;&#x4ECE; Order Service &#x4E2D;&#x68C0;&#x7D22;&#x5BA2;&#x6237;&#x7684;&#x8BA2;&#x5355;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x5047;&#x8BBE; Order Service &#x4EC5;&#x652F;&#x6301;&#x901A;&#x8FC7;&#x4E3B;&#x952E;&#x67E5;&#x627E;&#x8BA2;&#x5355;&#xFF08;&#x4E5F;&#x8BB8;&#x5B83;&#x4F7F;&#x7528;&#x4E86;&#x4EC5;&#x652F;&#x6301;&#x57FA;&#x4E8E;&#x4E3B;&#x952E;&#x68C0;&#x7D22;&#x7684; NoSQL &#x6570;&#x636E;&#x5E93;&#xFF09;&#x3002;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x6CA1;&#x6709;&#x6709;&#x6548;&#x7684;&#x65B9;&#x6CD5;&#x6765;&#x68C0;&#x7D22;&#x6240;&#x9700;&#x7684;&#x6570;&#x636E;&#x3002;</p>
<p><a id="event-driven-architecture"></a></p>
<h2 id="52&#x3001;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x67B6;&#x6784;">5.2&#x3001;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x67B6;&#x6784;</h2>
<p>&#x8BB8;&#x591A;&#x5E94;&#x7528;&#x4F7F;&#x7528;&#x4E86;<a href="https://martinfowler.com/eaaDev/EventNarrative.html" target="_blank">&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x67B6;&#x6784;</a>&#x4F5C;&#x4E3A;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x3002;&#x5728;&#x6B64;&#x67B6;&#x6784;&#x4E2D;&#xFF0C;&#x5FAE;&#x670D;&#x52A1;&#x5728;&#x53D1;&#x751F;&#x67D0;&#x4E9B;&#x91CD;&#x8981;&#x4E8B;&#x4EF6;&#x65F6;&#x53D1;&#x5E03;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#xFF0C;&#x6BD4;&#x5982;&#x66F4;&#x65B0;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#x65F6;&#x3002;&#x5176;&#x4ED6;&#x5FAE;&#x670D;&#x52A1;&#x8BA2;&#x9605;&#x4E86;&#x8FD9;&#x4E9B;&#x4E8B;&#x4EF6;&#xFF0C;&#x5F53;&#x63A5;&#x6536;&#x5230;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x65F6;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x66F4;&#x65B0;&#x81EA;&#x5DF1;&#x7684;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x89E6;&#x53D1;&#x66F4;&#x591A;&#x7684;&#x4E8B;&#x4EF6;&#x88AB;&#x53D1;&#x5E03;&#x3002;</p>
<p>&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4E8B;&#x4EF6;&#x6765;&#x5B9E;&#x73B0;&#x8DE8;&#x591A;&#x670D;&#x52A1;&#x4E1A;&#x52A1;&#x7684;&#x4E8B;&#x52A1;&#x3002;&#x4E00;&#x4E2A;&#x4E8B;&#x52A1;&#x7531;&#x4E00;&#x7CFB;&#x5217;&#x7684;&#x6B65;&#x9AA4;&#x7EC4;&#x6210;&#x3002;&#x6BCF;&#x4E2A;&#x6B65;&#x9AA4;&#x5305;&#x62EC;&#x4E86;&#x5FAE;&#x670D;&#x52A1;&#x66F4;&#x65B0;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#x548C;&#x53D1;&#x5E03;&#x4E00;&#x4E2A;&#x4E0B;&#x4E00;&#x6B65;&#x9700;&#x8981;&#x89E6;&#x53D1;&#x7684;&#x4E8B;&#x4EF6;&#x3002;&#x4E0B;&#x56FE;&#x4F9D;&#x6B21;&#x5C55;&#x793A;&#x4E86;&#x5982;&#x4F55;&#x5728;&#x521B;&#x5EFA;&#x8BA2;&#x5355;&#x65F6;&#x4F7F;&#x7528;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x65B9;&#x6CD5;&#x6765;&#x68C0;&#x67E5;&#x53EF;&#x7528;&#x4FE1;&#x7528;&#x989D;&#x5EA6;&#x3002;</p>
<p>&#x5FAE;&#x670D;&#x52A1;&#x901A;&#x8FC7; Message Broker &#xFF08;&#x6D88;&#x606F;&#x4EE3;&#x7406;&#xFF09;&#x8FDB;&#x884C;&#x4EA4;&#x6362;&#x4E8B;&#x4EF6;&#xFF1A;</p>
<ul>
<li>Order Service &#xFF08;&#x8BA2;&#x5355;&#x670D;&#x52A1;&#xFF09;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x72B6;&#x6001;&#x4E3A; NEW &#x7684;&#x8BA2;&#x5355;&#xFF0C;&#x5E76;&#x53D1;&#x5E03;&#x4E00;&#x4E2A; Order Created &#xFF08;&#x8BA2;&#x5355;&#x521B;&#x5EFA;&#xFF09;&#x4E8B;&#x4EF6;&#x3002;</li>
</ul>
<figure id="fig1.7.2"><img src="resources/5-2.png" alt="&#x56FE; 5-2&#x3001;Order Service &#x53D1;&#x5E03;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;"><figcaption>&#x56FE; 5-2&#x3001;Order Service &#x53D1;&#x5E03;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;</figcaption></figure>
<ul>
<li>Customer Service &#xFF08;&#x5BA2;&#x6237;&#x670D;&#x52A1;&#xFF09;&#x6D88;&#x8D39;&#x4E86; Order Created &#x4E8B;&#x4EF6;&#xFF0C;&#x4E3A;&#x8BA2;&#x5355;&#x9884;&#x7559;&#x4FE1;&#x7528;&#x989D;&#x5EA6;&#xFF0C;&#x5E76;&#x53D1;&#x5E03; Credit Reserved &#x4E8B;&#x4EF6;&#x3002;</li>
</ul>
<figure id="fig1.7.3"><img src="resources/5-3.png" alt="&#x56FE; 5.3&#x3001;Customer Service &#x54CD;&#x5E94;"><figcaption>&#x56FE; 5.3&#x3001;Customer Service &#x54CD;&#x5E94;</figcaption></figure>
<ul>
<li>Order Service &#x6D88;&#x8D39;&#x4E86; Credit Reserved &#xFF08;&#x4FE1;&#x7528;&#x9884;&#x7559;&#xFF09;&#x4E8B;&#x4EF6;&#x5E76;&#x5C06;&#x8BA2;&#x5355;&#x7684;&#x72B6;&#x6001;&#x66F4;&#x6539;&#x4E3A; OPEN&#x3002;</li>
</ul>
<figure id="fig1.7.4"><img src="resources/5-4.png" alt="&#x56FE; 5-4&#x3001;Order Service &#x4F5C;&#x7528;&#x4E8E;&#x54CD;&#x5E94;"><figcaption>&#x56FE; 5-4&#x3001;Order Service &#x4F5C;&#x7528;&#x4E8E;&#x54CD;&#x5E94;</figcaption></figure>
<p>&#x66F4;&#x590D;&#x6742;&#x7684;&#x573A;&#x666F;&#x53EF;&#x80FD;&#x4F1A;&#x6D89;&#x53CA;&#x989D;&#x5916;&#x7684;&#x6B65;&#x9AA4;&#xFF0C;&#x4F8B;&#x5982;&#x5728;&#x68C0;&#x67E5;&#x5BA2;&#x6237;&#x4FE1;&#x7528;&#x7684;&#x540C;&#x65F6;&#x4FDD;&#x7559;&#x5E93;&#x5B58;&#x3002;</p>
<p>&#x5047;&#x8BBE;&#xFF08;a&#xFF09;&#x6BCF;&#x4E2A;&#x670D;&#x52A1;&#x539F;&#x5B50;&#x5730;&#x66F4;&#x65B0;&#x6570;&#x636E;&#x5E93;&#x5E76;&#x53D1;&#x5E03;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6; &#xFF08;&#x7A0D;&#x540E;&#x518D;&#x8BE6;&#x7EC6;&#x8BF4;&#x660E;&#xFF09;&#xFF0C;&#xFF08;b&#xFF09;Message Broker &#x4FDD;&#x8BC1;&#x4E8B;&#x4EF6;&#x81F3;&#x5C11;&#x88AB;&#x9001;&#x8FBE;&#x4E00;&#x6B21;&#xFF0C;&#x7136;&#x540E;&#x4F60;&#x5C31;&#x5B9E;&#x73B0;&#x4E86;&#x8DE8;&#x591A;&#x670D;&#x52A1;&#x7684;&#x4E1A;&#x52A1;&#x4E8B;&#x52A1;&#x3002;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x8FD9;&#x4E9B;&#x5E76;&#x4E0D;&#x662F; ACID &#x4E8B;&#x52A1;&#x3002;&#x5B83;&#x4EEC;&#x53EA;&#x63D0;&#x4F9B;&#x4E86;&#x66F4;&#x5F31;&#x7684;&#x4FDD;&#x8BC1;&#xFF0C;&#x5982;<a href="https://en.wikipedia.org/wiki/Eventual_consistency" target="_blank">&#x6700;&#x7EC8;&#x4E00;&#x81F4;&#x6027;</a>&#x3002;&#x8BE5;&#x4E8B;&#x52A1;&#x6A21;&#x578B;&#x79F0;&#x4E3A; <a href="http://queue.acm.org/detail.cfm?id=1394128" target="_blank">BASE &#x6A21;&#x578B;</a>&#x3002;</p>
<p>&#x4F60;&#x4E5F;&#x53EF;&#x4EE5;&#x7528;&#x4E8B;&#x4EF6;&#x6765;&#x7EF4;&#x62A4;&#x7531;&#x591A;&#x4E2A;&#x5FAE;&#x670D;&#x52A1;&#x6570;&#x636E;&#x6784;&#x6210;&#x7684;&#x7269;&#x5316;&#x89C6;&#x56FE;&#x3002;&#x7EF4;&#x62A4;&#x89C6;&#x56FE;&#x7684;&#x670D;&#x52A1;&#x8BA2;&#x9605;&#x4E86;&#x76F8;&#x5173;&#x4E8B;&#x4EF6;&#x5E76;&#x66F4;&#x65B0;&#x89C6;&#x56FE;&#x3002;&#x56FE; 5-5 &#x5C55;&#x793A;&#x4E86; Customer Order View Updater Service &#xFF08;&#x5BA2;&#x6237;&#x8BA2;&#x5355;&#x89C6;&#x56FE;&#x66F4;&#x65B0;&#x670D;&#x52A1;&#xFF09;&#x6839;&#x636E; Customer
Service &#x548C; Order Service &#x53D1;&#x5E03;&#x7684;&#x4E8B;&#x4EF6;&#x66F4;&#x65B0; Customer Order View &#xFF08;&#x5BA2;&#x6237;&#x8BA2;&#x5355;&#x89C6;&#x56FE;&#xFF09;&#x3002;</p>
<figure id="fig1.7.5"><img src="resources/5-5.png" alt="&#x56FE; 5-5 Customer Order View &#x88AB;&#x4E24;&#x4E2A;&#x670D;&#x52A1;&#x8BBF;&#x95EE;"><figcaption>&#x56FE; 5-5 Customer Order View &#x88AB;&#x4E24;&#x4E2A;&#x670D;&#x52A1;&#x8BBF;&#x95EE;</figcaption></figure>
<p>&#x5F53; Customer Order View Updater Service &#x63A5;&#x6536;&#x5230; Customer &#x6216; Order &#x4E8B;&#x4EF6;&#x65F6;&#xFF0C;&#x5B83;&#x4F1A;&#x66F4;&#x65B0; Customer Order View &#x7684;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5982; MongoDB &#x4E4B;&#x7C7B;&#x7684;&#x6587;&#x6863;&#x6570;&#x636E;&#x5E93;&#x5B9E;&#x73B0; Customer Order View&#xFF0C;&#x5E76;&#x4E3A;&#x6BCF;&#x4E2A; Customer &#x5B58;&#x50A8;&#x4E00;&#x4E2A;&#x6587;&#x6863;&#x3002;Customer Order View Query Service&#xFF08;&#x5BA2;&#x6237;&#x8BA2;&#x5355;&#x89C6;&#x56FE;&#x67E5;&#x8BE2;&#x670D;&#x52A1;&#xFF09;&#x901A;&#x8FC7;&#x67E5;&#x8BE2; Customer Order View &#x6570;&#x636E;&#x5B58;&#x50A8;&#x6765;&#x5904;&#x7406;&#x83B7;&#x53D6;&#x4E00;&#x4F4D;&#x5BA2;&#x6237;&#x548C;&#x6700;&#x8FD1;&#x7684;&#x8BA2;&#x5355;&#x7684;&#x8BF7;&#x6C42;&#x3002;</p>
<p>&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x7684;&#x67B6;&#x6784;&#x6709;&#x51E0;&#x4E2A;&#x4F18;&#x70B9;&#x4E0E;&#x7F3A;&#x70B9;&#x3002;&#x5B83;&#x80FD;&#x591F;&#x5B9E;&#x73B0;&#x8DE8;&#x8D8A;&#x591A;&#x670D;&#x52A1;&#x5E76;&#x63D0;&#x4F9B;&#x6700;&#x7EC8;&#x4E00;&#x81F4;&#x6027;&#x7684;&#x4E8B;&#x52A1;&#x3002;&#x53E6;&#x4E00;&#x4E2A;&#x597D;&#x5904;&#x662F;&#x5B83;&#x8FD8;&#x4F7F;&#x5F97;&#x5E94;&#x7528;&#x80FD;&#x591F;&#x7EF4;&#x62A4;<a href="https://en.wikipedia.org/wiki/Materialized_view" target="_blank">&#x7269;&#x5316;&#x89C6;&#x56FE;</a>&#x3002;</p>
<p>&#x4E00;&#x4E2A;&#x7F3A;&#x70B9;&#x662F;&#x5176;&#x7F16;&#x7A0B;&#x6A21;&#x578B;&#x6BD4;&#x4F7F;&#x7528; ACID &#x4E8B;&#x52A1;&#x66F4;&#x52A0;&#x590D;&#x6742;&#x3002;&#x901A;&#x5E38;&#xFF0C;&#x4F60;&#x5FC5;&#x987B;&#x5B9E;&#x73B0;&#x4E8B;&#x52A1;&#x8865;&#x507F;&#x4EE5;&#x4ECE;&#x5E94;&#x7528;&#x7EA7;&#x522B;&#x7684;&#x6545;&#x969C;&#x4E2D;&#x6062;&#x590D;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5982;&#x679C;&#x4FE1;&#x7528;&#x68C0;&#x67E5;&#x5931;&#x8D25;&#xFF0C;&#x4F60;&#x5FC5;&#x987B;&#x53D6;&#x6D88;&#x8BA2;&#x5355;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x5E94;&#x7528;&#x5FC5;&#x987B;&#x5904;&#x7406;&#x4E0D;&#x4E00;&#x81F4;&#x7684;&#x6570;&#x636E;&#x3002;&#x56E0;&#x4E3A;&#x672A;&#x63D0;&#x4EA4;&#x7684;&#x4E8B;&#x52A1;&#x6240;&#x505A;&#x7684;&#x66F4;&#x6539;&#x662F;&#x53EF;&#x89C1;&#x7684;&#x3002;&#x5982;&#x679C;&#x4ECE;&#x672A;&#x66F4;&#x65B0;&#x7684;&#x7269;&#x5316;&#x89C6;&#x56FE;&#x4E2D;&#x8BFB;&#x53D6;&#xFF0C;&#x5E94;&#x7528;&#x4F9D;&#x7136;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4E0D;&#x4E00;&#x81F4;&#x6027;&#x3002;&#x53E6;&#x4E00;&#x4E2A;&#x7F3A;&#x70B9;&#x662F;&#x8BA2;&#x9605;&#x8005;&#x5FC5;&#x987B;&#x8981;&#x68C0;&#x6D4B;&#x548C;&#x5FFD;&#x7565;&#x91CD;&#x590D;&#x7684;&#x4E8B;&#x4EF6;&#x3002;</p>
<p><a id="achieving-atomicity"></a></p>
<h2 id="53&#x3001;&#x5B9E;&#x73B0;&#x539F;&#x5B50;&#x6027;">5.3&#x3001;&#x5B9E;&#x73B0;&#x539F;&#x5B50;&#x6027;</h2>
<p>&#x5728;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x67B6;&#x6784;&#x4E2D;&#xFF0C;&#x540C;&#x6837;&#x5B58;&#x5728;&#x7740;&#x539F;&#x5B50;&#x66F4;&#x65B0;&#x6570;&#x636E;&#x5E93;&#x548C;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x76F8;&#x5173;&#x95EE;&#x9898;&#x3002;&#x4F8B;&#x5982;&#xFF0C;Order Service &#x5FC5;&#x987B;&#x5728; ORDER &#x8868;&#x4E2D;&#x63D2;&#x5165;&#x4E00;&#x884C;&#x6570;&#x636E;&#xFF0C;&#x5E76;&#x53D1;&#x5E03; Order Created &#x4E8B;&#x4EF6;&#x3002;&#x8FD9;&#x4E24;&#x4E2A;&#x64CD;&#x4F5C;&#x5FC5;&#x987B;&#x539F;&#x5B50;&#x5B8C;&#x6210;&#x3002;&#x5982;&#x679C;&#x5728;&#x66F4;&#x65B0;&#x6570;&#x636E;&#x5E93;&#x540E;&#x4F46;&#x5728;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x4E4B;&#x524D;&#x53D1;&#x751F;&#x670D;&#x52A1;&#x5D29;&#x6E83;&#xFF0C;&#x7CFB;&#x7EDF;&#x5C06;&#x51FA;&#x73B0;&#x4E0D;&#x4E00;&#x81F4;&#x6027;&#x3002;&#x786E;&#x4FDD;&#x539F;&#x5B50;&#x6027;&#x7684;&#x6807;&#x51C6;&#x65B9;&#x6CD5;&#x662F;&#x4F7F;&#x7528;&#x6D89;&#x53CA;&#x5230;&#x6570;&#x636E;&#x5E93;&#x548C; Message Broker &#x7684;&#x5206;&#x5E03;&#x5F0F;&#x4E8B;&#x52A1;&#x3002;&#x7136;&#x800C;&#xFF0C;&#x7531;&#x4E8E;&#x4E0A;&#x8FF0;&#x539F;&#x56E0;&#xFF0C;&#x5982; CAP &#x5B9A;&#x7406;&#xFF0C;&#x8FD9;&#x5E76;&#x4E0D;&#x662F;&#x6211;&#x4EEC;&#x60F3;&#x8981;&#x7684;&#x3002;</p>
<p><a id="publishing-events-using-local-transactions"></a></p>
<h2 id="54&#x3001;&#x4F7F;&#x7528;&#x672C;&#x5730;&#x4E8B;&#x52A1;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;">5.4&#x3001;&#x4F7F;&#x7528;&#x672C;&#x5730;&#x4E8B;&#x52A1;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;</h2>
<p>&#x5B9E;&#x73B0;&#x539F;&#x5B50;&#x6027;&#x7684;&#x4E00;&#x79CD;&#x65B9;&#x5F0F;&#x662F;&#x5E94;&#x7528;&#x4F7F;&#x7528;<a href="http://queue.acm.org/detail.cfm?id=1394128" target="_blank">&#x4EC5;&#x6D89;&#x53CA;&#x672C;&#x5730;&#x4E8B;&#x52A1;&#x7684;&#x591A;&#x6B65;&#x9AA4;&#x8FC7;&#x7A0B;</a>&#x6765;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x3002;&#x8BC0;&#x7A8D;&#x5728;&#x4E8E;&#x5B58;&#x50A8;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#x72B6;&#x6001;&#x7684;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x6709;&#x4E00;&#x4E2A;&#x7528;&#x4F5C;&#x6D88;&#x606F;&#x961F;&#x5217;&#x7684; EVENT &#x8868;&#x3002;&#x5E94;&#x7528;&#x5F00;&#x542F;&#x4E00;&#x4E2A;&#xFF08;&#x672C;&#x5730;&#xFF09;&#x6570;&#x636E;&#x5E93;&#x4E8B;&#x52A1;&#xFF0C;&#x66F4;&#x65B0;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#x72B6;&#x6001;&#xFF0C;&#x5C06;&#x4E8B;&#x4EF6;&#x63D2;&#x5165;&#x5230; EVENT &#x8868;&#x4E2D;&#xFF0C;&#x4E4B;&#x540E;&#x63D0;&#x4EA4;&#x4E8B;&#x52A1;&#x3002;&#x6709;&#x4E00;&#x4E2A;&#x5355;&#x72EC;&#x7684;&#x5E94;&#x7528;&#x7EBF;&#x7A0B;&#x6216;&#x8FDB;&#x7A0B;&#x67E5;&#x8BE2; EVENT &#x8868;&#xFF0C;&#x5C06;&#x4E8B;&#x4EF6;&#x53D1;&#x5E03;&#x5230; Message Broker&#xFF0C;&#x7136;&#x540E;&#x4F7F;&#x7528;&#x672C;&#x5730;&#x4E8B;&#x52A1;&#x5C06;&#x4E8B;&#x4EF6;&#x6807;&#x8BB0;&#x4E3A;&#x5DF2;&#x53D1;&#x5E03;&#x3002;&#x8BBE;&#x8BA1;&#x5982;&#x56FE; 5-6 &#x6240;&#x793A;&#x3002;</p>
<figure id="fig1.7.6"><img src="resources/5-6.png" alt="&#x56FE; 5-6&#x3001;&#x672C;&#x5730;&#x4E8B;&#x52A1;&#x5B9E;&#x73B0;&#x539F;&#x5B50;&#x6027;"><figcaption>&#x56FE; 5-6&#x3001;&#x672C;&#x5730;&#x4E8B;&#x52A1;&#x5B9E;&#x73B0;&#x539F;&#x5B50;&#x6027;</figcaption></figure>
<p>Order Service &#x5C06;&#x4E00;&#x884C;&#x8BB0;&#x5F55;&#x63D2;&#x5165;&#x5230; ORDER &#x8868;&#x4E2D;&#xFF0C;&#x5E76;&#x5C06;&#x4E00;&#x4E2A; Order Created &#x4E8B;&#x4EF6;&#x63D2;&#x5165;&#x5230; EVENT &#x8868;&#x4E2D;&#x3002;Event Publisher&#xFF08;&#x4E8B;&#x4EF6;&#x53D1;&#x5E03;&#x8005;&#xFF09;&#x7EBF;&#x7A0B;&#x6216;&#x8FDB;&#x7A0B;&#x4ECE; EVENT &#x8868;&#x4E2D;&#x67E5;&#x8BE2;&#x672A;&#x53D1;&#x5E03;&#x7684;&#x4E8B;&#x4EF6;&#xFF0C;&#x4E4B;&#x540E;&#x53D1;&#x5E03;&#x8FD9;&#x4E9B;&#x4E8B;&#x4EF6;&#xFF0C;&#x6700;&#x540E;&#x66F4;&#x65B0; EVENT &#x8868;&#x5C06;&#x4E8B;&#x4EF6;&#x6807;&#x8BB0;&#x4E3A;&#x5DF2;&#x53D1;&#x5E03;&#x3002;</p>
<p>&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x6709;&#x597D;&#x6709;&#x574F;&#x3002;&#x597D;&#x5904;&#x662F;&#x5B83;&#x4FDD;&#x8BC1;&#x4E86;&#x88AB;&#x53D1;&#x5E03;&#x7684;&#x4E8B;&#x4EF6;&#x6BCF;&#x6B21;&#x66F4;&#x65B0;&#x90FD;&#x4E0D;&#x4F9D;&#x8D56;&#x4E8E; 2PC&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x5E94;&#x7528;&#x53D1;&#x5E03;&#x4E1A;&#x52A1;&#x7EA7;&#x4E8B;&#x4EF6;&#xFF0C;&#x8FD9;&#x4E9B;&#x4E8B;&#x4EF6;&#x53EF;&#x4EE5;&#x6D88;&#x9664;&#x63A8;&#x65AD;&#x7684;&#x5FC5;&#x8981;&#x3002;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x7684;&#x7F3A;&#x70B9;&#x662F;&#x5B83;&#x5F88;&#x5BB9;&#x6613;&#x51FA;&#x9519;&#xFF0C;&#x56E0;&#x4E3A;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x5FC5;&#x987B;&#x8981;&#x8BB0;&#x5F97;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x3002;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x7684;&#x5C40;&#x9650;&#x6027;&#x5728;&#x4E8E;&#xFF0C;&#x7531;&#x4E8E;&#x5176;&#x6709;&#x9650;&#x7684;&#x4E8B;&#x52A1;&#x548C;&#x67E5;&#x8BE2;&#x529F;&#x80FD;&#xFF0C;&#x5728;&#x4F7F;&#x7528;&#x67D0;&#x4E9B; NoSQL &#x6570;&#x636E;&#x5E93;&#x65F6;&#xFF0C;&#x5B9E;&#x73B0;&#x8D77;&#x6765;&#x5C06;&#x662F;&#x4E00;&#x5927;&#x6311;&#x6218;&#x3002;</p>
<p>&#x8BE5;&#x65B9;&#x6CD5;&#x901A;&#x8FC7;&#x8BA9;&#x5E94;&#x7528;&#x4F7F;&#x7528;&#x672C;&#x5730;&#x4E8B;&#x52A1;&#x66F4;&#x65B0;&#x72B6;&#x6001;&#x548C;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x6765;&#x6D88;&#x9664;&#x5BF9; 2PC &#x7684;&#x4F9D;&#x8D56;&#x3002;&#x73B0;&#x5728;&#x6211;&#x4EEC;&#x6765;&#x770B;&#x4E00;&#x4E0B;&#x901A;&#x8FC7;&#x5E94;&#x7528;&#x7B80;&#x5355;&#x5730;&#x66F4;&#x65B0;&#x72B6;&#x6001;&#x6765;&#x5B9E;&#x73B0;&#x539F;&#x5B50;&#x6027;&#x7684;&#x65B9;&#x6CD5;&#x3002;</p>
<p><a id="mining-a-database-transaction-log"></a></p>
<h2 id="55&#x3001;&#x6316;&#x6398;&#x6570;&#x636E;&#x5E93;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;">5.5&#x3001;&#x6316;&#x6398;&#x6570;&#x636E;&#x5E93;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;</h2>
<p>&#x4E0D;&#x4F9D;&#x9760; 2PC &#x6765;&#x5B9E;&#x73B0;&#x539F;&#x5B50;&#x6027;&#x7684;&#x53E6;&#x4E00;&#x79CD;&#x65B9;&#x5F0F;&#x662F;&#x7528;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6216;&#x8FDB;&#x7A0B;&#x6765;&#x6316;&#x6398;&#x6570;&#x636E;&#x5E93;&#x7684;&#x4E8B;&#x52A1;&#x6216;&#x63D0;&#x4EA4;&#x65E5;&#x5FD7;&#x6765;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x3002;&#x5F53;&#x5E94;&#x7528;&#x66F4;&#x65B0;&#x6570;&#x636E;&#x5E93;&#x65F6;&#xFF0C;&#x66F4;&#x6539;&#x4FE1;&#x606F;&#x88AB;&#x8BB0;&#x5F55;&#x5230;&#x6570;&#x636E;&#x5E93;&#x7684;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x4E2D;&#x3002;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x6316;&#x6398;&#x5668;&#xFF08;Transaction Log Miner&#xFF09; &#x7EBF;&#x7A0B;&#x6216;&#x8FDB;&#x7A0B;&#x8BFB;&#x53D6;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x5E76;&#x5411; Message Broker &#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x3002;&#x8BBE;&#x8BA1;&#x5982;&#x56FE; 5-7 &#x6240;&#x793A;&#x3002;</p>
<figure id="fig1.7.7"><img src="resources/5-7.png" alt="&#x56FE; 5-7&#x3001;Message Broker &#x53EF;&#x4EE5;&#x516C;&#x65AD;&#x6570;&#x636E;&#x4E8B;&#x52A1;"><figcaption>&#x56FE; 5-7&#x3001;Message Broker &#x53EF;&#x4EE5;&#x516C;&#x65AD;&#x6570;&#x636E;&#x4E8B;&#x52A1;</figcaption></figure>
<p>LinkedIn Databus &#x5F00;&#x6E90;&#x9879;&#x76EE;&#x4F7F;&#x7528;&#x6B64;&#x65B9;&#x6CD5;&#x3002;Databus &#x6316;&#x6398; Oracle &#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x5E76;&#x53D1;&#x5E03;&#x4E0E;&#x66F4;&#x6539;&#x5BF9;&#x5E94;&#x7684;&#x4E8B;&#x4EF6;&#x3002;LinkedIn &#x4F7F;&#x7528; Databus &#x4FDD;&#x6301;&#x5404;&#x79CD;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x4E0E;&#x7CFB;&#x7EDF;&#x7684;&#x8BB0;&#x5F55;&#x4E00;&#x81F4;&#x3002;</p>
<p>&#x53E6;&#x4E00;&#x4E2A;&#x4F8B;&#x5B50;&#x662F; AWS DynamoDB &#x4E2D;&#x7684;&#x6D41;&#x673A;&#x5236;&#xFF0C;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x6258;&#x7BA1;&#x7684; NoSQL &#x6570;&#x636E;&#x5E93;&#x3002;DynamoDB &#x6D41;&#x5305;&#x542B;&#x4E86;&#x5728;&#x8FC7;&#x53BB; 24 &#x5C0F;&#x65F6;&#x5185;&#x5BF9; DynamoDB &#x8868;&#x4E2D;&#x7684;&#x9879;&#x8FDB;&#x884C;&#x7684;&#x66F4;&#x6539;&#xFF08;&#x521B;&#x5EFA;&#x3001;&#x66F4;&#x65B0;&#x548C;&#x5220;&#x9664;&#x64CD;&#x4F5C;&#xFF09;&#xFF0C;&#x5176;&#x6309;&#x65F6;&#x95F4;&#x987A;&#x5E8F;&#x6392;&#x5217;&#x3002;&#x5E94;&#x7528;&#x53EF;&#x4EE5;&#x4ECE;&#x6D41;&#x4E2D;&#x8BFB;&#x53D6;&#x8FD9;&#x4E9B;&#x66F4;&#x6539;&#xFF0C;&#x6BD4;&#x5982;&#xFF0C;&#x5C06;&#x5176;&#x4F5C;&#x4E3A;&#x4E8B;&#x4EF6;&#x53D1;&#x5E03;&#x3002;</p>
<p>&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x6316;&#x6398;&#x6709;&#x5404;&#x79CD;&#x597D;&#x5904;&#x4E0E;&#x574F;&#x5904;&#x3002;&#x4E00;&#x4E2A;&#x597D;&#x5904;&#x662F;&#x5B83;&#x80FD;&#x4FDD;&#x8BC1;&#x88AB;&#x53D1;&#x5E03;&#x7684;&#x4E8B;&#x4EF6;&#x6BCF;&#x6B21;&#x66F4;&#x65B0;&#x90FD;&#x4E0D;&#x4F9D;&#x8D56;&#x4E8E; 2PC&#x3002;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x6316;&#x6398;&#x8FD8;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5C06;&#x4E8B;&#x4EF6;&#x53D1;&#x5E03;&#x4ECE;&#x5E94;&#x7528;&#x4E1A;&#x52A1;&#x903B;&#x8F91;&#x5206;&#x79BB;&#x51FA;&#x6765;&#x7B80;&#x5316;&#x5E94;&#x7528;&#x3002;&#x4E00;&#x4E2A;&#x4E3B;&#x8981;&#x7684;&#x7F3A;&#x70B9;&#x662F;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x7684;&#x683C;&#x5F0F;&#x5BF9;&#x4E8E;&#x6BCF;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x6765;&#x8BF4;&#x90FD;&#x662F;&#x7279;&#x6709;&#x7684;&#xFF0C;&#x6709;&#x4E9B;&#x751A;&#x81F3;&#x5728;&#x4E0D;&#x540C;&#x6570;&#x636E;&#x5E93;&#x7248;&#x672C;&#x4E4B;&#x95F4;&#x683C;&#x5F0F;&#x5C31;&#x6709;&#x4E86;&#x6539;&#x53D8;&#x3002;&#x800C;&#x4E14;&#xFF0C;&#x8BB0;&#x5F55;&#x5728;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x4E2D;&#x7684;&#x4F4E;&#x7EA7;&#x522B;&#x66F4;&#x65B0;&#x53EF;&#x80FD;&#x96BE;&#x4EE5;&#x9006;&#x5411;&#x5230;&#x9AD8;&#x7EA7;&#x4E1A;&#x52A1;&#x4E8B;&#x4EF6;&#x3002;</p>
<p>&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x6316;&#x6398;&#x6D88;&#x9664;&#x4E86;&#x5E94;&#x7528;&#x9700;&#x8981;&#x4F9D;&#x8D56; 2PC &#x6765;&#x505A;&#x7684;&#x4E00;&#x4EF6;&#x4E8B;&#xFF1A;&#x66F4;&#x65B0;&#x6570;&#x636E;&#x5E93;&#x3002;&#x73B0;&#x5728;&#x6211;&#x4EEC;&#x6765;&#x770B;&#x770B;&#x53E6;&#x4E00;&#x79CD;&#x53EF;&#x4EE5;&#x6D88;&#x9664;&#x66F4;&#x65B0;&#x5E76;&#x4EC5;&#x4F9D;&#x8D56;&#x4E8E;&#x4E8B;&#x4EF6;&#x7684;&#x4E0D;&#x540C;&#x65B9;&#x5F0F;&#x3002;</p>
<p><a id="using-event-sourcing"></a></p>
<h2 id="56&#x3001;&#x4F7F;&#x7528;&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;">5.6&#x3001;&#x4F7F;&#x7528;&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;</h2>
<p><a href="https://github.com/cer/event-sourcing-examples/wiki/WhyEventSourcing" target="_blank">&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;</a>&#x901A;&#x8FC7;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x4E8E;&#x4E4B;&#x524D;&#x7684;&#x3001;&#x4EE5;&#x4E8B;&#x4EF6;&#x4E3A;&#x4E2D;&#x5FC3;&#x7684;&#x65B9;&#x5F0F;&#x6765;&#x6301;&#x4E45;&#x5316;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#xFF0C;&#x5B9E;&#x73B0;&#x65E0; 2PC &#x539F;&#x5B50;&#x6027;&#x3002;&#x5E94;&#x7528;&#x4E0D;&#x7528;&#x5B58;&#x50A8;&#x5B9E;&#x4F53;&#x7684;&#x5F53;&#x524D;&#x72B6;&#x6001;&#xFF0C;&#x800C;&#x662F;&#x5B58;&#x50A8;&#x4E00;&#x7CFB;&#x5217;&#x72B6;&#x6001;&#x6539;&#x53D8;&#x4E8B;&#x4EF6;&#x3002;&#x5E94;&#x7528;&#x901A;&#x8FC7;&#x56DE;&#x653E;&#x4E8B;&#x4EF6;&#x6765;&#x91CD;&#x5EFA;&#x5B9E;&#x4F53;&#x7684;&#x5F53;&#x524D;&#x72B6;&#x6001;&#x3002;&#x65E0;&#x8BBA;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#x7684;&#x72B6;&#x6001;&#x4F55;&#x65F6;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF0C;&#x5176;&#x90FD;&#x4F1A;&#x5C06;&#x65B0;&#x4E8B;&#x4EF6;&#x8FFD;&#x52A0;&#x5230;&#x4E8B;&#x4EF6;&#x5217;&#x8868;&#x4E2D;&#x3002;&#x7531;&#x4E8E;&#x4FDD;&#x5B58;&#x4E8B;&#x4EF6;&#x662F;&#x5355;&#x4E00;&#x64CD;&#x4F5C;&#xFF0C;&#x56E0;&#x6B64;&#x662F;&#x539F;&#x5B50;&#x6027;&#x3002;</p>
<p>&#x8981;&#x4E86;&#x89E3;&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;&#x7684;&#x5DE5;&#x4F5C;&#x539F;&#x7406;&#xFF0C;&#x4EE5; Order&#xFF08;&#x8BA2;&#x5355;&#xFF09;&#x5B9E;&#x4F53;&#x4E3A;&#x4F8B;&#x3002;&#x5728;&#x4F20;&#x7EDF;&#x65B9;&#x5F0F;&#x4E2D;&#xFF0C;&#x6BCF;&#x4E2A;&#x8BA2;&#x5355;&#x90FD;&#x4E0E; ORDER &#x8868;&#x4E2D;&#x7684;&#x67D0;&#x884C;&#x8BB0;&#x5F55;&#x76F8;&#x6620;&#x5C04;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x6620;&#x5C04;&#x5230;&#x4F8B;&#x5982; ORDER_LINE_ITEM &#x8868;&#x4E2D;&#x7684;&#x8BB0;&#x5F55;&#x3002;</p>
<p>&#x4F46;&#x5F53;&#x4F7F;&#x7528;&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;&#x65F6;&#xFF0C;Order Service &#x5C06;&#x4EE5;&#x72B6;&#x6001;&#x66F4;&#x6539;&#x4E8B;&#x4EF6;&#x7684;&#x5F62;&#x5F0F;&#x5B58;&#x50A8; Order&#xFF1A;Created&#xFF08;&#x521B;&#x5EFA;&#xFF09;&#x3001;Approved&#xFF08;&#x6279;&#x51C6;&#xFF09;&#x3001;Shipped&#xFF08;&#x53D1;&#x8D27;&#xFF09;&#x3001;Cancelled&#xFF08;&#x53D6;&#x6D88;&#xFF09;&#x3002;&#x6BCF;&#x4E2A;&#x4E8B;&#x4EF6;&#x5305;&#x542B;&#x8DB3;&#x591F;&#x591A;&#x7684;&#x6570;&#x636E;&#x6765;&#x91CD;&#x5EFA; Order &#x7684;&#x72B6;&#x6001;&#x3002;</p>
<figure id="fig1.7.8"><img src="resources/5-8.png" alt="&#x56FE; 5-8&#x3001;&#x4E8B;&#x4EF6;&#x6709;&#x5B8C;&#x6574;&#x7684;&#x6570;&#x636E;"><figcaption>&#x56FE; 5-8&#x3001;&#x4E8B;&#x4EF6;&#x6709;&#x5B8C;&#x6574;&#x7684;&#x6570;&#x636E;</figcaption></figure>
<p>&#x4E8B;&#x4EF6;&#x88AB;&#x6301;&#x4E45;&#x5316;&#x5728;&#x4E8B;&#x4EF6;&#x5B58;&#x50A8;&#x4E2D;&#xFF0C;&#x4E8B;&#x4EF6;&#x5B58;&#x50A8;&#x662F;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x7684;&#x6570;&#x636E;&#x5E93;&#x3002;&#x8BE5;&#x5B58;&#x50A8;&#x6709;&#x4E00;&#x4E2A;&#x7528;&#x4E8E;&#x6DFB;&#x52A0;&#x548C;&#x68C0;&#x7D22;&#x5B9E;&#x4F53;&#x4E8B;&#x4EF6;&#x7684; API&#x3002;&#x4E8B;&#x4EF6;&#x5B58;&#x50A8;&#x8FD8;&#x4E0E;&#x6211;&#x4EEC;&#x4E4B;&#x524D;&#x63CF;&#x8FF0;&#x7684;&#x67B6;&#x6784;&#x4E2D;&#x7684; Message Broker &#x7C7B;&#x4F3C;&#x3002;&#x5B83;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A; API&#xFF0C;&#x4F7F;&#x5F97;&#x670D;&#x52A1;&#x80FD;&#x591F;&#x8BA2;&#x9605;&#x4E8B;&#x4EF6;&#x3002;&#x4E8B;&#x4EF6;&#x5B58;&#x50A8;&#x5411;&#x6240;&#x6709;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x8BA2;&#x9605;&#x8005;&#x6D3E;&#x53D1;&#x6240;&#x6709;&#x4E8B;&#x4EF6;&#x3002;&#x53EF;&#x4EE5;&#x8BF4;&#x4E8B;&#x4EF6;&#x5B58;&#x50A8;&#x662F;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x7684;&#x652F;&#x67F1;&#x3002;</p>
<p>&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;&#x6709;&#x51E0;&#x4E2A;&#x597D;&#x5904;&#x3002;&#x5B83;&#x89E3;&#x51B3;&#x4E86;&#x5B9E;&#x73B0;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x67B6;&#x6784;&#x7684;&#x5173;&#x952E;&#x95EE;&#x9898;&#x4E4B;&#x4E00;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x72B6;&#x6001;&#x53D1;&#x751F;&#x53D8;&#x5316;&#x65F6;&#x53EF;&#x9760;&#x5730;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x5B83;&#x89E3;&#x51B3;&#x4E86;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x4E00;&#x81F4;&#x6027;&#x95EE;&#x9898;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x7531;&#x4E8E;&#x5B83;&#x6301;&#x4E45;&#x5316;&#x7684;&#x662F;&#x4E8B;&#x4EF6;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x9886;&#x57DF;&#x5BF9;&#x8C61;&#xFF0C;&#x6240;&#x4EE5;&#x5B83;&#x4E3B;&#x8981;&#x907F;&#x514D;&#x4E86;<a href="https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch" target="_blank">&#x5BF9;&#x8C61;&#x5173;&#x7CFB;&#x963B;&#x6297;&#x5931;&#x914D;&#x95EE;&#x9898;</a>&#x3002;&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;&#x8FD8;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A; 100&#xFF05; &#x53EF;&#x9760;&#x7684;&#x5BA1;&#x8BA1;&#x65E5;&#x5FD7;&#xFF0C;&#x5176;&#x8BB0;&#x5F55;&#x4E86;&#x5BF9;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#x7684;&#x53D8;&#x66F4;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x5728;&#x4EFB;&#x4F55;&#x65F6;&#x95F4;&#x70B9;&#x5BF9;&#x5B9E;&#x4F53;&#x8FDB;&#x884C;&#x67E5;&#x8BE2;&#x4EE5;&#x786E;&#x5B9A;&#x72B6;&#x6001;&#x3002;&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;&#x7684;&#x53E6;&#x4E00;&#x4E2A;&#x597D;&#x5904;&#x662F;&#x4F60;&#x7684;&#x4E1A;&#x52A1;&#x903B;&#x8F91;&#x5305;&#x62EC;&#x677E;&#x8026;&#x5408;&#x7684;&#x4EA4;&#x6362;&#x4E8B;&#x4EF6;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#xFF0C;&#x4ECE;&#x5355;&#x4F53;&#x5E94;&#x7528;&#x8FC1;&#x79FB;&#x5230;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x5C06;&#x53D8;&#x5F97;&#x66F4;&#x52A0;&#x5BB9;&#x6613;&#x3002;</p>
<p>&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;&#x540C;&#x6837;&#x6709;&#x7F3A;&#x70B9;&#x3002;&#x8FD9;&#x662F;&#x4E00;&#x79CD;&#x964C;&#x751F;&#x7684;&#x7F16;&#x7A0B;&#x98CE;&#x683C;&#xFF0C;&#x56E0;&#x6B64;&#x5B58;&#x5728;&#x5B66;&#x4E60;&#x66F2;&#x7EBF;&#x3002;&#x4E8B;&#x4EF6;&#x5B58;&#x50A8;&#x4EC5;&#x652F;&#x6301;&#x901A;&#x8FC7;&#x4E3B;&#x952E;&#x67E5;&#x627E;&#x4E1A;&#x52A1;&#x5B9E;&#x4F53;&#x3002;&#x4F60;&#x5FC5;&#x987B;&#x4F7F;&#x7528;<a href="https://github.com/cer/event-sourcing-examples/wiki" target="_blank">&#x547D;&#x4EE4;&#x67E5;&#x8BE2;&#x8D23;&#x4EFB;&#x5206;&#x79BB;</a>&#xFF08;CQRS&#xFF09;&#x6765;&#x5B9E;&#x73B0;&#x67E5;&#x8BE2;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x5E94;&#x7528;&#x5FC5;&#x987B;&#x5904;&#x7406;&#x6700;&#x7EC8;&#x4E00;&#x81F4;&#x7684;&#x6570;&#x636E;&#x3002;</p>
<p><a id="summary"></a></p>
<h2 id="57&#x3001;&#x603B;&#x7ED3;">5.7&#x3001;&#x603B;&#x7ED3;</h2>
<p>&#x5728;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x4E2D;&#xFF0C;&#x6BCF;&#x4E2A;&#x5FAE;&#x670D;&#x52A1;&#x90FD;&#x6709;&#x79C1;&#x6709;&#x7684;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x3002;&#x4E0D;&#x540C;&#x7684;&#x5FAE;&#x670D;&#x52A1;&#x53EF;&#x80FD;&#x4F1A;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7684; SQL &#x6216;&#x8005; NoSQL &#x6570;&#x636E;&#x5E93;&#x3002;&#x867D;&#x7136;&#x8FD9;&#x79CD;&#x6570;&#x636E;&#x5E93;&#x67B6;&#x6784;&#x6709;&#x660E;&#x663E;&#x7684;&#x4F18;&#x52BF;&#xFF0C;&#x4F46;&#x5B83;&#x521B;&#x9020;&#x4E86;&#x4E00;&#x4E9B;&#x5206;&#x5E03;&#x5F0F;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x6311;&#x6218;&#x3002;&#x7B2C;&#x4E00;&#x4E2A;&#x6311;&#x6218;&#x662F;&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#x7EF4;&#x62A4;&#x591A;&#x4E2A;&#x670D;&#x52A1;&#x95F4;&#x7684;&#x4E1A;&#x52A1;&#x4E8B;&#x52A1;&#x4E00;&#x81F4;&#x6027;&#x3002;&#x7B2C;&#x4E8C;&#x4E2A;&#x6311;&#x6218;&#x662F;&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#x4ECE;&#x591A;&#x4E2A;&#x670D;&#x52A1;&#x4E2D;&#x68C0;&#x7D22;&#x6570;&#x636E;&#x3002;</p>
<p>&#x5927;&#x90E8;&#x5206;&#x5E94;&#x7528;&#x4F7F;&#x7528;&#x7684;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x662F;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x67B6;&#x6784;&#x3002;&#x5B9E;&#x73B0;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x67B6;&#x6784;&#x7684;&#x4E00;&#x4E2A;&#x6311;&#x6218;&#x662F;&#x5982;&#x4F55;&#x4EE5;&#x539F;&#x5B50;&#x7684;&#x65B9;&#x5F0F;&#x66F4;&#x65B0;&#x72B6;&#x6001;&#x4EE5;&#x53CA;&#x5982;&#x4F55;&#x53D1;&#x5E03;&#x4E8B;&#x4EF6;&#x3002;&#x6709;&#x51E0;&#x79CD;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x8FD9;&#x70B9;&#xFF0C;&#x5305;&#x62EC;&#x4E86;&#x5C06;&#x6570;&#x636E;&#x5E93;&#x4F5C;&#x4E3A;&#x6D88;&#x606F;&#x961F;&#x5217;&#x3001;&#x4E8B;&#x52A1;&#x65E5;&#x5FD7;&#x6316;&#x6398;&#x548C;&#x4E8B;&#x4EF6;&#x6EAF;&#x6E90;&#x3002;</p>
<p><a id="microservices-in-action"></a></p>
<h2 id="&#x5FAE;&#x670D;&#x52A1;&#x5B9E;&#x6218;&#xFF1A;nginx-&#x4E0E;&#x5B58;&#x50A8;&#x4F18;&#x5316;">&#x5FAE;&#x670D;&#x52A1;&#x5B9E;&#x6218;&#xFF1A;NGINX &#x4E0E;&#x5B58;&#x50A8;&#x4F18;&#x5316;</h2>
<p>by Floyd Smith</p>
<p>&#x57FA;&#x4E8E;&#x5FAE;&#x670D;&#x52A1;&#x7684;&#x5B58;&#x50A8;&#x65B9;&#x5F0F;&#x6D89;&#x53CA;&#x4E86;&#x5927;&#x6570;&#x91CF;&#x548C;&#x5404;&#x79CD;&#x6570;&#x636E;&#x5B58;&#x50A8;&#xFF0C;&#x8BBF;&#x95EE;&#x548C;&#x66F4;&#x65B0;&#x6570;&#x636E;&#x5C06;&#x53D8;&#x5F97;&#x66F4;&#x52A0;&#x590D;&#x6742;&#xFF0C;DevOps &#x5728;&#x7EF4;&#x62A4;&#x6570;&#x636E;&#x4E00;&#x81F4;&#x6027;&#x65B9;&#x9762;&#x9762;&#x4E34;&#x7740;&#x66F4;&#x5927;&#x7684;&#x6311;&#x6218;&#x3002;NGINX &#x4E3A;&#x8FD9;&#x79CD;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x63D0;&#x4F9B;&#x4E86;&#x91CD;&#x8981;&#x652F;&#x6301;&#xFF0C;&#x4E3B;&#x8981;&#x6709;&#x4E09;&#x4E2A;&#x65B9;&#x9762;&#xFF1A;</p>
<ol>
<li><p><strong>&#x6570;&#x636E;&#x7F13;&#x5B58;&#x4E0E;&#x5FAE;&#x7F13;&#x5B58;&#xFF08;microcaching&#xFF09;</strong></p>
<p> &#x4F7F;&#x7528; NGINX &#x7F13;&#x5B58;&#x9759;&#x6001;&#x6587;&#x4EF6;&#x548C;&#x5FAE;&#x7F13;&#x5B58;&#x5E94;&#x7528;&#x53EF;&#x51CF;&#x8F7B;&#x5E94;&#x7528;&#x7684;&#x8D1F;&#x8F7D;&#x3001;&#x63D0;&#x9AD8;&#x6027;&#x80FD;&#x5E76;&#x51CF;&#x5C11;&#x95EE;&#x9898;&#x7684;&#x53D1;&#x751F;&#x3002;</p>
</li>
<li><p><strong>&#x6570;&#x636E;&#x5B58;&#x50A8;&#x7684;&#x7075;&#x6D3B;&#x6027;&#x4E0E;&#x53EF;&#x6269;&#x5C55;&#x6027;</strong></p>
<p> &#x4E00;&#x65E6;&#x5C06; NGINX &#x4F5C;&#x4E3A;&#x53CD;&#x5411;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x5728;&#x521B;&#x5EFA;&#x3001;&#x8C03;&#x6574;&#x5927;&#x5C0F;&#x3001;&#x8FD0;&#x884C;&#x548C;&#x8C03;&#x6574;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x670D;&#x52A1;&#x5668;&#x5927;&#x5C0F;&#x65F6;&#x90FD;&#x80FD;&#x83B7;&#x5F97;&#x5F88;&#x5927;&#x7684;&#x7075;&#x6D3B;&#x6027;&#xFF0C;&#x4EE5;&#x6EE1;&#x8DB3;&#x4E0D;&#x65AD;&#x53D8;&#x5316;&#x7684;&#x9700;&#x6C42; &#x2014; &#x6BCF;&#x4E2A;&#x670D;&#x52A1;&#x90FD;&#x62E5;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x662F;&#x5F88;&#x91CD;&#x8981;&#x7684;&#x3002;</p>
</li>
<li><p><strong>&#x670D;&#x52A1;&#x76D1;&#x63A7;&#x4E0E;&#x7BA1;&#x7406;&#xFF0C;&#x5305;&#x62EC;&#x6570;&#x636E;&#x670D;&#x52A1;</strong></p>
<p> &#x968F;&#x7740;&#x6570;&#x636E;&#x670D;&#x52A1;&#x5668;&#x6570;&#x91CF;&#x7684;&#x589E;&#x52A0;&#xFF0C;&#x652F;&#x6301;&#x590D;&#x6742;&#x64CD;&#x4F5C;&#x3001;&#x6709;&#x76D1;&#x63A7;&#x548C;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#x5C31;&#x663E;&#x5F97;&#x975E;&#x5E38;&#x91CD;&#x8981;&#x4E86;&#x3002;<a href="https://www.nginx.com/products/" target="_blank">NGINX Plus</a> &#x5185;&#x7F6E;&#x4E86;&#x8FD9;&#x4E9B;&#x5DE5;&#x5177;&#x548C;&#x5E94;&#x7528;&#x6027;&#x80FD;&#x7BA1;&#x7406;&#x670D;&#x52A1;<a href="https://www.nginx.com/partners/" target="_blank">&#x5408;&#x4F5C;&#x65B9;</a>&#x7684;&#x63A5;&#x53E3;&#xFF0C;&#x5982; Data Dog&#x3001;Dynatrace &#x548C; New Relic&#x3002;</p>
</li>
</ol>
<p>&#x5FAE;&#x670D;&#x52A1;&#x76F8;&#x5173;&#x7684;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x793A;&#x4F8B;&#x53EF;&#x5728; NGINX <a href="https://www.nginx.com/blog/introducing-the-nginx-microservices-reference-architecture/" target="_blank">&#x5FAE;&#x670D;&#x52A1;&#x53C2;&#x8003;&#x67B6;&#x6784;</a>&#x7684;&#x4E09;&#x5927;&#x6A21;&#x578B;&#x4E2D;&#x627E;&#x5230;&#xFF0C;&#x5176;&#x4E3A;&#x4F60;&#x8BBE;&#x8BA1;&#x51B3;&#x7B56;&#x548C;&#x5B9E;&#x65BD;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;&#x8D77;&#x70B9;&#x3002;</p>
<footer class="page-footer"><span class="copyright">Copyright &#xA9; <a style="font-weight: bold" href="http://oopsguy.com" target="_blank">Oopsguy.com</a> 2017 all right reserved&#xFF0C;powered by Gitbook</span><span class="footer-modification">&#x6700;&#x540E;&#x66F4;&#x65B0;&#x65F6;&#x95F4;&#xFF1A;
2019-06-26 23:08:07
</span></footer>
</section>
</div>
</div>
</div>
<a href="4-service-discovery.html#microservices-in-action" class="navigation navigation-prev " aria-label="Previous page: 微服务实战:灵活的 NGINX">
<i class="fa fa-angle-left"></i>
</a>
<a href="5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management" class="navigation navigation-next " aria-label="Next page: 5.1、微服务与分布式数据管理问题">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"5、事件驱动数据管理","level":"1.7","depth":1,"next":{"title":"5.1、微服务与分布式数据管理问题","level":"1.7.1","depth":2,"anchor":"#microservices-and-the-problem-of-distributed-data-management","path":"5-event-driven-data-management-for-microservices.md","ref":"5-event-driven-data-management-for-microservices.md#microservices-and-the-problem-of-distributed-data-management","articles":[]},"previous":{"title":"微服务实战:灵活的 NGINX","level":"1.6.9","depth":2,"anchor":"#microservices-in-action","path":"4-service-discovery.md","ref":"4-service-discovery.md#microservices-in-action","articles":[]},"dir":"ltr"},"config":{"plugins":["github","splitter","tbfed-pagefooter","-lunr","-search","github-buttons","image-captions","-highlight","-livereload","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"github":{"url":"https://github.com/oopsguy/microservices-from-design-to-deployment-chinese"},"tbfed-pagefooter":{"copyright":"Copyright &copy <a style=\"font-weight: bold\" href=\"http://oopsguy.com\">Oopsguy.com</a> 2017","modify_label":"最后更新时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"github-buttons":{"repo":"oopsguy/microservices-from-design-to-deployment-chinese","types":["star","watch"],"size":"small"},"image-captions":{"caption":"_CAPTION_","variable_name":"_pictures"},"splitter":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"oopsguy.com","pdf":{"pageNumbers":true,"fontSize":16,"fontFamily":"Microsoft yahei","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":36,"bottom":36}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"1-introduction-to-microservices.html#fig1.3.1","level":"1.3","list_caption":"Figure: 图 1-1、一个简单的打车应用","alt":"图 1-1、一个简单的打车应用","nro":1,"url":"resources/1-1.png","index":1,"caption_template":"_CAPTION_","label":"图 1-1、一个简单的打车应用","attributes":{},"skip":false,"key":"1.3.1"},{"backlink":"1-introduction-to-microservices.html#fig1.3.2","level":"1.3","list_caption":"Figure: 图 1-2、一个单体应用分解成微服务","alt":"图 1-2、一个单体应用分解成微服务","nro":2,"url":"resources/1-2.png","index":2,"caption_template":"_CAPTION_","label":"图 1-2、一个单体应用分解成微服务","attributes":{},"skip":false,"key":"1.3.2"},{"backlink":"1-introduction-to-microservices.html#fig1.3.3","level":"1.3","list_caption":"Figure: 图 1-3、开发和交付中的伸缩立方Scale Cube","alt":"图 1-3、开发和交付中的伸缩立方Scale Cube","nro":3,"url":"resources/1-3.png","index":3,"caption_template":"_CAPTION_","label":"图 1-3、开发和交付中的伸缩立方Scale Cube","attributes":{},"skip":false,"key":"1.3.3"},{"backlink":"1-introduction-to-microservices.html#fig1.3.4","level":"1.3","list_caption":"Figure: 图 1-4、使用 Docker 部署 Trip Management 服务","alt":"图 1-4、使用 Docker 部署 Trip Management 服务","nro":4,"url":"resources/1-4.png","index":4,"caption_template":"_CAPTION_","label":"图 1-4、使用 Docker 部署 Trip Management 服务","attributes":{},"skip":false,"key":"1.3.4"},{"backlink":"1-introduction-to-microservices.html#fig1.3.5","level":"1.3","list_caption":"Figure: 图 1-5、打车应用的数据库架构","alt":"图 1-5、打车应用的数据库架构","nro":5,"url":"resources/1-5.png","index":5,"caption_template":"_CAPTION_","label":"图 1-5、打车应用的数据库架构","attributes":{},"skip":false,"key":"1.3.5"},{"backlink":"1-introduction-to-microservices.html#building-monolithic-applications#fig1.3.1.1","level":"1.3.1","list_caption":"Figure: 图 1-1、一个简单的打车应用","alt":"图 1-1、一个简单的打车应用","nro":6,"url":"resources/1-1.png","index":1,"caption_template":"_CAPTION_","label":"图 1-1、一个简单的打车应用","attributes":{},"skip":false,"key":"1.3.1.1"},{"backlink":"1-introduction-to-microservices.html#building-monolithic-applications#fig1.3.1.2","level":"1.3.1","list_caption":"Figure: 图 1-2、一个单体应用分解成微服务","alt":"图 1-2、一个单体应用分解成微服务","nro":7,"url":"resources/1-2.png","index":2,"caption_template":"_CAPTION_","label":"图 1-2、一个单体应用分解成微服务","attributes":{},"skip":false,"key":"1.3.1.2"},{"backlink":"1-introduction-to-microservices.html#building-monolithic-applications#fig1.3.1.3","level":"1.3.1","list_caption":"Figure: 图 1-3、开发和交付中的伸缩立方Scale Cube","alt":"图 1-3、开发和交付中的伸缩立方Scale Cube","nro":8,"url":"resources/1-3.png","index":3,"caption_template":"_CAPTION_","label":"图 1-3、开发和交付中的伸缩立方Scale Cube","attributes":{},"skip":false,"key":"1.3.1.3"},{"backlink":"1-introduction-to-microservices.html#building-monolithic-applications#fig1.3.1.4","level":"1.3.1","list_caption":"Figure: 图 1-4、使用 Docker 部署 Trip Management 服务","alt":"图 1-4、使用 Docker 部署 Trip Management 服务","nro":9,"url":"resources/1-4.png","index":4,"caption_template":"_CAPTION_","label":"图 1-4、使用 Docker 部署 Trip Management 服务","attributes":{},"skip":false,"key":"1.3.1.4"},{"backlink":"1-introduction-to-microservices.html#building-monolithic-applications#fig1.3.1.5","level":"1.3.1","list_caption":"Figure: 图 1-5、打车应用的数据库架构","alt":"图 1-5、打车应用的数据库架构","nro":10,"url":"resources/1-5.png","index":5,"caption_template":"_CAPTION_","label":"图 1-5、打车应用的数据库架构","attributes":{},"skip":false,"key":"1.3.1.5"},{"backlink":"1-introduction-to-microservices.html#marching-toward-monolithic-hell#fig1.3.2.1","level":"1.3.2","list_caption":"Figure: 图 1-1、一个简单的打车应用","alt":"图 1-1、一个简单的打车应用","nro":11,"url":"resources/1-1.png","index":1,"caption_template":"_CAPTION_","label":"图 1-1、一个简单的打车应用","attributes":{},"skip":false,"key":"1.3.2.1"},{"backlink":"1-introduction-to-microservices.html#marching-toward-monolithic-hell#fig1.3.2.2","level":"1.3.2","list_caption":"Figure: 图 1-2、一个单体应用分解成微服务","alt":"图 1-2、一个单体应用分解成微服务","nro":12,"url":"resources/1-2.png","index":2,"caption_template":"_CAPTION_","label":"图 1-2、一个单体应用分解成微服务","attributes":{},"skip":false,"key":"1.3.2.2"},{"backlink":"1-introduction-to-microservices.html#marching-toward-monolithic-hell#fig1.3.2.3","level":"1.3.2","list_caption":"Figure: 图 1-3、开发和交付中的伸缩立方Scale Cube","alt":"图 1-3、开发和交付中的伸缩立方Scale Cube","nro":13,"url":"resources/1-3.png","index":3,"caption_template":"_CAPTION_","label":"图 1-3、开发和交付中的伸缩立方Scale Cube","attributes":{},"skip":false,"key":"1.3.2.3"},{"backlink":"1-introduction-to-microservices.html#marching-toward-monolithic-hell#fig1.3.2.4","level":"1.3.2","list_caption":"Figure: 图 1-4、使用 Docker 部署 Trip Management 服务","alt":"图 1-4、使用 Docker 部署 Trip Management 服务","nro":14,"url":"resources/1-4.png","index":4,"caption_template":"_CAPTION_","label":"图 1-4、使用 Docker 部署 Trip Management 服务","attributes":{},"skip":false,"key":"1.3.2.4"},{"backlink":"1-introduction-to-microservices.html#marching-toward-monolithic-hell#fig1.3.2.5","level":"1.3.2","list_caption":"Figure: 图 1-5、打车应用的数据库架构","alt":"图 1-5、打车应用的数据库架构","nro":15,"url":"resources/1-5.png","index":5,"caption_template":"_CAPTION_","label":"图 1-5、打车应用的数据库架构","attributes":{},"skip":false,"key":"1.3.2.5"},{"backlink":"1-introduction-to-microservices.html#tackling-the-complexity#fig1.3.3.1","level":"1.3.3","list_caption":"Figure: 图 1-1、一个简单的打车应用","alt":"图 1-1、一个简单的打车应用","nro":16,"url":"resources/1-1.png","index":1,"caption_template":"_CAPTION_","label":"图 1-1、一个简单的打车应用","attributes":{},"skip":false,"key":"1.3.3.1"},{"backlink":"1-introduction-to-microservices.html#tackling-the-complexity#fig1.3.3.2","level":"1.3.3","list_caption":"Figure: 图 1-2、一个单体应用分解成微服务","alt":"图 1-2、一个单体应用分解成微服务","nro":17,"url":"resources/1-2.png","index":2,"caption_template":"_CAPTION_","label":"图 1-2、一个单体应用分解成微服务","attributes":{},"skip":false,"key":"1.3.3.2"},{"backlink":"1-introduction-to-microservices.html#tackling-the-complexity#fig1.3.3.3","level":"1.3.3","list_caption":"Figure: 图 1-3、开发和交付中的伸缩立方Scale Cube","alt":"图 1-3、开发和交付中的伸缩立方Scale Cube","nro":18,"url":"resources/1-3.png","index":3,"caption_template":"_CAPTION_","label":"图 1-3、开发和交付中的伸缩立方Scale Cube","attributes":{},"skip":false,"key":"1.3.3.3"},{"backlink":"1-introduction-to-microservices.html#tackling-the-complexity#fig1.3.3.4","level":"1.3.3","list_caption":"Figure: 图 1-4、使用 Docker 部署 Trip Management 服务","alt":"图 1-4、使用 Docker 部署 Trip Management 服务","nro":19,"url":"resources/1-4.png","index":4,"caption_template":"_CAPTION_","label":"图 1-4、使用 Docker 部署 Trip Management 服务","attributes":{},"skip":false,"key":"1.3.3.4"},{"backlink":"1-introduction-to-microservices.html#tackling-the-complexity#fig1.3.3.5","level":"1.3.3","list_caption":"Figure: 图 1-5、打车应用的数据库架构","alt":"图 1-5、打车应用的数据库架构","nro":20,"url":"resources/1-5.png","index":5,"caption_template":"_CAPTION_","label":"图 1-5、打车应用的数据库架构","attributes":{},"skip":false,"key":"1.3.3.5"},{"backlink":"1-introduction-to-microservices.html#the-benefits-of-microservices#fig1.3.4.1","level":"1.3.4","list_caption":"Figure: 图 1-1、一个简单的打车应用","alt":"图 1-1、一个简单的打车应用","nro":21,"url":"resources/1-1.png","index":1,"caption_template":"_CAPTION_","label":"图 1-1、一个简单的打车应用","attributes":{},"skip":false,"key":"1.3.4.1"},{"backlink":"1-introduction-to-microservices.html#the-benefits-of-microservices#fig1.3.4.2","level":"1.3.4","list_caption":"Figure: 图 1-2、一个单体应用分解成微服务","alt":"图 1-2、一个单体应用分解成微服务","nro":22,"url":"resources/1-2.png","index":2,"caption_template":"_CAPTION_","label":"图 1-2、一个单体应用分解成微服务","attributes":{},"skip":false,"key":"1.3.4.2"},{"backlink":"1-introduction-to-microservices.html#the-benefits-of-microservices#fig1.3.4.3","level":"1.3.4","list_caption":"Figure: 图 1-3、开发和交付中的伸缩立方Scale Cube","alt":"图 1-3、开发和交付中的伸缩立方Scale Cube","nro":23,"url":"resources/1-3.png","index":3,"caption_template":"_CAPTION_","label":"图 1-3、开发和交付中的伸缩立方Scale Cube","attributes":{},"skip":false,"key":"1.3.4.3"},{"backlink":"1-introduction-to-microservices.html#the-benefits-of-microservices#fig1.3.4.4","level":"1.3.4","list_caption":"Figure: 图 1-4、使用 Docker 部署 Trip Management 服务","alt":"图 1-4、使用 Docker 部署 Trip Management 服务","nro":24,"url":"resources/1-4.png","index":4,"caption_template":"_CAPTION_","label":"图 1-4、使用 Docker 部署 Trip Management 服务","attributes":{},"skip":false,"key":"1.3.4.4"},{"backlink":"1-introduction-to-microservices.html#the-benefits-of-microservices#fig1.3.4.5","level":"1.3.4","list_caption":"Figure: 图 1-5、打车应用的数据库架构","alt":"图 1-5、打车应用的数据库架构","nro":25,"url":"resources/1-5.png","index":5,"caption_template":"_CAPTION_","label":"图 1-5、打车应用的数据库架构","attributes":{},"skip":false,"key":"1.3.4.5"},{"backlink":"1-introduction-to-microservices.html#the-drawbacks-of-microservices#fig1.3.5.1","level":"1.3.5","list_caption":"Figure: 图 1-1、一个简单的打车应用","alt":"图 1-1、一个简单的打车应用","nro":26,"url":"resources/1-1.png","index":1,"caption_template":"_CAPTION_","label":"图 1-1、一个简单的打车应用","attributes":{},"skip":false,"key":"1.3.5.1"},{"backlink":"1-introduction-to-microservices.html#the-drawbacks-of-microservices#fig1.3.5.2","level":"1.3.5","list_caption":"Figure: 图 1-2、一个单体应用分解成微服务","alt":"图 1-2、一个单体应用分解成微服务","nro":27,"url":"resources/1-2.png","index":2,"caption_template":"_CAPTION_","label":"图 1-2、一个单体应用分解成微服务","attributes":{},"skip":false,"key":"1.3.5.2"},{"backlink":"1-introduction-to-microservices.html#the-drawbacks-of-microservices#fig1.3.5.3","level":"1.3.5","list_caption":"Figure: 图 1-3、开发和交付中的伸缩立方Scale Cube","alt":"图 1-3、开发和交付中的伸缩立方Scale Cube","nro":28,"url":"resources/1-3.png","index":3,"caption_template":"_CAPTION_","label":"图 1-3、开发和交付中的伸缩立方Scale Cube","attributes":{},"skip":false,"key":"1.3.5.3"},{"backlink":"1-introduction-to-microservices.html#the-drawbacks-of-microservices#fig1.3.5.4","level":"1.3.5","list_caption":"Figure: 图 1-4、使用 Docker 部署 Trip Management 服务","alt":"图 1-4、使用 Docker 部署 Trip Management 服务","nro":29,"url":"resources/1-4.png","index":4,"caption_template":"_CAPTION_","label":"图 1-4、使用 Docker 部署 Trip Management 服务","attributes":{},"skip":false,"key":"1.3.5.4"},{"backlink":"1-introduction-to-microservices.html#the-drawbacks-of-microservices#fig1.3.5.5","level":"1.3.5","list_caption":"Figure: 图 1-5、打车应用的数据库架构","alt":"图 1-5、打车应用的数据库架构","nro":30,"url":"resources/1-5.png","index":5,"caption_template":"_CAPTION_","label":"图 1-5、打车应用的数据库架构","attributes":{},"skip":false,"key":"1.3.5.5"},{"backlink":"1-introduction-to-microservices.html#summary#fig1.3.6.1","level":"1.3.6","list_caption":"Figure: 图 1-1、一个简单的打车应用","alt":"图 1-1、一个简单的打车应用","nro":31,"url":"resources/1-1.png","index":1,"caption_template":"_CAPTION_","label":"图 1-1、一个简单的打车应用","attributes":{},"skip":false,"key":"1.3.6.1"},{"backlink":"1-introduction-to-microservices.html#summary#fig1.3.6.2","level":"1.3.6","list_caption":"Figure: 图 1-2、一个单体应用分解成微服务","alt":"图 1-2、一个单体应用分解成微服务","nro":32,"url":"resources/1-2.png","index":2,"caption_template":"_CAPTION_","label":"图 1-2、一个单体应用分解成微服务","attributes":{},"skip":false,"key":"1.3.6.2"},{"backlink":"1-introduction-to-microservices.html#summary#fig1.3.6.3","level":"1.3.6","list_caption":"Figure: 图 1-3、开发和交付中的伸缩立方Scale Cube","alt":"图 1-3、开发和交付中的伸缩立方Scale Cube","nro":33,"url":"resources/1-3.png","index":3,"caption_template":"_CAPTION_","label":"图 1-3、开发和交付中的伸缩立方Scale Cube","attributes":{},"skip":false,"key":"1.3.6.3"},{"backlink":"1-introduction-to-microservices.html#summary#fig1.3.6.4","level":"1.3.6","list_caption":"Figure: 图 1-4、使用 Docker 部署 Trip Management 服务","alt":"图 1-4、使用 Docker 部署 Trip Management 服务","nro":34,"url":"resources/1-4.png","index":4,"caption_template":"_CAPTION_","label":"图 1-4、使用 Docker 部署 Trip Management 服务","attributes":{},"skip":false,"key":"1.3.6.4"},{"backlink":"1-introduction-to-microservices.html#summary#fig1.3.6.5","level":"1.3.6","list_caption":"Figure: 图 1-5、打车应用的数据库架构","alt":"图 1-5、打车应用的数据库架构","nro":35,"url":"resources/1-5.png","index":5,"caption_template":"_CAPTION_","label":"图 1-5、打车应用的数据库架构","attributes":{},"skip":false,"key":"1.3.6.5"},{"backlink":"1-introduction-to-microservices.html#microservices-in-action#fig1.3.7.1","level":"1.3.7","list_caption":"Figure: 图 1-1、一个简单的打车应用","alt":"图 1-1、一个简单的打车应用","nro":36,"url":"resources/1-1.png","index":1,"caption_template":"_CAPTION_","label":"图 1-1、一个简单的打车应用","attributes":{},"skip":false,"key":"1.3.7.1"},{"backlink":"1-introduction-to-microservices.html#microservices-in-action#fig1.3.7.2","level":"1.3.7","list_caption":"Figure: 图 1-2、一个单体应用分解成微服务","alt":"图 1-2、一个单体应用分解成微服务","nro":37,"url":"resources/1-2.png","index":2,"caption_template":"_CAPTION_","label":"图 1-2、一个单体应用分解成微服务","attributes":{},"skip":false,"key":"1.3.7.2"},{"backlink":"1-introduction-to-microservices.html#microservices-in-action#fig1.3.7.3","level":"1.3.7","list_caption":"Figure: 图 1-3、开发和交付中的伸缩立方Scale Cube","alt":"图 1-3、开发和交付中的伸缩立方Scale Cube","nro":38,"url":"resources/1-3.png","index":3,"caption_template":"_CAPTION_","label":"图 1-3、开发和交付中的伸缩立方Scale Cube","attributes":{},"skip":false,"key":"1.3.7.3"},{"backlink":"1-introduction-to-microservices.html#microservices-in-action#fig1.3.7.4","level":"1.3.7","list_caption":"Figure: 图 1-4、使用 Docker 部署 Trip Management 服务","alt":"图 1-4、使用 Docker 部署 Trip Management 服务","nro":39,"url":"resources/1-4.png","index":4,"caption_template":"_CAPTION_","label":"图 1-4、使用 Docker 部署 Trip Management 服务","attributes":{},"skip":false,"key":"1.3.7.4"},{"backlink":"1-introduction-to-microservices.html#microservices-in-action#fig1.3.7.5","level":"1.3.7","list_caption":"Figure: 图 1-5、打车应用的数据库架构","alt":"图 1-5、打车应用的数据库架构","nro":40,"url":"resources/1-5.png","index":5,"caption_template":"_CAPTION_","label":"图 1-5、打车应用的数据库架构","attributes":{},"skip":false,"key":"1.3.7.5"},{"backlink":"2-using-an-api-gateway.html#fig1.4.1","level":"1.4","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":41,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.1"},{"backlink":"2-using-an-api-gateway.html#fig1.4.2","level":"1.4","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":42,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.2"},{"backlink":"2-using-an-api-gateway.html#fig1.4.3","level":"1.4","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":43,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.3"},{"backlink":"2-using-an-api-gateway.html#introduction#fig1.4.1.1","level":"1.4.1","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":44,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.1.1"},{"backlink":"2-using-an-api-gateway.html#introduction#fig1.4.1.2","level":"1.4.1","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":45,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.1.2"},{"backlink":"2-using-an-api-gateway.html#introduction#fig1.4.1.3","level":"1.4.1","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":46,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.1.3"},{"backlink":"2-using-an-api-gateway.html#direct-client-to-microservice-communication#fig1.4.2.1","level":"1.4.2","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":47,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.2.1"},{"backlink":"2-using-an-api-gateway.html#direct-client-to-microservice-communication#fig1.4.2.2","level":"1.4.2","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":48,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.2.2"},{"backlink":"2-using-an-api-gateway.html#direct-client-to-microservice-communication#fig1.4.2.3","level":"1.4.2","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":49,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.2.3"},{"backlink":"2-using-an-api-gateway.html#using-an-api-gateway#fig1.4.3.1","level":"1.4.3","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":50,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.3.1"},{"backlink":"2-using-an-api-gateway.html#using-an-api-gateway#fig1.4.3.2","level":"1.4.3","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":51,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.3.2"},{"backlink":"2-using-an-api-gateway.html#using-an-api-gateway#fig1.4.3.3","level":"1.4.3","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":52,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.3.3"},{"backlink":"2-using-an-api-gateway.html#benefits-and-drawbacks-of-an-api-gateway#fig1.4.4.1","level":"1.4.4","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":53,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.4.1"},{"backlink":"2-using-an-api-gateway.html#benefits-and-drawbacks-of-an-api-gateway#fig1.4.4.2","level":"1.4.4","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":54,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.4.2"},{"backlink":"2-using-an-api-gateway.html#benefits-and-drawbacks-of-an-api-gateway#fig1.4.4.3","level":"1.4.4","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":55,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.4.3"},{"backlink":"2-using-an-api-gateway.html#implementing-an-api-gateway#fig1.4.5.1","level":"1.4.5","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":56,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.5.1"},{"backlink":"2-using-an-api-gateway.html#implementing-an-api-gateway#fig1.4.5.2","level":"1.4.5","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":57,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.5.2"},{"backlink":"2-using-an-api-gateway.html#implementing-an-api-gateway#fig1.4.5.3","level":"1.4.5","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":58,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.5.3"},{"backlink":"2-using-an-api-gateway.html#performance-and-scalability#fig1.4.5.1.1","level":"1.4.5.1","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":59,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.5.1.1"},{"backlink":"2-using-an-api-gateway.html#performance-and-scalability#fig1.4.5.1.2","level":"1.4.5.1","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":60,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.5.1.2"},{"backlink":"2-using-an-api-gateway.html#performance-and-scalability#fig1.4.5.1.3","level":"1.4.5.1","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":61,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.5.1.3"},{"backlink":"2-using-an-api-gateway.html#using-a-reactive-programming-model#fig1.4.5.2.1","level":"1.4.5.2","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":62,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.5.2.1"},{"backlink":"2-using-an-api-gateway.html#using-a-reactive-programming-model#fig1.4.5.2.2","level":"1.4.5.2","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":63,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.5.2.2"},{"backlink":"2-using-an-api-gateway.html#using-a-reactive-programming-model#fig1.4.5.2.3","level":"1.4.5.2","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":64,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.5.2.3"},{"backlink":"2-using-an-api-gateway.html#service-invocation#fig1.4.5.3.1","level":"1.4.5.3","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":65,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.5.3.1"},{"backlink":"2-using-an-api-gateway.html#service-invocation#fig1.4.5.3.2","level":"1.4.5.3","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":66,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.5.3.2"},{"backlink":"2-using-an-api-gateway.html#service-invocation#fig1.4.5.3.3","level":"1.4.5.3","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":67,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.5.3.3"},{"backlink":"2-using-an-api-gateway.html#service-discovery#fig1.4.5.4.1","level":"1.4.5.4","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":68,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.5.4.1"},{"backlink":"2-using-an-api-gateway.html#service-discovery#fig1.4.5.4.2","level":"1.4.5.4","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":69,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.5.4.2"},{"backlink":"2-using-an-api-gateway.html#service-discovery#fig1.4.5.4.3","level":"1.4.5.4","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":70,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.5.4.3"},{"backlink":"2-using-an-api-gateway.html#handling-partial-failures#fig1.4.5.5.1","level":"1.4.5.5","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":71,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.5.5.1"},{"backlink":"2-using-an-api-gateway.html#handling-partial-failures#fig1.4.5.5.2","level":"1.4.5.5","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":72,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.5.5.2"},{"backlink":"2-using-an-api-gateway.html#handling-partial-failures#fig1.4.5.5.3","level":"1.4.5.5","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":73,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.5.5.3"},{"backlink":"2-using-an-api-gateway.html#summary#fig1.4.6.1","level":"1.4.6","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":74,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.6.1"},{"backlink":"2-using-an-api-gateway.html#summary#fig1.4.6.2","level":"1.4.6","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":75,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.6.2"},{"backlink":"2-using-an-api-gateway.html#summary#fig1.4.6.3","level":"1.4.6","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":76,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.6.3"},{"backlink":"2-using-an-api-gateway.html#microservices-in-action#fig1.4.7.1","level":"1.4.7","list_caption":"Figure: 图 2-1、一个简单的购物应用","alt":"图 2-1、一个简单的购物应用","nro":77,"url":"resources/2-1.png","index":1,"caption_template":"_CAPTION_","label":"图 2-1、一个简单的购物应用","attributes":{},"skip":false,"key":"1.4.7.1"},{"backlink":"2-using-an-api-gateway.html#microservices-in-action#fig1.4.7.2","level":"1.4.7","list_caption":"Figure: 图 2-2、将移动客户端的需求映射到相关微服务","alt":"图 2-2、将移动客户端的需求映射到相关微服务","nro":78,"url":"resources/2-2.png","index":2,"caption_template":"_CAPTION_","label":"图 2-2、将移动客户端的需求映射到相关微服务","attributes":{},"skip":false,"key":"1.4.7.2"},{"backlink":"2-using-an-api-gateway.html#microservices-in-action#fig1.4.7.3","level":"1.4.7","list_caption":"Figure: 使用 API 网关的微服务","alt":"使用 API 网关的微服务","nro":79,"url":"resources/2-3.png","index":3,"caption_template":"_CAPTION_","label":"使用 API 网关的微服务","attributes":{},"skip":false,"key":"1.4.7.3"},{"backlink":"3-inter-process-communication.html#fig1.5.1","level":"1.5","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":80,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.1"},{"backlink":"3-inter-process-communication.html#fig1.5.2","level":"1.5","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":81,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.2"},{"backlink":"3-inter-process-communication.html#fig1.5.3","level":"1.5","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":82,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.3"},{"backlink":"3-inter-process-communication.html#fig1.5.4","level":"1.5","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":83,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.4"},{"backlink":"3-inter-process-communication.html#fig1.5.5","level":"1.5","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":84,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.5"},{"backlink":"3-inter-process-communication.html#introduction#fig1.5.1.1","level":"1.5.1","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":85,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.1.1"},{"backlink":"3-inter-process-communication.html#introduction#fig1.5.1.2","level":"1.5.1","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":86,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.1.2"},{"backlink":"3-inter-process-communication.html#introduction#fig1.5.1.3","level":"1.5.1","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":87,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.1.3"},{"backlink":"3-inter-process-communication.html#introduction#fig1.5.1.4","level":"1.5.1","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":88,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.1.4"},{"backlink":"3-inter-process-communication.html#introduction#fig1.5.1.5","level":"1.5.1","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":89,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.1.5"},{"backlink":"3-inter-process-communication.html#interaction-styles#fig1.5.2.1","level":"1.5.2","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":90,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.2.1"},{"backlink":"3-inter-process-communication.html#interaction-styles#fig1.5.2.2","level":"1.5.2","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":91,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.2.2"},{"backlink":"3-inter-process-communication.html#interaction-styles#fig1.5.2.3","level":"1.5.2","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":92,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.2.3"},{"backlink":"3-inter-process-communication.html#interaction-styles#fig1.5.2.4","level":"1.5.2","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":93,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.2.4"},{"backlink":"3-inter-process-communication.html#interaction-styles#fig1.5.2.5","level":"1.5.2","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":94,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.2.5"},{"backlink":"3-inter-process-communication.html#defining-apis#fig1.5.3.1","level":"1.5.3","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":95,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.3.1"},{"backlink":"3-inter-process-communication.html#defining-apis#fig1.5.3.2","level":"1.5.3","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":96,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.3.2"},{"backlink":"3-inter-process-communication.html#defining-apis#fig1.5.3.3","level":"1.5.3","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":97,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.3.3"},{"backlink":"3-inter-process-communication.html#defining-apis#fig1.5.3.4","level":"1.5.3","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":98,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.3.4"},{"backlink":"3-inter-process-communication.html#defining-apis#fig1.5.3.5","level":"1.5.3","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":99,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.3.5"},{"backlink":"3-inter-process-communication.html#evolving-apis#fig1.5.4.1","level":"1.5.4","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":100,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.4.1"},{"backlink":"3-inter-process-communication.html#evolving-apis#fig1.5.4.2","level":"1.5.4","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":101,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.4.2"},{"backlink":"3-inter-process-communication.html#evolving-apis#fig1.5.4.3","level":"1.5.4","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":102,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.4.3"},{"backlink":"3-inter-process-communication.html#evolving-apis#fig1.5.4.4","level":"1.5.4","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":103,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.4.4"},{"backlink":"3-inter-process-communication.html#evolving-apis#fig1.5.4.5","level":"1.5.4","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":104,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.4.5"},{"backlink":"3-inter-process-communication.html#handling-partial-failure#fig1.5.5.1","level":"1.5.5","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":105,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.5.1"},{"backlink":"3-inter-process-communication.html#handling-partial-failure#fig1.5.5.2","level":"1.5.5","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":106,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.5.2"},{"backlink":"3-inter-process-communication.html#handling-partial-failure#fig1.5.5.3","level":"1.5.5","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":107,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.5.3"},{"backlink":"3-inter-process-communication.html#handling-partial-failure#fig1.5.5.4","level":"1.5.5","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":108,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.5.4"},{"backlink":"3-inter-process-communication.html#handling-partial-failure#fig1.5.5.5","level":"1.5.5","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":109,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.5.5"},{"backlink":"3-inter-process-communication.html#ipc-technologies#fig1.5.6.1","level":"1.5.6","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":110,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.6.1"},{"backlink":"3-inter-process-communication.html#ipc-technologies#fig1.5.6.2","level":"1.5.6","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":111,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.6.2"},{"backlink":"3-inter-process-communication.html#ipc-technologies#fig1.5.6.3","level":"1.5.6","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":112,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.6.3"},{"backlink":"3-inter-process-communication.html#ipc-technologies#fig1.5.6.4","level":"1.5.6","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":113,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.6.4"},{"backlink":"3-inter-process-communication.html#ipc-technologies#fig1.5.6.5","level":"1.5.6","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":114,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.6.5"},{"backlink":"3-inter-process-communication.html#asynchronous-message-based-communication#fig1.5.7.1","level":"1.5.7","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":115,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.7.1"},{"backlink":"3-inter-process-communication.html#asynchronous-message-based-communication#fig1.5.7.2","level":"1.5.7","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":116,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.7.2"},{"backlink":"3-inter-process-communication.html#asynchronous-message-based-communication#fig1.5.7.3","level":"1.5.7","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":117,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.7.3"},{"backlink":"3-inter-process-communication.html#asynchronous-message-based-communication#fig1.5.7.4","level":"1.5.7","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":118,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.7.4"},{"backlink":"3-inter-process-communication.html#asynchronous-message-based-communication#fig1.5.7.5","level":"1.5.7","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":119,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.7.5"},{"backlink":"3-inter-process-communication.html#synchronous-request-response-ipc#fig1.5.8.1","level":"1.5.8","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":120,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.8.1"},{"backlink":"3-inter-process-communication.html#synchronous-request-response-ipc#fig1.5.8.2","level":"1.5.8","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":121,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.8.2"},{"backlink":"3-inter-process-communication.html#synchronous-request-response-ipc#fig1.5.8.3","level":"1.5.8","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":122,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.8.3"},{"backlink":"3-inter-process-communication.html#synchronous-request-response-ipc#fig1.5.8.4","level":"1.5.8","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":123,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.8.4"},{"backlink":"3-inter-process-communication.html#synchronous-request-response-ipc#fig1.5.8.5","level":"1.5.8","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":124,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.8.5"},{"backlink":"3-inter-process-communication.html#rest#fig1.5.8.1.1","level":"1.5.8.1","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":125,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.8.1.1"},{"backlink":"3-inter-process-communication.html#rest#fig1.5.8.1.2","level":"1.5.8.1","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":126,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.8.1.2"},{"backlink":"3-inter-process-communication.html#rest#fig1.5.8.1.3","level":"1.5.8.1","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":127,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.8.1.3"},{"backlink":"3-inter-process-communication.html#rest#fig1.5.8.1.4","level":"1.5.8.1","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":128,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.8.1.4"},{"backlink":"3-inter-process-communication.html#rest#fig1.5.8.1.5","level":"1.5.8.1","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":129,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.8.1.5"},{"backlink":"3-inter-process-communication.html#thrift#fig1.5.8.2.1","level":"1.5.8.2","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":130,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.8.2.1"},{"backlink":"3-inter-process-communication.html#thrift#fig1.5.8.2.2","level":"1.5.8.2","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":131,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.8.2.2"},{"backlink":"3-inter-process-communication.html#thrift#fig1.5.8.2.3","level":"1.5.8.2","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":132,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.8.2.3"},{"backlink":"3-inter-process-communication.html#thrift#fig1.5.8.2.4","level":"1.5.8.2","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":133,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.8.2.4"},{"backlink":"3-inter-process-communication.html#thrift#fig1.5.8.2.5","level":"1.5.8.2","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":134,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.8.2.5"},{"backlink":"3-inter-process-communication.html#message-formats#fig1.5.9.1","level":"1.5.9","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":135,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.9.1"},{"backlink":"3-inter-process-communication.html#message-formats#fig1.5.9.2","level":"1.5.9","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":136,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.9.2"},{"backlink":"3-inter-process-communication.html#message-formats#fig1.5.9.3","level":"1.5.9","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":137,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.9.3"},{"backlink":"3-inter-process-communication.html#message-formats#fig1.5.9.4","level":"1.5.9","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":138,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.9.4"},{"backlink":"3-inter-process-communication.html#message-formats#fig1.5.9.5","level":"1.5.9","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":139,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.9.5"},{"backlink":"3-inter-process-communication.html#summary#fig1.5.10.1","level":"1.5.10","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":140,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.10.1"},{"backlink":"3-inter-process-communication.html#summary#fig1.5.10.2","level":"1.5.10","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":141,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.10.2"},{"backlink":"3-inter-process-communication.html#summary#fig1.5.10.3","level":"1.5.10","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":142,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.10.3"},{"backlink":"3-inter-process-communication.html#summary#fig1.5.10.4","level":"1.5.10","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":143,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.10.4"},{"backlink":"3-inter-process-communication.html#summary#fig1.5.10.5","level":"1.5.10","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":144,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.10.5"},{"backlink":"3-inter-process-communication.html#microservices-in-action#fig1.5.11.1","level":"1.5.11","list_caption":"Figure: 使用进程间通信交互的微服务","alt":"使用进程间通信交互的微服务","nro":145,"url":"resources/3-1.png","index":1,"caption_template":"_CAPTION_","label":"使用进程间通信交互的微服务","attributes":{},"skip":false,"key":"1.5.11.1"},{"backlink":"3-inter-process-communication.html#microservices-in-action#fig1.5.11.2","level":"1.5.11","list_caption":"Figure: 使用了多种 IPC 机制的服务交互","alt":"使用了多种 IPC 机制的服务交互","nro":146,"url":"resources/3-2.png","index":2,"caption_template":"_CAPTION_","label":"使用了多种 IPC 机制的服务交互","attributes":{},"skip":false,"key":"1.5.11.2"},{"backlink":"3-inter-process-communication.html#microservices-in-action#fig1.5.11.3","level":"1.5.11","list_caption":"Figure: 因无响应服务引起的线程阻塞","alt":"因无响应服务引起的线程阻塞","nro":147,"url":"resources/3-3.png","index":3,"caption_template":"_CAPTION_","label":"因无响应服务引起的线程阻塞","attributes":{},"skip":false,"key":"1.5.11.3"},{"backlink":"3-inter-process-communication.html#microservices-in-action#fig1.5.11.4","level":"1.5.11","list_caption":"Figure: 使用了发布/订阅通道的打车应用","alt":"使用了发布/订阅通道的打车应用","nro":148,"url":"resources/3-4.png","index":4,"caption_template":"_CAPTION_","label":"使用了发布/订阅通道的打车应用","attributes":{},"skip":false,"key":"1.5.11.4"},{"backlink":"3-inter-process-communication.html#microservices-in-action#fig1.5.11.5","level":"1.5.11","list_caption":"Figure: 使用了 RESTful 交互的打车应用","alt":"使用了 RESTful 交互的打车应用","nro":149,"url":"resources/3-5.png","index":5,"caption_template":"_CAPTION_","label":"使用了 RESTful 交互的打车应用","attributes":{},"skip":false,"key":"1.5.11.5"},{"backlink":"4-service-discovery.html#fig1.6.1","level":"1.6","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":150,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.1"},{"backlink":"4-service-discovery.html#fig1.6.2","level":"1.6","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":151,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.2"},{"backlink":"4-service-discovery.html#fig1.6.3","level":"1.6","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":152,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.3"},{"backlink":"4-service-discovery.html#fig1.6.4","level":"1.6","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":153,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.4"},{"backlink":"4-service-discovery.html#fig1.6.5","level":"1.6","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":154,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.5"},{"backlink":"4-service-discovery.html#why-use-service-discovery#fig1.6.1.1","level":"1.6.1","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":155,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.1.1"},{"backlink":"4-service-discovery.html#why-use-service-discovery#fig1.6.1.2","level":"1.6.1","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":156,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.1.2"},{"backlink":"4-service-discovery.html#why-use-service-discovery#fig1.6.1.3","level":"1.6.1","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":157,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.1.3"},{"backlink":"4-service-discovery.html#why-use-service-discovery#fig1.6.1.4","level":"1.6.1","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":158,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.1.4"},{"backlink":"4-service-discovery.html#why-use-service-discovery#fig1.6.1.5","level":"1.6.1","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":159,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.1.5"},{"backlink":"4-service-discovery.html#the-client-side-discovery-pattern#fig1.6.2.1","level":"1.6.2","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":160,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.2.1"},{"backlink":"4-service-discovery.html#the-client-side-discovery-pattern#fig1.6.2.2","level":"1.6.2","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":161,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.2.2"},{"backlink":"4-service-discovery.html#the-client-side-discovery-pattern#fig1.6.2.3","level":"1.6.2","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":162,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.2.3"},{"backlink":"4-service-discovery.html#the-client-side-discovery-pattern#fig1.6.2.4","level":"1.6.2","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":163,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.2.4"},{"backlink":"4-service-discovery.html#the-client-side-discovery-pattern#fig1.6.2.5","level":"1.6.2","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":164,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.2.5"},{"backlink":"4-service-discovery.html#the-server-side-discovery-pattern#fig1.6.3.1","level":"1.6.3","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":165,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.3.1"},{"backlink":"4-service-discovery.html#the-server-side-discovery-pattern#fig1.6.3.2","level":"1.6.3","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":166,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.3.2"},{"backlink":"4-service-discovery.html#the-server-side-discovery-pattern#fig1.6.3.3","level":"1.6.3","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":167,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.3.3"},{"backlink":"4-service-discovery.html#the-server-side-discovery-pattern#fig1.6.3.4","level":"1.6.3","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":168,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.3.4"},{"backlink":"4-service-discovery.html#the-server-side-discovery-pattern#fig1.6.3.5","level":"1.6.3","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":169,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.3.5"},{"backlink":"4-service-discovery.html#the-service-registry#fig1.6.4.1","level":"1.6.4","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":170,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.4.1"},{"backlink":"4-service-discovery.html#the-service-registry#fig1.6.4.2","level":"1.6.4","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":171,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.4.2"},{"backlink":"4-service-discovery.html#the-service-registry#fig1.6.4.3","level":"1.6.4","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":172,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.4.3"},{"backlink":"4-service-discovery.html#the-service-registry#fig1.6.4.4","level":"1.6.4","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":173,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.4.4"},{"backlink":"4-service-discovery.html#the-service-registry#fig1.6.4.5","level":"1.6.4","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":174,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.4.5"},{"backlink":"4-service-discovery.html#service-registration-options#fig1.6.5.1","level":"1.6.5","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":175,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.5.1"},{"backlink":"4-service-discovery.html#service-registration-options#fig1.6.5.2","level":"1.6.5","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":176,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.5.2"},{"backlink":"4-service-discovery.html#service-registration-options#fig1.6.5.3","level":"1.6.5","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":177,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.5.3"},{"backlink":"4-service-discovery.html#service-registration-options#fig1.6.5.4","level":"1.6.5","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":178,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.5.4"},{"backlink":"4-service-discovery.html#service-registration-options#fig1.6.5.5","level":"1.6.5","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":179,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.5.5"},{"backlink":"4-service-discovery.html#the-self-registration-pattern#fig1.6.6.1","level":"1.6.6","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":180,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.6.1"},{"backlink":"4-service-discovery.html#the-self-registration-pattern#fig1.6.6.2","level":"1.6.6","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":181,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.6.2"},{"backlink":"4-service-discovery.html#the-self-registration-pattern#fig1.6.6.3","level":"1.6.6","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":182,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.6.3"},{"backlink":"4-service-discovery.html#the-self-registration-pattern#fig1.6.6.4","level":"1.6.6","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":183,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.6.4"},{"backlink":"4-service-discovery.html#the-self-registration-pattern#fig1.6.6.5","level":"1.6.6","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":184,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.6.5"},{"backlink":"4-service-discovery.html#the-third-party-registration-pattern#fig1.6.7.1","level":"1.6.7","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":185,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.7.1"},{"backlink":"4-service-discovery.html#the-third-party-registration-pattern#fig1.6.7.2","level":"1.6.7","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":186,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.7.2"},{"backlink":"4-service-discovery.html#the-third-party-registration-pattern#fig1.6.7.3","level":"1.6.7","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":187,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.7.3"},{"backlink":"4-service-discovery.html#the-third-party-registration-pattern#fig1.6.7.4","level":"1.6.7","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":188,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.7.4"},{"backlink":"4-service-discovery.html#the-third-party-registration-pattern#fig1.6.7.5","level":"1.6.7","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":189,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.7.5"},{"backlink":"4-service-discovery.html#summary#fig1.6.8.1","level":"1.6.8","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":190,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.8.1"},{"backlink":"4-service-discovery.html#summary#fig1.6.8.2","level":"1.6.8","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":191,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.8.2"},{"backlink":"4-service-discovery.html#summary#fig1.6.8.3","level":"1.6.8","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":192,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.8.3"},{"backlink":"4-service-discovery.html#summary#fig1.6.8.4","level":"1.6.8","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":193,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.8.4"},{"backlink":"4-service-discovery.html#summary#fig1.6.8.5","level":"1.6.8","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":194,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.8.5"},{"backlink":"4-service-discovery.html#microservices-in-action#fig1.6.9.1","level":"1.6.9","list_caption":"Figure: 图 4-1、需要服务寻找帮助的客户端或 API 网关","alt":"图 4-1、需要服务寻找帮助的客户端或 API 网关","nro":195,"url":"resources/4-1.png","index":1,"caption_template":"_CAPTION_","label":"图 4-1、需要服务寻找帮助的客户端或 API 网关","attributes":{},"skip":false,"key":"1.6.9.1"},{"backlink":"4-service-discovery.html#microservices-in-action#fig1.6.9.2","level":"1.6.9","list_caption":"Figure: 客户端可以承担发现服务任务","alt":"客户端可以承担发现服务任务","nro":196,"url":"resources/4-2.png","index":2,"caption_template":"_CAPTION_","label":"客户端可以承担发现服务任务","attributes":{},"skip":false,"key":"1.6.9.2"},{"backlink":"4-service-discovery.html#microservices-in-action#fig1.6.9.3","level":"1.6.9","list_caption":"Figure: 服务器间也可以处理服务发现","alt":"服务器间也可以处理服务发现","nro":197,"url":"resources/4-3.png","index":3,"caption_template":"_CAPTION_","label":"服务器间也可以处理服务发现","attributes":{},"skip":false,"key":"1.6.9.3"},{"backlink":"4-service-discovery.html#microservices-in-action#fig1.6.9.4","level":"1.6.9","list_caption":"Figure: 图 4-4、服务可以自我处理注册","alt":"图 4-4、服务可以自我处理注册","nro":198,"url":"resources/4-4.png","index":4,"caption_template":"_CAPTION_","label":"图 4-4、服务可以自我处理注册","attributes":{},"skip":false,"key":"1.6.9.4"},{"backlink":"4-service-discovery.html#microservices-in-action#fig1.6.9.5","level":"1.6.9","list_caption":"Figure: 图 4-5、一个单独的服务注册器可负责注册其他服务","alt":"图 4-5、一个单独的服务注册器可负责注册其他服务","nro":199,"url":"resources/4-5.png","index":5,"caption_template":"_CAPTION_","label":"图 4-5、一个单独的服务注册器可负责注册其他服务","attributes":{},"skip":false,"key":"1.6.9.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#fig1.7.1","level":"1.7","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":200,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#fig1.7.2","level":"1.7","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":201,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#fig1.7.3","level":"1.7","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":202,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#fig1.7.4","level":"1.7","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":203,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#fig1.7.5","level":"1.7","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":204,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#fig1.7.6","level":"1.7","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":205,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#fig1.7.7","level":"1.7","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":206,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#fig1.7.8","level":"1.7","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":207,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.8"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management#fig1.7.1.1","level":"1.7.1","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":208,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.1.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management#fig1.7.1.2","level":"1.7.1","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":209,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.1.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management#fig1.7.1.3","level":"1.7.1","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":210,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.1.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management#fig1.7.1.4","level":"1.7.1","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":211,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.1.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management#fig1.7.1.5","level":"1.7.1","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":212,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.1.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management#fig1.7.1.6","level":"1.7.1","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":213,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.1.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management#fig1.7.1.7","level":"1.7.1","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":214,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.1.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-and-the-problem-of-distributed-data-management#fig1.7.1.8","level":"1.7.1","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":215,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.1.8"},{"backlink":"5-event-driven-data-management-for-microservices.html#event-driven-architecture#fig1.7.2.1","level":"1.7.2","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":216,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.2.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#event-driven-architecture#fig1.7.2.2","level":"1.7.2","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":217,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.2.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#event-driven-architecture#fig1.7.2.3","level":"1.7.2","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":218,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.2.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#event-driven-architecture#fig1.7.2.4","level":"1.7.2","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":219,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.2.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#event-driven-architecture#fig1.7.2.5","level":"1.7.2","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":220,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.2.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#event-driven-architecture#fig1.7.2.6","level":"1.7.2","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":221,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.2.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#event-driven-architecture#fig1.7.2.7","level":"1.7.2","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":222,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.2.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#event-driven-architecture#fig1.7.2.8","level":"1.7.2","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":223,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.2.8"},{"backlink":"5-event-driven-data-management-for-microservices.html#achieving-atomicity#fig1.7.3.1","level":"1.7.3","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":224,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.3.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#achieving-atomicity#fig1.7.3.2","level":"1.7.3","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":225,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.3.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#achieving-atomicity#fig1.7.3.3","level":"1.7.3","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":226,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.3.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#achieving-atomicity#fig1.7.3.4","level":"1.7.3","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":227,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.3.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#achieving-atomicity#fig1.7.3.5","level":"1.7.3","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":228,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.3.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#achieving-atomicity#fig1.7.3.6","level":"1.7.3","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":229,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.3.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#achieving-atomicity#fig1.7.3.7","level":"1.7.3","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":230,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.3.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#achieving-atomicity#fig1.7.3.8","level":"1.7.3","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":231,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.3.8"},{"backlink":"5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions#fig1.7.4.1","level":"1.7.4","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":232,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.4.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions#fig1.7.4.2","level":"1.7.4","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":233,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.4.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions#fig1.7.4.3","level":"1.7.4","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":234,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.4.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions#fig1.7.4.4","level":"1.7.4","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":235,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.4.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions#fig1.7.4.5","level":"1.7.4","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":236,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.4.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions#fig1.7.4.6","level":"1.7.4","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":237,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.4.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions#fig1.7.4.7","level":"1.7.4","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":238,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.4.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#publishing-events-using-local-transactions#fig1.7.4.8","level":"1.7.4","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":239,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.4.8"},{"backlink":"5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log#fig1.7.5.1","level":"1.7.5","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":240,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.5.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log#fig1.7.5.2","level":"1.7.5","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":241,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.5.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log#fig1.7.5.3","level":"1.7.5","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":242,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.5.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log#fig1.7.5.4","level":"1.7.5","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":243,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.5.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log#fig1.7.5.5","level":"1.7.5","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":244,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.5.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log#fig1.7.5.6","level":"1.7.5","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":245,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.5.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log#fig1.7.5.7","level":"1.7.5","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":246,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.5.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#mining-a-database-transaction-log#fig1.7.5.8","level":"1.7.5","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":247,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.5.8"},{"backlink":"5-event-driven-data-management-for-microservices.html#using-event-sourcing#fig1.7.6.1","level":"1.7.6","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":248,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.6.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#using-event-sourcing#fig1.7.6.2","level":"1.7.6","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":249,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.6.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#using-event-sourcing#fig1.7.6.3","level":"1.7.6","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":250,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.6.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#using-event-sourcing#fig1.7.6.4","level":"1.7.6","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":251,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.6.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#using-event-sourcing#fig1.7.6.5","level":"1.7.6","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":252,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.6.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#using-event-sourcing#fig1.7.6.6","level":"1.7.6","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":253,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.6.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#using-event-sourcing#fig1.7.6.7","level":"1.7.6","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":254,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.6.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#using-event-sourcing#fig1.7.6.8","level":"1.7.6","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":255,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.6.8"},{"backlink":"5-event-driven-data-management-for-microservices.html#summary#fig1.7.7.1","level":"1.7.7","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":256,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.7.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#summary#fig1.7.7.2","level":"1.7.7","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":257,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.7.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#summary#fig1.7.7.3","level":"1.7.7","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":258,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.7.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#summary#fig1.7.7.4","level":"1.7.7","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":259,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.7.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#summary#fig1.7.7.5","level":"1.7.7","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":260,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.7.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#summary#fig1.7.7.6","level":"1.7.7","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":261,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.7.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#summary#fig1.7.7.7","level":"1.7.7","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":262,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.7.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#summary#fig1.7.7.8","level":"1.7.7","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":263,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.7.8"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-in-action#fig1.7.8.1","level":"1.7.8","list_caption":"Figure: 图 5-1、每个微服务都有各自的数据","alt":"图 5-1、每个微服务都有各自的数据","nro":264,"url":"./resources/5-1.png","index":1,"caption_template":"_CAPTION_","label":"图 5-1、每个微服务都有各自的数据","attributes":{},"skip":false,"key":"1.7.8.1"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-in-action#fig1.7.8.2","level":"1.7.8","list_caption":"Figure: 图 5-2、Order Service 发布一个事件","alt":"图 5-2、Order Service 发布一个事件","nro":265,"url":"resources/5-2.png","index":2,"caption_template":"_CAPTION_","label":"图 5-2、Order Service 发布一个事件","attributes":{},"skip":false,"key":"1.7.8.2"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-in-action#fig1.7.8.3","level":"1.7.8","list_caption":"Figure: 图 5.3、Customer Service 响应","alt":"图 5.3、Customer Service 响应","nro":266,"url":"resources/5-3.png","index":3,"caption_template":"_CAPTION_","label":"图 5.3、Customer Service 响应","attributes":{},"skip":false,"key":"1.7.8.3"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-in-action#fig1.7.8.4","level":"1.7.8","list_caption":"Figure: 图 5-4、Order Service 作用于响应","alt":"图 5-4、Order Service 作用于响应","nro":267,"url":"resources/5-4.png","index":4,"caption_template":"_CAPTION_","label":"图 5-4、Order Service 作用于响应","attributes":{},"skip":false,"key":"1.7.8.4"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-in-action#fig1.7.8.5","level":"1.7.8","list_caption":"Figure: 图 5-5 Customer Order View 被两个服务访问","alt":"图 5-5 Customer Order View 被两个服务访问","nro":268,"url":"resources/5-5.png","index":5,"caption_template":"_CAPTION_","label":"图 5-5 Customer Order View 被两个服务访问","attributes":{},"skip":false,"key":"1.7.8.5"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-in-action#fig1.7.8.6","level":"1.7.8","list_caption":"Figure: 图 5-6、本地事务实现原子性","alt":"图 5-6、本地事务实现原子性","nro":269,"url":"resources/5-6.png","index":6,"caption_template":"_CAPTION_","label":"图 5-6、本地事务实现原子性","attributes":{},"skip":false,"key":"1.7.8.6"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-in-action#fig1.7.8.7","level":"1.7.8","list_caption":"Figure: 图 5-7、Message Broker 可以公断数据事务","alt":"图 5-7、Message Broker 可以公断数据事务","nro":270,"url":"resources/5-7.png","index":7,"caption_template":"_CAPTION_","label":"图 5-7、Message Broker 可以公断数据事务","attributes":{},"skip":false,"key":"1.7.8.7"},{"backlink":"5-event-driven-data-management-for-microservices.html#microservices-in-action#fig1.7.8.8","level":"1.7.8","list_caption":"Figure: 图 5-8、事件有完整的数据","alt":"图 5-8、事件有完整的数据","nro":271,"url":"resources/5-8.png","index":8,"caption_template":"_CAPTION_","label":"图 5-8、事件有完整的数据","attributes":{},"skip":false,"key":"1.7.8.8"},{"backlink":"6-choosing-deployment-strategy.html#fig1.8.1","level":"1.8","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":272,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.1"},{"backlink":"6-choosing-deployment-strategy.html#fig1.8.2","level":"1.8","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":273,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.2"},{"backlink":"6-choosing-deployment-strategy.html#fig1.8.3","level":"1.8","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":274,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.3"},{"backlink":"6-choosing-deployment-strategy.html#motivations#fig1.8.1.1","level":"1.8.1","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":275,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.1.1"},{"backlink":"6-choosing-deployment-strategy.html#motivations#fig1.8.1.2","level":"1.8.1","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":276,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.1.2"},{"backlink":"6-choosing-deployment-strategy.html#motivations#fig1.8.1.3","level":"1.8.1","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":277,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.1.3"},{"backlink":"6-choosing-deployment-strategy.html#multiple-service-instances-per-host-pattern#fig1.8.2.1","level":"1.8.2","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":278,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.2.1"},{"backlink":"6-choosing-deployment-strategy.html#multiple-service-instances-per-host-pattern#fig1.8.2.2","level":"1.8.2","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":279,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.2.2"},{"backlink":"6-choosing-deployment-strategy.html#multiple-service-instances-per-host-pattern#fig1.8.2.3","level":"1.8.2","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":280,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.2.3"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-host-pattern#fig1.8.3.1","level":"1.8.3","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":281,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.3.1"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-host-pattern#fig1.8.3.2","level":"1.8.3","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":282,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.3.2"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-host-pattern#fig1.8.3.3","level":"1.8.3","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":283,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.3.3"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-virtual-machine-pattern#fig1.8.3.1.1","level":"1.8.3.1","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":284,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.3.1.1"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-virtual-machine-pattern#fig1.8.3.1.2","level":"1.8.3.1","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":285,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.3.1.2"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-virtual-machine-pattern#fig1.8.3.1.3","level":"1.8.3.1","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":286,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.3.1.3"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-container-pattern#fig1.8.3.2.1","level":"1.8.3.2","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":287,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.3.2.1"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-container-pattern#fig1.8.3.2.2","level":"1.8.3.2","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":288,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.3.2.2"},{"backlink":"6-choosing-deployment-strategy.html#service-instance-per-container-pattern#fig1.8.3.2.3","level":"1.8.3.2","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":289,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.3.2.3"},{"backlink":"6-choosing-deployment-strategy.html#serverless-deployment#fig1.8.4.1","level":"1.8.4","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":290,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.4.1"},{"backlink":"6-choosing-deployment-strategy.html#serverless-deployment#fig1.8.4.2","level":"1.8.4","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":291,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.4.2"},{"backlink":"6-choosing-deployment-strategy.html#serverless-deployment#fig1.8.4.3","level":"1.8.4","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":292,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.4.3"},{"backlink":"6-choosing-deployment-strategy.html#summary#fig1.8.5.1","level":"1.8.5","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":293,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.5.1"},{"backlink":"6-choosing-deployment-strategy.html#summary#fig1.8.5.2","level":"1.8.5","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":294,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.5.2"},{"backlink":"6-choosing-deployment-strategy.html#summary#fig1.8.5.3","level":"1.8.5","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":295,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.5.3"},{"backlink":"6-choosing-deployment-strategy.html#microservices-in-action#fig1.8.6.1","level":"1.8.6","list_caption":"Figure: 图 6-1、主机可支持多个服务实例","alt":"图 6-1、主机可支持多个服务实例","nro":296,"url":"resources/6-1.png","index":1,"caption_template":"_CAPTION_","label":"图 6-1、主机可支持多个服务实例","attributes":{},"skip":false,"key":"1.8.6.1"},{"backlink":"6-choosing-deployment-strategy.html#microservices-in-action#fig1.8.6.2","level":"1.8.6","list_caption":"Figure: 图 6-2、服务可以各自运行在自己的虚拟机中","alt":"图 6-2、服务可以各自运行在自己的虚拟机中","nro":297,"url":"resources/6-2.png","index":2,"caption_template":"_CAPTION_","label":"图 6-2、服务可以各自运行在自己的虚拟机中","attributes":{},"skip":false,"key":"1.8.6.2"},{"backlink":"6-choosing-deployment-strategy.html#microservices-in-action#fig1.8.6.3","level":"1.8.6","list_caption":"Figure: 图 6-3、服务可以各自运行在自己的容器中","alt":"图 6-3、服务可以各自运行在自己的容器中","nro":298,"url":"resources/6-3.png","index":3,"caption_template":"_CAPTION_","label":"图 6-3、服务可以各自运行在自己的容器中","attributes":{},"skip":false,"key":"1.8.6.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#fig1.9.1","level":"1.9","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":299,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#fig1.9.2","level":"1.9","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":300,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#fig1.9.3","level":"1.9","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":301,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#fig1.9.4","level":"1.9","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":302,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.4"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#overview-of-refactoring-to-microservices#fig1.9.1.1","level":"1.9.1","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":303,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.1.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#overview-of-refactoring-to-microservices#fig1.9.1.2","level":"1.9.1","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":304,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.1.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#overview-of-refactoring-to-microservices#fig1.9.1.3","level":"1.9.1","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":305,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.1.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#overview-of-refactoring-to-microservices#fig1.9.1.4","level":"1.9.1","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":306,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.1.4"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-1-Stop-digging#fig1.9.2.1","level":"1.9.2","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":307,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.2.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-1-Stop-digging#fig1.9.2.2","level":"1.9.2","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":308,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.2.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-1-Stop-digging#fig1.9.2.3","level":"1.9.2","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":309,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.2.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-1-Stop-digging#fig1.9.2.4","level":"1.9.2","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":310,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.2.4"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-2-split-frontend-and-backend#fig1.9.3.1","level":"1.9.3","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":311,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.3.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-2-split-frontend-and-backend#fig1.9.3.2","level":"1.9.3","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":312,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.3.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-2-split-frontend-and-backend#fig1.9.3.3","level":"1.9.3","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":313,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.3.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-2-split-frontend-and-backend#fig1.9.3.4","level":"1.9.3","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":314,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.3.4"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-3-extract-services#fig1.9.4.1","level":"1.9.4","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":315,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.4.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-3-extract-services#fig1.9.4.2","level":"1.9.4","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":316,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.4.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-3-extract-services#fig1.9.4.3","level":"1.9.4","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":317,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.4.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#strategy-3-extract-services#fig1.9.4.4","level":"1.9.4","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":318,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.4.4"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#prioritizing-which-modules-to-convert-into-services#fig1.9.4.1.1","level":"1.9.4.1","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":319,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.4.1.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#prioritizing-which-modules-to-convert-into-services#fig1.9.4.1.2","level":"1.9.4.1","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":320,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.4.1.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#prioritizing-which-modules-to-convert-into-services#fig1.9.4.1.3","level":"1.9.4.1","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":321,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.4.1.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#prioritizing-which-modules-to-convert-into-services#fig1.9.4.1.4","level":"1.9.4.1","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":322,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.4.1.4"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#how-to-extract-a-module#fig1.9.4.2.1","level":"1.9.4.2","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":323,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.4.2.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#how-to-extract-a-module#fig1.9.4.2.2","level":"1.9.4.2","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":324,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.4.2.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#how-to-extract-a-module#fig1.9.4.2.3","level":"1.9.4.2","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":325,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.4.2.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#how-to-extract-a-module#fig1.9.4.2.4","level":"1.9.4.2","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":326,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.4.2.4"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#summary#fig1.9.5.1","level":"1.9.5","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":327,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.5.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#summary#fig1.9.5.2","level":"1.9.5","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":328,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.5.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#summary#fig1.9.5.3","level":"1.9.5","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":329,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.5.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#summary#fig1.9.5.4","level":"1.9.5","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":330,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.5.4"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#microservices-in-action#fig1.9.6.1","level":"1.9.6","list_caption":"Figure: 葡萄树","alt":"葡萄树","nro":331,"url":"resources/7.png","index":1,"caption_template":"_CAPTION_","label":"葡萄树","attributes":{},"skip":false,"key":"1.9.6.1"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#microservices-in-action#fig1.9.6.2","level":"1.9.6","list_caption":"Figure: 图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","alt":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","nro":332,"url":"resources/7-1.png","index":2,"caption_template":"_CAPTION_","label":"图 7-1、将新功能实现为单独的服务而不是将模块添加到单体","attributes":{},"skip":false,"key":"1.9.6.2"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#microservices-in-action#fig1.9.6.3","level":"1.9.6","list_caption":"Figure: 图 7-2、重构现有的应用程序","alt":"图 7-2、重构现有的应用程序","nro":333,"url":"resources/7-2.png","index":3,"caption_template":"_CAPTION_","label":"图 7-2、重构现有的应用程序","attributes":{},"skip":false,"key":"1.9.6.3"},{"backlink":"7-refactoring-a-monolith-into-microservices.html#microservices-in-action#fig1.9.6.4","level":"1.9.6","list_caption":"Figure: 图7-3、单体模块可转换为微服务","alt":"图7-3、单体模块可转换为微服务","nro":334,"url":"resources/7-3.png","index":4,"caption_template":"_CAPTION_","label":"图7-3、单体模块可转换为微服务","attributes":{},"skip":false,"key":"1.9.6.4"}]},"title":"微服务:从设计到部署","language":"zh-hans","links":{"sharing":{"all":true,"facebook":true,"google":true,"twitter":true,"weibo":true},"sidebar":{"Oopsguy 的博客":"http://oopsguy.com","《微服务:从设计到部署》":"https://github.com/oopsguy/microservices-from-design-to-deployment-chinese"}},"gitbook":"*","description":"Nginx 经典微服务电子书中文翻译版本","extension":null},"file":{"path":"5-event-driven-data-management-for-microservices.md","mtime":"2019-06-26T15:08:07.902Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-06-26T15:12:13.860Z"},"basePath":".","book":{"language":""}});
});
</script>
</div>
<script src="gitbook/gitbook.js"></script>
<script src="gitbook/theme.js"></script>
<script src="gitbook/gitbook-plugin-github/plugin.js"></script>
<script src="gitbook/gitbook-plugin-splitter/splitter.js"></script>
<script src="gitbook/gitbook-plugin-github-buttons/plugin.js"></script>
<script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>