1.什么是微服务?
微服务(Microservices)是一种架构风格,一个大型复杂的项目,可以由多个微服务组成。
项目中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注完成自己的业务
2.服务间的调用方式有哪些?有何区别?
- HTTP方式
- 更轻量,更灵活
- 代表框架: HttpClient(优化方式选择这个,支持连接池)、UrlConnection(默认方式,不支持连接池)、OkClient
- Spring提供了整合: RestTemplate
RPC方式
微服务与SpringCloud的联系
- 微服务架构为一种架构模式.他提倡将单一应用程序分成一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值.
- SpringCloud就是微服务架构一站式解决方案
SpringBoot与SpringCloud的联系
- SpringBoot专注于方便的开发单个个体微服务
- SpringCloud是关注于全局的微服务协调治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来.为各个微服务之间提供配置管理,服务发现,断路器,路由,微代理,事件总线,决策竞选,分布式会话等集成服务.
SpringBoot可以离开SpringCloud单独使用,而SpringCloud离不开SpringBoot
5.eureka的作用介绍?
eueka按逻辑上可以划分为3个模块,eureka-server,service-provider,service-consumer
- eureka-server:服务端,提供服务注册和发现
- eureka-client-service-provider:服务端,服务提供者,通过http rest告知服务端注册,更新,取消服务
eureka-client-service-consumer:客户端,服务消费者,通过http rest从服务端获取需要服务的地址列表,然后配合一些负载均衡策略(ribbon)来调用服务端服务。
6.eureka的基本工作原理?
服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。
当服务注册中心Eureka Server检测到服务提供者因为宕机、网络原因不可用时,则在服务注册中心将服务置为DOWN状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地缓存。
服务提供者在启动后,周期性(默认30秒)向Eureka Server发送心跳,以证明当前服务是可用状态。Eureka Server在一定的时间(默认90秒)未收到客户端的心跳,则认为服务宕机,注销该实例。7.ribbon的作用介绍?
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
8.ribbon的基本工作原理?
请求被LoadBalancerInterceptor拦截
- 获取uri中的host,也就是服务名称
- 交给RibbonLoadBalanceClient的对象,根据服务名称获取服务列表,保存DynamicServerListLoadBalancer
- 交给IRule,利用负载均衡规则选择一各实例
-
9.ribbon支持的负载均衡策略?
ZoneAvoidanceRule(默认)
- 轮询 RoundRobinRule
- 随机 RandomRule
- 重试机制 RetryRule
- AvailabilityFilteringRule 可用性敏感
- WeightedResponseTimeRule 权重
-
10.nacos的作用介绍?
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
11.nacos如何隔离不同环境?
如上图首先创建新的命名空间
- 给微服务配置namespace只能通过修改配置来实现。
例如,修改order-service的application.yml文件,如下图所示
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
12.nacos和eureka的区别?
Nacos的服务实例分为两种l类型:(eureka只有临时实例)
- 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
- 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
配置一个服务实例为永久实例:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例
Nacos与Eureka的区别:
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式