文档章节

Spring Cloud Alibaba到底坑不坑?

程序猿DD
 程序猿DD
发布于 04/09 10:56
字数 2605
阅读 5504
收藏 60

之前我发过一篇《说说我为什么看好Spring Cloud Alibaba》,然后这两天有网友给我转了这篇文章《坑爹项目spring-cloud-alibaba,我们也来一个》,问我的看法是怎么样的,聊天时候简单说了一下。今天在家休息,抽空整理一下内容,逐点说一下我的看法,主要还是觉得这篇文章博眼球的成分高一些,因为这篇文章的解读与之前其他某些自媒体发布的《Eureka 2.0 开源工作宣告停止,继续使用风险自负》一文有异曲同工之“妙”,如果读者没有真正的理解Spring Cloud与Spring Cloud Alibaba,就很有可能会对它们有什么误解,然后产生这样的想法:

  • 感觉很有道理,这东西真垃圾
  • 标题很燃,必须转发

下面具体来说说该文章中,那些我认为不太正确的解读:

第一点:远程调用RPC

看看这篇文章的解读:

SpringCloud默认的是Feign和Ribbon,主要是提供了远程调用请求和解析,以及负载均衡的功能。客观点来说,如果不用这两个组件,就会越来越四不像,干脆也别叫SpringCloud了,所以替换不得。 RPC会大量使用动态代理的功能,将你的字符串或者配置(因为网络传输方便)搞成动态的接口。

你也可以写一个RPC进行集成,有很多教程教你手撸一个。

爸爸版的集成了个dubbo,dubbo就是个RPC。所以你一用这玩意,其他的一些关键组件也得跟着全套的换,组件就不叫组件了!

作者认为Spring Cloud的负载均衡和远程调用必须使用Feign和Ribbon,这是Spring Cloud的默认实现。如果换成Dubbo,就是四不像了。

说说我的想法:

第一点:Dubbo在融入Spring Cloud的时候,真的就是四不像吗?如果真正看过Spring Cloud Alibaba以及理解Spring Cloud Common中的抽象的话,这个问题根本就不用去讨论。Spring Cloud Alibaba Dubbo在实现的时候是兼容Feign的编程模型的。有兴趣的读者可以看看小马哥在该项目中的案例:

Github地址:https://github.com/spring-cloud-incubator/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples

第二点:Feign和Ribbon并不是Spring Cloud的标准,它们也只是Netflix OSS中的组件。对于负载均衡,大家可以了解一下spring-cloud-loadbalancer,它现在是Spring Cloud Common的一部分,这才是真正的标准。对于Spring Cloud Alibaba在整合Dubbo的时候兼容Feign客户端,已经是非常有用户意识了。

Github地址:https://github.com/spring-cloud-incubator/spring-cloud-loadbalancer

所以,作者到底有没有看过Spring Cloud Alibaba Dubbo的方案?

第二点:注册中心

看看这篇文章的解读:

服务注册中心是微服务的另外一个必备组件,用来协调服务提供者和调用者的相互发现,SpringCloud默认的注册中心是Eureka。

爸爸版的用的是Nacos。Nacos的更新目前来看还是比较活跃的,但真没有必要集成在一个Cloud中。Nacos最好的方式还是独立发布,然后维护一个starter。开发者可以按照自己公司的环境进行有选择性的集成或替换。集成一个组件的成本是比较低的,远远低于删掉一堆自以为是的功能。

SpringCloud还可以选择Zookeeper,或者Consul,甚至Etcd等,进行注册中心的搭建。目前,Eureka宣布不再维护后,Consul应该是首要选择。

Consul自带Dashboard和ACL,能够看到大多数你所关心的信息。为了能够集成在我们公司的体系中,你可能会开发一些后台管理功能,进行更多的控制。这部分开发简单,只需要做个界面,直接通过API读取Consul的数据就可以了。

说说我的想法:

第一点:注册中心的选择。对于Eureka不再更新之后,到底选择使用哪个并没有完全的最优解,存在即合理,选择适合自己团队(技术栈、使用成本)的,才是最需要考虑的点。

第二点:作者建议“Nacos最好的方式还是独立发布,然后维护一个starter”。这确实是一个很好的建议,但是这点我就奇怪了,作者到底有没有看过Nacos?Nacos目前就是独立发布的,Spring Cloud Alibaba对Nacos的支持,只是Nacos在客户端应用中,针对Spring Cloud用户的一种应用方式而已。

所以,作者到底有没有看过Spring Cloud Alibaba Nacos的方案?

第三点:熔断、限流

看看这篇文章的解读:

这部分已经被炒作成微服务体系的必备组件,但扪心自问,这个功能对于中小型的应用可能就是一个摆设。但我们还是要搞的,因为这是个卖点。

SpringCloud默认的组件是Hystrix,提供了多线程和信号量来控制的不同方式。可惜的是Hystrix也宣布不再维护了,官方推荐的替换版本是resilience4j。

熔断限流功能其实是非常简单的,同事花了一周时间就撸了个足够用的组件。这部分的主要设计在于能够简单的应用,最好是能够通过后台配置实时生效。

爸爸版的是Sentinel,虽然也带了个后台,但是并没有和注册中心进行集成,搞了个不伦不类。

我要用Sentinel,我自己集成就好了,用你个大头鬼。

说说我的想法:

第一点:我觉得作者能碰到一个能撸出熔断、限流框架和配置管理的同事,还是非常幸运的。但是并不是所有的团队都有人可以做这些,所以我觉得有这样的开源项目不管放在什么时候,都是对行业有益的。你不用没啥问题,但是并不代表对别人没用,并不代表这个项目不够优秀。

第二点:对于作者所说的,没有与注册中心集成,搞得不伦不类。这里的不伦不类,一直没能Get到作者的点。。。不知道是不是有点“为赋新词强说愁”的感觉?个人在对比Hystrix和Sentinel的时候,还是觉得有非常多要比Hystrix做得更好的地方的。

当然真正应用到自己的架构体系中,通常都是需要做一些适配、自定义等工作的。但是,对于开源产品的扩展,从来都不是用来抨击开源项目的核心原因。

第四点:集成自己的服务

这点是我通篇觉得最可笑的,先来看看作者对于AWS和Azure对Spring Cloud整合的赞美:

话说这aws,搞了个自己的SpringCloud,集成了自己的众多的服务,相辅相成,卖的很好。于是Azure等,也搞了一套,只不过只能跑在自己的云上。如果你用了,哪一天如果想换主机环境了,就会知道这些爸爸们是多么的爱你。

但是到了Alibaba做这些,就成了:

重要的组件不集成,反而集成了一堆类似于OSS、ANS、SMS、MQ等非必须的功能,这就是偷奸耍滑了。

同样是集成自己的商业服务来做好对客户的支持,我觉得是任何一个厂商增强自身产品实力必须要做的。到底好不好,用户说了算。

就拿个人而言,我们也是阿里云的客户,对于OSS、RocketMQ这些必不可少的产品,如果提供Spring Cloud的Starter,让我更好的使用它们。从用户角度来说,省去了很多自己封装的工作,有什么不好呢?

总结

现在技术圈有个怪现象,自从一些技术自媒体人开始分享自己如何通过分享技术来赚钱开始,催生出了越来越多的技术自媒体。

然后就出现了这样的奇葩现象:

  • 没有做过面试官的人在分享如何应对面试
  • 没有做过架构师的人在分享如何成为架构师
  • 没有赚到钱的人在分享如何赚钱
  • 不是中产的人在分享如何成为中产
  • ...

不可否认,做技术自媒体是可以赚钱。但是单纯为了赚钱的技术自媒体,生搬硬套那些大V们分享的赚钱方法,为了追求流量,会使用夸大表述、扭曲事实、传播侵权内容、编故事博取同情等手段来获得关注和转发。这使得很多技术内容的分享就变得不那么纯粹了,甚至会对读者造成对技术内容的误解。

我没有能力去控制那些自媒体发布这些不实的内容,但是在我了解的范围内,还是尽力输出一些我的理解。希望可以给这些误读内容不同的声音,能够引起读者的注意,从而希望大家可以多一些自己的思考。

当然,我的观点也不一定都是对的,所以不管读者看到什么内容,一定要保持自己的思考。当你发现网上有内容发生冲突的时候,唯一可以解决的方式不是选择一方去相信,还是要自己去深入研究,去验证哪一个观点才是正确的。

最后,声明一点:我不是Spring Cloud Alibaba的成员,也不是阿里系公司的员工。对于Spring Cloud Alibaba的支持,只是我作为一名奋斗在一线的程序员的简单思考。

如果您觉得我说的不对,非常欢迎可以留言讨论。

欢迎关注我长期连载的《Spring Cloud基础教程》

© 著作权归作者所有

程序猿DD
粉丝 509
博文 92
码字总数 123668
作品 4
闵行
私信 提问
加载中

评论(27)

2010带你飞
2010带你飞

引用来自“ixiaohei”的评论

