目录
微服务基本介绍
微服务基本介绍
简介
微服务是一种架构方式、一种概念。需要技术架构去实施
Spring Cloud是Spring旗下的项目之一,官网地址:http://projects.spring.io/spring-cloud/
Spring最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。Spring Cloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等功能
Spring Cloud是一个基于Spring Boot实现的云原生应用开发工具,Spring Cloud以快速构建分布式系统中的某些常见模式(配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)等操作提供了一种简单的开发方式
Spring Cloud全家桶系列,SpringCloud是若干个框架的集合,包括spring-cloud-config、spring-cloud-bus等近20个子项目,提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。
Spring Cloud通过Spring Boot风格的封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、容易部署的分布式系统开发工具包。
一般来说,Spring Cloud包含以下组件,主要以Netflix开源为主:
为什么使用Spring Cloud?
微服务的实现方式很多,但是最火的莫过于Spring Cloud了。为什么?
①后台硬
作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大
②技术强
Spring作为Java领域的前辈,可以说是功力深厚。有强力的技术团队支撑
③群众基础好
可以说大多数程序员的成长都伴随着Spring框架,试问:现在有几家公司开发不用Spring?Spring Cloud与Spring的各个框架无缝整合,对大家来说一切都是熟悉的配方,熟悉的味道
④使用方便
相信都体会到了Spring Boot给开发带来的便利,而Spring Cloud完全支持Spring Boot的开发,用很少的配置就能完成微服务框架的搭建
微服务背后一个重要的理念就是持续集成、快速交付,而在服务内部使用一个统一的技术框架,显然比把分散的技术组合到一起更有效率。更重要的是,相比于Dubbo,它是一个正在持续维护的、社区更加火热的开源项目,这就保证使用它构建的系统,可以持续地得到开源力量的支持
功能
(1)Spring Cloud是一个微服务框架,与Spring Boot结合,开发简单。将一个大工程项目,分成多个小Web服务工程,可以分别独立扩展,又可以共同合作
(2)Spring Cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的(微服务架构)
微服务:就是把一个单体项目,拆分为多个微服务,每个微服务可以独立技术选型,独立开发、独立部署、独立运维;并且多个服务相互协调、相互配合、最终完成用户的价值
(3)Spring Cloud是一系列框架的有序集合。利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发。如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署
(4)并不是云计算解决方案,而是在Spring Boot基础之上构建的,用于快速构建分布式系统的通用模式的工具集
使用Spring Cloud开发的应用程序非常适合在Docker和PaaS(比如Pivotal Cloud Foundry)上部署,所以又叫做云原生应用(Cloud Native Application)。云原生可以简单地理解为面向云环境的软件架构
Spring Cloud具有如下特点
(1)约定优于配置
(2)适用于各种环境。开发、部署PC Server或各种云环境(例如阿里云、AWS等)均可
(3)隐藏了组件的复杂性,并提供声明式、无xml的配置方式
(4)开箱即用,快速启动
(5)轻量级的组件。Spring Cloud整合的组件大多比较轻量。例如Eureka、Zuul等,都是各自领域轻量级的实现;
(6)组件丰富,功能齐全。Spring Cloud 为微服务架构提供了非常完整的支持。例如、配置管理、服务发现、断路器、微服务网关等
(7)选型中立、丰富。例如,Spring Cloud支持使用Eureka、Zookeeper或Consul实现服务发现
(8)灵活。Spring Cloud的组成部分是解耦的,开发人员可以按需灵活挑选技术选型
特征?
Spring Cloud专注于为典型的用例和可扩展性机制(包括其他用例)提供良好的开箱即用体验
(1)分布式/版本化配置
(2)服务注册和发现
(3)路由
(4)服务到服务的呼叫
(5)负载均衡
(6)断路器
(7)全局锁
(8)领导选举和集群状态
(9)分布式消息传递
Spring Cloud采用了一种非常声明性的方法,通常只需更改类路径或注释即可获得许多功能
作为发现客户端的示例应用程序
Spring Boot的启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
五大重要组件
(1)服务发现(Netflix Eureka)
服务治理组件,包含服务注册中心,服务注册与发现机制的实现。(服务治理,服务注册/发现)
(2)客服端负载均衡(Netflix Ribbon/Feign)
客户端负载均衡的服务调用组件(客户端负载)/服务调用,给予Ribbon和Hystrix的声明式服务调用组件(声明式服务调用)
(3)服务网关(Netflix Zuul)
网关组件,提供智能路由,访问过滤功能
(4)断路器(Netflix Hystrix)
容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力(熔断、断路器,容错)
(5)分布式配置(Spring Cloud Config)
配置管理工具,实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等
Spring Cloud组件详细
(1)Spring Cloud Netflix(核心组件)
可以对多个Netflix OSS开源套件进行整合,包括以下几个组件:
Eureka:服务治理组件。包含服务注册与发现
Hystrix:容错管理组件。实现了熔断器
Ribbon:客户端负载均衡的服务调用组件
Feign:基于Ribbon和Hystrix的声明式服务调用组件
Zuul:网关组件,提供智能路由、访问过滤等功能
Archaius:外部化配置组件
(2)Spring Cloud Config
配置管理工具。实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等
(3)Spring Cloud Config Server
(1)用于外部配置的HTTP,基于资源的API(名称 - 值对或等效的YAML内容)
(2)加密和解密属性值(对称或非对称)
(3)使用可轻松嵌入Spring Boot应用程序@EnableConfigServerConfigClient功能(适用于Spring应用程序)
(4)绑定到Config Server并Environment使用远程属性源初始化Spring
(5)加密和解密属性值(对称或非对称)
(4)Spring Cloud Bus
事件、消息总线。用于传播集群中的状态变化或事件,以及触发后续的处理
(5)Spring Cloud Security
基于Spring Security的安全工具包,为应用程序添加安全控制
(6)Spring Cloud Consul
封装了Consul操作,Consul是一个服务发现与配置工具(与Eureka作用类似),与Docker容器可以无缝集成
Dubbo
Dubbo是阿里开源的一个SOA服务治理解决方案,文档丰富,在国内的使用度非常高
(1)调用中间层变成了可选组件,消费方可以直接访问服务提供方
(2)服务信息被集中到Registry中,形成了服务治理的中心组件
(3)通过Monitor监控系统,可以直观地展示服务调用的统计信息
(4)服务消费者可以进行负载均衡、服务降级的选择
对于微服务架构而言,Dubbo并不是十全十美的,也有一些缺陷,比如:
(1)Registry严重依赖第三方组件(ZooKeeper或者Redis),当这些组件出现问题时,服务调用很快就会中断
(2)Dubbo只支持RPC调用。这使得服务提供方与调用方在代码上产生了强依赖,服务提供方需要不断将包含公共代码的Jar包打包出来供消费方使用。一旦打包出现问题,就会导致服务调用出错
Spring Cloud与Dubbo功能对比
功能名称 | Dubbo | Spring Cloud |
---|---|---|
服务注册中心 | ZooKeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC | REST API |
服务网关 | 无 | Spring Cloud Netflix Zuul |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
Spring Cloud好在哪里?
作为新一代的服务框架,Spring Cloud目标是开发“面向云的应用程序”,它为微服务架构提供了更加全面的技术支持
Spring Cloud 抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式。严格来说,这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但也避免了原生RPC带来的问题。而且REST相比RPC更为灵活。服务提供方和调用方,不存在代码级别的强依赖,这在强调快速演化的微服务环境下显得更加合适
很明显,Spring Cloud的功能比Dubbo更加强大,涵盖面更广,而且作为Spring的拳头项目,它也能够与Spring Framework、Spring Boot、Spring Data、Spring Batch等其他Spring项目完美融合,这些对于微服务而言是至关重要的
更重要的是,相比于Dubbo,它是一个正在持续维护的、社区更加火热的开源项目,这就可以保证使用它构建的系统持续地得到开源力量的支持
Spring Cloud的几个优势
(1)Spring Cloud来源于Spring,质量、稳定性、持续性都可以得到保证
(2)Spring Cloud天然支持Spring Boot,更加便于业务落地
(3)Spring Cloud发展得非常快,从开始接触时的相关组件版本为1.x,到现在将要发布2.x系列
(4)Spring Cloud是 Java 领域最适合做微服务的框架
相比于其他框架,Spring Cloud 对微服务周边环境的支持力度最大。对于中小企业来讲,使用门槛较低