跳到主要内容

微服务架构—寒枫

微服务

由单体架构到 SOA 架构(面向服务)再到微服务架构。微服务架构区别于传统的单体软件架构,是一种为了适应当前互联网后台服务的「三高需求:高并发、高性能、高可用」而产生的的软件架构。 微服务的核心是 API,在一个大型系统中,我们可以将其拆分为一个个的子模块,每一个模块就可以是一个服务,各服务之间通过 API 进行通信。

单体应用程序的优缺点
  • 开发简洁,功能都在单个程序内部,便于软件设计和开发规划。
  • 容易部署,程序单一不存在分布式集群的复杂部署环境,降低了部署难度。
  • 容易测试,没有各种复杂的服务调用关系,都是内部调用方便测试。

单体程序的缺点一开始不是特别明显,项目刚开始需求少,业务逻辑简单,写代码一时爽,一直爽。噩梦从业务迭代更新,系统日益庞大开始,前期的爽没有了,取而代之的是软件维护和迭代更新的无尽痛苦。由于单体式应用程序就像一个大型容器一样,里面放置了许多服务,且他们都是密不可分的,这导致应用程序在扩展时必须以「应用程序」为单位。当里面有个业务模块负载过高时,并不能够单独扩展该服务,必须扩展整个应用程序(就是这么霸道),这可能导致额外的资源浪费。此外,单体式应用程序由于服务之间的紧密度、相依性过高,这将导致测试、升级有所困难,且开发曲线有可能会在后期大幅度地上升,令开发不易。

Spring Cloud 被称为构建分布式微服务系统的“全家桶”,它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。项目部署需要配合 Docker 等容器技术进行集群部署

微服务优缺点

各个服务独立且隔离,技术可异构,可扩展,易迁移优化,鲁棒性强 微服务注册与发现.webp

服务注册与发现,服务监控、容错、安全、治理

成熟框架

阿里 Dubbo 或者说 Spring Cloud Alibaba(Java),腾讯 TAF(C++),谷歌 gRPC。Spring Cloud,Service Mesh

RPC (Remote Procedure Call)远程过程调用是一个计算机通信协议。我们一般的程序调用是本地程序内部的调用,RPC 允许你像调用本地函数一样去调用另一个程序的函数,这中间会涉及网络通信和进程间通信,但你无需知道实现细节,RPC 框架为你屏蔽了底层实现。RPC 是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。 微服务框架一般都包含了 RPC 的实现和一系列「服务治理」能力,是一套软件开发框架。我们可以基于这个框架之上实现自己的微服务,方便的利用微服务框架提供的「服务治理」能力和 RPC 能力,所以微服务框架也被有些人称作 RPC 框架。

SpringCloud

微服务架构的七个组件

参考教程:微服务架构详解(史上最全图文解读) - 潇沫明月 - 博客园

1.注册与发现
  • 工具:Eureka、Consul、Zookeeper
  • 机制:客户端发现、服务端发现 Eureka 注册中心 拆分成多个服务之后,需要管理多个服务,Eureka 作为 Spring Cloud 框架的注册中心,起到服务注册和服务发现的作用。Eureka 的基本架构,由 3 个角色组成:

1)Service Provider: 暴露服务的服务提供方;

2)Service Consumer:调用远程服务的服务消费方;

3)EureKa Server: 服务注册中心和服务发现中心;

2.负载均衡

工具:Ribbon Ribbon 主要作用是提供客户端的软件负载均衡算法,将 Netflix 的中间层服务连接在一起。 当多个服务提供者时,Ribbon 可以根据负载均衡的算法,比如:如简单轮询、随机连接等,自动地选择需要调用的服务地址。

3. API 网关
  • 工具:Zuul、Gateway
  • 功能:
    1. 统一对外接口
    2. 统一鉴权
    3. 服务注册与授权
    4. 服务限流
    5. 全链路跟踪

Zuul 是 Spring Cloud 子项目的核心组件之一,可以作为微服务架构中的 API 网关使用,支持动态路由与过滤功能。 Zuul 就是微服务网关的一种实现,Zuul 作用:类似小区的保安,用于保护基本的安全等的作用。 Zuul 本质上是一个 Web servlet 应用,为微服务架构中的服务提供了统一的访问入口,客户端通过 API 网关访问相关服务。 a094ab86-68b4-46ca-856a-33a6e0d467d7.webp

4. REST 调用
  • 工具:Feign Feign 是 Spring Cloud 组件中的一个轻量级 Restful 的 HTTP 服务客户端,通过 接口 + 注解的方式发起 HTTP 请求调用。Feign 主要是帮助我们方便进行 Rest API 服务间的调用,Feign 最大的作用就是减少 HTTP 远程调用的复杂性。Feign 实现了像调用本地方法一样调用远程方法,无感知远程 HTTP 请求,类似于 Dubbo Consumer 直接调用 Provider 的接口方法。
5. 容错处理(监控和断路器)
  • 工具:Hystrix Hystrix 的主要作用就是:提供服务隔离、熔断、降级机制。
6. 统一管理配置
  • 工具:Config Config 属于统一管理配置类工具,用于实现微服务架构中配置的集中管理、动态刷新等功能。
7. 服务跟踪
  • 工具:Sleuth Sleuth 属于服务跟踪类工具,用于实现微服务调用的全链路跟踪,辅助定位服务调用中的问题。