我司spring cloud是我引进了,现在集群900+实例,运行良好,高峰时期会扩容一倍。
对于开发者也乐于使用spring cloud家族产品。另外对于dubbo替换ribbon和feign在我司是不可能了,前代系统都是给dubbo坑的才引入spring cloud替换;不管是运维方面,还是开发测试方面都被dubbo坑过。
鉴于阿里一堆kpi产品,对于一个长生命周期的项目,怎么也不会下定决心去踩阿里的坑吧。我司spring cloud从最初D版本升级到E,正在计划升级到F,几乎没有碰到什么大的坑;相对于阿里,pivotal对于spring系列开源项目的编码质量和兼容性支持还是比较高和相对成熟的。
另外spring cloud项目在监控、流量控制和灰度发布方面有点弱。比较看好istio和spring cloud kubernetes项目发展。即使后续考虑更换也只可能是这两项目

引用来自“newlife111”的评论

我操,咋跟我的这么一致,另外spring cloud kubernetes在istio之前,还不错。即springcloud+kubernetes的融合还不错。但是istio的模块虽然也起来了,但是没什么进展。
个人猜测,istio就是要干掉springcloud路由通信这块,将springcloud+kubernetes变成springboot+kubernetes+istio。
而且把我司挂嘴边的,很有可能我们在同一家公司.
兄台,公司大名报一个呗。
ylxs90
ylxs90

引用来自“loveminer”的评论

引用来自“ylxs90”的评论

引用来自“ylxs90”的评论

最厌恶的就是阿里,吃相比腾讯都难看的多。简直是下贱公司中的战斗机

引用来自“路人丁语”的评论

腾讯给你多少钱,阿里给双倍。😄
我明明是百度派来的😂

做个调查,一般喷阿里开源的都是些什么人,都是啥心态
你哪里看到我是喷阿里开源了,我喷的是阿里,他开不开源我都喷,吃相难看。大中午的打电话过来推销服务器。还有那个党员这两天又开始表演了
loveminer
loveminer

引用来自“ylxs90”的评论

引用来自“ylxs90”的评论

最厌恶的就是阿里,吃相比腾讯都难看的多。简直是下贱公司中的战斗机

引用来自“路人丁语”的评论

腾讯给你多少钱,阿里给双倍。😄
我明明是百度派来的😂

做个调查,一般喷阿里开源的都是些什么人,都是啥心态
ylxs90
ylxs90

引用来自“ylxs90”的评论

最厌恶的就是阿里,吃相比腾讯都难看的多。简直是下贱公司中的战斗机

引用来自“路人丁语”的评论

腾讯给你多少钱,阿里给双倍。😄
我明明是百度派来的😂
月之舞步
月之舞步
不太明白那些喷阿里开源的,说开源了不管的。说个中肯的,dubbo是中国rpc框架的元老之一吧。在当时微服务框架匮乏的年代,方便了多少人入门微服务。然后,阿里开源了,你用了,如果是有bug不修复,确实该喷。但是如果你喷对方不加新功能,我觉得就是得寸进尺了。开源了,你想要什么功能,可以自己改造,比如当当网的。但是我相信,大部分人用着dubbo,也没遇到什么bug,纯粹看到,听到kpi,然后dubbo版本不更新了,就开始喷。
归根结底还是那句话,如果你牛逼,请自己在dubbo的基础上自己改,给开源届做点贡献。
天空-sky

引用来自“程序猿DD”的评论

引用来自“ixiaohei”的评论

我司spring cloud是我引进了,现在集群900+实例,运行良好,高峰时期会扩容一倍。
对于开发者也乐于使用spring cloud家族产品。另外对于dubbo替换ribbon和feign在我司是不可能了,前代系统都是给dubbo坑的才引入spring cloud替换;不管是运维方面,还是开发测试方面都被dubbo坑过。
鉴于阿里一堆kpi产品,对于一个长生命周期的项目,怎么也不会下定决心去踩阿里的坑吧。我司spring cloud从最初D版本升级到E,正在计划升级到F,几乎没有碰到什么大的坑;相对于阿里,pivotal对于spring系列开源项目的编码质量和兼容性支持还是比较高和相对成熟的。
另外spring cloud项目在监控、流量控制和灰度发布方面有点弱。比较看好istio和spring cloud kubernetes项目发展。即使后续考虑更换也只可能是这两项目
没有收益的改造是没什么必要的。

的确是,很多时候技术架构的变更(追风),不仅没收益反而拖累自己公司。仅个人观点,不包括躺着赚钱的企业。
路人丁语
路人丁语

引用来自“ylxs90”的评论

