常见微服务框架和对比分析
常见的微服务框架
第一代微服务框架 SpringCloud
Spring Boot:快速开发微服务的框架(可以快速开发出一个单体微服务项目)
SpringCloud 为开发者提供了快速构建分布式系统的通用模型的工具(
包括配置管理、服务发现注册、 熔断器、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状 态、负载均衡、数据监控等
)
基于SpringBoot实现的一个完整的微服务解决方案
第二代微服务框架
dubbo
dubbo 是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案
第三代微服务框架
ServiceMesh(服务网格)、k8s
istio 是开源的 ServiceMesh(服务网格),ServiceMesh 翻译成中文就是服务网格
对不同的微服务框架进行对比分析
框架背景对比
SpringCloud
来源于 SpringSource ,具有 Spring 社区的强大背景支持,还有 Netflix 强大的后盾与技术输出。
Netflix 作为一家成功实践微服务架构的互联网公司,在几年前就把几乎整个微服务框架开源贡献给了社区,这些框架开源的整套微服务架构套件是 SpringCloud 的核心。
- Eureka: 服务注册发现框架
- Zuul: 服务网关
- Karyon: 服务端框架
- Ribbon: 客户端框架
- Hystrix: 服务容错组件
- Archaius: 服务配置组件
- Servo: Metrics 组件
- Blitz4j: 日志组件
- Pinpoint:全链路监控组件
Dubbo
是一个分布式服务框架,是国内互联网公司开源做的比较不错的阿里开放的微服务化治理框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。 其核心部分包含(官网):
- 远程通讯: 提供对多种基于长连接的 NIO 框架抽象封装,包括多种线程模型,序列化,以及“请求-响 应”模式的信息交换方式
- 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持
- 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo 也是采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展进行加载。当然也支持官方不推荐的 API 调用方式。
k8s、 Istio
作为用于微服务服务聚合层管理的新锐项目,是 Google、IBM、Lyft(海外共享出行公司、Uber 劲 敌)首个共同联合开源的项目,提供了统一的连接,安全,管理和监控微服务的方案。
目前是针对 Kubernetes 环境的,社区宣称在未来几个月内会为虚拟机和 Cloud Foundry 等其他环境增加支持。 Istio 将流量管理添加到微服务中,并为增值功能(如安全性,监控,路由,连接管理和策略)创造了基础。
- HTTP、gRPC 和 TCP 网络流量的自动负载均衡
- 提供了丰富的路由规则,实现细粒度的网络流量行为控制
- 流量加密、服务间认证,以及强身份声明
- 全范围(Fleet-wide)的策略执行
- 深度遥测和报告
开源社区活跃度对比
开源社区情况:现如今企业在采用云计算首选开源,而选择一个开源框架,社区的活跃度将作为重要参考选项。
查看下在 Github 上的更新时间
- SpringCloud :Spring Cloud · GitHub → 所有项目均更新于『1 小时』内。
- Dubbo :Dubbo · GitHub → 核心项目最近更新于『一个月乃至数月』前。
- istio:istio · GitHub → 所有项目均更新于『30 分钟』内。
可见,项目在社区活跃度上,Istio > SpringCloud > Dubbo,结合稳定性来看,
对于使用 Java 开发业 务较多的企业,SpringCloud 是相对更优的选择,对于更多企业来说,与语言几乎无绑定的 Istio 也是可 以好好期待一下其在社区的发展。
总结:结合项目背景、提供功能、社区更新活跃度,SpringCloud 是目前阶段发展最早的微服务框架方 案,Istio 作为 Kubernetes 的优先支持来讲,也是一个值得关注的方案,而且发展潜力巨大,相信不久 的将来 90%+的 k8s 用户都会使用 istio。目前对比来看,dubbo 则显得稍逊下来。
(lstio 对于企业来说,即有Java开发,又有python和go,c等语言,那么就可以使用lstio,因为其支持多种语言开发,不仅仅只是支持Java)(springcloud仅仅只是支持Java开发语言)
目录 返回
首页