SpringCloud

SpringCloud
分布式系统,每个系统分布在各自的机器上,下单买东西,订单系统,库存系统,仓储系统,积分系统
日活10万单块系统不合适


当一个用户下订单,调用订单系统,订单系统调用库存系统,仓储系统,积分系统,等等,电商系统,拆分为了多个子系统,一个请求需要多个子系统写作完成,每个子系统完成各自的功能,
最终这个请求处理完毕。


springCloud的核心组件


Eureka :服务注册中心,心跳和故障
            各个服务提供者去服务中心注册服务《IP:PORT》,
            多个服务去Eureka中去注册服务,服务注册表中记录服务,机器信息,当服务消费方要调用服务的时候会去Eureka中拉取服务列表,
            首先 服务消费方 先去找ReadOnly缓存,发现缓存中并没有,然后又会去ReadWrite缓存中去拉取,发现也没有,最后去服务列表中去拉取,
            去服务列表中拉取后就会立即同步到ReadWrite和ReadOnly缓存中去,获取到服务列表信息后就去调用服务去了
            
           心跳线程会定时检测服务列表中的服务是否正常存活,因为服务会定时发送心跳证明自己存活,如果一个服务死掉了,心跳线程就会把服务列表中该服务信息给去除掉。
            ReadWrite缓存就会被清空掉,ReadOlny缓存还会存在原来的服务信息,但是当消费方再去调用服务的时候,会发现某个服务调用失败了,等线程定时同步ReadWrite缓存和ReadOnly缓存全部
            清空,那么下次请求就会从服务列表中再去拉取服务信息同步到缓存中去了。完成了一次全部的更新,
            加入两个缓存是为了避免并发冲突
Eureka的优化
eureka.server.responseCacheUpdateIntervalMs = 300 (刷新缓存中服务列表的时间)


eureka.client.registryFetchIntervalSeconds = 3(去注册中心拉取服务列表时间)


eureka.client.leaseRenewalIntervalInSeconds = 3 (心跳时间)
eureka.server.evictionIntervalTimerInMs = 6000(检测服务可用性时间)
eureka.instance.leaseExpirationDurationInSeconds = 90(心跳超时时间)

Eureka的服务治理强调了CAP原则中的AP,即可用性和可靠性。它与Zookeeper这一类强调CP(一致性,可靠性)的服务治理框架最大的区别在于:Eureka为了实现更高的服务可用性,牺牲了一定的一致性,极端情况下它宁愿接收故障实例也不愿丢掉健康实例,正如我们上面所说的自我保护机制。但是,此时如果我们调用了这些不正常的服务,调用就会失败,从而导致其它服务不能正常工作!这显然不是我们愿意看到的。
feign   以http协议去调用服务 通过feign技术,通知feign底层将请求转换成网络请求,然后把http请求发送到指定机器地址上去(服务调用)
Ribbon(负责负载均衡) 一个请求过来,Ribbon通过负载均衡的算法去选择需要调用的系统服务,去告诉feign,feign 就直接发送请求到Ribbon选择的机器。(可以配置权重,随机之类的,一般默认轮询)
Zuul网关:配置一下不同的请求路径和服务的对应关系
                zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能
                身份认证与安全
                动态路由
                压力测试
                负载分配
                静态响应处理
                多区域弹性
        




网关的动态路由,在数据库中设计一个表,我们自己做一个对路由信息的增删改查的小程序,来手动去数据库中操作,网关写个定时任务去定时刷新数据库获取新的路由信息

网关怎么抗高并发访问:
            zuul部署机器8核16G,对网关路由转发的请求,每秒抗几千不成问题。
            zuul前面是Nginx
一个分布式系统是由各个服务组成的,各个服务有是独立的机器,一个服务可能有多台机器部署,我们怎么去调用这些服务呢?
比如我们的电商网站由很多独立的系统机器,一个请求进来我们怎么去调用服务,首先我们要有一个注册中心,注册中心中注册由各个机器的ip地址和端口号,
当用户调用订单系统时首先先去注册中心去拉取注册中心中的服务信息,就是机器的IP、port,然后缓存在本地,用户下单后需要调用其它的服务,比如库存系统,仓储系统,积分系统
这些系统可能由多台机器部署,但是这个请求要选择哪台机器去执行操作呢,那就要通过Riboon的负载均衡底层算法去注册列表中选择一台机器去执行操作,Riboon会将选择的机器信息
传给Feign,Feign会将请求转换成http网络请求发送到指定的机器上去调用服务接口。这样一个用户请求就执行成功了




其实每个机器都会不断去拉去注册列表,注册中心只要由新的机器和服务注册进来,每个服务都会将注册列表缓存在本地中,可以配置心跳时间,默认90s
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Cloud是一个用于构建分布式系统的开发工具集合。它提供了一些常用的组件和框架,包括服务注册和发现、负载均衡、断路器、分布式配置等等。在使用Spring Cloud时,有一些常见的错误和注意事项需要注意。 首先,关于Spring Boot和Spring Cloud版本对应错误。在使用Spring Cloud时,需要确保Spring Boot和Spring Cloud的版本兼容。不同版本之间可能存在依赖冲突或不兼容的情况,因此需要根据官方文档或者相关文档来选择合适的版本。 另外,Spring Cloud Config是一个用于集中管理和动态获取配置的工具。它支持从Git、SVN或本地文件系统中获取配置文件,并提供了服务器和客户端支持。你可以通过官方使用说明文档了解更多关于Spring Cloud Config的详细信息。 此外,关于选择使用Nacos还是Eureka作为服务注册和发现组件的问题。Nacos是一个功能更强大的服务注册和发现组件,它整合了Spring Cloud Eureka、Spring Cloud Config和Spring Cloud Bus的功能。使用Nacos可以实现配置的中心动态刷新,而不需要为配置中心新增集群或使用消息队列。另一方面,Eureka是Spring Cloud原生全家桶的一部分,相对来说更加稳定一些。选择使用哪个组件需要根据具体的需求和项目特点来决定。 综上所述,Spring Cloud是一个用于构建分布式系统的开发工具集合,它提供了一些常用的组件和框架。在使用Spring Cloud时,需要注意Spring Boot和Spring Cloud版本的兼容性,并可以使用Spring Cloud Config来动态获取配置。同时,可以选择使用Nacos或Eureka作为服务注册和发现组件,具体选择需要根据项目需求来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值