最厌恶的就是阿里,吃相比腾讯都难看的多。简直是下贱公司中的战斗机
腾讯给你多少钱,阿里给双倍。😄
路人丁语
路人丁语
阿里有不好的开源项目,也有好的开源项目,为什么很多人都是停留在以前的基础上看问题呢?
ylxs90
ylxs90
最厌恶的就是阿里,吃相比腾讯都难看的多。简直是下贱公司中的战斗机
n
newlife111

引用来自“ixiaohei”的评论

我司spring cloud是我引进了,现在集群900+实例,运行良好,高峰时期会扩容一倍。
对于开发者也乐于使用spring cloud家族产品。另外对于dubbo替换ribbon和feign在我司是不可能了,前代系统都是给dubbo坑的才引入spring cloud替换;不管是运维方面,还是开发测试方面都被dubbo坑过。
鉴于阿里一堆kpi产品,对于一个长生命周期的项目,怎么也不会下定决心去踩阿里的坑吧。我司spring cloud从最初D版本升级到E,正在计划升级到F,几乎没有碰到什么大的坑;相对于阿里,pivotal对于spring系列开源项目的编码质量和兼容性支持还是比较高和相对成熟的。
另外spring cloud项目在监控、流量控制和灰度发布方面有点弱。比较看好istio和spring cloud kubernetes项目发展。即使后续考虑更换也只可能是这两项目
我操,咋跟我的这么一致,另外spring cloud kubernetes在istio之前,还不错。即springcloud+kubernetes的融合还不错。但是istio的模块虽然也起来了,但是没什么进展。
个人猜测,istio就是要干掉springcloud路由通信这块,将springcloud+kubernetes变成springboot+kubernetes+istio。
而且把我司挂嘴边的,很有可能我们在同一家公司.
《Spring Cloud Alibaba基础教程》连载目录

Spring Cloud Alibaba与Spring Boot、Spring Cloud之间不得不说的版本关系 说说我为什么看好Spring Cloud Alibaba Spring Cloud Alibaba到底坑不坑? 注册中心与配置中心:Nacos Spring Clou...

程序猿DD
04/17
0
0
Spring Cloud Greenwich 新特性和F升级分享

2019.01.23 期待已久的Spring Cloud Greenwich 发布了release版本,作为我们团队也第一时间把RC版本替换为release,以下为总结,希望对你使用Spring Cloud Greenwich 有所帮助Greenwich 只支...

冷冷gg
01/24
0
0
SpringBlade 2.0 正式版发布,集成Nacos与Sentinel

大家新年好!经过一个半月的持续迭代,SpringBlade2.0的正式版终于发布了,同时全新官网上线。下面我们来看一下正式版有哪些惊喜。 SpringBlade简介: SpringBlade 2.0 是一个基于 Spring B...

smallchill
02/10
0
0
Spring Cloud Alibaba整合Sentinel流控

前面我们都是直接通过集成sentinel的依赖,通过编码的方式配置规则等。对于集成到Spring Cloud中阿里已经有了一套开源框架spring-cloud-alibaba,就是用于将一系列的框架成功的整合到Spring ...

尹吉欢
昨天
0
0
厉害了,Spring Cloud for Alibaba 来了!

最近,Spring Cloud 发布了 Spring Cloud Alibaba 首个预览版本:Spring Cloud for Alibaba 0.2.0. 大家都好奇,这和阿里巴巴有什么关系?莫非是给阿里巴巴定制了一个 Spring Cloud ? 其实也...

Java技术栈
2018/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 吾不好梦中插人

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @鱼豆腐233 :#今日歌曲分享# 分享My Chemical Romance的单曲《I Don't Love You》: 《I Don't Love You》- My Chemical Romance 手机党少年们...

小小编辑
今天
115
8
ss5 vpn 安装(linux版本)

1. 创建一个文件夹 /ss5 你也可以自定义,不过后续的地方需要注意自己的地址 2. 下载ss5文件(如果你的服务器没有安装wget请使用 yum -y install wget 命令安装 如果连yum都没安装自己查去)(下...

太黑_thj
今天
2
0
八、RabbitMQ的集群原理

集群架构 写在前面 RabbitMQ集群是按照低延迟环境设计的,千万不要跨越WAN或者互联网来搭建RabbitMQ集群。如果一定要在高延迟环境下使用RabbitMQ集群,可以参考使用Shovel和Federation工具。...

XuePeng77
今天
5
0
mac系统下,brew 安装mysql,用终端可以连接,navicat却连接不上?

问题: 1.报错? 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found 2.自己通过设置,已经把密......

写bug的攻城狮
昨天
3
0
老生常谈,HashMap的死循环

问题 最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。 由于HashMap...

群星纪元
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部