测试也要学的微服务知识

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 干货入门

为什么要写微服务系列

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


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

单机架构

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

image.png

                                          单机架构

分布式架构

soa架构

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


微服务架构

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


soa与微服务的核心区别

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

image.png

                                       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整个体系产品。


image.png

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

注册中心的作用

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

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

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


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

image.png


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


Eureka的交互流程与原理

image.png

图是来自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即可,如图所示

image.png

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

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


@SpringBootApplication@EnableEurekaServerpublic class EurekaServerApplication {    public static void main(String[] args) {        SpringApplication.run(EurekaServerApplication.class, args);    }}


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


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, 可以看到如下页面

image.png


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


<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>


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


eureka:  client:    serviceUrl:      defaultZone: http://localhost:8001/eureka/

文本结构如下

image.png


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

image.png


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

image.png

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

num-of-cpus : CPU的个数

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

server-uptime : 服务启动时间

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

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

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

我认为这样的监控信息仅作参考就可以,在监控方面eureka并非是专业的。


目录
相关文章
|
2月前
|
JavaScript 前端开发 Java
一文让你了解微服务契约测试
谈到微服务,大家都想到契约测试,到底什么是契约测试呢,为什么要使用契约测试呢,关于这样的文章很多,本文将结合Spring Boot让你了解微服务契约测试。
31 0
一文让你了解微服务契约测试
|
3月前
|
安全 测试技术 持续交付
微服务的测试策略
【8月更文第29天】随着微服务架构的普及,测试变得尤为重要,因为它有助于确保各个独立的服务都能正确运行并且能够协同工作。本文将介绍一种全面的测试策略,包括单元测试、集成测试和端到端测试,以及如何为微服务应用编写这些测试。
119 0
|
4月前
|
测试技术 调度 微服务
微服务架构下的两类测试
【7月更文挑战第16天】微服务架构下的两类测试:流量录制回放测试和仿真环境测试
|
6月前
|
人工智能 算法 测试技术
探索软件自动化测试的未来:AI驱动的测试策略构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第28天】 在软件开发的世界中,测试是确保产品质量的关键步骤。随着技术的进步和项目复杂性的增加,传统的手动测试方法逐渐显得力不从心。本文旨在探讨自动化测试的最新趋势——人工智能(AI)驱动的测试策略。我们将分析AI如何通过智能化的测试用例生成、测试执行优化以及结果分析来提高测试效率和精确性。文章还将讨论实施AI测试策略的挑战与机遇,为软件测试工程师提供未来技术转型的视角。 【5月更文挑战第28天】 在当今软件开发的快速迭代和复杂多变的环境中,传统的单体应用架构已经难以满足业务敏捷性和可扩展性的需求。微服务架构作为一种新的解决方案,以其服务的细粒度、独立部署和弹性伸缩等特性,正逐
|
6月前
|
Java 测试技术 持续交付
Java中的异常处理机制探索自动化测试在微服务架构中的实践与挑战
【5月更文挑战第27天】本文将深入探讨Java中的异常处理机制,包括异常的概念、分类以及如何使用try-catch-finally语句进行异常处理。文章还将介绍自定义异常的方法以及在实际开发中如何选择合适的异常处理策略。 【5月更文挑战第27天】 随着软件开发领域向微服务架构的转型,传统的软件测试方法面临诸多挑战。本文旨在探讨自动化测试在微服务环境下的应用实践及所面临的问题。我们将从微服务的特性出发,分析自动化测试的必要性,并深入讨论如何构建一个高效、鲁棒的自动化测试框架。文章还将介绍一系列创新的测试策略和工具选择,以及如何克服微服务带来的分布式复杂性。最后,通过案例研究,展示自动化测试在实
|
关系型数据库 测试技术 Go
Go语言微服务框架 - 5.GORM库的适配sqlmock的单元测试
与此同时,我们也缺乏一个有效的手段来验证自己编写的相关代码。如果依靠连接到真实的MySQL去验证功能,那成本实在太高。那么,这里我们就引入一个经典的sqlmock框架,并配合对数据库相关代码的修改,来实现相关代码的可测试性。
137 0
|
数据可视化 Java 测试技术
微服务轮子项目(47) -压力测试工具
微服务轮子项目(47) -压力测试工具
107 0
|
SQL Java 测试技术
微服务轮子项目(46) -SonarQube静态代码测试
微服务轮子项目(46) -SonarQube静态代码测试
85 0
|
JSON 算法 Java
Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(二))(JMeter模拟测试)
Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)(二)
|
监控 Java 应用服务中间件
Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(一))(JMeter模拟测试)
Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)(一)