springcloud系列导读

spring cloud是微服务的集大成者,它集成了许多优秀的工具,因此使用spring cloud 全家桶就可以很容易的开发微服务项目。

它基于spring boot,因此配置简单,容易学习。

  1. springcloud-erueka注册中心
  2. springcloud-consul注册中心
  3. springcloud-服务调用-robbin负载均衡
  4. springcloud-config配置中心
  5. springcloud-nacos注册中心
  6. springcloud-nacos配置中心
  7. springcloud-链路追踪sleuth
  8. springcloud-链路追踪skwalking
  9. APM工具对比

组件

注册中心

背景

如果服务调用方想调用一个服务必须知道被调用方的的地址(ip,域名)和服务提供方的方法,然后远程调用。但是在微服务中服务很多,同一种服务会有很多个节点,他们的地址不同,服务调用方就必须知道每一个服务提供方的地址,如果没有就注册中心,那么在配置文件中就会有很多数据,显然不合适。

当需要服务扩容时必须修改很多配置,然后重新启动每一个节点,无法动态的扩容和收缩,显然也不合适。

解决方案

注册中心的作用:服务注册与发现。注册中心存储所有服务的名字和地址,一个服务可以在注册中心发现其他的服务。

一般情况是:注册中心启动,每一个服务必须知道注册中心的地址,然后服务启动时自动发一条消息给注册中心,然后注册中心存储该服务的名字和地址。当一个服务想要与另外的服务进行交互时,只需要知道另一个服务的名字就行了,然后从注册中心中查找该名字,获得对应的地址,然后进行交互。大大减少了配置。

注册中心还会和每一个服务进行心跳检测,来检测服务是否在线。那么如果被调用的服务还有活着的,服务调用方就可以调用。而如果将服务的地址写死在配置文件中,那么服务调用方就不会知道哪一个还可用。

当然如果注册中心挂掉,那么整个系统就直接崩溃了,因此需要选择高可用的注册中心,比如consulnacos,zookeepereureka,等,而且注册中心也必须是一个集群。

注册中心

配置中心

背景

当服务越来越多,而且有很多相同的服务,它们被打包然后部署到各个服务器上,离散程度很高。

当需要修改某一类配置文件时,必须修改这一类的配置文件,(这一类配置文件是相同的),然后重新部署,重新启动,这样效率很低。

解决方案

将每一个服务的配置集中管理,那么哪一种服务需要修改信息,只需在一个地方直接修改就行了。

配置中心应该提供一种方案可以动态更改配置文件,而无需重启服务。

配置中心应该可以进行版本管理。

spring cloud 提供了一个组件:spring cloud config可以达到实现这个需求,Alibaba也提供了一个很优秀的组件:nacos

配置中心

robbin

背景

依旧是服务很多的问题,在服务调用的时候,选择哪一个服务提供是一个很重要的问题,如果选择方案差可能导致很多的服务调用方都调用同一个节点,那么这个节点就会有很高的延时,甚至耗尽线程,导致服务不可用。当一个服务不可用可能导致,在这条调用链上的服务都可能崩溃。

解决方案

robbin提供优秀的负载均衡算法,寻找最合适的节点进行调用。

feign

feign提供了远程调用的解决方案,只需要根据接口的注解信息就可以找到服务提供方的对应的方法,因此服务调用反不再需要依赖服务提供方(依旧需要知道服务提供方的名字,以及对应的uri,不需要依赖服务提供方的jar包)。

hystrix

在分布式环境中,许多服务依赖项中的一些不可避免地会失败。Hystrix通过添加延迟容错和容错逻辑来控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,阻止它们之间的级联故障以及提供fallback选项来实现这一目标、提供快速失败并迅速恢复、实现实时调用监控、降级,来提高系统的整体可用性。

服务监控

节点的状态可以使用spring boot admin监控,监控节点的健康信息,JVM的信息,Bean的信息,查看日志等等。

但是springboot admin无法满足业务的需求,因为在分布式中需要全链路监控,获取每个服务的依赖图,每个请求的时间等,还需要能够自定义告警规则,达到规则就报警。总之监控希望能够观察一段时间内服务的状态,在出现问题时能够快速定位问题。对于这种需求可以使用对应的工具,比如spring cloud中集成的zipkin,还有例如apache的skywaking,大众点评的cat,韩国的Pinpoint等。上面有几种工具的对比。

上述几种大多是对于服务的监控,对于机器的metrics,数据库的metrics,jmx的指标都没有很好的支持,可以选择其他的监控工具,比如prometheus,将数据展示到grafana上。

另外moss也是一个很好的工具。

文章作者: gentlezuo
文章链接: http://gentlezuo.github.io/2019/06/29/springcloud系列导读/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 gentlezuo的博客