2020-12-29 微服务架构设计与实践

老师:范钢
https://github.com/mooodo

未来发展趋势
大前端 + 技术中台

什么是微服务

Martin Flower 微服务之父
Microservice Architecture

  • 它是一种架构风格与设计模式;
  • 这提倡将大的应用分割成一系列小的服务; 小而专
  • 每个服务专注于各大自单一的业务功能; 高内聚
  • 每服务支行于独立的进程中,有清晰的服务边界; 独立运行
  • 采用轻量级的通讯机制(Http/REST)来实现互通、协作; 轻量级通讯
    按照这样的设计来满足用户变更的需求。

微服务的技术架构

去中心化技术治理
去中心化数据管理

单体应用vs.微服务

微服务可以按需对进行横向扩展
单体应用只能整体扩展

开发测试

Jenkins

微服务的挑战:发布

当微服务注册到注册中心后,要求每个微服务定时向注册中心发送心跳。
自动化部署应用,如果人工部署,则成本高昂。把微服务部署到Docker中,安装部署自动化完成,所以增加发布中心。在发布中心中定义每个服务需要部署几个节点。
如果一个节点Down掉,发布中心自动部署一个新的节点。如果一个节点Down机后,把任务转给其他节点(通过重试,微服务要无状态)。发布中心K8s。

Spring Cloud

Spring Cloud把需要的各种组件齐全。Dubbo只能解决注册中心的问题,其他的问题需要自己解决,所以Dubbo没竞争过Spring。阿里在Spring的架构上,做了Spring 阿里,把注册中心换了,把Dubbo的注册中心封装,替换了Spring的注册中心。

Spring Boot项目

  1. 创建maven项目,修改POM.xml
  2. 创建启动类Application.class
  3. 编写配置文件.properties或.yml

yml文件的缩进不支持Tab,用两个空格。冒号后要有空格。

注册中心

CAP模型
CA Consul
CP ZK
AP Eueka
阿里 nacos

consumer访问Eureka,服务发现discovery,根据生产者名字,找到服务列表。通过ribbon(部署在消费者端)调用生产者。

Spring boot 服务

配置文件:
server.port=8762
spring.application.name=Service-Hello
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
Controller
@RestController
@GetMapping("sayHello")
@PostMapping()

feign作用
高可用

Eureka去中心化

多个配置文件,在不同机器上使用不同的配置文件。yml文件,多个配置文件可以写一个文件中,用---分隔
java -jar eureka-1.0.1 .jar --spring.profiles.active=primary

服务端配置
enable-self-prservaton: true #开启自我保护,避免因网络故障造成大量服务清除。
eviction-nterval-time-in-ms: 5000 #清除无效服务的时间时隔。

客户端配置(可以写到config server)
eureka
instance:
prefer-ip-address: true #首先使用IP地址
lease-expiration-duration-in-seconds: 10 #删除实例的间隔,default 90s
lease-renewal-interval-in-seconds: 5 # 发送心跳的间隔 default 30s 生产中要小一些
client:
registry-fetch-interval-seconds: 5 获取注册信息的间隔,deafult 30s

熔断服务降级

故障转移
下游某一服务故障,上游服务因要等TimeOUT,所以在高并发情况下,会迅速造成上游线路迅速增多,导致耗尽。 要线程池隔离
当调用下游服务多少次后,就不再调用下游某一服务。叫熔断机制
服务降级,后端服务全部不行的情况下,会导致前端雪崩故障。这时上游做服务降级,在不调用下游时继续提供服务。

断路器模式与断路器

中断、恢复(定时调用下游,如果下游响应,恢复)
三个状态:Closed, Half Open, Open
Closed, 失败达到指定次数,进行Open状态。Open状态,周期进入Half Open,失败,继续Open,如果成功,进入Closed。
Hystrix实现服务降级。部署在消费者端。

ribbon中增加hystrix断路器

POM文件中增加hystrix
@EnableHystrix
Service中@HystrixCommand(fallbackMethod="error")
public String error(String user){
//做服务降级
}

Feign中增加Hystrix

配置文件中feign.hystrix.enable=true

Hystrix的命令参数

发生熔断,进入error方法,在其中可以实现服务降级
@HystrixCommand(fallbackMethod = "error")
忽略某个错误,遇到 到该错误不进行fallback,而是直接错误抛出。
@HystrixCommand(ignoreExceptions = {BadRequestException.class}}
@HystrixCommand(
groupKey="UserService",commandKey="GetUserById",

你可能感兴趣的:(2020-12-29 微服务架构设计与实践)