mirror of
https://github.com/DocsHome/microservices.git
synced 2025-12-08 19:25:13 +00:00
1351 lines
206 KiB
HTML
1351 lines
206 KiB
HTML
|
||
<!DOCTYPE HTML>
|
||
<html lang="zh-hans" >
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||
<title>2、使用 API 网关 · 微服务:从设计到部署</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="2-using-an-api-gateway.html" />
|
||
|
||
|
||
<link rel="prev" href="1-introduction-to-microservices.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 active" 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 " 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="." >2、使用 API 网关</a>
|
||
</h1>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div class="page-wrapper" tabindex="-1" role="main">
|
||
<div class="page-inner">
|
||
|
||
<section class="normal markdown-section">
|
||
|
||
<h1 id="2、使用-api-网关">2、使用 API 网关</h1>
|
||
<p>本书的七个章节介绍如何设计、构建和部署微服务。<a href="1-introduction-to-microservices.html">第一章</a>介绍了微服务架构模式。它阐述了使用微服务的优点与缺点,以及尽管如此,微服务通常是复杂应用的理想选择。该系列的第二章将探讨使用 API 网关构建微服务。</p>
|
||
<p>当你选择将应用构建成为一组微服务时,你需要决定应用客户端将如何与微服务进行交互。单体应用只有一组端点(endpoint),通常使用副本(replicated)结合负载均衡来分配流量。</p>
|
||
<p>然而,在微服务架构中,通常每个微服务都暴露一组比较细颗粒的端点。在本文中,我们将研究如何改进客户端通信,并提出一个使用 API 网关的方案。</p>
|
||
<p><a id="introduction"></a></p>
|
||
<h2 id="21、简介">2.1、简介</h2>
|
||
<p>我们假设你正在为一个购物应用开发一个原生移动客户端。你可能需要实现一个产品详细信息页面,用于展示商品信息。</p>
|
||
<p>例如,图 2-1 展示了在 Amazon 的 Android 移动应用中滚动产品信息时所看到的内容。</p>
|
||
<figure id="fig1.4.1"><img src="resources/2-1.png" alt="图 2-1、一个简单的购物应用"><figcaption>图 2-1、一个简单的购物应用</figcaption></figure>
|
||
<p>这是一个智能手机应用,产品详细信息页面展示了许多信息。不仅有基本的产品信息,如名称、描述和价格,页面还展示了:</p>
|
||
<ol>
|
||
<li>购物车中的物品数量</li>
|
||
<li>订单历史</li>
|
||
<li>客户评价</li>
|
||
<li>低库存警告</li>
|
||
<li>配送选项</li>
|
||
<li>各种推荐,包括了购买此产品的客户购买的其他产品</li>
|
||
<li>选择性购买选项</li>
|
||
</ol>
|
||
<p>在使用单体应用架构的情况下,移动客户端通过对应用进行单个 REST 调用来检索此数据,例如:</p>
|
||
<pre><code>GET api.company.com/productdetails/productId
|
||
</code></pre><p>负载均衡器将请求路由到几个相同应用实例中的其中一个。之后,应用查询各个数据库表并返回响应给客户端。相比之下,当使用微服务架构时,产品详细页面上展示的数据来自多个微服务。以下是一些产品详细信息数据可能涉及到的微服务:</p>
|
||
<ul>
|
||
<li><strong>订单服务</strong> — 订单历史</li>
|
||
<li><strong>目录(catalog)服务</strong> — 基本的产品信息,如产品名称、图片和价格</li>
|
||
<li><strong>评价服务</strong> — 客户评价</li>
|
||
<li><strong>库存服务</strong> — 低库存警告</li>
|
||
<li><strong>配送服务</strong> — 配送选项、期限和费用,由配送方的 API 单独提供 </li>
|
||
<li><strong>推荐服务</strong> — 推荐类目</li>
|
||
</ul>
|
||
<figure id="fig1.4.2"><img src="resources/2-2.png" alt="图 2-2、将移动客户端的需求映射到相关微服务"><figcaption>图 2-2、将移动客户端的需求映射到相关微服务</figcaption></figure>
|
||
<p>我们需要决定移动客户端如何访问这些服务。让我们来看看有哪些方法。</p>
|
||
<p><a id="direct-client-to-microservice-communication"></a></p>
|
||
<h2 id="22、客户端与微服务直接通信">2.2、客户端与微服务直接通信</h2>
|
||
<p>理论上,客户端可以直接向每个微服务发送请求。每个微服务都有一个公开的端点:</p>
|
||
<pre><code>https://serviceName.api.company.name
|
||
</code></pre><p>该 URL 将映射到用于跨可用实例分发请求的微服务负载均衡器。为了检索特定的产品页面信息,移动客户端将向上述的每个微服务发送请求。</p>
|
||
<p>不幸的是,这种方式存在着挑战与限制。第一个问题是客户端的需求与每个微服务暴露的细粒度的 API 不匹配。在此示例中,客户端需要进行七次单独的请求。如果在更加复杂的应用中,它可能需要做更多的工作。例如,Amazon 的产品页面渲染牵涉到数百个微服务。虽然客户端可以通过 LAN 发送许多请求,但在公共互联网下效率已经低下,在移动网络必然是不切实际。</p>
|
||
<p>客户端直接调用微服务的另一个问题是有些服务可能使用了非 web 友好协议。一个服务可能使用了 Thrift 二进制 RPC,而另一个则可能使用 AMQP 消息协议。这两个协议无论是对浏览器还是防火墙来说都是不友好的,最好是在内部使用。应用在防火墙之外应该使用 HTTP 或者 WebSocket 之类的协议。</p>
|
||
<p>这种方法的另一个缺点是它难以重构微服务。随着时间推移,我们可能会想改变系统划分服务。例如,我们可能会合并两个服务或者将服务拆分为两个或者多个。然而,如果客户端直接与服务进行通信,实施这类的重构将变得非常困难。</p>
|
||
<p>由于存在这些问题,很少有客户端直接与微服务进行通信。</p>
|
||
<p><a id="using-an-api-gateway"></a></p>
|
||
<h2 id="23、使用-api-网关">2.3、使用 API 网关</h2>
|
||
<p>通常更好的方式是使用 API 网关。API 网关是一个服务器,是系统的单入口点。它类似于面向对象设计模式中的门面(Facade)模式。API 网关封装了内部系统架构,并针对每个客户端提供一个定制 API。它还可用于认证、监控、负载均衡、缓存和静态响应处理。</p>
|
||
<p>图 2-3 展示了 API 通常如何整合架构</p>
|
||
<figure id="fig1.4.3"><img src="resources/2-3.png" alt="使用 API 网关的微服务"><figcaption>使用 API 网关的微服务</figcaption></figure>
|
||
<p>API 网关负责请求路由、组合和协议转换。所有客户端请求首先要通过 API 网关,之后请求被路由到适当的服务。API 网关通常会通过调用多个微服务来处理一个请求并聚合结果。它可以在 Web 协议(如 HTTP 和 WebSocket)和用于内部的非 Web 友好协议之间进行转换。</p>
|
||
<p>API 网关还可以为每个客户端提供一个定制 API。它通常会为移动客户端暴露一个粗粒度的 API。例如,考虑一下产品详细信息场景,API 网关可以提供一个端点 <code>/productdetails?productid=xxx</code>,(如图 2-3 所示,一个使用了 API 网关的微服务)允许移动客户端通过一个单独的请求来检索所有产品详细信息。API 网关通过调用各种服务(产品信息、推荐、评价等)并组合结果。</p>
|
||
<p><a href="http://techblog.netflix.com/2013/02/rxjava-netflix-api.html" target="_blank">Netflix API 网关</a>就是一个很好的 API 网关案例。Netflix 流媒体服务可在数百种不同类型的设备上使用,包括电视机、机顶盒、智能手机、游戏机和平板电脑等。起初,Netflix 尝试为他们的流媒体服务提供一个<a href="http://www.programmableweb.com/news/why-rest-keeps-me-night/2012/05/15" target="_blank">通用</a>的 API。后来,他们发现由于设备种类繁多,并且他们各自有着不同需求,所以并不是能很好地运作。如今,他们使用了 API 网关,通过运行特定设备适配代码来为每个设备提供一个定制 API。</p>
|
||
<p><a id="benefits-and-drawbacks-of-an-api-gateway"></a></p>
|
||
<h2 id="24、api-网关的优点与缺点">2.4、API 网关的优点与缺点</h2>
|
||
<p>正如你所料,使用 API 网关同样存在好处与坏处。使用 API 网关的主要好处是它封装了应用的内部结构。客户端只需要与网关通信,而不必调用特定的服务。API 网关为每种类型的客户端提供了特定的 API,减少了客户端与应用之间的往返次数。同时,它还简化了客户端的代码。</p>
|
||
<p>API 网关也存在一些缺点,它本身也是一个高度可用的组件,需要开发、部署和管理。另外,还有一个风险是 API 网关可能会成为开发瓶颈。开发人员必须更新 API 网关来暴露每个微服务的端点。</p>
|
||
<p>重要的是更新 API 网关的过程应尽可能地放缓一些。否则,开发人员将被迫排队等待网关更新。尽管 API 网关存在这些缺点,但对于大多数的真实应用来说,使用 API 网关是正确的。</p>
|
||
<p><a id="implementing-an-api-gateway"></a></p>
|
||
<h2 id="25、实现-api-网关">2.5、实现 API 网关</h2>
|
||
<p>我们已经了解了使用 API 网关的动机和利弊,接下来让我们看看你需要考虑的各种设计问题。</p>
|
||
<p><a id="performance-and-scalability"></a></p>
|
||
<h3 id="251、性能与可扩展性">2.5.1、性能与可扩展性</h3>
|
||
<p>只有少数公司能达到 Netflix 的运营规模,每天需要处理数十亿的请求。不管怎样,对于大多数应用来说,API 网关的性能和可扩展性是相当重要的。因此,在一个支持异步、非阻塞 I/O 平台上构建 API 网关是很有必要的。实现一个可扩展的 API 网关的技术多种多样。在 JVM 上,你可以使用基于 NIO 的框架,如 Netty、Vertx、Spring Reactor 或者 JBoss Undertow。一个流行的非 JVM 选择是使用 Node.js,它是一个建立在 Chrome 的 JavaScript 引擎之上的平台。此外,你还可以选择使用 NGINX Plus。</p>
|
||
<p><a href="https://www.nginx.com/solutions/api-gateway/" target="_blank">NGINX Plus</a> 提供了一个成熟、可扩展和高性能的 Web 服务器和反向代理,它易于部署、配置和编程。NGINX Plus 可以管理身份验证、访问控制、负载均衡请求、缓存响应,并且提供了应用健康检查和监控功能。</p>
|
||
<p><a id="using-a-reactive-programming-model"></a></p>
|
||
<h3 id="252、使用响应式编程模型">2.5.2、使用响应式编程模型</h3>
|
||
<p>API 网关处理大部分请求只是简单的把它们路由到与之对应的后端服务。它通过调用多个后端服务来处理其他请求并聚合结果。对于某些请求,如产品详细信息请求,对后端服务请求而言是彼此独立的。为了把响应时间缩短到最小,API 网关应该并发执行独立请求。</p>
|
||
<p>然而,有时候,请求是相互依赖的。首先,API 网关可能需要在将请求路由到后端服务之前,通过调用验证服务来验证该请求。同样,为了从客户的愿望清单中获取产品信息,API 网关首先必须检索包含该信息的客户资料,然后检索每个产品的信息。还有一个有趣的 API 组合案例是 <a href="http://techblog.netflix.com/2013/02/rxjava-netflix-api.html" target="_blank">Netflix 视频网格</a>。</p>
|
||
<p>使用传统的异步回调方式来编写 API 组合代码会很快使你陷入回调地狱。代码将会变得杂乱、难以理解并且容易出错。更好的方式是使用响应式方法以声明式方式编写 API 网关代码。响应式抽象的例子包括 Scala 的 <a href="http://docs.scala-lang.org/overviews/core/futures.html" target="_blank">Future</a>、Java 8 中的 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html" target="_blank">CompletableFuture</a> 和 JavaScript 中的 <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" target="_blank">Promise</a>。还有 <a href="http://reactivex.io/" target="_blank">Reactive Extensions</a>(也称为 Rx 或 ReactiveX),最初由 Microsoft 为 .NET 平台开发。Netflix 为 JVM 创建了 RxJava,专门应用在它的 API 网关。还有用于 JavaScript 的 RxJS,它可以在浏览器和 Node.js 中运行。使用响应式可让你能够编写出简单而高效的 API 网关代码。</p>
|
||
<p><a id="service-invocation"></a></p>
|
||
<h3 id="253、服务调用">2.5.3、服务调用</h3>
|
||
<p>基于微服务的应用是一个分布式系统,必须使用进程间(inter-process)通信机制。有两种进程间通信方案。一是使用基于消息的异步机制。某些实现采用了消息代理,如 JMS 和 AMQP。其他采用无代理的方式直接与服务通信,如 Zeromq。</p>
|
||
<p>另一种类型的进程间通信采用了同步机制,如 HTTP 和 Thrift。系统通常会同时使用异步和同步方式。甚至可以为每种方式应用多个实现。因此,API 网关需要支持各种通信机制。</p>
|
||
<p><a id="service-discovery"></a></p>
|
||
<h3 id="254、服务发现">2.5.4、服务发现</h3>
|
||
<p>API 网关需要知道与其通信的每个微服务的位置(IP 地址和端口)。在传统应用中,你可以将这些位置硬编码,但在现代基于云的微服务应用中,找到所需的位置不是一件简单的事情。</p>
|
||
<p>基础设施服务(比如消息代理)通常都有一个可以通过系统环境变量来指定的静态位置。但是,要确定应用服务的位置并不是那么容易。</p>
|
||
<p>应用服务可以动态分配位置。此外,由于自动扩缩和升级,一个服务的整组实例可以动态变更。因此,API 网关与系统中的任何其他服务客户端一样,需要使用系统的服务发现机制:<a href="http://microservices.io/patterns/server-side-discovery.html" target="_blank">服务端发现</a>或<a href="http://microservices.io/patterns/client-side-discovery.html" target="_blank">客户端发现</a>。<a href="4-service-discovery.html">第四章</a>中更详细地描述了服务发现。现在需要注意的是,如果系统使用客户端发现,API 网关必须能够查询<a href="http://microservices.io/patterns/service-registry.html" target="_blank">服务注册中心</a>,注册中心是所有微服务实例及其位置的数据库。</p>
|
||
<p><a id="handling-partial-failures"></a></p>
|
||
<h3 id="255、处理局部故障">2.5.5、处理局部故障</h3>
|
||
<p>实现 API 网关时必须解决的另一个问题是局部故障问题。当一个服务调用另一个响应缓慢或者不可用的服务时,所有分布式系统都会出现此问题。API 网关不应该无期限地等待下游服务。但是,如何处理故障取决于特定的方案和哪些服务发生故障。例如,如果推荐服务在获取产品详细信息时没有响应,API 网关应将其余的产品详细信息返回给客户端,因为这些信息对用户仍然有用。建议可以是空的,也可以用其它内容代替,例如硬编码的十强排行名单。然而,如果产品信息服务没有响应,那么 API 网关应该向客户端返回错误。</p>
|
||
<p>如果可以,API 网关还可以返回缓存数据。例如,由于产品价格变化不大,当价格服务不可用时,API 网关可以返回被缓存的价格数据。数据可以由 API 网关缓存或存储在外部缓存中,如 Redis 或 Memcached。API 网关通过返回默认数据或缓存数据,确保系统发生故障时最小程度上影响到用户体验。</p>
|
||
<p><a href="https://github.com/Netflix/Hystrix" target="_blank">Netflix Hystrix</a> 是一个非常有用的库,用于编写调用远程服务代码。Hystrix 可以使超出指定阈值的调用超时。它实现了断路器模式,防止客户端不必要地等待无响应的服务。如果服务的错误率超过指定阈值,Hystrix 将会跳闸,所有请求将在指定的时间内立即失败。Hystrix 允许你在请求失败时定义回退操作,例如从缓存读取或返回默认值。如果你正在使用 JVM,那么你一定要考虑使用 Hystrix。如果你是在非 JVM 环境中运行,则应使用相同功能的库。</p>
|
||
<p><a id="summary"></a></p>
|
||
<h2 id="26、总结">2.6、总结</h2>
|
||
<p>对于大多数基于微服务的应用来说,实现一个 API 网关是很有必要的,API 网关作为系统的单入口点,并且负责请求路由,组合和协议转换。它为每个应用客户端提供了一个自定义 API。API 网关还可以通过返回缓存或默认数据来掩盖后端服务故障。在下一章中,我们将介绍服务间的通信。</p>
|
||
<p><a id="microservices-in-action"></a></p>
|
||
<h2 id="微服务实战:nginx-plus-作为-api-网关">微服务实战:NGINX Plus 作为 API 网关</h2>
|
||
<p>by Floyd Smith</p>
|
||
<p>本章讨论了如何将 API 网关作为系统的单入口点。它可以处理诸如负载均衡、缓存、监控和协议转换等其他功能 —— 当 NGINX 充当反向代理服务器时,其可以作为系统的单入口点,并且支持所有提到的一个 API 网关具有的附加功能。因此使用 NGINX 作为 API 网关的主机可以很好地工作。</p>
|
||
<p>将 NGINX 作为 API 网关并不是本书最开始的想法。<a href="https://www.nginx.com/products/" target="_blank">NGINX Plus</a> 是一个用于管理和保护基于 HTTP 的 API 流量的领先平台。你可以实现自己的 API 网关或使用现有的 API 管理平台,其中许多使用了 NGINX。</p>
|
||
<p>使用 NGINX Plus 作为 <a href="https://www.nginx.com/solutions/api-gateway/" target="_blank">API 网关</a>的理由包括:</p>
|
||
<ul>
|
||
<li><p><strong>访问管理</strong></p>
|
||
<p> 上至 Web 应用级别,下至每个个体微服务级别,你都可以使用各种访问控制列表(ACL)方法,并且可以轻松实现 SSL/TLS。</p>
|
||
</li>
|
||
<li><p><strong>可管理性与伸缩性</strong></p>
|
||
<p> 你可以使用 NGINX 的动态重新配置 API、Lua 模块、Perl 来更新基于 NGINX Plus 的 API 服务器,也可以通过 Chef、Puppet、ZooKeeper 或 DNS 来改变。</p>
|
||
</li>
|
||
<li><p><strong>与第三方工具集成</strong></p>
|
||
<p> NGINX Plus 已经可以与部分先进的工具集成在一起,如 <a href="https://www.nginx.com/blog/manage-api-gateway-less-3scale-nginx-plus/" target="_blank">3scale</a>,<a href="https://www.nginx.com/blog/nginx-powers-kong-api-management-solution/" target="_blank">Kong</a> 和 <a href="https://www.nginx.com/blog/mulesoft-implements-nginx-plus/" target="_blank">MuleSoft</a> 集成平台(仅列举在 NGINX 网站上提及的工具)。</p>
|
||
</li>
|
||
</ul>
|
||
<p>NGINX Plus 被广泛用作 <a href="https://www.nginx.com/blog/introducing-the-nginx-microservices-reference-architecture/" target="_blank">NGINX 微服务参考架构</a>中的 API 网关。你可以利用在这里收集的内容以及 MRA(微服务参考架构)来了解如何在你自己的应用中实现这一点。</p>
|
||
<footer class="page-footer"><span class="copyright">Copyright © <a style="font-weight: bold" href="http://oopsguy.com" target="_blank">Oopsguy.com</a> 2017 all right reserved,powered by Gitbook</span><span class="footer-modification">最后更新时间:
|
||
2019-06-26 19:25:49
|
||
</span></footer>
|
||
|
||
</section>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<a href="1-introduction-to-microservices.html#microservices-in-action" class="navigation navigation-prev " aria-label="Previous page: 微服务实战:NGINX Plus 作为反向代理服务器">
|
||
<i class="fa fa-angle-left"></i>
|
||
</a>
|
||
|
||
|
||
<a href="2-using-an-api-gateway.html#introduction" class="navigation navigation-next " aria-label="Next page: 2.1、简介">
|
||
<i class="fa fa-angle-right"></i>
|
||
</a>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<script>
|
||
var gitbook = gitbook || [];
|
||
gitbook.push(function() {
|
||
gitbook.page.hasChanged({"page":{"title":"2、使用 API 网关","level":"1.4","depth":1,"next":{"title":"2.1、简介","level":"1.4.1","depth":2,"anchor":"#introduction","path":"2-using-an-api-gateway.md","ref":"2-using-an-api-gateway.md#introduction","articles":[]},"previous":{"title":"微服务实战:NGINX Plus 作为反向代理服务器","level":"1.3.7","depth":2,"anchor":"#microservices-in-action","path":"1-introduction-to-microservices.md","ref":"1-introduction-to-microservices.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 © <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":"2-using-an-api-gateway.md","mtime":"2019-06-26T11:25:49.557Z","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>
|
||
|