mirror of
https://github.com/DocsHome/microservices.git
synced 2025-12-08 19:25:13 +00:00
1339 lines
208 KiB
HTML
1339 lines
208 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>4、服务发现 · 微服务:从设计到部署</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="4-service-discovery.html" />
|
||
|
||
|
||
<link rel="prev" href="3-inter-process-communication.html" />
|
||
|
||
|
||
<style>
|
||
@media only screen and (max-width: 640px) {
|
||
.book-header .hidden-mobile {
|
||
display: none;
|
||
}
|
||
}
|
||
</style>
|
||
<script>
|
||
window["gitbook-plugin-github-buttons"] = {"repo":"oopsguy/microservices-from-design-to-deployment-chinese","types":["star","watch"],"size":"small"};
|
||
</script>
|
||
|
||
</head>
|
||
<body>
|
||
|
||
<div class="book">
|
||
<div class="book-summary">
|
||
|
||
|
||
|
||
<nav role="navigation">
|
||
|
||
|
||
|
||
<ul class="summary">
|
||
|
||
|
||
|
||
|
||
<li>
|
||
<a href="http://oopsguy.com" target="_blank" class="custom-link">Oopsguy 的博客</a>
|
||
</li>
|
||
|
||
|
||
<li>
|
||
<a href="https://github.com/oopsguy/microservices-from-design-to-deployment-chinese" target="_blank" class="custom-link">《微服务:从设计到部署》</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
<li class="divider"></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="chapter " data-level="1.1" data-path="./">
|
||
|
||
<a href="./">
|
||
|
||
|
||
Introduction
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.2" data-path="0-foreword.html">
|
||
|
||
<a href="0-foreword.html">
|
||
|
||
|
||
0、前言
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3" data-path="1-introduction-to-microservices.html">
|
||
|
||
<a href="1-introduction-to-microservices.html">
|
||
|
||
|
||
1、微服务简介
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.3.1" data-path="1-introduction-to-microservices.html">
|
||
|
||
<a href="1-introduction-to-microservices.html#building-monolithic-applications">
|
||
|
||
|
||
1.1、构建单体应用
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2" data-path="1-introduction-to-microservices.html">
|
||
|
||
<a href="1-introduction-to-microservices.html#marching-toward-monolithic-hell">
|
||
|
||
|
||
1.2、走向单体地狱
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.3" data-path="1-introduction-to-microservices.html">
|
||
|
||
<a href="1-introduction-to-microservices.html#tackling-the-complexity">
|
||
|
||
|
||
1.3、微服务-解决复杂问题
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.4" data-path="1-introduction-to-microservices.html">
|
||
|
||
<a href="1-introduction-to-microservices.html#the-benefits-of-microservices">
|
||
|
||
|
||
1.4、微服务的优点
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.5" data-path="1-introduction-to-microservices.html">
|
||
|
||
<a href="1-introduction-to-microservices.html#the-drawbacks-of-microservices">
|
||
|
||
|
||
1.5、微服务的缺点
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.6" data-path="1-introduction-to-microservices.html">
|
||
|
||
<a href="1-introduction-to-microservices.html#summary">
|
||
|
||
|
||
1.6、总结
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.7" data-path="1-introduction-to-microservices.html">
|
||
|
||
<a href="1-introduction-to-microservices.html#microservices-in-action">
|
||
|
||
|
||
微服务实战:NGINX Plus 作为反向代理服务器
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html">
|
||
|
||
|
||
2、使用 API 网关
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.4.1" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#introduction">
|
||
|
||
|
||
2.1、简介
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.2" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#direct-client-to-microservice-communication">
|
||
|
||
|
||
2.2、客户端与微服务直接通信
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.3" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#using-an-api-gateway">
|
||
|
||
|
||
2.3、使用 API 网关
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.4" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#benefits-and-drawbacks-of-an-api-gateway">
|
||
|
||
|
||
2.4、API 网关的优点与缺点
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.5" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#implementing-an-api-gateway">
|
||
|
||
|
||
2.5、实施 API 网关
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.4.5.1" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#performance-and-scalability">
|
||
|
||
|
||
2.5.1、性能与扩展
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.5.2" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#using-a-reactive-programming-model">
|
||
|
||
|
||
2.5.2、使用响应式编程模型
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.5.3" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#service-invocation">
|
||
|
||
|
||
2.5.3、服务调用
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.5.4" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#service-discovery">
|
||
|
||
|
||
2.5.4、服务发现
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.5.5" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#handling-partial-failures">
|
||
|
||
|
||
2.5.5、处理局部故障
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.6" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#summary">
|
||
|
||
|
||
2.6、总结
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.7" data-path="2-using-an-api-gateway.html">
|
||
|
||
<a href="2-using-an-api-gateway.html#microservices-in-action">
|
||
|
||
|
||
微服务实战:NGINX Plus 作为 API 网关
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html">
|
||
|
||
|
||
3、进程间通信
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.1" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#introduction">
|
||
|
||
|
||
3.1、简介
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.2" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#interaction-styles">
|
||
|
||
|
||
3.2、交互方式
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.3" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#defining-apis">
|
||
|
||
|
||
3.3、定义 API
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.4" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#evolving-apis">
|
||
|
||
|
||
3.4、演化 API
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.5" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#handling-partial-failure">
|
||
|
||
|
||
3.5、处理局部故障
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.6" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#ipc-technologies">
|
||
|
||
|
||
3.6、IPC 技术
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.7" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#asynchronous-message-based-communication">
|
||
|
||
|
||
3.7、异步、基于消息的通信
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.8" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#synchronous-request-response-ipc">
|
||
|
||
|
||
3.8、同步的请求/响应 IPC
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.8.1" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#rest">
|
||
|
||
|
||
3.8.1、REST
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.8.2" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#thrift">
|
||
|
||
|
||
3.8.2、Thrift
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.9" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#message-formats">
|
||
|
||
|
||
3.9、消息格式
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.10" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#summary">
|
||
|
||
|
||
3.10、总结
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.11" data-path="3-inter-process-communication.html">
|
||
|
||
<a href="3-inter-process-communication.html#microservices-in-action">
|
||
|
||
|
||
微服务实战:NGINX 与应用程序架构
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter active" 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="." >4、服务发现</a>
|
||
</h1>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div class="page-wrapper" tabindex="-1" role="main">
|
||
<div class="page-inner">
|
||
|
||
<section class="normal markdown-section">
|
||
|
||
<h1 id="4、服务发现">4、服务发现</h1>
|
||
<p>本书主要介绍如何使用微服务来构建应用,现在是第四章。<a href="1-introduction-to-microservices.html">第一章</a>已经介绍了<a href="http://microservices.io/patterns/microservices.html" target="_blank">微服务架构模式</a>,并讨论了使用微服务的优点与缺点。<a href="2-using-an-api-gateway.html">第二章</a>和<a href="3-inter-process-communication.html">第三章</a>介绍了微服务间的通信,并对不同的通信机制作出对比。在本章中,我们将探讨服务发现(service discovery)相关的内容。</p>
|
||
<p><a id="why-use-service-discovery"></a></p>
|
||
<h2 id="41、为何使用服务发现">4.1、为何使用服务发现</h2>
|
||
<p>我们假设你正在编写某些代码,这些代码调用了有 REST API 或 Thrift API 的服务。为了发送一个请求,你的代码需要知道服务实例的网络位置(IP 地址与端口)。在运行于物理硬件上的传统应用中,服务实例的网络位置是相对静态的。例如,你的代码可以从偶尔更新的配置文件中读取网络位置。</p>
|
||
<p>然而,在现代基于云的微服务应用中,这是一个更难解决的问题,如图 4-1 所示。</p>
|
||
<p>服务实例有动态分配的网络位置。此外,由于自动扩缩、故障与升级,整组服务实例会动态变更。因此,你的客户端代码需要使用更精确的服务发现机制。</p>
|
||
<figure id="fig1.6.1"><img src="resources/4-1.png" alt="图 4-1、需要服务寻找帮助的客户端或 API 网关"><figcaption>图 4-1、需要服务寻找帮助的客户端或 API 网关</figcaption></figure>
|
||
<p>有两种主要的服务发现模式:客户端发现(client-side discovery)与服务端发现(server-side discovery)。让我们先来看看客户端发现。</p>
|
||
<p><a id="the-client-side-discovery-pattern"></a></p>
|
||
<h2 id="42、客户端发现模式">4.2、客户端发现模式</h2>
|
||
<p>当使用<a href="http://microservices.io/patterns/client-side-discovery.html" target="_blank">客户端发现模式</a>时,客户端负责确定可用服务实例的网络位置和请求负载均衡。客户端查询服务注册中心(service registry),它是可用服务实例的数据库。之后,客户端利用负载均衡算法选择一个可用的服务实例并发出请求。</p>
|
||
<p>图 4-2 展示了该模式的结构</p>
|
||
<figure id="fig1.6.2"><img src="resources/4-2.png" alt="客户端可以承担发现服务任务"><figcaption>客户端可以承担发现服务任务</figcaption></figure>
|
||
<p>服务实例的网络位置在服务注册中心启动时被注册。当实例终止时,它将从服务注册中心中移除。通常使用心跳机制周期性地刷新服务实例的注册信息。</p>
|
||
<p><a href="https://netflix.github.io/" target="_blank">Netflix OSS</a> 提供了一个很好的客户端发现模式示例。<a href="https://github.com/Netflix/eureka" target="_blank">Netflix Eureka</a> 是一个服务注册中心,它提供了一组用于管理服务实例注册和查询可用实例的 REST API。<a href="https://github.com/Netflix/ribbon" target="_blank">Netflix Ribbon</a> 是一个 IPC 客户端,可与 Eureka 一起使用,用于在可用服务实例之间使请求负载均衡。本章稍后将讨论 Eureka。</p>
|
||
<p>客户端发现模式存在各种优点与缺点。该模式相对比较简单,除了服务注册中心,没有其他移动部件。此外,由于客户端能发现可用的服务实例,因此可以实现智能的、特定于应用的负载均衡决策,比如使用一致性哈希。该模式的一个重要缺点是它将客户端与服务注册中心耦合在一起。你必须为你使用的每种编程语言和框架实现客户端服务发现逻辑。</p>
|
||
<p>现在我们已经了解了客户端发现,接下来让我们看看服务端发现。</p>
|
||
<p><a id="the-server-side-discovery-pattern"></a></p>
|
||
<h2 id="43、服务端发现模式">4.3、服务端发现模式</h2>
|
||
<p>服务发现的另一种方式是服务端发现模式。图 4-3 展示了该模式的结构:</p>
|
||
<figure id="fig1.6.3"><img src="resources/4-3.png" alt="服务器间也可以处理服务发现"><figcaption>服务器间也可以处理服务发现</figcaption></figure>
|
||
<p>客户端通过负载均衡器向服务发出请求。负载均衡器查询服务注册中心并将每个请求路由到可用的服务实例。与客户端发现一样,服务实例由服务注册中心注册与销毁。</p>
|
||
<p><a href="https://aws.amazon.com/cn/elasticloadbalancing/" target="_blank">AWS Elastic Load Balancer</a>(ELB)是一个服务端发现路由示例。ELB 通常用于均衡来自互联网的外部流量负载。然而,你还可以使用 ELB 来均衡虚拟私有云(VPC)内部的流量负载。客户端通过 ELB 使用其 DNS 名称来发送请求(HTTP 或 TCP)。ELB 均衡一组已注册的 Elastic Compute Cloud(EC2)实例或 EC2 Container Service(ECS)容器之间的流量负载。这里没有单独可见的服务注册中心。相反,EC2 实例与 ECS 容器由 ELB 本身注册。</p>
|
||
<p>HTTP 服务器和负载均衡器(如 <a href="https://www.nginx.com/products/" target="_blank">NGINX Plus</a> 和 NGINX)也可以作为服务端发现负载均衡器。例如,<a href="https://www.airpair.com/scalable-architecture-with-docker-consul-and-nginx" target="_blank">此博文</a>描述了使用 <a href="https://www.hashicorp.com/blog/introducing-consul-template.html" target="_blank">Consul Template</a> 动态重新配置 NGINX 反向代理。Consul Template 是一个工具,可以从存储在 <a href="https://www.consul.io/" target="_blank">Consul 服务注册中心</a>中的配置数据中定期重新生成任意配置文件。每当文件被更改时,它都会运行任意的 shell 命令。在列举的博文描述的示例中,Consul Template 会生成一个 nginx.conf 文件,该文件配置了反向代理,然后通过运行一个命令告知 NGINX 重新加载配置。更复杂的实现可以使用其 <a href="https://www.nginx.com/products/on-the-fly-reconfiguration/" target="_blank">HTTP API 或 DNS</a> 动态重新配置 NGINX Plus。</p>
|
||
<p>某些部署环境(如 <a href="https://kubernetes.io/" target="_blank">Kubernetes</a> 和 <a href="https://mesosphere.github.io/marathon/docs/service-discovery-load-balancing.html" target="_blank">Marathon</a>)在群集中的每个主机上运行着一个代理。这些代理扮演着服务端发现负载均衡器角色。为了向服务发出请求,客户端通过代理使用主机的 IP 地址和服务的分配端口来路由请求。之后,代理将请求透明地转发到在集群中某个运行的可用服务实例。</p>
|
||
<p>服务端发现模式有几个优点与缺点。该模式的一大的优点是其把发现的细节从客户端抽象出来。客户端只需向负载均衡器发出请求。这消除了为服务客户端使用的每种编程语言和框架都实现发现逻辑的必要性。另外,如上所述,一些部署环境免费提供此功能。然而,这种模式存在一些缺点。除非负载均衡器由部署环境提供,否则你需要引入这个高可用系统组件,并进行设置和管理。</p>
|
||
<p><a id="the-service-registry"></a></p>
|
||
<h2 id="44、服务注册中心">4.4、服务注册中心</h2>
|
||
<p><a href="http://microservices.io/patterns/service-registry.html" target="_blank">服务注册中心</a>(service registry)是服务发现的一个关键部分。它是一个包含了服务实例网络位置的数据库。服务注册中心必须是高可用和最新的。虽然客户端可以缓存从服务注册中心获得的网络位置,但该信息最终会过期,客户端将无法发现服务实例。因此,服务注册中心使用了复制协议(replication protocol)来维护一致性的服务器集群组成。</p>
|
||
<p>如之前所述,<a href="https://github.com/Netflix/eureka" target="_blank">Netflix Eureka</a> 是一个很好的服务注册中心范例。它提供了一个用于注册和查询服务实例的 REST API。服务实例使用 POST 请求注册其网络位置。它必须每隔 30 秒使用 PUT 请求来刷新其注册信息。通过使用 HTTP DELETE 请求或实例注册超时来移除注册信息。正如你所料,客户端可以使用 HTTP GET 请求来检索已注册的服务实例。</p>
|
||
<p>Netflix 通过在每个 Amazon EC2 可用区中运行一个或多个 Eureka 服务器来<a href="https://github.com/Netflix/eureka/wiki/Configuring-Eureka-in-AWS-Cloud" target="_blank">实现高可用</a>。每个 Eureka 服务器都运行在有一个 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html" target="_blank">弹性 IP 地址</a>的 EC2 实例上。DNS TEXT 记录用于存储 Eureka 集群配置,这是一个从可用区到 Eureka 服务器的网络位置列表的映射。当 Eureka 服务器启动时,它将会查询 DNS 以检索 Eureka 群集配置,查找其对等体,并为其分配一个未使用的弹性 IP 地址。</p>
|
||
<p>Eureka 客户端 — 服务与服务客户端 — 查询 DNS 以发现 Eureka 服务器的网络位置。客户端优先使用相同可用区中的 Eureka 服务器,如果没有可用的,则使用另一个可用区的 Eureka 服务器。</p>
|
||
<p>以下列举了其他服务注册中心:</p>
|
||
<ul>
|
||
<li><p><strong><a href="https://github.com/coreos/etcd" target="_blank">etcd</a></strong></p>
|
||
<p> 一个用于共享配置和服务发现的高可用、分布式和一致的键值存储。使用了 etcd 的两个著名项目分别为 Kubernetes 和 <a href="http://pivotal.io/platform" target="_blank">Cloud Foundry</a>。</p>
|
||
</li>
|
||
<li><p><strong><a href="https://www.consul.io/" target="_blank">Consul</a></strong></p>
|
||
<p> 一个用于发现和配置服务的工具。它提供了一个 API,可用于客户端注册与发现服务。Consul 可对服务进行健康检查,以确定服务的可用性。</p>
|
||
</li>
|
||
<li><p><strong><a href="http://zookeeper.apache.org/" target="_blank">Apache ZooKeeper</a></strong></p>
|
||
<p> 一个被广泛应用于分布式应用的高性能协调服务。Apache ZooKeeper 最初是 Hadoop 的一个子项目,但现在已经成为一个独立的顶级项目。</p>
|
||
</li>
|
||
</ul>
|
||
<p>另外,如之前所述,部分系统如 Kubernetes、Marathon 和 AWS,没有明确的服务注册中心。相反,服务注册中心只是基础设施的一个内置部分。</p>
|
||
<p>现在我们已经了解服务注册中心的概念,接下来让我们看看服务实例是如何被注册到服务注册中心。</p>
|
||
<p><a id="service-registration-options"></a></p>
|
||
<h2 id="45、服务注册方式">4.5、服务注册方式</h2>
|
||
<p>如之前所述,服务实例必须在服务注册中心中注册与注销。有几种不同的方式来处理注册和注销。一是服务实例自我注册,即<a href="http://microservices.io/patterns/self-registration.html" target="_blank">自注册模式</a>。另一个是使用其他系统组件来管理服务实例的注册,即<a href="http://microservices.io/patterns/3rd-party-registration.html" target="_blank">第三方注册模式</a>。我们先来了解自注册模式。</p>
|
||
<p><a id="the-self-registration-pattern"></a></p>
|
||
<h2 id="46、自注册模式">4.6、自注册模式</h2>
|
||
<p>当使用自注册模式时,服务实例负责在服务注册中心注册和注销自己。此外,如果有必要,服务实例将通过发送心跳请求来防止其注册信息过期。</p>
|
||
<p>图 4-4 展示了该模式的结构。</p>
|
||
<figure id="fig1.6.4"><img src="resources/4-4.png" alt="图 4-4、服务可以自我处理注册"><figcaption>图 4-4、服务可以自我处理注册</figcaption></figure>
|
||
<p>该方式的一个很好的范例就是 <a href="https://github.com/Netflix/eureka" target="_blank">Netflix OSS Eureka 客户端</a>。Eureka 客户端负责处理服务实例注册与注销的所有方面。实现了包括服务发现在内的多种模式的 <a href="http://projects.spring.io/spring-cloud/" target="_blank">Spring Cloud 项目</a>可以轻松地使用 Eureka 自动注册服务实例。你只需在 Java Configuration 类上应用 <code>@EnableEurekaClient</code> 注解即可。</p>
|
||
<p>自注册模式有好有坏。一个好处是它相对简单,不需要任何其他系统组件。然而,主要缺点是它将服务实例与服务注册中心耦合。你必须为服务使用的每种编程语言和框架都实现注册代码。</p>
|
||
<p>将服务与服务注册中心分离的替代方法是第三方注册模式。</p>
|
||
<p><a id="the-third-party-registration-pattern"></a></p>
|
||
<h2 id="47、第三方注册模式">4.7、第三方注册模式</h2>
|
||
<p>当使用第三方注册模式时,服务实例不再负责向服务注册中心注册自己。相反,该工作将由被称为服务注册器(service registrar)的另一系统组件负责。服务注册器通过轮询部署环境或订阅事件来跟踪运行实例集的变更情况。当它检测到一个新的可用服务实例时,它会将该实例注册到服务注册中心。此外,服务注册器可以注销终止的服务实例。</p>
|
||
<p>图 4-5 展示了该模式的结构:</p>
|
||
<figure id="fig1.6.5"><img src="resources/4-5.png" alt="图 4-5、一个单独的服务注册器可负责注册其他服务"><figcaption>图 4-5、一个单独的服务注册器可负责注册其他服务</figcaption></figure>
|
||
<p>开源的 <a href="https://github.com/gliderlabs/registrator" target="_blank">Registrator</a> 项目是一个很好的服务注册器示例。它可以自动注册和注销作为 Docker 容器部署的服务实例。注册器支持多种服务注册中心,包括 etcd 和 Consul。</p>
|
||
<p>另一个服务注册器例子是 <a href="https://github.com/Netflix/Prana" target="_blank">NetflixOSS Prana</a>。其主要用于非 JVM 语言编写的服务,它是一个与服务实例并行运行的附加应用。Prana 使用了 Netflix Eureka 来注册和注销服务实例。</p>
|
||
<p>服务注册器在部分部署环境中是一个内置组件。Autoscaling Group 创建的 EC2 实例可以自动注册到 ELB。Kubernetes 服务能够自动注册并提供发现。</p>
|
||
<p>第三方注册模式同样有好有坏。一个主要的好处是服务与服务注册中心之间解耦。你不需要为开发人员使用的每种编程语言和框架都实现服务注册逻辑。相反,仅需要在专用服务中以集中的方式处理服务实例注册。</p>
|
||
<p>该模式的一个缺点是,除非部署环境内置,否则你同样需要引入这样一个高可用的系统组件,并进行设置和管理。</p>
|
||
<p><a id="summary"></a></p>
|
||
<h2 id="48、总结">4.8、总结</h2>
|
||
<p>在微服务应用中,运行的服务实例集会动态变更。实例有动态分配的网络位置。因此,为了让客户端向服务发出请求,它必须使用服务发现机制。</p>
|
||
<p><a href="http://microservices.io/patterns/service-registry.html" target="_blank">服务发现</a>的关键部分是服务注册中心。服务注册中心是一个可用服务实例的数据库。服务注册中心提供了管理 API 和查询 API 的功能。服务实例通过使用管理 API 从服务注册中心注册或者注销。系统组件使用查询 API 来发现可用的服务实例。</p>
|
||
<p>有两种主要的服务发现模式:客户端发现与服务端发现。在使用了客户端服务发现的系统中,客户端查询服务注册中心,选择一个可用实例并发出请求。在使用了服务端发现的系统中,客户端通过路由进行请求,路由将查询服务注册中心,并将请求转发到可用实例。</p>
|
||
<p>服务实例在服务注册中心中注册与注销有两种主要方式。一个是服务实例向服务注中心自我注册,即<a href="http://microservices.io/patterns/self-registration.html" target="_blank">自注册模式</a>。另一个是使用其他系统组件代表服务完成注册与注销,即<a href="http://microservices.io/patterns/3rd-party-registration.html" target="_blank">第三方注册模式</a>。</p>
|
||
<p>在某些部署环境中,你需要使用如 <a href="https://github.com/Netflix/eureka" target="_blank">Netflix Eureka</a> 、ectd 或 <a href="http://zookeeper.apache.org/" target="_blank">Apache ZooKeeper</a> 等服务注册中心来设置你自己的服务发现基础设施。在其他部署环境中,服务发现是内置的,例如,<a href="https://kubernetes.io/" target="_blank">Kubernetes</a> 和 <a href="https://mesosphere.github.io/marathon/docs/service-discovery-load-balancing.html" target="_blank">Marathon</a>,可以处理服务实例的注册与注销。他们还在每一个扮演服务端发现路由角色的集群主机上运行一个代理。</p>
|
||
<p>一个 HTTP 反向代理和负载均衡器(如 NGINX)也可以作为服务端发现负载均衡器。服务注册中心可以将路由信息推送给 NGINX,并调用优雅配置更新,例如,你可以使用 <a href="https://www.hashicorp.com/blog/introducing-consul-template/" target="_blank">Consul Template</a>。NGINX Plus 支持<a href="https://www.nginx.com/products/on-the-fly-reconfiguration/" target="_blank">额外的动态重新配置机制</a> — 它可以使用 DNS 从注册中心中提取有关服务实例的信息,并为远程重新配置提供一个 API。</p>
|
||
<p><a id="microservices-in-action"></a></p>
|
||
<h2 id="微服务实战:灵活的-nginx">微服务实战:灵活的 NGINX</h2>
|
||
<p>by Floyd Smith</p>
|
||
<p>在微服务环境中,由于自动扩缩、故障和升级,你的后端基础设施可能会不断变化,这些变化包括了服务的创建、部署和扩展。如本章所述,在动态重新分配服务位置的环境中需要服务发现机制。</p>
|
||
<p>将 NGINX 应用于微服务的一部分好处是,你可以轻松地配置其自动响应后端基础设施作出的变更。NGINX 配置不仅简单灵活,而且兼容 <a href="http://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-configuration-template.html" target="_blank">Amazon Web Services</a> 使用的模板,可以更轻松地管理特定的服务变更与受负载均衡的变更服务组。</p>
|
||
<p><a href="https://www.nginx.com/products/" target="_blank">NGINX Plus</a> 有<a href="https://www.nginx.com/products/on-the-fly-reconfiguration/" target="_blank">即时重新配置 API</a>,无需重新启动 NGINX Plus 或手动重新加载配置就能感知受负载均衡服务组的变更。在 <a href="https://www.nginx.com/blog/nginx-plus-r8-released/#on-the-fly" target="_blank">NGINX Plus Release 8 及更高版本</a>中,你可以将对 API 所做的变更配置为在重新启动和配置重新加载时保持不变(重新加载不需要重新启动,不要断开连接)。<a href="https://www.nginx.com/blog/nginx-plus-r9-released/#dns-srv" target="_blank">NGINX Plus Release 9 及更高版本</a>支持使用 DNS SRV 记录进行服务发现,可与现有服务器发现平台(如 Consul 和 etcd)进行更紧密地集成。</p>
|
||
<p>我们在 NGINX 创建了一个用于管理服务发现的模型:</p>
|
||
<ol>
|
||
<li>为每个应用运行单独的 Docker 容器,包括如 etcd 的服务发现应用、服务注册工具、一个或多个后端服务器以及用于均衡其他容器负载的 NGINX Plus 本身。</li>
|
||
<li>注册工具监控 Docker 新建的容器,并使用服务发现工具注册新服务,此外,还可以删除消失的容器。</li>
|
||
<li>容器及其运行的服务将自动添加到负载均衡上游服务器中或从中删除。</li>
|
||
</ol>
|
||
<p>此 Demo 应用可用于多个服务发现应用:<a href="https://www.nginx.com/blog/service-discovery-with-nginx-plus-and-consul/" target="_blank">Consul API</a>、<a href="https://www.nginx.com/blog/service-discovery-nginx-plus-srv-records-consul-dns/" target="_blank">来自 Consul 的 DNS SRV 记录</a>、<a href="https://www.nginx.com/blog/service-discovery-nginx-plus-etcd/" target="_blank">etcd</a> 以及 <a href="https://www.nginx.com/blog/service-discovery-nginx-plus-zookeeper/" target="_blank">ZooKeeper</a> 等。</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 23:10:14
|
||
</span></footer>
|
||
|
||
</section>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<a href="3-inter-process-communication.html#microservices-in-action" class="navigation navigation-prev " aria-label="Previous page: 微服务实战:NGINX 与应用程序架构">
|
||
<i class="fa fa-angle-left"></i>
|
||
</a>
|
||
|
||
|
||
<a href="4-service-discovery.html#why-use-service-discovery" class="navigation navigation-next " aria-label="Next page: 4.1、为何使用服务发现">
|
||
<i class="fa fa-angle-right"></i>
|
||
</a>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<script>
|
||
var gitbook = gitbook || [];
|
||
gitbook.push(function() {
|
||
gitbook.page.hasChanged({"page":{"title":"4、服务发现","level":"1.6","depth":1,"next":{"title":"4.1、为何使用服务发现","level":"1.6.1","depth":2,"anchor":"#why-use-service-discovery","path":"4-service-discovery.md","ref":"4-service-discovery.md#why-use-service-discovery","articles":[]},"previous":{"title":"微服务实战:NGINX 与应用程序架构","level":"1.5.11","depth":2,"anchor":"#microservices-in-action","path":"3-inter-process-communication.md","ref":"3-inter-process-communication.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":"4-service-discovery.md","mtime":"2019-06-26T15:10:14.659Z","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>
|
||
|