从 Netflix 到 Alibaba,Spring Cloud 更好了吗?

一君_ 发布于 03/31 17:04
阅读 7K+
收藏 45

Spring Cloud 自 2015 年 3 月推出之后,很快就在 Java 微服务生态中,成为开发人员的首选技术栈。Spring Cloud 在 Spring Boot 的基础上,保留 Java 开发习惯,加入分布式特性,提供了一系列通用工具来帮助开发者在分布式系统里快速构建一些常见模式,现在已成为使用范围最广的微服务架构之一。

2017 年,阿里基于 Spring Cloud 推出的 Spring Cloud Alibaba 正式入驻 Spring Cloud 孵化器,并在 2019 年 7 月正式毕业。目前在 Github 上,也已经有超过 13000 个项目使用了 Spring Cloud Alibaba。

“我希望 Spring Cloud Alibaba 能够成为 Spring Cloud 所有实现的第一选择。”Spring Cloud Alibaba 创始团队成员方剑认为,Spring Cloud Alibaba 凭借组件优势,是最容易替代 Spring Cloud Netflix 的实现。

Spring Cloud Alibaba 优势在哪?SpringCloud 未来会如何演进?为进一步了解 SpringCloud 生态发展现状及其未来发展,我们邀请 Spring Cloud Alibaba 创始团队成员、《深入理解 Spring Cloud 与实战》作者方剑,请他谈谈 Spring Cloud 生态和实战。

4 月 5 日至 11 日,方剑也将做客高手问答栏目,探讨 Spring Cloud 相关的问题,敬请期待!

Q:首先请介绍下自己吧。

A:大家好,我叫方剑,花名洛夜,是 Spring Cloud Alibaba 创始团队成员里的一名同学,也是《深入理解 Spring Cloud 与实战》这本书的作者。

目前在阿里云从事微服务相关的工作,对微服务感兴趣的同学可以一起交流。

了解 Spring Cloud 生态

Q:你什么时候开始接触 Spring Cloud 的,平时如何学习了解 Spring Cloud 生态?可以分享下经验吗?

A:我第一次接触 Spring Cloud 是在 2016 年。那个时候公司在用 Spring Boot,后来了解到 Spring 家族里还有 Spring Cloud 这个项目,然后对它做了一些简单了解。在 2017 年,由于工作的关系,我对 Spring Cloud 做了一个比较深入的接触。

关于如何学习 Spring Cloud 生态。我相信每个人都有自己的学习方法,我在这里分享一下个人的学习 Spring Framrwork 的过程。

我建议大家带着思考去学习。在深入接触 Spring Cloud 之前,我对 Spring MVC 和 Spring Boot 都已经有了比较深入的理解。学习 Spring MVC 的时候,我带着 "Controller 方法上加个 @ResponseBody 注解后把 Request Body 解析成 JSON" 这个问题去解读源码;学习 Spring Boot 的时候,我带着 "Spring Boot 提供的 starter 内部没有任何一行代码 java,引入后却可以使用对于 starter 的特效,这是怎么做到的?" 问题去解读源码。

有了 Spring 的这些基础知识后,Spring Cloud 学习起来会非常方便,Spring Cloud 本质上是一套基于 Spring Boot 的 hook 机制去提供微服务领域下常见问题的解决方案。

这里有我记录的这些学习文章,大家有兴趣可以关注:

SpringBoot源码分析系列:http://fangjian0423.github.io/2017/06/05/springboot-source-analysis-summary/

SpringMVC源码分析系列:https://www.cnblogs.com/fangjian0423/p/springMVC-directory-summary.html

Spring Cloud:在《深入理解 SpringCloud 与实战》书里了 ~

Q:Spring Cloud 生态体系非常庞大,你认为可以重点关注哪些领域,为什么?

A:我个人觉得可以重点关注常用的领域,比如服务注册/发现,服务熔断,服务调用,网关,消息这些领域。理由其实很简单,这些领域的使用场景最多。

当然,Spring Cloud 体系还包括了分布式调用链,批处理/流处理,Serverless 这些领域。

Q:现在云原生的概念越来越火,以 Kubernetes、Istio 为代表的 Go 语言生态在国内也呈现高歌猛进的态势,包括阿里云在内的众多大厂都在陆续跟进。那么以 Spring Cloud 为代表的 Java 生态架构未来会不会被 Go 语言取代呢?

A:首先声明个人并不是 Service Mesh 方面的专家,我说说我的理解。

Kubernetes 下运行 Spring Cloud 完全没有问题。这个问题实际上是 Spring Cloud 和 Istio 的关系。

如果是纯 Spring Cloud 或者 Dubbo Java 体系,我认为完全没必要转向 Istio,因为 Java 体系自身的微服务治理能力已经比较强了,没有必要迁移到 Istio。

如果存在多语言场景并希望尝试 Istio,我个人持乐观态度。

