分布式基础概念
分布式基础概念
把每个模块都拆分开来,每个模块都能独立运行,一个完成的项目就由这一个个的模块进行组成。好处:当一个模块出现问题的时候,不影响其他模块的运行,并且问题排查速度快,花费的人力,物理资源少。
为什么要用HTTP+JSON 的方式来进行远程调用?
JSON 是通用的网络传输方式,JSON ,HTTP在任意平台都能使用(PHP,C++…).
在远程调用过程中,过程就是从一个模块传输信息到另外一个模块,难免有时候会出现访问业务模块的压力过大,而每个业务模块背后都会有好几台服务器集群支持其运作的。所以,使用负载均衡的方法调用每一台服务器来访问其中的业务信息。
例如:A服务要调用B服务,而B 服务在很多台机器上都有运行,那么A服务在调用那么多台机器上的B服务器的时候就有可能会遇到每台机器上的B服务已经下线的情况,这样做是浪费时间和资源的。那么就引入注册中心概念。
注册中心:当B服务上线时就告诉注册中心,哪台机器的B服务上线了;B服务器下线同样也是告知注册中心哪台机器的B服务器已经下线了。这个过程称为 服务注册。A服务调用B服务的时候只需要去注册中心去找上线的B服务在哪台机器上就可以了,这个过程称为 服务发现。
由于很多业务模块都可能部署在多台机器上,我们经常需要变更业务模块的配置的话就需要做大量的重复操作。如果把各个业务模块的配置都配置在一个地方,那么每次修改一个业务模块的时候,只需要在这个地方进行修改,然后让每个业务模块从这个地方获取相应的业务配置就可以了,这个地方就叫做 配置中心。
应用场景:
因为模块与模块之间的调用是通过网络进行传输的,网络传输具有不稳定性,而且如果被调用模块的机器出现宕(dang)机,那么相应就会具有延迟。比如:订单服务要调用商品服务,商品服务要调用库存服务,此时库存服务网络出现异常或者库存服务的机器出现宕机,那么存库服务的相应就会发生延迟,比如延迟(10s),那么商品服务对订单服务的相应也要延迟10s,这样就会造成一整个调用过程的延迟,而这个只是一次客户的调用,如果是多个客户同时调用的话是会非常浪费服务器资源的,很有可能会出现服务器资源耗尽导致整个服务器雪崩的现象,为了避免这种情况的出现,就出现了以下的解决办法:
服务熔断:例如:设置服务超时时间: 3s。当商品服务调用库存服务的响应超过了3s时候,当成服务请求失败,中断处理。如果经常服务请求失败,当失败次数达到某个阈(yu)值时候,之后的所有商品服务调用库存服务的请求的时候都不会再进行,(处理方式一般为:返回库存为null,或者本地返回默认数据 等等…)这样才不会导致请求积压。
这个相当于大型商场门口的安检器,用于筛选后端服务需要用到的请求,而一些不必要请求则不会让其进行通过。它还能在高并发的情况下,我们可以在网关组件这里进行设置限流,比如以恒定的请求速率将这些请求流向后端服务集群,这样服务集群不会收到瞬时流量过大的请求进而把服务集群压垮。