微服务设计部署3 - Inter-Process Communication

简介: 简介 在一个monolithic应用程序中,组件彼此调用是通过语言级别的方法或函数调用完成的。相反地,一个基于微服务的应用程序是运行在多台机器上的分布式系统。每个服务实例通常是一个独立的进程。 因此,如图3-1所示,服务之间需要使用一种 IPC 机制来进行交互。

简介

在一个monolithic应用程序中,组件彼此调用是通过语言级别的方法或函数调用完成的。相反地,一个基于微服务的应用程序是运行在多台机器上的分布式系统。每个服务实例通常是一个独立的进程。

因此,如图3-1所示,服务之间需要使用一种 IPC 机制来进行交互。

在我们讨论具体的 IPC 技术之前,让我们先来看看各种交互设计思路。

image

Interaction Styles

当为一个服务选择 IPC 机制时,首先应该思考服务之间是如何进行交互的。存在很多客户端-服务器交互方式。可以从两个维度来划分交互方式。第一个维度,交互是一对一还是一对多的:

  • One-to-one:每个客户端请求只被一个服务实例处理
  • One-to-many:每个客户端请求被多个服务实例处理

第二个考虑维度,交互是异步的还是同步的:
• Synchronous–Theclientexpectsatimelyresponsefromtheserviceandmighteven block while it waits
• Asynchronous – The client doesn’t block while waiting for a response, and the response, if any, isn’t necessarily sent immediately.

  • 同步:客户端希望得到服务的及时响应,在得到响应以前甚至可能会一直阻塞
  • 异步:客户端在等待响应时不会阻塞,服务端也不必立即响应结果

下表总结了各种交互方式。
image

有以下几种 one-to-one 的交互方式,既有同步的也有异步的:

  • Request/response:客户端向服务发起请求,客户端希望响应结果能立即到达。在一个基于多线程的应用程序中,处理请求的线程可能会因为等待响应而阻塞住
  • Notification:也被称作 one-way request,客户端向服务发起请求,但不需要响应
  • Request/async response:A client sends a request to a service, which replies asynchronously The client does not block while waiting and is designed with the assumption that the response might not arrive for a while.

有以下两种一对多交互方式,都是异步的:

  • Publish/subscribe:客户端发出通知消息,该消息将被0个或多个感兴趣的服务消费
  • Publish/async responses:A client publishes a request message, and then waits a certain amount of time for responses from interested services

每个服务通常会是使用以上这些交互方式的一种组合。对某些服务来说,使用一种IPC 机制就可以了,而其他服务可能会需要使用一种组合方案。

图3-2显示了,当打车软件中的用户发起一个行程时,软件中的所有服务可能是如何交互的。
image
图示叫车服务使用了notifications、request/response和 publish/subscribe 三种交互方式的组合。例如,乘客的智能手机发送了一个notification到 行程管理服务请求搭载。行程管理服务采用request/response 方式调用乘客管理服务来验证乘客账户是否在线。然后行程管理服务创建行程,并采用 Publish/subscribe 方式去通知其他服务,包括分配司机服务,该服务职责是定位一个有效的司机。

在已经了解了交互方式后,让我们看看如何来定义 API。

Defining APIs

目录
相关文章
|
10月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
1095 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
760 60
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
存储 监控 Docker
探索微服务架构下的容器化部署
本文旨在深入探讨微服务架构下容器化部署的关键技术与实践,通过分析Docker容器技术如何促进微服务的灵活部署和高效管理,揭示其在现代软件开发中的重要性。文章将重点讨论容器化技术的优势、面临的挑战以及最佳实践策略,为读者提供一套完整的理论与实践相结合的指导方案。
|
监控 安全 持续交付
构建高效的微服务架构:从设计到部署
构建高效的微服务架构:从设计到部署
258 1
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
514 1
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
485 1
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
305 2

热门文章

最新文章