Q:有说法是微服务架构本身其实比较使用有一定规模的企业或是技术团队。你怎么看?如何界定规模大小?

A:这个规模需要根据企业的规模,技术栈,发展,团队划分都有关系,很多在单体应用里不存在的问题,使用微服务架构后会出现,一定要做好准备。

我个人的观点是微服务有它的优点,但不适合所有团队,不要为了微服务而微服务。

Q:此前一些 NetflixOSS,如 Eureka、Hystrix 停止维护对 Spring Cloud 造成哪些影响?到目前为止,这些影响是如何被消除的?

A:之前 Eureka、Hystrix 相继宣布停止维护,社区上人心惶惶,但我个人觉得没有任何影响。绝大部分开发者认为 Spring Cloud = Spring Cloud Netflix,但实际上 Spring Cloud 是一套规范,这套规范并不是只有 Netflix OSS,还有 Spring Cloud Alibaba,Spring Cloud Zookeeper,Spring Cloud Consul,Spring Cloud Kubernetes 这些实现。

Spring Cloud Alibaba 是其中组件最多,也是最容易替代 Spring Cloud Netflix 的实现。

Q:在你看来,Netflix 为什么会在微服务正火的时候退出这个竞争场?这对其他厂商有什么启示吗?

A:Netflix 其实并没有退出这个竞争场,它的内部还是微服务架构,只是它没有精力投入去做开源了。这点也恰恰说明做开源是一个持续付出的事情。

云厂商做开源,又有商业化,这是比较良好的一个发展方式。我们看 Spring Cloud GCP,Azure Spring Cloud,Spring Cloud AWS 这些云厂商的 Spring Cloud 实现,都是跟自身的云产品结合而产生的。

这里打一个广告哈,阿里云上提供了 EDAS 和 MSE 两个微服务产品,大家可以了解一下。

Q:可以介绍下 Spring Cloud Alibaba 针对 Netflix 组件的替代方案吗?

A:服务注册发现:Netflix Eureka -> Alibaba Nacos Service Registry

服务熔断:Netflix Hystrix -> Alibaba Sentinel

动态配置:Netflix Archaius -> Alibaba Nacos Configuration

服务调用:Netflix Ribbon -> Spring Cloud LoadBalancer(Spring Cloud 官方支持,Hoxton 版本后支持)

服务路由:Netflix Zuul -> Spring Cloud Gateway(Spring Cloud 官方支持,Finchley 版本后支持)

