文章目录
什么是微服务?
微服务是一种架构风格,并不是一个框架。
微服务的特点
1、由一系列微小服务组成。
2、每个服务单独跑在自己的进程里。
3、每个服务为独立的业务开发。
4、独立部署。
5、分布式的管理。
项目架构的演进:
从单一应用架构=>垂直应用架构=>分布式服务架构=》流动计算架构
分布式的定义:
旨在支持应用程序和服务的开发,可以利用物理架构由多个自治的处理元素,不共享内存,但通过网络发送消息合作。
简单的微服务架构
服务架构的基础及框架\组件
- 服务注册发现
- 服务网关–限流、监控、日志等。
- 后端通用服务(也称中间层服务)
- 前端服务(边缘服务)
外面常用的微服务有
1、阿里系
- Dubbo 做服务化治理
- Zookeeper 服务注册
- SpringMVC或Spring Boot
2、SpringCloud全家桶。
Spring Cloud是什么?
SpringCloud 是一个开发工具集,包含了多个子项目:
- 利用Spring Boot的开发便利
- 主要是基于Netflix开源组合组件的进一步封装。
Spring Cloud 简化了分布式开发,要想理解微服务更要理解分布式架构的特点。
Spring Cloud Eureka
- 基于Netflix Eureka 做了二次封装
- 两个组件组成:
- Eureka Server 注册中心。供服务注册的服务器
- Eureka Client (其他服务)服务注册。用来简化与服务器的交互。
Eureka Server 注册中心
1、新建一个Eureka应用
2、选择eureka server
3、项目创建完毕需要在启动类上添加注解@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
启动项目,访问 http://localhost:8080/ , 会显示如下页面:
若启动报错是因为Eureka Server 本身即是服务端也是客户端,需要将自己注册在注册中心。
因此需要在application.yml配置文件中进行客户端地址。
ureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka
若不想将服务端注册在注册中心,也可以通过添加配置关闭服务端的客户端功能。
eureka:
client:
register-with-eureka: false
给服务进行名字配置
spring:
application:
name: eureka
Eureka Client 服务注册
1、新建client项目,选择添加如下依赖:
2、在启动类中添加注解:@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
在配置文件中进行注册中心的地址配置:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
如果启动项目的时候,客户端还没启动就被关闭,控制台也没有端口输出,是因为pom引入spring boot的web依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
启动项目后,页面如下:
Status下的地址跳转到一个页面,如果想要自定义跳转地址的ip,可以在配置文件进行配置:
eureka:
instance:
hostname: clientname
配置后,点击status中连接跳转页面:
如果不停的重启client端,当客户端上线率低于某个比例时,会报警告。在开发环境中,可以在Eureka server端配置中关闭:
eureka:
server:
enable-self-preservation: false
Eureka 的高可用
当Eureka 服务只在一台服务器上部署时,如果服务器挂掉了此时整个注册中心也就挂了,一般我们在生产环境中,会启动多个eureka,并将eureka两两互相注册。
将Eureka server 复制两份,定义不同的端口号。
项目启动,分别在浏览器访问 http://localhost:8761/ 和 http://localhost:8762/ 也面如下:
均可以发现Client都被注册在上面,此时任何一个Eureka 服务挂掉,client并不受影响。如果client关掉服务并重启,在关掉8761的服务,此时发现8762注册中心并没有client服务。我们需要在client的配置中,进行多个地址配置:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka