第六篇:微服务框架(SpringBoot、SpringCloud)

目录

一. 微服务框架

1. 微服务架构概念

2. 微服务的利与弊(为什么要用微服务)

二. SpringBoot

1. SpringBoot是什么?

2. SpringBoot核心注解是什么?

3. 什么是SpringBoot的自动配置?原理是什么?

4. springboot监视器了解吗?

5. SpringBoot怎么保证程序安全性?

6. 微服务如何实现session共享?

7. springboot如何实现定时任务?

三. SpringCloud 和 SpringCloud Alibaba

1. SpringCloud是什么?

2. Spring、SpringBoot、SpringCloud 区别?

3. SpringCloud 和 SpringCloud Alibaba (前五行 微服务五大件)

(一)Spring Cloud

1. Eureka(服务注册与发现)

2. Ribbon(客户端负载均衡)

3. Feign(http服务调用)

4.Hystrix(服务容错)

5. Zuul(网关)

(二)Spring Cloud Alibaba

1. Nacos(服务注册发现)

2. Dubbo(rpc服务调用)

3. Ribbon(客户端负载均衡)

4. Sentinel(服务容错)

5. Zuul、Getway(网关)

6. SchedulerX(分布式调度)

7. Diamond(配置中心)


一. 微服务框架

1. 微服务架构概念

单体架构 ——> 集群 ——> 垂直化 ——> 服务化(SOA:面向服务的架构) ——> 微服务化(SOA的细粒度化)

SOA和微服务的区别?

  • SOA是面向服务的架构:解耦,解决信息孤岛问题,数据之间要互联互通
  • 微服务是SOA的细粒度化:比如把用户服务拆成账户服务、积分服务等

服务注册中心的作用?

  • 服务的动态感知:服务上线下线
  • 服务地址的高效管理:不需要每个客户端都去管理服务地址,而是可以通过服务名直接调用服务

注:服务注册中心有Zookeeper、Eureka、Nacos、consul

网关的作用?

        路由、权限认证、日志记录、限流、熔断

限流、降级、熔断?

  • 限流:限流算法有令牌桶、漏桶、滑动窗口,限流框架有阿里的sentinel(滑动窗口)、springcloud的hystrix(信号量)
  • 降级:关闭某些服务接口或者页面,以保证核心服务可用。被动降级是限流或熔断导致的降级,主动降级指的是关闭评论、广告等不重要功能保证核心服务可用。
  • 熔断:当某些服务异常,则及时熔断此微服务的调用,快速返回错误响应信息。防止雪崩的发生。(Hystrix默认5秒内20次错误调用,会启动熔断机制)

2. 微服务的利与弊(为什么要用微服务)

利:

        高度模块化,边界清晰。高内聚、低耦合。

        可独立部署,互不影响

弊:

        分布式带来的高度复杂性,比较难看清楚整个大系统是如何运作的

        数据一致性问题

        运维复杂,可靠性、稳定性、监控、容量规划方面都有很高的要求

二. SpringBoot

1. SpringBoot是什么?

SpringBoot是Spring组件一站式使用框架,简化了spring的使用,提供了各种start,让开发者能快速上手。

2. SpringBoot核心注解是什么?

@SpringBootApplication。主要包含三个注解:

  • @SpringBootConfiguration:该注解表明这SpringBoot的一个配置类
  • @EnableAutoConfiguration:开启自动配置功能
  • @ComponentScan:Spring组件扫描

3. 什么是SpringBoot的自动配置?原理是什么?

SpringBoot采用 “约定大于配置” 的思想,把所有可能需要的配置提前写好,写在自动配置的jar包中。基本每个start都有对应的自动配置。

原理就是把spring.factory里的xxxAutoConfiguration都加载到Spring容器中。

xxxAutoConfiguration:自动配置类

xxxProperties:封装配置文件中的相关属性

配置文件的加载顺序?

xxx.properties、yaml

SpringBoot核心配置文件是什么?

application(.yml或.properties) 或 bootstrap(.yml或.properties)。application常用于springboot项目,bootstrap常用于springcloud项目加载远程配置文件。

4. springboot监视器了解吗?

springboot actuator用于服务监测和管理。可以通过 http://localhost:8080/actuator/{端点} 的方式访问端点。常见的端点有:

  • /health:检查应用健康状况。健康为UP,不健康为DOWN;
  • /info:应用基础信息。比如名字,jdk版本,编码规则等;
  • /metrics:应用各类度量指标。比如内存信息,线程信息,垃圾回收信息,数据库连接池;
  • /threaddump:线程信息。比如线程id,线程状态,线程堆栈,是否等待锁资源等;
  • /heapdump:会自动生成JVM堆文件;
  • /beans:Spring容器中所有的bean;
  • /loggers:应用程序配置的日志信息。比如日志级别,也可以修改日志级别;
  • /shutdown:关闭SpringBoot应用。

5. SpringBoot怎么保证程序安全性?

使用spring-boot-starter-security依赖项,security主要核心功能有:

  • 认证(你是谁)
  • 授权(你能干什么)
  • 攻击防护(防止伪造身份)

6. 微服务如何实现session共享?

一个完整的项目被拆分成微服务后,session就被物理隔离开了。这时候可以使用Spring Session + redis的方案,操作redis上的session,就能解决这个问题。

7. springboot如何实现定时任务?

使用Spring的@scheduled注解,或者使用第三方框架quartz或者xxl-job。

三. SpringCloud 和 SpringCloud Alibaba

1. SpringCloud是什么?

Springcloud是一个微服务全家桶,是基于SpringBoot提供的一整套微服务解决方案

2. Spring、SpringBoot、SpringCloud 区别?

  • Spring是以 Bean(对象)为中心 ,提供IOC、AOP等功能
  • Spring是以 Application(单个微服务应用)为中心,提供各种start,提供自动配置、监控等功能
  • SpringCloud是以 Service(整个微服务治理框架)为中心,提供 服务注册与发现、服务调用、负载均衡、服务容错、网关等功能

3. SpringCloud 和 SpringCloud Alibaba (前五行 微服务五大件)

服务治理 Spring Cloud落地技术 Spring Cloud Alibaba落地技术
服务注册与发现 Eureka、Zookeeper Nacos
服务调用 Feign、OpenFeign Dubbo(HSF)
负载均衡 Ribbon Ribbon
服务容错 Hystrix Sentinel
网关 SpringCloud Zuul Getway
分布式调度 --(替代方案:xxl-job) ScheduleX
配置中心 Spring Cloud Config Diamond
消息 --(替代方案:RabbitMQ、Kafka) RocketMQ
服务总线 Bus Nacos
服务部署 Docker、Kubernetes、OpenStack Docker
分布式事务 --(替代方案:2pc) Senta
服务监控 待补充 AliMonitor(应用监控)、Arthas(在线诊断)
链路追踪

Spring Cloud Sleuth

待补充

总结目前市面上的技术使用,可以看到SpringCloudNetflix(Eureka、Feign、Ribbon、Hystix、Zuul) 的技术基本被SpringCloudAlibaba替代了:

第六篇:微服务框架(SpringBoot、SpringCloud)_第1张图片

 

(一)Spring Cloud

1. Eureka(服务注册与发现)

        服务启动的时候,服务上的Eureka客户端会把自身注册到Eureka服务端,并且可以通过Eureka服务端的注册表知道其他注册的服务

2. Ribbon(客户端负载均衡)

        服务间发起请求的时候,服务消费者方基于Ribbon服务做到负载均衡,从服务提供者的多台机器中选择一台。常见的负载均衡算法:轮询、随机、权重。

3. Feign(http服务调用)

        Feign使用的时候会集成Ribbon,Ribbon去Eureka服务端找到服务提供者所在的服务器信息(比如服务名、ip、端口等),然后根据负载均衡策略选择一个,拼接url后发出清楚

4.Hystrix(服务容错)

        发起的请求是通过Hystrix的线程池去访问服务,不同的服务通过不同的线程池,实现不同的服务调度隔离。如果服务出现故障,通过服务熔断,避免服务雪崩问题;并且通过服务降级,保证服务核心功能正常提供。

  • 隔离:服务之间请求用线程池隔离,防止所有线程都卡在某一个异常的下游节点
  • 熔断:服务异常及时熔断,返回错误响应信息,防止服务雪崩(下游节点异常从而超时影响到上游节点,从而影响到整个链路),Hystrix默认5秒20次异常请求则熔断。
  • 降级:需要有降级逻辑,请求走熔断器过程中,需要把该请求记录到故障数据库,方便后续回补数据

5. Zuul(网关)

        前端调用后端的时候,统一走Zull网关进入,通过Zull网关转发请求给对应的服务。公有域名转ip,鉴权。

服务启动和请求全过程:
1. 服务启动的时候Eureka客户端会把自身注册到Eureka服务端,并且也能通过Eureka服务端发现其他服务。
2. 当前端发起请求时,先进入Zuul网关,网关通过Eureka服务端拿到服务提供者信息,通过路由策略转发请求给相应的服务,服务收到请求会先过Hystrix做服务容错(限流、熔断、降级),然后再根据业务逻辑处理请求。
3. 当后端服务之间相互请求时,Feign每5秒会从Eureka服务端同步一次服务器信息缓存到本服务器,ribbon直接从缓存中的服务器信息中选择一个,转发请求到相应服务器,依然是先到Hystrix,再做业务逻辑处理。

使用Eureka有服务安全下线问题
Eureka会跟服务器之间保持心跳,三次心跳失败,就会把服务器节点拿掉。但是就有一个问题,服务下线和Eureka知晓之间的时间请求都会失败。
如何解决这个问题?
这个需要服务提供方来保证。Eureka服务端提供了一个接口,可以调用接口把服务器节点信息拿掉,服务下线前有一个回调钩子,可以在这个回调里边调用Eureka,先把节点信息拿到再shutdown服务,就可以保证服务安全下线。

(二)Spring Cloud Alibaba

1. Nacos(服务注册发现)

Nacos是注册中心+配置中心的组合(Nacos = Eureka + Config),就不用多部署一套配置中心的集群

2. Dubbo(rpc服务调用)

        Dubbo是分布式系统中常用的RPC框架,可以帮我们做服务地址的管理、服务的注册与发现、服务监控等。Dubbo一般配合Zookeeper使用。

Dubbo工作流程:

第六篇:微服务框架(SpringBoot、SpringCloud)_第2张图片

角色:Container-容器、Provider-服务提供方、Consumer-服务消费方、Register-注册中心、Monitor-监控器

  • Provider在Container上启动服务;
  • Provider在Register上注册服务,Dubbo一般使用Zookeeper作为注册中心;
  • Consumer在Register上订阅服务,注册中心返回服务器列表,如果列表有变更就通知Consumer;
  • Conusmer根据负载均衡算法调用Provider;
  • Monitor实时监控服务调用次数和时间。

3. Ribbon(客户端负载均衡)

        服务间发起请求的时候,服务消费者方基于Ribbon服务做到负载均衡,从服务提供者的多台机器中选择一台。常见的负载均衡算法:轮询、随机、权重。

4. Sentinel(服务容错)

        Sentinel是阿里开源的高可用流量管理框架,提供了 限流、熔断、降级、系统负载保护等多个维度来保障服务稳定性。

降级策略:

  • 平均响应时间超过阈值
  • 每秒异常比例超过阈值
  • 一分钟内异常数目超过阈值

5. Zuul、Getway(网关)

6. SchedulerX(分布式调度)

xxl-job 是一个分布式调度平台,有调度中心和执行器两大部分组成。

  • 调度中心:负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。支持可视化界面,可以在调度中心对人任务进行新增、修改、删除,可以查看日志,失败告警等。
  • 执行器:负责接受调度请求,执行业务逻辑。接收调度中心发出的执行请求,终止请求,日志请求等。

xxl-job工作原理:

  • 任务执行器根据配置的调度中心地址,自动注册到调度中心
  • 达到任务触发条件,调度中心下发任务
  • 执行器基于线程池执行任务,并把执行结果放入内存队列,执行日志写入日志文件
  • 执行器回调线程消费内存队列里的执行结果,并主动上报给调度中心
  • 当用户在调度中心查看任务日志,调度中心请求任务执行器,查询日志结果并返回

7. Diamond(配置中心)

你可能感兴趣的:(肖哈哈java自学笔记,spring,boot,spring,cloud,微服务)