Spring Cloud Alibaba 的前世今生

1

Spring Boot

SpringBoot 是由 Pivotal 团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。

目的是解决企业项目一站式部署,通过内嵌 Servlet 容器(如Tomcat)创建可执行的jar,用简单的 java -jar 方式就能实现 Java 项目快速部署,省去了 Tomcat 等 Servlet 容器部署环节。

通过注解方式,弱化了xml的作用, 自动装配,开箱即用,几乎实现代码零配置。

底层基于Spring4.0设计,不仅继承了Spring框架优秀特性,而且通过注解方式简化配置,进一步简化了Spring应用的整个搭建和开发过程。

2

Spring Cloud

SpringCloud底层集成了 netflix 开源微服务框架,依托于大名鼎鼎的 Servlet 容器框架:SpringBoot

核心模块包括:服务注册发现、断路器和监控、服务网关与反向代理机制、客户端负载均衡、配置中心等。

目的是解决大规模服务分布式架构下,提供服务集中监控及治理能力。

架构图

核心组件及主要功能大致如下:

1、服务注册和发现:eureka

它提供了微服务架构中很核心的组件:服务注册中心。基于服务端与客户端模式实现服务注册与发现。

另外还提供可视化的微服务监控页面,能够很直观的查看正在运行的微服务实例列表。

2、服务网关:zuul

所有对外暴露接口请求通过网关服务转向后台服务,防止后台服务具体地址被泄露,其机制是一套路由规则配置来判断某个请求url由哪个服务来响应,配合eureka获取已注册的微服务来转发真实的请求。

3、配置中心:config server

微服务配置文件统一管理,主要包括连接数据库连接参数、业务参数、redis连接参数、kafka连接参数等。

4、客户端负载均衡:ribbon

zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过ribbon负载均衡机制来决定由其中某个服务实例处理请求。

5、服务间接口调用(类似于rpc):feign

如果服务(进程)之间需要相互调用,需要用到feign,类似于以前的httpclient 请求,它默认会使用 ribbon 来实现微服务多实例客户端负载均衡。

6、监控和断路器:hystrix

提供接口级的监控和断路器功能。

7、监控面板:hystrix dashboard

提供可视化界面,监控微服务的调用所消耗的时间等。

8、监控聚合:turbine

使用hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查>看。这样就不需要挨个打开一个个的页面一个个查看。

版本匹配

  • spring cloud版本 Greenwich spring boot版本 2.1.x

  • spring cloud版本 Finchley spring boot版本 2.0.x

  • spring cloud版本 Edgware spring boot版本 1.5.x

  • spring cloud版本 Dalston spring boot版本 1.5.x

3

**Spring Cloud Alibaba
**

哪有什么一夜成名,其实都是百炼成钢。

Spring Cloud Alibaba 是阿里巴巴贡献给 SpringCloud 一个子项目,致力于提供微服务开发的一站式解决方案,包含微服务开发的必备组件,基于SpringCloud,符合SpringCloud标准,阿里的微服务解决方案。

注意 Spring Cloud Alibaba 微服务框架不是为了替代 SpringCloud,而是一种继承和发展,提供一个微服务框架选择,丰富了 SpringCloud 生态。

主要特性

  • 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。

  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。

  • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。

  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。

  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。

  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

  • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

4

**Nacos
**

官方介绍

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos作为注册中心

Nacos对标Spring Cloud 的eureka

Nacos作为配置中心

Nacos 对标 Spring Cloud 的 Configserver

Nacos是注册中心和配置中心结合体,致力于提供一站式云原生、微服务的服务治理平台,看似有一统注册中心和配置中心趋势。

如果您觉得本文对你有帮助,欢迎老铁们帮忙点赞、在看、留言、分享你们的支持是我原创最大的动力

往期精选

利用 Sharding-JDBC 解决数据库读写分离后,数据查询延时问题

基于分布式文件系统 FastDFS,利用 Zuul 网关实现滑块验证登录

月薪8K,java初级程序员需要掌握的一些面试经验

jsp的10年是谁让它如此落幕?

福利彩蛋

最近整理一份很全的Java学习资料,感兴趣的老铁可以在微信搜索【 架构荟萃】,后台回复以下关键字,即可免费获取。

回复“ sb”,免费获取 SpringBoot 全套视频教程。

回复“ sc”,免费 获取 SpringCloud 全套视频教程。

回复“面试”,免费获取 Java 面试全套题集。

回复“小程序”, 免费 获取微信小程序开发 全套视频教程。

扫描上图二维码关注我,加v:WooolaDunzung 进微信粉丝群。

本文分享自微信公众号 - 架构荟萃(dwooola)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )