1. SpringCloud 与SpringBoot的关系
SpringBoot专注与微服务的构建,SpringCloud是用于治理微服务,为微服务提供:配置管理,服务发现,路由等服务。
SpringBoot可以离开SpringCloud,但SpringCloud离不开SpringBoot
2.大体网站架构图
解释:
NDS(Content Distribution Service): 就是负责缓存一些网站数据,用户不用直接去源网站获取数据,而是去离自己较近的服务器拿就行
LVS(Linux Virtual Server): Linux 虚拟服务
NGINX: 用于负载均衡,反向代理
3. Dubbo与SpringCloud对比
Dubbo | SpringCloud | |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | SpringBoot Admin |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
服务网关 | 无 | Spring Cloud Netflix zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
套路
导入依赖
编写配置文件
注解开启功能
编写配置类
4. Eureka 服务注册与发现
5. Eureka与Zookeeper
CAP:Consistency(强一致性),Available(可用性),Partition Tolerance(容错性)
一个系统最多满足两项
5.1 Eureka(AP)
Eureka所有节点都是平等的,即使down掉某个节点,只要存在一个可用节点便可继续使用。除此之外,Eureka还有自我保护机制,若是15分钟检测到85%以上的节点没有心跳,Eureka就认为网络发生问题了。就会采用下面措施。
不移除没有心跳的服务
接受新的服务注册,但不会同步
网络稳定时,同步到其他节点
5.2 zookeeper(CP)
zookeeper存在一个主节点,若是down掉,这会在其他节点选取出一个主节点,期间网络不可用。zookeeper可保证每一次的访问请求都能得到一致性的结果
6. Ribbon
6.1 基础理解
Ribbon能做负载均衡,也就是请求平摊给多台机器,系统达到高可用的状态
常见的负载均衡软件有nginx,lvs等
负载均衡的分类:
1)集中式LB: 消费方与提供方由某个独立的设施进行负载均衡,如nginx,只把请求用某种策略分发给服务方
2)进程式LB: 消费方去注册中心找到可用的提供方地址,然后自己选用合适的算法去调用。
6.3 负载均衡算法
个别解释:
AvailabilityFilteringRule: 过滤掉无用的服务,剩下轮询
RoundRobinRule: 轮询
7. Feign
Feign也是用于负载均衡, 但不同的是不用去写一个RestTemplate,直接面向接口编程
8. Hystrix
Hystrix是用于解决服务熔断的开源库,服务发生异常时,可调用备选方案
8.1 服务熔断
服务在遇到异常情况时,调用备选方案。如,数据库查询不到数据,用户访问异常,若是有服务熔断就可以调用备选方案,告诉用户只是找不到数据,不抛异常这种方式会更加友好。
8.2 服务降级
当遇到秒杀时,服务器的并发量较高时,可以暂停某些无关的服务,让服务器能以减少负担。
8.3 服务监控
9. Zuul(路由网关)
需要注册进Eureka
9.1 路由
Zuul就是将请求统一管理,可进行路由转发。
9.2 过滤
请求校验,可将Eureka服务名进行隐藏,只暴露设置的标识符。
10. SpringCloud Config(配置)
由于每个微服务都有自己配置application.yml, 没有集中管理的话,修改特别麻烦。
可以将本地的配置文件如.yml,上传到远端如github,通过SpringCloudConfig里的Server进行读取,那么我们本地只需访问Server读取配置文件,加载就行。