为什么要写微服务系列
- 很多测试局限于业务测试或者自动化脚本,对微服务架构不了解。
- 测试学习微服务架构难以找到切入点。
- 中间件测试一票难求,直接找中间件测试资料也很难,测中间件最重要的是你懂原理,知道怎么搭建、怎么玩。
基于以上种种,本公众号针对测试开始写微服务专栏,尽可能做个长期连载,此公众号最长的系列连载是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
@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, 可以看到如下页面
此时列表页是空的,还没有服务接入,接下来,我选用一服务接入,我这边有一个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/
文本结构如下
启动成功后你会发现,eureka管理页面有了相关服务的注册
至此你就完成了最简单的注册中心搭建以及服务接入,你可以看到eureka面板页面还有如下监控信息:
total-avail-memory : 总共可用的内存environment : 环境名称,默认test
num-of-cpus : CPU的个数
current-memory-usage : 当前已经使用内存的百分比
server-uptime : 服务启动时间
registered-replicas : 相邻集群复制节点
unavailable-replicas :不可用的集群复制节点
available-replicas :可用的相邻集群复制节点
我认为这样的监控信息仅作参考就可以,在监控方面eureka并非是专业的。