微服务架构
咱们先来说说springcloud,在我理解,微服务架构就是一种风格,由最开始的单一应用变成现在一个个服务,每个服务运行自己相关的模块,并且每个服务都可以使用不同语言进行开发,他们之间相互交互、相互通讯组成一个完成的系统。
springcloud里有几个技术点,咱们可以来讨论下
1、服务的注册与发现
我通常使用的是Eureka,是Netflix的产品,就是注册中心。如果细分的话,有服务端和客户端。这个可以说是springcloud的核心,因为它管理所有的服务
1、eureka客户端再启动的时候就会向eureka服务进行注册(上文提到了)
2、eureka客户端每隔30s会向eureka服务端发送一个心跳,证明这个客户端还活着
3、eureka服务90s之内没有收到eureka客户端发送的心跳请求的话,eureka服务端就会认为这个服务已经挂了,然后将这个服务从eureka服务列表删除
4、当eureka一段时间内统计到有85%的eureka客户端都没有发送心跳请求了,这个时候就该想想是不是自己的问题了,eureka服务就会认为自己是不是网断了?就会触发自我保护机制,不再删除客户端了
5、如果网络恢复,关闭自我保护机制,然后将数据同步到其他eureka服务
6、当一个服务要调用另一个服务时,需要先经过eureka服务,去拉取eureka服务中的服务信息,再缓存到本地所以尽管eureka服务挂了,还是可以调用的
7、当发起调用时,调用方就会根据拉取下来的服务信息使用requesttemplate发起http请求,
8、过一段时间要重新去拉取最新的服务信息,更新缓存中的服务信息
2、负载均衡
可以理解为一个分发器,http请求分发器。一些大一点的项目可能会有集群,所以当服务之间发起调用时,服务就会根据负载均衡算法请求到哪个节点上,经常使用的是feign,是对ribbon的封装
3、断路器
也叫熔断器,通过降级、限流对整个系统起到保护作用的组件。使用Hystrix
4、网关
它最重要起到一个路由的作用,如果要调用一个服务的api,必须经过它,可以理解为小区警卫室,小区每户人就是每个api,如果你要找某人,就直接找警卫就好了
5、配置中心
更新配置的时候需要重启,还有一些像数据库密码这些敏感数据放在项目的配置文件中也是一个安全问题,就有了配置中心config的存在,打个极端的比方,有100个服务,当有一天你的配置需要更改,你不能重启100个服务吧,