SpringCloud是什么?
官方文档这么写道:
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.
翻译一下:
Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导层选举、分布式会话、集群状态)。分布式系统的协调导致了锅炉板模式,使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和云计算等托管平台。
SpringCloud是一套工具,是一系列框架的有序集合,SpringCloud 就是一套工具,帮助大家很容易地搭建出这么一个集群和分布式的架子出来
问题又来了,分布式和集群又是什么?
分布式、集群、微服务
- 分布式:一个业务分拆多个子业务,部署在不同的服务器上
- 集群:同一个业务,部署在多个服务器上
- 微服务的意思也就是将模块拆分成一个独立的服务单元通过接口来实现数据的交互。
分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。
分布式示意图
分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来.分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。好的设计应该是分布式和集群的结合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。
高可用集群示意图
微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。分布式和微服的架构很相似,只是部署的方式不一样而已。
SpringCloud特性
从官网我们可以看到,SpringCloud有以下特性和功能:
Spring Cloud focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover others.
- Distributed/versioned configuration
- Service registration and discovery
- Routing
- Service-to-service calls
- Load balancing
- Circuit Breakers
- Global locks
- Leadership election and cluster state
- Distributed messaging
Spring Cloud takes a very declarative approach, and often you get a lot of features with just a classpath change and/or an annotation.
翻译一下:
Spring Cloud专注于为典型用例提供良好的开箱即用体验,并提供扩展机制来覆盖其他用例。
- 分布式/版本配置
- 服务注册及发现
- 路由
- service - to - service调用
- 负载平衡
- 断路器
- 全局锁
- Leadership election and cluster state
- 分布式消息
Spring Cloud采用了一种非常声明性的方法,通常只需更改类路径和/或注释就可以获得很多特性。
为了实现这些特性和功能,SpringCloud有很多组件和模块,主要如下:
• Eureka :服务注册中心,用于服务管理
• Ribbon :基于客户端的负载均衡组件
• Hystrix :容错框架,能够防止服务的 崩效应
• Feign: Web 服务客户端,能够简 Http 接口的调用
• Zuul: API 网关 ,提供路由转发、请求过滤等功能
• Config 分布式配置管理
• Sleuth :服务跟踪
• Stream :构建消息驱动的微服务应用程序的框架
• Bus :消息代理的集群消息总线。
为什么SpringCloud如此流行?
社区的支持:
- 首先 Spring Cloud 有强大的社区支持,在 Java 生态圈必定离不开 Spring ,且
Spring Cloud 的更新频率也越来越高
- 首先 Spring Cloud 有强大的社区支持,在 Java 生态圈必定离不开 Spring ,且
关注内容:
- Spring Cloud 关注的是整个服务架构会涉及的方方面面,在 Spring Cloud 中各种
组件应有尽有,从而使其具有可快速集成、方便 成本低等优势
- Spring Cloud 关注的是整个服务架构会涉及的方方面面,在 Spring Cloud 中各种
性能问题
- Spring Cloud 带来的性能损耗对于大部分应用来说是可以接受的,而它具有的
Http 风格的 API 交互,在不同的语言中是通用的,且对每个微服务的测试来说是
非常方便的,也就是说 Spring Cloud 用小的性能损耗换来了更多好处 。
- Spring Cloud 带来的性能损耗对于大部分应用来说是可以接受的,而它具有的
接下来通过实践和学习来进一步认识SpringCloud。
参考:
【1】、分布式和集群 / SpringCloud / SpringCloud系列教材 (一)- 介绍
【2】、springcloud(一):大话Spring Cloud
【3】、Spring Cloud Hoxton SR6
【4】、三分钟读懂TT猫分布式、微服务和集群之路
【5】、分布式-微服务-集群 的概念和区别