去年得知蚂蚁金服放出SOFA的部分开源项目, RPC部分号称源于阿里内部的HSF, HSF当年可是把dubbo 1.x踢出局的, 只是没想到京东改造dubbo为JSF, 当当改为dubbox。国内蛮多电商公司实施服务化就直接上dubbo 1.x或dubbox。这应该是阿里没想到的, 所以现在dubbo 2.x又回笼为apache的顶级项目, 把dubbox合并还继续完善。

朋友说他们公司花了千万买了SOFA的商业版, 那么值钱的东西今天抽空过了一下开源部分的SOFAStack和dubbo2.x文档, 简单做了个对比。

Feature sofa-rpc Dubbo2.x
运行环境 Java app或sofa-boot/spring-boot 依赖spring容器
通信协议 Bolt, REST,Dubbo,H2C,Http Dubbo,Rmi,Hessian,http,Webservice,Thrift,Redis,Memcached,Rest
注册中心 SOFARegistry,Zookeeper,Local文件注册表,Consul,Nacos Multicast广播注册,Zookeeper,Redis,Simple register server单点
直连调用 支持 支持
均衡负载 Random,LocalPref,roundRobin,consistentHash,weightRoundRobin Random,roundRobin,LeastActive,consistentHash
过滤拦截 自定义Filter SPI Filter自定义Event Notify,CallbackService
路由规则 自定义Router 自定义routing-rule
调用重试 FailOver模式下支持retry FailOver retry
链路追踪 Sofa-tracer,skywalking 支持monitor,全链路需整合第三方或待加强
自定义线程池 支持 支持
数据链路透传 RpcInvokeContext支持 支持RpcContext
预热权重 支持 未知
容灾恢复 单机故障剔除,Hystrix熔断 与容错策略有关,应该也可整合Hystrix
优雅关闭 支持 支持
异步调用 支持 支持
参数验证 未知 JSR 303支持
调用身份验证 好像支持,一下没找到 token验证
串行化 protostuff等 Kryo,FST等等
分布式事务 依赖于JTA或XA,需自行整合第三方组件 依赖于JTA或XA,需自行整合
服务治理 整合SOFAMesh, SOFAMosn, SOFALookout , SOFADashboard等工具 Dubbo ops工具操作

总体而已, SOFA只是开源一部分组件,一些分布式事务DTA,分布式调度,分布式锁,服务编排等中间件估计都放阿里云卖也一时半会不会放出来,dubbo 2.x也正在追赶越来越完善。

同时阿里的spring-cloud-alibaba也在孵化中,貌似认识的一位同事小马哥也在疯狂提交。所以现在服务化,微服务这些现成好用的东西是越来越多。

不过就开源项目而言,spring cloud的组件应该是最完备的,想要的中间件基本都有,走HTTP REST 慢是慢点, 但有时比给出接口jar好好些些, 维护起来 (虽然有部分不是太好用, 例如分布式调度组件)。

走微服务在技术层面已不是什么难事了,开源够丰富,重要的是业务的梳理和拆分,依赖,开发运维的难度。而SOFA开源的mesh, 引入ISTIO的service mesh是走在前沿的。有空我们继续深入。

相对而言sofarpc相对应该稳定一些,用在金融实践那么久,虽然只是开源出部分。网上有种说法dubbo 2.x是阿里的KPI项目, 还在快速迭代, 很多新特性可能会不断加入, 毕竟落地的案例少些, 稳定性应该差些。