SpringCloud介绍
- SpringCloud是基于SpringBoot的一套微服务架构解决方案。
- Springcloud提供了一系列微服务开发的一站式解决方案。也是一系列主流框架的集合
- SpringCloud中的大多数技术都是基于Netflix公司的技术进行二次研发。
- SpringCloud的中文社区网站:http://springcloud.cn/
- SpringCloud的中文网:http://springcloud.cc/
- 八个技术点:
- Eureka - 服务的注册与发现
- Robbin - 服务之间的负载均衡
- Feign - 服务之间的通讯
- Hystrix - 服务的线程隔离以及断路器
- Zuul - 服务网关
- Stream - 实现MQ的使用
- Config - 动态配置
- Sleuth - 服务追踪
####springcloud的五大核心组件####
Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
Zuul:如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务
Eureka
用于实现服务之间的注册和发现,以便服务之间的相互调用。
Eureka工作原理?
Eureka:服务注册中心,对外暴露自己的地址。
提供者:启动后向Eureka注册自己的信息。
消费者:向Eureka订阅服务,Eureka会把服务列表发给消费者,并且定时更新。
心跳续约:提供者定期通过http请求的方式向Eureka刷新自己的状态。
什么是服务注册?
服务提供者在启动时,会向EurekaService发送一次注册请求,把自己注册到Eureka注册中心去。
什么是服务续约?
在注册服务完成后,服务提供者会维持一个心跳(30秒一次),告诉EurekaService“我还活着”。
什么是失效剔除?
由于某些原因,如内存溢出等异常导致服务异常无法正常工作,EurekaService会将这些失效的服务剔除出去,每60秒对失效的服务剔除。
什么是自我保护?(AP模式可用性和分区容错性)
如果由于网络波动等原因,服务未按时进行心跳续约,此时将服务剔除是不太合理的,因此Eureka会将当前实例的注册信息保护起来,不允许剔除,在这样的情况下,保证了大多数服务可用。
什么是CAP理论,Eureka包含哪些?
CAP:一个分布式系统不可能同时满足C(一致性),A(可用性),P(分区容错性),由于分区容错性在分布式系统是必须要保证的,Eureka各个的节点都是平等的,有几个节点挂掉并不影响正常的工作,所以只要还有一台Eureka服务,就能保证注册服务可用(保证可用性),只是查询的数据可能不是最新的,不保证强一致性。
所以Eureka遵循AP。
不适用Eureka注册中心的情况下, 分布式服务必然面临的问题有哪些?
服务如何实现负载均衡
服务如何解决容灾问题
服务如何实现统一配置
什么是高可用?什么是分布式?什么是集群?什么是负载均衡?
高可用就是在极端环境下还能够正常提供服务。
分布式就是把一个大项目,根据业务需求拆分为多个服务,进行分布式开发。
集群就是把同一份代码部署到多个服务器上。
负载均衡就是将请求分摊到多个服务器上,这里必须用到集群。
Ribbon
Ribbon是一套客户端负载均衡工具。
Ribbon常见的负载均衡算法有哪些?(随机,权重,轮询)
RandomRule 随机策略 随机选择server
RoundRobinRule 轮询策略 按照顺序选择server(ribbon默认策略)
RetryRule 重试策略 在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server
ResponseTimeWeightedRule 响应时间加权重策略 根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高。
Feign
什么是feigin?它的优点是什么?
Feign是一个声明式的web服务客户端,可以帮助我们实现面向接口编程,就直接调用其他的服务,简化开发。
Feign的Fallback
Fallback可以帮助我们在使用Feign去调用另外一个服务时,如果出现了问题,走服务降级,返回一个错误数据,避免功能因为一个服务出现问题,全部失效。
@FeignClient(value = "PROVIDER",fallback = ProviderServiceImpl.class)
//@RequestMapping(value = "/provider") //开启了hystrix后这个路径要写到下面的方法上面
public interface IProviderService {
@RequestMapping(value = "/provider/hello")
public String hello();
}
Hystrix
什么是服务雪崩?
在微服务中,我们是服务于服务之间调用,当在微服务突然有大量的请求过来,一个服务瘫痪之后,后面的服务的请求积压,这就造成了服务雪崩!
如何解决在灾难性雪崩效应?
降级,隔离,熔断,缓存和请求合并。
Hystrix是什么?
在hystrix的保护下,提供了高可用相关的各种各样的功能,整个系统可以长期处于高可用的状态。
什么是服务熔断和服务降级?
熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。
服务降级,一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。
Gateway
什么是网关?
网关是整个微服务Api请求的入口,负责拦截请求并分发请求到服务上,可以实现日志拦截、权限控制、解决跨域问题、限流、熔断、负载均衡,隐藏服务端的ip,黑名单与白名单拦截、授权等。
过滤器和网关的对比?
过滤器对单个服务器的请求进行拦截。
网关是对整个微服务的所有请求进行拦截。
zuul和gateway的对比
zuul是奈飞公司的,基于Servlet实现的,不支持长连接。
gateway是SpringCloud自己研发的微服务网关技术,基于Spring构建,支持长连接。
网关与nginx区别
Nginx基于服务端负载均衡器。
gateway基于客户端负载均衡器。
gateway的组成
路由:网关的基本模块,有ID,目标URI,断言和过滤组成。
断言:访问规则。
过滤器:用来过滤请求。
Config
什么是配置中心?
配置中心就是一种统一管理各种应用配置的基础服务组件。
为啥需要配置中心?
- 配置文件分散在不同的项目中,不方便维护。
- 配置文件的安全问题。
- 修改完配置文件,无法立即生效。
cannal
canal的工作原理
就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到canal发送过来的dump请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等等。
————————————————
版权声明:本文为优快云博主「java技术爱好者_R」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/yehongzhi1994/article/details/107880162
Canal简介
- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
首页广告缓存
(1)修改数据监控微服务,监控tb_ad表,当发生增删改操作时,提取position值(广告位置key),发送到rabbitmq
(2)从rabbitmq中提取消息,通过OkHttpClient调用ad_update来实现对广告缓存数据的更新。
商品上架索引库导入数据
商品上架将商品的sku列表导入或更新索引库
(1)在数据监控微服务中监控tb_spu表的数据,当tb_spu发生更改且is_marketable为1时,表示商品上架,将spu的id发送到rabbitmq。
(2)在rabbitmq管理后台创建商品上架交换器(fanout)。使用分列模式的交换器是考虑商品上架会有很多种逻辑需要处理,导入索引库只是其中一项,另外还有商品详细页静态化等操作。这样我们可以创建导入索引库的队列和商品详细页静态化队列并与商品上架交换器进行绑定。
(3)搜索微服务从rabbitmq的导入索引库的队列中提取spu的id,通过feign调用商品微服务得到sku的列表,并且通过调用elasticsearch的高级restAPI 将sku列表导入到索引库。