什么是 Spring Cloud?
随着 Spring Cloud 成为炙手可热的微服务架构,我们可能经常会被问道:“用过 Spring Cloud 吗”“Spring Cloud 能做什么”,或者“你们为什么用 Spring Cloud,而不用其他微服务架构”之类的问题。
那么到底什么是 Spring Cloud,我们为什么使用 Spring Cloud 呢?
想要了解 Spring Cloud,我们就得先搞清楚什么是微服务。
百度百科上说:
微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
简单解释就是,微服务是将庞大的系统进行分解,形成独立的几个、甚至几十个小的项目,同时根据项目规模,数据库也可能进行分解,使得各服务都可以单独运作,从而提供开发、学习、扩展等效率。
比如笔者曾经参与过的一个项目,包含产品管理、用户管理、订单管理、电商平台等等,当发展到一定程度时,单纯代码就不止 2G,团队成员机器配置不得不进行了升级,因为 8G 内存,系统后来已经跑不起来了,即使我们将系统升级为内存 16G,固态硬盘,编译加启动通常加起来也要 20 分钟,而并不是所有人都能升级到此程度,很多人只能升级到 12G 内存,让系统跑起来,结果团队大部分人,编译启动一次至少半小时,有的人甚至要等一个小时,效率可想而知,而扩展(不论是代码、部署,还是其他都变得相当困难)
当然有很多公司当年都碰到过这种情况,为了解决这种问题,人们经过思考后,提出了微服务的概念,随后大批公司开始了相关的研究开发,现在,最为常用的就是 Spring Cloud,及 Dubbox 框架。
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。Spring Cloud 并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。——引自百度百科
Spring Cloud 的官方文档说:
Spring Cloud 为开发人员提供工具,使开发人员可以快速构建分布式系统中的一些常见模式(如:配置管理、服务发现、断路器、智能路由、微代理、控制总线)。分布式系统的协调引出样板模式(boiler plate patterns),并且开发人员使用 Spring Cloud 可以快速支持实现那些模式的服务和应用。它们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心以及 Cloud Foundry 等托管平台。
这两个描述完全很好的描述了什么是 Spring Cloud,其实简单概括就是 Spring Cloud 是一系列框架的集合,从而可以提供可扩展的,开箱即用的,全方位的,从开发、部署,到监控的一整套的解决方案。
Spring Cloud 特性
Spring Cloud 专注于为典型的用例和可扩展性机制(包括其他用例),提供良好的开箱即用体验。
- 分布式/版本化配置
- 服务注册和发现
- 路由
- 服务到服务的呼叫
- 负载均衡
- 断路器
- 全局锁
- 主节点投选和集群状态
- 分布式消息传递
注册中心 Eureka 是做什么的?
Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在 AWS 域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Spring Cloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务发现功能。
Eureka 包含两个组件:Eureka Server 和 Eureka Client。
Eureka Server 提供注册服务,各个节点启动后,会在 Eureka Server 中进行注册,这样 Eureka Server 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client 是一个 java 客户端,用于简化与 Eureka Server 的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向 Eureka Server 发送心跳,默认周期为 30 秒,如果 Eureka Server 在多个心跳周期内没有接收到某个节点的心跳,Eureka Server 将会从服务注册表中把这个服务节点移除(默认 90 秒)。
Eureka Server 之间通过复制的方式完成数据的同步,Eureka 还提供了客户端缓存机制,即使所有的 Eureka Server 都挂掉,客户端依然可以利用缓存中的信息消费其他服务的 API。综上,Eureka 通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
以上引自百度百科,它很好的解释了 Eureka 是什么,以及我们能用它来做什么。
案例
下面请跟随作者做一个注册中心的案例吧,此案例中,我们会创建以下几个部分: