springcloud
1. springcloud是什么
- 提供了一系列微服务开发的一站式解决方案,也是一系列主流框架的集合。
- 在微服务架构中,需要几个基础的服务治理组件。包括服务注册与发现,服务消费,负载均衡,断路器,智能路由,配置管理等。由这几个基础组件项目协助,共同组建一个简单的微服务系统。
1.1 eureka
- 使用eureka做注册中心
1.1 eureka保证可用性(CP) - http协议
- 用户自己开发
- 保护机制
1.2 dubbo
- 使用zookeeper做注册中心
1.1 zookeeper保证一致性(AP) - netty(socket)
- 部署到linux上
2. 微服务是什么
- 将一个单一应用程序开发为一组小型服务的方法。
- 每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常是http)。
- 服务围绕业务能力构建并且可通过全自动部署机制独立部署。
- 服务共用一个最小型的集中式管理,服务可用不同语言开发,使用不同的数据存储技术。
2.1 微服务特点
- 围绕业务进行服务拆分
- 每个服务都是独立进程
- 轻量级通信协议
- 中心化管理
2.2 微服务缺点
- 项目颗粒度太低,增加了项目管理难度
- 远程调用带来的性能损耗
- 跨服务的测试更为复杂
- 运维成本更好
- 需要强大的整体规划与设计能力
3 分布式中CAP原则
- 在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
- 一致性(Consistency): 对于每一次读操作,要么都能读到最新写入的数据,要么失败。
- 可用性(Availability):对于每一次请求,都能得到一个及时,正确的响应。但是不保证请求的结果是基于最新写入的数据,不出现用户操作失败或者访问超时等用户体验不好的情况。
- 分区容错性(Partition tolerance):由于节点之间的网络问题,即使一些消息对包或者延迟,整个系统能继续提供服务。
4. Eureka – 注册中心服务
- 创建springboot项目,选择eureka-server
- 添加@EnableEurekaServer
- 配置注册中心地址
- 启动访问
4.1 Eureka自我保护机制
- Renews threshold:期望每分钟收到客户端心跳数
- Renews (last min): 最后一分钟收到客户端心跳数
- 当 Renews < Renews threshold * 0.85 就会触发自我保护机制
- eureka.server.enable-self-preservation=false # 关闭自我保护机制,默认开启
5. Ribbon – 消费服务
- 创建springboot项目,选择eureka-client
- 定义Controller,开启包扫描
- 配置端口,注册中心地址
- 启动访问Controller
- 创建springboot项目,选择eureka-client和ribbon
- 定义Controller,调用RestTemplate,开启包扫描
- 配置端口,注册中心地址
- 启动调用
6. Feign – 消费服务
- 创建springboot项目,选择eureka-client和openFeign
- 定义接口调用提供者
- 定义Controller,开启包扫描和添加Feign注解扫描接口
- 配置端口,注册中心地址
6.1 区别
- Ribbon基于Http的负载均衡
- Feign在Ribbon的基础上进行了封装,以面向对象的方法调用服务
7. Hystrix – 断路器
- 线程池隔离:再开个线程
- 信号量隔离
7.1 降级
- 方法上添加HystrixCommand注解和定义方法
- 添加@EnableHystrix注解
7.2 熔断
- 创建springboot项目,选择eureka-client和openFeign(feign包含hystrix)
- 给api接口定义一个实现类,FeignClient添加fallback
- 配置开启断路器 feign.hystrix.enabled: true
8. gateway – 路由网关
- 创建springboot项目,选择eureka-client和gateway
- 配置端口,注册中心地址,路由网关
9. 限流
- 令牌桶算法
- 令牌桶:redis
- 配置到路由中,导入redis依赖
- 定义限流方法
- 配置redis和限流过滤器
10. config – 配置中心
- 创建springboot项目,选择config server
- 新建config目录存放所有配置文件
- 配置端口和config配置
- 开启EnableConfigServer