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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 简介 在一个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

目录
相关文章
|
3月前
|
Kubernetes 安全 Docker
微服务中的部署方法。
# 微服务 # 部署 # 去 # 开发运营
48 0
|
1月前
|
Java Docker 微服务
如何使用Docker和Docker Compose部署微服务
【2月更文挑战第12天】
237 0
|
4月前
|
Linux API Docker
Docker下部署微服务实践踩坑总结
Docker下部署微服务实践踩坑总结
84 0
|
1月前
|
监控 持续交付 Docker
深入浅出:基于Docker的微服务部署实践
【2月更文挑战第26天】在当前软件开发领域,微服务架构与容器化技术成为提升应用可伸缩性、可靠性和开发效率的关键手段。本文将深入探讨如何利用Docker容器技术实现微服务的快速部署与管理,涵盖环境搭建、服务打包、网络配置及持续集成等核心话题。通过实例演示,旨在为开发者提供一套行之有效的微服务部署解决方案。
|
1月前
|
Kubernetes 测试技术 持续交付
探索微服务架构下的持续集成与部署最佳实践
本文将深入探讨在微服务架构下实施持续集成与部署的最佳实践,介绍如何利用现代化工具和流程来实现自动化测试、持续集成、灰度发布等关键环节,帮助开发团队提升交付效率和质量。
|
1月前
|
缓存 应用服务中间件 数据库
微服务多机房部署
【2月更文挑战第13天】微服务一般要部署在多个机房,保证有一个机房因为各种不可抗力因素导致不可用时,可以把流量切换到其他可用机房来避免故障。
|
2月前
|
云计算 开发者 Docker
深入浅出:使用Docker部署微服务架构
在当今快速迭代的软件开发环境中,微服务架构凭借其灵活性和可扩展性成为了热门趋势。本文将探讨如何利用Docker这一强大的容器化技术,简化和加速微服务应用的部署与管理过程。我们将从微服务的基本概念出发,逐步深入到Docker的核心功能,最后通过一个实际案例演示整个部署流程。文章旨在为开发者提供一个清晰、实用的指南,帮助他们有效地利用Docker在微服务架构下的应用部署。
26 0
|
2月前
|
持续交付 开发者 Docker
深入浅出:使用Docker简化微服务部署
在当今快速发展的软件开发领域,微服务架构因其高度的模块化和可伸缩性而受到广泛欢迎。然而,微服务的部署与管理往往是一个挑战,尤其是在多环境下维护一致性时。本文将探讨如何使用Docker容器技术来简化微服务的部署流程,从而实现快速、一致且可复制的部署策略。我们将通过一个示例项目演示如何构建、容器化及部署微服务,并讨论Docker在解决微服务架构中常见问题(如服务隔离、环境一致性和自动化部署)方面的优势。本文旨在为开发人员提供一种更加高效和可靠的微服务部署方法,帮助团队更好地利用Docker的强大功能,优化开发流程。
18 2
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架(七)Docker容器部署(Dubbo、Zookeeper、Dubbo-admin)
此系列文章将会描述Java框架**Spring Boot**、服务治理框架**Dubbo**、应用容器引擎**Docker**,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   **本文为Docker容器部署,包括Dubbo微服务、Zookeeper、Dubbo-admin的部署**
微服务框架(七)Docker容器部署(Dubbo、Zookeeper、Dubbo-admin)
|
4月前
|
消息中间件 持续交付 Docker
Docker与微服务:构建和部署微服务架构的完整指南
微服务架构已经成为现代应用开发的主要范式之一,而Docker容器技术则为微服务的构建、部署和管理提供了理想的解决方案。本文将深入探讨如何使用Docker构建和部署微服务架构,提供更多示例代码和细致的指南,以帮助大家更全面地理解和运用这些关键概念。