第二代 Spring Cloud 微服务核心技术

欢迎关注微信公众号:Coding我不配  
获取更多干货,一起每天进步一点点

在这里插入图片描述

1 什么是微服务

单体应用程序就是所有的功能全部堆积在一起。在这个唯快不破的互联网时代,能否快速发布新功能、支持高并发和大数据,很大程度上决定了一个产品的生死。

随着业务快速发展,微服务架构应运而生。

微服务是一种结构风格,服务之间使用遵循 HTTP 的 API 进行资源访问与操作。每个小型服务可以独立部署,可以采用不同的语言进行开发,可以使用不同的数据库进行数据存储。

微服务优点

第一个优点是服务独立,每个服务都有独立的代码仓库、独立的数据库、独立进行部署的能力。

第二点是开发体验好,开发体验好的关键点在于启动速度快,克隆代码速度快,编译部署速度快,技术选型更自由。

第三点是职责专一性,服务只负责本身的业务,不关心无关业务。这样有利于实现不同的团队维护不同的服务。

第四点是按需扩容,也就是说某个服务特别耗内存,可以单独部署在内存比较大的机器上;如果特别耗 CPU , 那可以部署到 CPU 比较好的机器上。且只需要部署这个服务,不需要像单体应用那样部署整个应用。

微服务缺点

微服务在解决问题的同时也引入了新的问题。

第一个缺点是分布式带来的复杂性,服务拆分后,本地调用变成了远程调用,服务实例有多个,如何负载均衡;被调用的服务出问题的话,如何调用容错;服务之间的依赖关系如何等问题。

第二个缺点是运维的复杂性,拆分后的服务数量多,部署后的服务节点多,需要有日志的统一管理,才方便通过日志排查问题。服务需要有统一监控,才能在发生问题时及时告警。

第三个缺点是服务拆分的复杂性,如何拆分出对应的服务很关键,需要结合自身的业务领域进行合理的拆分。拆分后每个服务都有自己的数据库,当一个业务操作涉及多个服务时,如何保证数据一致性等。

2 Spring Cloud 微服务治理

国外大多使用 Spring Cloud,而国内也有不少公司是基于阿里开源的 Dubbo 框架来构建微服务。

不过从 2017 年开始,Spring Cloud 在国内的普及度逐渐变高,越来越多的企业也开始使用 Spring Cloud。2019 年 8 月,Spring Cloud Alibaba 的发布也助力了 Spring Cloud 的高速发展。

Dubbo 专注于服务治理这块,性能比较高。而 Spring Cloud 的优势在于社区活跃,发布新功能的频率高,组件非常齐全,整合起来简单。

Spring Cloud 组件

了解 Spring Cloud,需要对其中框架进行一定的掌握。 Spring Cloud 框架中的核心组件构成包括:

Eureka 主要用于服务治理;

Ribbon 用于负载均衡;

Hystrix 用于服务之间远程调用时的容错保护;

Feign 可以让通过定义接口的方式直接调用其他服务的 API;

Zuul 是 API 网关,是客户端请求的入口,负责鉴权,路由等功能;

Gateway 是新推出的基于 Spring 5 的响应式网关;

Config 用于统一的配置管理;

Sleuth 用于请求链路跟踪;

Stream 用来为微服务应用构建消息驱动能力。

3 Eureka 服务治理

Eureka 是 Spring Cloud 中负责服务注册与服务发现的组件,专注于服务注册与服务发现。

Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架构中的服务治理功能。

Spring Cloud Eureka 是一个基于 REST 的服务,并提供了基于 Java 的客户端组件,能够非常方便的将服务注册到 Spring Cloud Eureka 中进行统一管理。

服务注册

什么是注册中心?为了方便理解,可以将注册中心拆解成两个部分,分别是注册和中心。注册很好理解,比如用户注册,就是将自己的信息注册在某个平台上。再来看中心,可以理解成一个统一管理信息的平台。两个部分连起来就是注册中心,也就是统一管理所有注册信息的平台。

服务注册指的是服务在启动时将自身的信息注册到注册中心中,方便信息进行统一管理。服务注册是客户端向注册中心提交信息的动作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GHTgYLQP-1594891179379)(https://imgkr.cn-bj.ufileos.com/3c332b17-20b1-434c-8095-614d055d2878.png)]

如上图所示,上面的部分是注册中心,下面的客户端是应用程序,服务注册就是应用程序在启动之后将自身的信息向注册中心进行注册的过程,服务注册后注册中心就有了所有应用程序的信息。

服务发现

服务发现指的是从注册中心获取对应服务的信息。服务发现是客户端向注册中心获取信息的动作。

如上图所示是服务发现的过程。每个客户端都会从注册中心拉取自己关注的信息到本地。

服务调用

服务调用,简单的说是一个应用程序调用另一个应用程序。调用的前提是服务注册与服务发现协作完好。

  • 注册中心,用来集中存储管理服务信息。

  • 服务提供者,通过 API 供其他方调用服务。

  • 服务消费者,需要调用其他方的 API 获取服务。

无论是服务提供者还是服务消费者,都会将信息注册到注册中心中进行统一管理。

服务消费者需要知道服务提供者的信息,比如 IP、 端口等信息,才能发起远程调用,所以需要通过拉取的动作从注册中心拉取对应服务的信息,然后发起调用。

当服务提供者出现故障后,这时是无法提供服务的,如果此时服务提供者留在注册中心的状态还是正常就会导致服务消费者调用服务失败。

那么注册中心如何知道其他服务是否健康呢,这时就需要有一个心跳的动作,心跳就是健康汇报,定时跟注册中心汇报服务健康状态。

当一定时间内无心跳产生,则证明服务可能出现故障,无法汇报健康状态,注册中心就会剔除无效的服务信息。

Eureka 架构

Eureka 的架构主要分为 Eureka Server 和 Eureka Client 两部分,Eureka Client 又分为 Applicaton Service 和 Application Client,Applicaton Service 就是服务提供者,Application Client 就是服务消费者。

首先会在应用程序中依赖 Eureka Client,项目启动后 Eureka Client 会向 Eureka Server 发送请求,进行注册,并将自己的一些信息发送给 Eureka Server。

注册成功后,每隔一定的时间,Eureka Client 会向 Eureka Server 发送心跳来续约服务,也就是汇报健康状态。 如果客户端长时间没有续约,那么 Eureka Server 大约将在 90 秒内从服务器注册表中删除客户端的信息。

Eureka Client 还会定期从 Eureka Server 拉取注册表信息,然后根据负载均衡算法得到一个目标,并发起远程调用。

应用停止时也会通知 Eureka Server 移除相关信息,信息成功移除后,对应的客户端会更新服务的信息,这样就不会调用已经下线的服务了,当然这个会有延迟,有可能会调用到已经失效的服务,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值