在 Spring Cloud Alibaba 还处于孵化器的时候,社区上有同学编写了《Spring Cloud Alibaba 迁移指南》(https://developer.aliyun.com/article/691128)文章用于迁移 Spring Cloud Netflix 至 Spring Cloud Alibaba。 

Spring Cloud Alibaba 靠什么胜出?

Q:你是 Spring Cloud Alibaba 项目的创始人之一,当初为什么想要做这样一个项目?

A:阿里云在做"三位一体",即将"自研技术"、"开源项目"、"商业产品"形成统一的技术体系,最大化技术的价值,通过标准持续输出阿里巴巴的核心竞争力,让外部企业快速享有阿里微服务能力,加速企业数字化转型。

Q:Spring Cloud Alibaba 区别其他的 Spring Cloud XXX 有什么独特优势吗?

A:我觉得这张图说明得很清楚。

Q:Spring Cloud Alibaba 项目从诞生至今,有没有几个重要发展节点可以介绍下?

A:太多啦。我在这里列举一下我觉得几个比较重要的时间节点。

2017.12 入驻 Spring Cloud 孵化器。成为中国第一个入驻 Spring Cloud 孵化器的开源项目。

2018.11 发布第一个版本。包含 Nacos & Sentinel 组件。

2019.04 发布 GA 版本。

2019.04 Sentinel 成为官方推荐的 Circuit Breaker 实现。

2019.07 正式毕业。

2019.08 Apache RocketMQ 成为官方推荐的 Spring Cloud Stream 实现。

2019.10 Spring Cloud Alibaba 官网在 Spring 官方网站上线。

2020.02 Spring Initializr 上线 Spring Cloud Alibaba 组件。

2020.03 知行动手实验室 start.aliyun.com 上线。开发者们可以在浏览器中直接利用阿里云提供的真实环境学习新技术,打通学习云原生新技术的"最后一公里"。目前,Spring Cloud Alibaba,RocketMQ,Arthas 等热门开源项目的教程都已上线知行动手实验室。

2020.10 阿里云函数计算成为官方推荐的 Spring Cloud Function 实现。

2020.12 Github used by 数据超过 10k,成为 Spring Cloud 最的实现。

Q:Spring Cloud Alibaba 现在在 Spring Cloud 生态里扮演什么样的角色?它能为整体生态带来什么?

A:Spring Cloud Alibaba 是国内第一个在 Spring Cloud 社区孵化,并顺利毕业的开源项目,同时也是 Spring 社区中唯一一个拥有中文文档的国产 Spring Cloud 项目。

我们知道 Spring 生态目前是 Java 开发者的首选,进入这个社区也就意味着会接触更多的开发群群体。目前 Spring Cloud Alibaba 在 Github 上的 used by 数据已经超过了 13k。据我所知 Eureka 停止维护后,目前的使用群体数量一直在下降;Hashicorp 禁止 Consul 在中国使用这个政策出台后,越来越多的开发者会放弃 Consul。Spring Cloud Alibaba 的出现也给 Spring Cloud 社区带来了非常大的影响力,国外的论坛 Spring Blog,DZone 社区都发布过 Spring Cloud Alibaba 的文章。

我希望 Spring Cloud Alibaba 能够成为 Spring Cloud 所有实现的第一选择。

Q:Spring Cloud Alibaba 之前选择融入 Dubbo、RocketMQ 是出于什么考虑?现在的效果如何?

A:

RocketMQ:我发现大家对于 Spring Cloud 的关注点几乎都在服务注册/发现,动态配置,服务调用等领域。其实 Spring Cloud Stream 是一个非常优秀的项目,这是一个屏蔽消息细节,提供统一消息 API 的项目。Apache RocketMQ 的细节当然也可以屏蔽,于是我们就提供了 Spring Cloud Stream RocketMQ Binder 模块。目前 Spring Cloud Stream 的官方实现列表(https://spring.io/projects/spring-cloud-stream)中有 Apache RocketMQ 的实现。

Dubbo:在 Spring Cloud Alibaba 出现之前,社区一直都认为 Spring Cloud 和 Dubbo 是一个竞争关系,二者只能选一个,融入 Dubbo 是想表达这两者并不是一个竞争关系。

Q:你是《深入理解 Spring Cloud 与实战》一书的作者,在这里可否概述下你对 Spring Cloud 的理解,以及一些实战经验?

A:我理解中的 Spring Cloud 本质上是一套基于 Spring Boot 的 hook 机制去提供微服务领域下常见问题的解决方案。这些方案包括了服务注册/发现,服务调用,服务路由,服务熔断,事件驱动,消息总线,网关,分布式调用链,批处理/流处理,Serverless 等这些领域。

其中,我列举一些模块的作用。

1. Spring Cloud Commons 模块内封装了服务注册/发现,服务熔断的编程模型。

2. Spring Core 里的 Environment 封装了配置的编程模型。

3. Spring Cloud Stream 封装了屏蔽底层消息细节的的消息编程模型。

4. Spring Cloud Bus 封装了消息总线的编程模型。

5. Spring Cloud Task,Spring Batch 提供了批处理,任务处理的编程模型。

关于实战部分,书籍里面有提到。这里给大家列举一部分实战案例。

1. 案例:应用流量控制

2. 案例:Spring Cloud 应用流量控制策略动态生效

3. 案例:使用 Sentinel 保护应用,防止服务雪崩

4. 案例:使用Spring Cloud Bus完成多节点配置动态刷新

5. 流处理案例:信用卡反欺诈系统

6. 批处理案例:统计GitHub仓库的各项指标数据

Q:这本书适合哪些人阅读?

A:我认为任何对 Spring Cloud 感兴趣的读者都可以来阅读,谢谢。

加载中
1
yangrex
yangrex
挺好的一框架就是文档写的太笼统,新生代三大框架值得关注
0
翠翠
翠翠

阿里开源还是 KPI 么?

Raphael_goh
Raphael_goh
是不是KPI不清楚,但是阿里的目的还是知道的,就是为了推广阿里云。 基本就是以阿里云为核心打造一套java最适用的微服务架构,虽然用Spring Cloud Alibaba 可以不用阿里云,但是用了更方便。可以直接用attach的方式,动态注入一些java字节码,打通云产品,比如阿里云的AHAS直接替换Sentinel。简单说就是更好更方便的卖钱。
0
c
crystalsis

怎么天天有人说 Eureka 停止维护了,只不过是 Eureka 2研发失败了。

Yoona520
Yoona520
啥研发失败了,实际上是Netflix不想做开源了,他们内部肯定有好东西,只是不愿意开源出来罢了
y
youngkun
spring cloud 2020已经全面废弃netflix组件,只保留了eureka。后期也会逐步废弃
fasdffsd
fasdffsd
很想不是失败了,是主创人员离职了,不维护,导致无限制延期
0
xzlzx
xzlzx

都说好,实际用了你就知道有多少坑,架构还是要化繁为简

0
Holt_Vong
Holt_Vong

服务路由, Dubbo  + Servlet是个啥模式

0
yl-yue
yl-yue

已经用很久了

0
_snake_
_snake_

也就那样吧

0
t
tsdyy

没有,更烂了

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部