【微服务】微服务学习

【API 网关】

API Gateway(API网关)是一个服务器,扮演着应用程序或服务的前端,负责接收客户端发送的API请求,然后将这些请求路由到相应的后端服务。它通常封装了内部系统的架构,并提供API给各个客户端。以下是API Gateway的主要功能和作用:

  1. 请求转发和合成:API Gateway可以接收来自客户端的请求,并根据预定义的规则将这些请求转发到相应的后端服务。此外,它还可以组合多个服务的响应,并返回给客户端一个统一的响应。
  2. 协议转换:API Gateway可以在web协议(如HTTP、HTTPS)与内部使用的非Web友好型协议(如Thrift、gRPC等)之间进行转换,使得客户端可以与后端服务进行通信,而无需了解后端服务的具体实现细节。
  3. 安全性增强:API Gateway可以对外部和内部进行隔离,减少对外暴露服务,从而增加系统的安全性。此外,它还可以提供身份验证、授权、加密等安全功能,确保API请求的安全性和完整性。
  4. 限流和熔断:通过API Gateway,可以对调用方调用每个接口的每日调用及总调用次数进行限制,以防止恶意攻击或过度使用资源。同时,当某个后端服务出现故障时,API Gateway可以实现熔断,防止故障扩散到整个系统。
  5. 负载均衡:API Gateway可以将请求分发到多个后端服务实例上,实现负载均衡,提高系统的可扩展性和性能。
  6. 监控和日志记录:API Gateway可以记录所有API请求的详细信息,包括请求时间、请求参数、响应结果等,以便于进行监控和故障排查。
  7. 统一接口:对于公司内部不同的服务,提供的接口可能在风格上存在一定的差异。通过API Gateway,可以统一这种差异,使得客户端可以使用统一的接口来调用不同的服务。

总之,API Gateway在现代微服务架构中扮演着至关重要的角色,它提供了许多有用的功能,如请求转发、协议转换、安全性增强、限流和熔断、负载均衡、监控和日志记录等,使得客户端可以更加安全、高效地与后端服务进行通信。

缺点:

不过API Gateway也有可能成为单点故障点或者性能的瓶颈

【进程间通信  IPC(Inter-Process Communication)】

【技术背景】:IPC(Inter-Process Communication)是进程间通信的缩写,它指的是不同进程之间进行数据交换和通信的机制。在一个操作系统中,每个进程都有自己独立的地址空间和资源,它们不能直接访问其他进程的内存空间。然而,在实际应用中,进程之间经常需要进行数据交换、共享资源以及协作工作。为了实现这些功能,操作系统提供了IPC机制,允许进程之间进行通信和数据传输。

IPC的方式有多种,包括但不限于以下几种:

  1. 管道(Pipe):管道是一种单向的通信机制,用于在具有亲缘关系的进程之间传递数据。管道可以分为无名管道和命名管道(FIFO)。无名管道只能用于具有亲缘关系的进程之间的通信,而命名管道允许无亲缘关系进程间的通信。
  2. 消息队列(Message Queue):消息队列是消息的链接表,包括Posix消息队列和System V消息队列。消息队列独立于发送与接收进程,因此可以实现异步通信。
  3. 共享内存(Shared Memory):共享内存是一种进程间通信的方式,它通过将某一块内存区域映射到多个进程的地址空间中,实现不同进程之间的数据共享。这种方式可以高效地传递大量数据,但需要解决进程间的同步和互斥问题,以保证数据的正确性。
  4. 信号量(Semaphore):信号量是一个计数器,用于控制多个进程对共享资源的访问。通过对信号量进行操作,可以实现进程之间的同步和互斥。
  5. 套接字(Socket):套接字是支持TCP/IP网络通信的基本操作单元,它是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远地主机的IP地址、远地进程的协议端口。

IPC机制在实际的应用中有着广泛的应用场景。例如,在多线程编程中,线程之间需要进行数据共享和同步,可以使用基于内存的IPC机制来实现;在分布式系统中,不同节点之间需要进行数据交换和通信,可以使用基于消息的IPC机制来实现;在操作系统中,进程之间需要进行协作和资源共享,也需要使用IPC机制来实现。此外,IPC工控机广泛应用于各种工业领域,如自动化生产线、机器人控制、医疗设备、航空航天等,是工业自动化控制中不可或缺的一部分。

 【每个服务之间如何通信

所有的微服务都是独立的Java进程跑在独立的虚拟机上,所以服务间的通信就是IPC(inter process communication),已经有很多成熟的方案。现在基本最通用的有两种方式

同步调用:

①REST(JAX-RS,Spring Boot)

②RPC(Thrift, Dubbo)

异步消息调用:  (Kafka, Notify, MetaQ)

【Rest】

REST(Representational State Transfer)是一种基于HTTP协议的通信方式,用于实现服务之间的通信。在微服务架构中,REST被广泛用于服务之间的接口定义和数据交换。以下是关于REST在JAX-RS和Spring Boot中的应用和实现的简要说明:

JAX-RS

JAX-RS(Java API for RESTful Web Services)是Java平台上的一个API,用于构建RESTful Web服务。它定义了一套注解和接口,使得开发者可以方便地定义RESTful的接口和实现。

特点:

  1. 基于HTTP协议:JAX-RS使用HTTP协议进行通信,支持GET、POST、PUT、DELETE等HTTP方法。
  2. 资源定位:通过URI定位资源,符合RESTful的原则。
  3. 内容协商:支持多种数据格式,如JSON、XML等,通过HTTP的Accept头部进行内容协商。
  4. 注解驱动:使用注解来简化RESTful接口的开发,如@Path@GET@POST等。

实现:

在JAX-RS中,开发者需要定义资源类(Resource Class),使用注解来指定URI和方法。然后,使用支持JAX-RS的服务器(如Jersey、RESTeasy等)来运行这些资源类,并提供RESTful接口。

Spring Boot

Spring Boot是一个快速构建Spring应用的框架,它内置了对RESTful Web服务的支持。在Spring Boot中,可以使用Spring MVC或Spring WebFlux来构建RESTful接口。

特点:

  1. 快速开发:Spring Boot提供了许多自动化配置和约定俗成的规范,使得开发者可以快速构建RESTful Web服务。
  2. 内置安全性:Spring Boot集成了Spring Security,提供了强大的安全性支持。
  3. 监控和管理:Spring Boot Actuator提供了丰富的监控和管理功能,可以方便地查看应用的运行状态和性能指标。
  4. 扩展性强:Spring Boot支持多种扩展方式,如自定义配置、自动配置扩展、starter依赖等。

实现:

在Spring Boot中,开发者可以使用@RestController@RequestMapping等注解来定义RESTful接口。然后,使用Spring Boot的自动配置功能来简化开发流程。此外,Spring Boot还提供了许多starter依赖,可以方便地集成其他组件和库,如数据库、缓存、消息队列等。

总之,REST作为一种通用的服务间通信方式,在JAX-RS和Spring Boot等框架中得到了广泛的应用和实现。这些框架提供了丰富的功能和工具,使得开发者可以更加高效地构建和维护RESTful Web服务。

posted on 2024-05-14 20:53  彩屏黑白  阅读(3)  评论(0编辑  收藏  举报

导航