这篇文章介绍了如何 Spring Cloud 是如何帮助构建一个高可用的分布式系统的。在同类文章算是介绍的很不错的,感觉比 Spring Blog 里面的文章还要更全面易懂。
文章开始先介绍了构建分布式系统时会遇到的各种需要解决的问题,然后分别由这些问题引出 Spring Cloud 中的各种技术。
Spring Cloud Config Server
Spring Cloud Config Server 以 Git、SVN 等 VCS 系统存储 properties、yml 等格式的配置文件,构建了一个可横向伸缩的配置服务器。且不说使用效果怎么样,这个思想还是很有启发性的。配置文件通常是文本文件,用 VCS 存储是顺理成章的,同时还具备了版本控制功能,使得配置的变化被记录了下来。再在这个基础之上,加上横向伸缩的能力,便成为了一个很不错的配置服务器。
Spring Cloud Bus
Spring Cloud Bus 为 Spring 应用提供了 Message Broker 的功能。目前的唯一实现是基于 AMQP 的(用 RabbitMQ 为消息中间件)。目前,Cloud Bus 的一个应用是通过消息中间件,将配置改变的事件通知给业务组件。被 @RefreshScope
表示的 Bean 便具有了感知配置变化的能力。
Spring Cloud Netflix
Spring Cloud Netflix 是 Spring Cloud 中被介绍最多的部分。基于 Netflix 一套经过实战的解决方案,Spring Cloud Netflix 为分布式系统提供了很多易用又强大的功能。
Hystrix
对于 Eureka 和 Ribbon,我不多介绍,因为这两个是被提到比较多的技术。多介绍一下 Hystrix。Hystrix 会对提高分布式系统在远程调用方面的可用性和鲁棒性非常有帮助的一个组件。它提供了熔断器等模式(服务降级)。同时,它还提供了一个很不错的远程调用监控的功能(如原文图6所示的 Hystrix Dashboard)。Spring Cloud Netflix 使得 Hystrix 提供的这些功能(当然也包括 Eureka 和 Ribbon 所提供的功能)可以很透明地、非侵入式地被 Spring 应用所使用。
目前常见的应用监控解决方案,如国内厂商比较广泛使用的大众点评的 CAT,其使用方式还是一种侵入是的。这种方式是业务代码和监控系统相耦合,同时也使代码的可读性降低。所以最好的方式是非侵入式的监控(某些场合实现起来很困难,比如异步 API)。在这方面,Spring Cloud Netflix 在 REST API 调用方面给我们提供了一个不错的可选择的方案。
Zuul
Zuul 是 Netflix 所用的反向代理模块。不同于 Nginx 和 HAProxy,Zuul 使用的是动态加载 Groovy 缩写的 Filter 的方式来定义路由规则。因为采用了编程的方式,所以其自定义能力大大强于 Nginx 和 HAProxy(此处是凭经验推断)。
Spring Cloud Netflix 进一步地在 Zuul 的基础上提供了 OAuth2 SSO 的能力。
总结
大致读了一下这篇文章,发现了 Spring Cloud 更多的亮点和可以为项目之所用的地方。我相信深入了解 Spring Cloud 以及其设计思想会给我们的分布式系统带来质的提高。
来源:oschina
链接:https://my.oschina.net/u/1158769/blog/614687