测试也需要学习的微服务知识(一)

2021-08-06 14:30:15 浏览数 (1)

为什么要写微服务系列

  • 很多测试局限于业务测试或者自动化脚本,对微服务架构不了解。
  • 测试学习微服务架构难以找到切入点。
  • 中间件测试一票难求,直接找中间件测试资料也很难,测中间件最重要的是你懂原理,知道怎么搭建、怎么玩。

基于以上种种,本公众号针对测试开始写微服务专栏,尽可能做个长期连载,此公众号最长的系列连载是18篇,希望这个系列能有所突破,尽量说些大白话让测试同学能够找到更多的切入点,今天先聊聊微服务背景和网关的知识点。

单机架构

单机架构目前已经不算多见,往往是一个开发包里面包含多种功能,如订单,支付,商品都在一起,不会区分业务功能点。这样的方式开发周期长,依赖复杂。

单机架构

分布式架构

soa架构

(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在与操作系统进程中。各个服务之间 通过网络调用。

微服务架构

其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

soa与微服务的核心区别

从解释来看,可能看不出soa与微服务架构的核心区别,微服务是完全去中心化的,而SOA架构有一套ESB企业服务总线,ESB就是一根管道,用来连接各个服务节点。为了集成不同系统,不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通。

soa与微服务核心区别

springboot,springcloud,springcloudAlibaba区别和联系

springboot

用我的话来理解,Spring Boot就是整合了框架的框架,它让一切依赖都变得有序简单,你不用操心A.jar是什么版本,又依赖哪些版本的jar,它默认配置了很多框架的使用方式,就像 maven整合了所有的jar包,Spring Boot整合了所有的框架,第三方库的功能你拿着就能用。

springcloud

Spring Cloud可以基于springboot,是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它本身不会提供具体功能性的操作,更专注于服务之间的通讯、熔断、监控等。因此就需要很多的组件来支持一套功能,更多的在于服务间的管理功能,其中注册中心eureka2.0已经闭源,大部分使用eureka的版本还是1.0。

springcloudAlibaba

SpringCloudAlibaba实际上对我们的SpringCloud2.x和1.x实现拓展组件功能,尤其对于服务的配置,发现,管理更新了自己的组建nacos。

nacos是分布式配置中心 分布式注册中心=Eureka config。

研发SpringCloudAlibaba目的是为了做生态链,推广阿里的产品,如果使用了SpringCloudAlibaba,最好使用alibaba整个体系产品。

目前市面上用的最多的微服务架构是Springcloud和SpringcloudAlibaba,我们接下来了解微服务最核心的组件注册中心。

注册中心的作用

服务发现: 服务注册/反注册:保存服务提供者和服务调用者的信息 服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能 服务路由(可选):具有筛选整合服务提供者的能力。

服务配置: 配置订阅:服务提供者和服务调用者订阅微服务相关的配置 配置下发:主动将配置推送给服务提供者和服务调用者

服务健康检测: 检测服务提供者的健康情况

目前最常见的注册中心是eureka和nacos,我们先来学习eureka,虽然2.0版本已经闭源,但是目前使用1.0版本的公司也很多。Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。

上图简要描述了Eureka的基本架构,由3个角色组成: 1、Eureka Server 提供服务注册和发现 2、Service Provider 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到 3、Service Consumer 服务消费方 从Eureka获取注册服务列表,从而能够消费服务

Eureka的交互流程与原理

图是来自Eureka官方的架构图,大致描述了Eureka集群的工作过程。图中包含的组件非常多,可能比较难以理解,我们用通俗易懂的语言解释一下:

  • Application Service 相当于本书中的服务提供者,Application Client相当于服务消费者;
  • Make Remote Call,可以简单理解为调用RESTful API;
  • Eureka Client是一个Java客户端,用于简化与Eureka Server的交互;Eureka Server提供服务发现的能力,各个微服务启动时,会通过Eureka Client向Eureka Server进行注册自己的信息(例如网络信息),Eureka Server会存储该服务的信息;
  • 微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以续约自己的信息。如果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会注销该微服务节点(默认90秒)

如何引入Eureka服务?

对于idea编辑器来说,我们新建Spring项目即可,在Cloud Discovery选择Eureka Server即可,如图所示

关于项目创建步骤不一一展示,大家百度下相关的文章非常多,没什么难点,项目创建完成后,进入项目进行配置。

1.在启动代码中添加@EnableEurekaServer

代码语言:javascript复制
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

2.在application.properties添加配置文件

代码语言:javascript复制
server:
  port: 8001

eureka:
  instance:
    hostname: localhost
  client:
  #声明自己是个服务端
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enable-self-preservation: false

3.启动项目访问,本地:8001, 可以看到如下页面

此时列表页是空的,还没有服务接入,接下来,我选用一服务接入,我这边有一个product的demo,首先看下包的引入

代码语言:javascript复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

修改application.yml, 添加如下内容

代码语言:javascript复制
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8001/eureka/

文本结构如下

启动成功后你会发现,eureka管理页面有了相关服务的注册

至此你就完成了最简单的注册中心搭建以及服务接入,你可以看到eureka面板页面还有如下监控信息:

total-avail-memory : 总共可用的内存environment : 环境名称,默认test

num-of-cpus : CPU的个数

current-memory-usage : 当前已经使用内存的百分比

server-uptime : 服务启动时间

registered-replicas : 相邻集群复制节点

unavailable-replicas :不可用的集群复制节点

available-replicas :可用的相邻集群复制节点

0 人点赞