sofastack / sofa-boot

SOFABoot is a framework that enhances Spring Boot and fully compatible with it, provides readiness check, class isolation, etc.
https://www.sofastack.tech/sofa-boot/docs/Home
Apache License 2.0
4.97k stars 1.27k forks source link

架构选型时的一些疑问 #197

Closed littlefisher666 closed 6 years ago

littlefisher666 commented 6 years ago

下面是在考虑公司框架选型时,我做的一些笔记,可否把相关顾虑给予一些释疑呢?

  1. 现在的sofa基于springboot1.4.3,如果现在就基于sofa最新release版本搭建的话,后续如果升级springboot2.x的话,会要踩坑(sofa3.x是基于springboot2.x,可现在还是snapshot版本)
  2. 类隔离特性上,由于公司代码已经进行了模块区分(独立开发部署不同的web服务器),做类隔离的意义好像不存在
  3. 让我感觉有必要使用的,是sofaMesh,该功能能够把网络请求与业务代码给拆分开来,避免业务侧需要考虑网络上可能出现的问题,且网络层可独立升级,避免依赖业务侧的升级。可了解下serviceMesh。但是好像sofaMesh模块还没有一个真正意义上的1.x release版本发布
  4. 在我理解中sofaRPC应该类似于dubbo,可以做服务治理,只不过这个需要运维介入了解下到底是否有需要,像类似于服务降级这种功能,是否需要。另外springcloud只有一个可监控的管理台,无法做到服务治理的功能
  5. sofaboot包含一系列的中间件功能,例如微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等,这些功能是sofa官网所描述的中间件功能,在我看来,也都是可以基于springcloud上,引用业界通用的中间件插件的
  6. 按照sofa所描述,该框架有开源版本和商业版本区分,虽说开源版本已经支持大部分功能,但是团队是否有足够的实力能够基于开源版本做公司级的定制化呢
QilongZhang commented 6 years ago

@litttlefisher 非常感谢反馈,以下是针对你提问的回答,希望能有所帮助。

使用 SOFABoot 2.x 升级到 SOFABoot 3.x 的成本?

SOFABoot 2.x 是基于 Spring Boot 1.4.3,SOAFBoot 3.x 是基于 Spring Boot 2.x 版本;SOFABoot 3.x 和 SOFABoot 2.x 本身在功能和使用上并没有不兼容性,但是因为 Spring Boot 2.x 和 Spring Boot 1.x 的不兼容,比如 Endpoint ,如果升级到 SOFABoot 3.x,需要改造业务代码。总体来说,相比 Spring Boot 1.x 升级到 Spring Boot 2.x , SOFABoot 2.x 升级到 3.x 并不会增加成本,两者需要的改造基本一致。

类隔离的使用场景

类隔离的使用和应用的微服务化并没有太大的冲突;首先应用微服务拆分之后,诸如 rpc,zk 这些基础中间件依然需要引入,这些都是有可能导致依赖冲突的,尤其是具有技术栈历史包袱的应用,不会轻易升级依赖包版本;其次应用微服务拆分并不万能,过度的模块拆分会增加运维成本,因此应用本身也可能很复杂。从目前蚂蚁内部使用场景以及现有的外部用户反馈来看,类隔离依然有着它特有的使用场景。

SOFAMesh 的使用,目前没有 release 版本

关于 SOFAMesh 这块,我们正在做紧锣密鼓的开发,在近几个月内会 Release 出 1.0 的版本。

SOFARPC 的使用

JAVA RPC 框架发展已经相对比较成熟,比如 Dubbo. SOFARPC 和 Dubbo 类似,是一款高性能,具备良好扩展的 RPC 框架。因为在蚂蚁内部使用多年,功能实现和支持可能会略有差异,如SOFARPC 协议上支持 HTTP/2、GRPC,能力上如服务预热权重、自动故障降级、协商机制、CRC数据校验等。也因为蚂蚁独特的金融背景,因此 SOFARPC 在金融领域使用更有优势。

SOFABoot 系列中间件组件和SpringCloud的区别。

SOFA 系列开源产品实际上构建了整个微服务生态,这些开源产品在蚂蚁金服内部大部分都经过长时间的打磨和大促流量的考验,不少组件在蚂蚁内部其实比 Spring Cloud 支持还早。所有组件的开源其实是蚂蚁选择从闭关自研走向开源共建的策略转变,并非是挑战 Spring Cloud,反而是给社区提供了另一个选择,丰富了微服务生态。两者的并非互斥关系,用户可以按实际需求,结合使用。

开源版本定制化

优秀的开源产品本身就应该具备良好的扩展性、可维护性以及详细的使用开发文档,这也是 SOFA 系列所有开源产品的目标。SOFABoot 商业版是基于开源版扩展的实现,我们相信绝大部分公司都有能力基于SOFA开源产品做定制化的扩展实现。SOFA 开源是一个长期维护的产品,所有来自社区的提问和交流都会得到 SOFA 团队认真的反馈,无需担心开源版本定制化的开发。

littlefisher666 commented 6 years ago

@QilongZhang 首先谢谢释疑。sofa我觉得最大的亮点(针对于我们公司而言),就是在金融领域更有优势,这个说法,我没有一个特别明确的感知,不知道是否可以给出几个针对于金融领域所做的一些优化、提升、改造或者说功能呢? 另外sofa还处于一个逐步开源的道路上,如果仅是个人学习而言,可能并不会有特别多的考虑。可如果是为公司选型上来考虑的话,就需要基于当前已开源的功能做考虑,毕竟版本选择固定后,后续升级的可能性微乎其微,除非已经影响到了业务的顺利进行(jdk从7升级到8就遇到了不小的阻力)。这个问题不知道您有什么好的见解可以提供一下的

littlefisher666 commented 6 years ago

@QilongZhang 另外提一嘴,SpringCloud由于是使用Rest接口做通讯的,所以可以集成Swagger。针对于SofaRPC或者说dubbo吧,是否可以集成Swagger或者说是否有提供类似功能的插件的

QilongZhang commented 6 years ago

@litttlefisher SOFARPC 支持 rest 服务,Swaagger 原生也支持 jax-rs, 我理解你说的集成 Swagger 应该是没有问题的。

littlefisher666 commented 6 years ago

@QilongZhang 不好意思,issue关闭了还要再追问一下。SOFARPC支持rest服务,是否意味着如果想使用Swagger,SOFAPRC必须使用rest协议才行的呢?

QilongZhang commented 6 years ago

@litttlefisher 😄没事, 后面几天看到没回复,就关了~

是否意味着如果想使用Swagger,SOFAPRC必须使用rest协议才行的呢?


嗯,不支持其他协议