我们知道SpringCloud可以用来开发微服务,但是应该很少有人真正了解SpringCloud是什么。官方的解释是:springcloud提供了一些工具可以让开发者快速构建分布式应用,而这些服务可以很好的工作在任何分布式环境中。既然我们提供了一些快速构建微服务应用的工具,那我们就需要了解微服务开发过程中需要解决哪些问题?服务注册发现远程服务调用负载均衡断路器分布式消息配置中心链路监控因此springcloud提供了一些工具来解决此类问题,比如服务注册提供了Eureka/Consoul/zookeeper;远程调用是基于RestTemplate进行http协议调用封装;负载均衡使用Ribbon,断路器使用hystrix;分布式消息基于kafka、rabbitMQ;配置中心基于config;链接监控基于侦探。但是从这些组件中,我们发现了一些问题,这些组件并不是spring提供的,比如eureka、ribbon、hystrix都是netflix开源的。Kafka和zookeeper是独立的组件,似乎和spring没有关系。没错,这就是春天队的强项。他们很少重复早期的轮子,而是用别人做的轮子来包装,方便用户使用。举个简单的例子,比如最早的spring只提供了IOC和AOP的核心功能,而像ORM框架、缓存、MVC框架,spring只是提供了一种兼容和支持,所以当时大家都说那spring就是万能胶,可以把各种框架集成起来。当然spring也会替代一些市场上做的不好的技术,比如struts2。记得当时公司做的struts2经常有各种漏洞,于是就产生了springmvc,很快就取代了struts。成为当前的主流框架。所以,对于springcloud也是如此。SpringCloud不是一个框架,因为SpringCloud的核心并没有实现服务注册、断路器、配置中心等功能。它提供了一个标准规范。而SpringCloudNetflix是springCloud规范的一个实现。公共服务组件?集成在各个微服务中,依赖其他组件并为其提供服务。功能区,客户端负载平衡,具有区域亲和性和重试机制。Hystrix,客户端容错保护,具有服务降级、服务熔断、请求缓存、请求合并、依赖隔离等功能。Feign,一种声明式的服务调用,本质上是Ribbon+HystrixStream,消息驱动,具有三个通道:Sink、Source、Processor,其特性包括订阅发布、消费者组、消息分区。Bus,消息总线,配合Config仓库修改的stream实现,Sleuth,分布式服务跟踪,需要搞清楚如何将TraceID,SpanID,采样与ELK集成。?不需要依赖其他组件单独启动,可以单独完成。Eureka是一个服务注册中心,具有消除故障和服务保护的功能。Dashboard即Hystrix仪表盘,监控集群模式和单点模式,集群模式需要收集器Turbine的配合。Zuul,一个API服务网关,具有路由分发和过滤功能。Config,分布式配置中心,支持本地仓库、SVN、Git、Jar包配置等多种模式SpringCloud生态搭建SpringCloud生态是基于springboot的微框架搭建的,所以springcloud可以说是基于关于springboot要集成其他框架,那么什么是springboot或者为什么要基于springboot集成呢?首先,springboot并不是什么新技术。它基于spring框架下的“约定优于配置(ConventionOverConfiguration)”的理念。主要帮助开发者基于spring框架创建独立运行、产品级的Application。为什么springboot是微框架?如果你玩过springboot,应该会有不错的体验。我们只需要很少的配置就可以快速构建一个web项目。但是springboot并没有什么新技术。如果熟悉spring框架,学习springboot会更容易。在围绕springboot构建的springcloud生态系统下,目前有两种比较或实现,一种是基于netflix,一种是基于alibaba。SpringCloudAlibaba相关资料上一期我们讲完了SpringCloudAlibaba生态中的Dubbo组件。当然我们不是以s??pringcloud项目的形式来讲解,而是以组件的形式来讲解。原因是springcloud的本质就是上面各种组件的集成。目前在SpringCloudAlibaba的生态中,已经有一个比较成熟的系统Dubbo用于实现高性能的JavaRPC通信Nacos服务注册发现、配置管理、服务管理Sentinel流控、熔断降级、系统负载保护RocketMQ分布式消息系统,提供低延迟、高可靠的消息发布订阅服务Seata高性能微服务分布式事务解决方案阿里云OSS阿里云对象存储服务(简称OSS)是一种海量、安全、低成本的低成本、高可靠的云存储服务。阿里云SchedulerX是阿里中间件团队研发的一款分布式任务调度产品,支持周期任务和固定时间点触发任务。阿里云短信提供覆盖全球的短消息服务,其友好、高效、智能的互联通信能力帮助企业快速构建客户接入渠道。2019年8月1日,spring-cloud-alibaba发布第一个毕业版(孵化器仓库毕业),发布V2.1.0.RELEASE版本,最新版本为2.2.1.RELEASE、2.2。x版本适用于SpringBoot2.2.x另外,相对于SpringCloudNetflix生态,到2020年,archaus/hystrix/ribbon/zuul/turbine等starter将进入维护模式,这意味着springcloud团队将不再向这些模块添加新功能,但仍修复安全问题和一些块级错误。只是没有新的特性迭代,springcloudnetflix还是可以用的。文章链接->spring-cloud-netflix-projects-entering-maintenance-mode进入维护模式最根本的原因是Netflix对zuul、ribbon等项目的维护投入比较少,所以springcloud会进入这些格林威治维护模式下的项目。当然,这些组件还会有其他具有相应功能的组件代理,有的还在孵化阶段。有的已经毕业了,比如阿里标准微服务的整体架构,SpringCloud。阿里巴巴提到微服务,就不得不提到SpringCloud全家桶系列。总线等近20个子项目在服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域提供解决方案SpringCloud屏蔽了复杂的配置和实现原理通过SpringBoot式的封装,最终留给开发者一套易于理解和部署的分布式系统开发包。与SpringCloud一样,SpringCloudAlibaba也是一套微服务解决方案,包含了开发分布式应用微服务的必要组件,方便开发者通过SpringCloud编程模型轻松使用这些组件开发分布式应用服务。依托SpringCloudAlibaba,只需添加一些注解和少量配置,即可将SpringCloud应用接入阿里巴巴微服务解决方案,通过阿里巴巴中间件快速构建分布式应用系统。SpringCloudAlibaba包含的组件阿里开源组件Nacos:动态服务发现、配置管理和服务管理平台,更容易构建云原生应用。Sentinel:以流量为切入点,从流量控制、断路器降级、系统负载保护等多个维度保障服务的稳定性。RocketMQ:一个开源的分布式消息系统,基于高可用的分布式集群技术,提供低延迟、高可靠的消息发布和订阅服务。Dubbo:不用多说,这是一个在国内被广泛使用的高性能JavaRPC框架。Seata:阿里巴巴开源产品,简单易用的高性能微服务分布式事务解决方案。Arthas:一个开源的Java动态跟踪工具,基于字节码增强技术,功能非常强大。阿里巴巴的商业组件作为一家商业公司,阿里巴巴推出了SpringCloudAlibaba,很大程度上是希望通过抢占开发者生态来帮助推广自己的云产品。因此,在开源社区中,存在着大量的私货。这些组件我在阿里工作的时候都用过,整体的易用性和稳定性还是很高的。阿里云ACM:应用配置中心产品,在分布式架构环境下,对应用配置进行集中管理和推送。AlibabaCloudOSS:阿里云对象存储服务(AlibabaCloudObjectStorageService,简称OSS)是阿里云提供的云存储服务。AlibabaCloudSchedulerX:阿里中间件团队研发的分布式任务调度产品,提供秒级精准定时(基于Cron表达式)的任务调度服务。Nacos服务注册中心Nacos提供统一的配置管理、服务发现和注册。服务注册和发现的功能相当于dubbo中使用的zookeeper,或者springcloud中使用的consoul和eureka。服务发现和服务健康监控Nacos提供了基于RPC的服务发现。服务提供商可以通过本机API或openApi注册他们的服务。服务消费者可以使用API或Http来查找和发现服务。同时,Nacos提供了对服务的实时监控和检查。当发现服务不可用时,可以动态下线服务,防止服务消费者向不健康的服务发送请求。配置管理传统的配置管理是基于项目中的配置文件来实现的。当配置文件改变时,需要重新部署。动态配置中心可以对配置进行统一管理,使配置更加灵活高效。动态配置中心可以实现路由规则动态配置、限流规则动态配置、动态数据源、交换机、动态UI等场景。国内比较知名的开源配置中心:Aollo/diamond/disconfNacos的整体架构Nacos的整体架构还是比较清晰的,我们可以从下面官方的架构图进行简单的分析。云原生云原生从字面上可以分为云和原生两部分。云与地方相对。传统应用程序必须在本地服务器上运行。现在流行的应用程序都运行在云端。云包括IaaS、PaaS和SaaS。土生土长的意思。当我们开始设计应用程序时,我们考虑到应用程序将来会运行在云环境中。我们必须充分利用云资源的优势,比如云服务的弹性和分布式优势。
