1.什么是微服务?
微服务(Microservices)是一种架构风格,一个大型复杂的项目,可以由多个微服务组成。
项目中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注完成自己的业务
微服务:一种良好的分布式架构方案
①优点:拆分粒度更小、服务更独立、耦合度更低
②缺点:架构非常复杂,运维、监控、部署难度提高
2.微服务的架构特征:
- 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
- 自治:团队独立、技术独立、数据独立,独立部署和交付
- 面向服务:服务提供统一标准的接口,与语言和技术无关
- 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
3.服务间的调用方式有哪些?
RPC :并发能力强,代表框架: dubbo
HTTP :更轻量,更灵活,
代表框架: HttpClient、UrlConnection、OkClient, Spring提供了整合: RestTemplate
4.什么是SpringCloud?
- SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件
5.SpringCloud的核心组件是什么?
服务注册中心 eureka、nacos
负载均衡 ribbon
熔断器 hystrix、sentinel
服务调用 feign
API网关 gateway
配置中心 nacos
6.SpringBoot、SoringCloud、微服务三者之间的关系
微服务:是一种架构风格……
SpringCloud是微服务架构的一站式解决方案
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配
SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化XML配置,内置HTTP服务器(Tomcat,Jetty),最终以Java应用程序进行执行。
可以快速开发微服务架构拆分的小项目
7.什么是注册中心?
服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是微服务架构中最基础的设施之一。
注册中心可以说是微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
8.注册中心的作用?
服务注册中心的作用就是「服务的注册」和「服务的发现」
9.如何使用Eureka注册中心
1.创建一个Eureka注册中心
新建一个maven模块
导入依赖
创建启动类 添加一个@EnableEurekaServer注解,开启eureka的注册中心功能
编写配置文件
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
2.服务注册
服务发现、服务注册统一都封装在eureka-client依赖
服务发现也需要知道eureka地址,因此第二步与服务注册一致,都是配置eureka信息:
3.服务发现
修改访问的url路径,用服务名代替ip、端口:
10.如何使用Nacos注册中心
下载-解压-找到bin目录-startup.cmd -m standalone
导入依赖
配置nacos地址
11.什么是Ribbon? 作用?
SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。
12.Ribbon的工作原理?
- 拦截我们的RestTemplate请求http://userservice/user/1
- RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-service
- DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表
- eureka返回列表,localhost:8081、localhost:8082
- IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081
- RibbonLoadBalancerClient修改请求地址,用localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求
13.Ribbon支持的负载均衡策略?
| 内置负载均衡规则类 | 规则描述 |
|---|---|
| RoundRobinRule | 简单轮询服务列表来选择服务器。 |
| AvailabilityFilteringRule | 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的..ActiveConnectionsLimit属性进行配置。 |
| WeightedResponseTimeRule | 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。 |
| ZoneAvoidanceRule | 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。 |
| BestAvailableRule | 忽略那些短路的服务器,并选择并发数较低的服务器。 |
| RandomRule | 随机选择一个可用的服务器。 |
| RetryRule | 重试机制的选择逻辑 |
14.Ribbon如何配置修改负载均衡策略?
代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:
@Bean
public IRule randomRule(){
return new RandomRule();
}
配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
15.Ribbon如何设置饥饿加载?
修改服务消费者的配置文件(服务调用者)
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载。
ribbon:
eager-load:
enabled: true
clients: userservice
