双中台已成为业界推崇的企业信息化解决方案, 大中台,小前台不是套一个spring cloud就能实现, 也不是搭好就能立竿见影, 按照阿里的方法论,它的实施路径需要企业从战路,组织,流程和技术的升级,是一个循序渐进不断验证,纠偏和迭代的过程。 方舟编译器 方舟编译器 方舟编译器 方舟编译器

我们研讨下中台的服务化框架,落地的时候我们需要的不仅仅是个RPC,而是一个全栈式的解决方案,类似spring cloud的全家桶。完善一些的java开源框架有spring cloud, spring cloud alibaba, sofastack,apache servicecomb.

1.Spring Cloud

Martin Flower版标准的微服务实现,restful通信协议,全家桶组件齐备, 分布式配置中心,服务注册与发现,服务调用,网关路由,均衡负载,限流熔断,分布式消息,服务日志跟踪等等。以Hoxton.SR3版本为例。

Spring的一个大趋势是拥抱reactive, webflux也算是及时雨, TPS能一定提高, 不过学习曲线有点点大,Flux, Mono刚开始写会吃力, 不得不羡慕支持await的nodejs, rust异步的一等公民。最大的障碍应该是JDBC, 阻塞的IO, 而R2DBC又非J2EE规范, spring算是及时跟进这些异步驱动, redis的reative也开搞了, 如果能商用这TPS绝对提升不少。

参考下techempower的2019年的18轮测试, https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=db vertx+异步postgres驱动已经很霸道了,webflux+r2dbc应该也不会差多少。 方舟编译器

当然异步和响应式也绝对不是银弹, 它并不会让一个请求响应更快, 甚至还会慢点, 官方也是很客观的。

Performance has many characteristics and meanings. Reactive and non-blocking generally do not make applications run faster. They can, in some cases, (for example, if using the WebClient to execute remote calls in parallel). On the whole, it requires more work to do things the non-blocking way and that can increase slightly the required processing time. The key expected benefit of reactive and non-blocking is the ability to scale with a small, fixed number of threads and less memory. That makes applications more resilient under load, because they scale in a more predictable way. In order to observe those benefits, however, you need to have some latency (including a mix of slow and unpredictable network I/O). That is where the reactive stack begins to show its strengths, and the differences can be dramatic.

2.Spring Cloud Alibaba

Spring cloud for xxx这种版本, 可以服务于各自大厂cloud的版本, alibaba, aws, netflix, huawei都有各自版本。这里挑出阿里的主要是因为dubbo在国内的影响力, dubbo的开源造福了众多企业。阿里再次维护dubbo自然是赢得了名声, 也推广了阿里云。

  • Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

  • Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  • RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。

  • Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。

  • Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

  • Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。

  • Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

  • Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

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

商业味有点浓的全家桶, 如果基础设施都上阿里云, 也愿意购买OSS,SchedulerX这些服务, 是会轻松一些。如果企业需更自建或是更多的控制力, 可能用原版的spring cloud更合适。阿里也是有不少KPI项目的, 这套实际商用的企业估计不多吧。

不过客观的说, 单独的每个组件都是不错的, 特别是Nacos和Seata还是比较火的。 而dubbo 2.x作为老一代RPC, 考虑兼容等历史包袱, 已不再是国人的第一选择了,期待dubbo 3.x纯异步和响应式。

3.SOFAStack

SOFAStack™(Scalable Open Financial Architecture Stack)是一套用于快速构建金融级云原生架构的中间件,也是在金融场景里锤炼出来的最佳实践。 蚂蚁金服的这套是蛮受金融机构追捧的, 这两年一堆银行搞金服,有些还真金白银的花几千万买SOFAStack的商用版。开源版应该是只放出来一部分,RPC和dubbo的一些对比可以参考以前文章 https://www.51discuss.com/posts/softrap-vs-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工具操作

参考下sofarpc的路线图, reactive应该是未来了。 方舟编译器

4. ServiceComb

ServiceComb的热度不高, 但确实是不错的全家桶, 笔者曾撰文力荐https://www.51discuss.com/posts/servicecomb-introduction/, 可惜更新节奏慢,Saga一年没更, 生态差些, 文档, 例子等也不够完善。

参考下turbo-rpc作者的测评 https://www.jianshu.com/p/cdd94d0853c3 评测 评测

servicecomb servicecomb

5.小结

分布式服务框架是中台的技术底座, 企业需要一个稳定的长期维护的全家桶, 使用原版的spring cloud定制自己所需的组件或者是更稳的选择, 足够的积累后也可以打造自己版本的spring cloud for XXX。不过作为技术人,只会套框架不是什么自豪的事, 有时得找点乐趣, 像过度优化的turbo rpc, 性能炸裂的vertx + 异步postgreSQL, servicecomb的hightway。。。让我们的代码改变世界:)