Go语言高并发与微服务实战 - 学习笔记
第2章 微服务概述
2.2 常见的微服务框架
近几年,随着微服务架构的火热,也诞生了很多微服务框架,如Java语言的Spring Cloud,Go语言的Go Kit和Go Micro 以及NodeJS的Seneca。
几乎每一种语言都有其对应的微服务框架,这充分说明了微服务架构的火热态势。
2.2.1 Java中的SpringCloud与Dubbo框架
【1】Spring Cloud 框架
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡,断路器和数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
SpringCloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud的子项目大致可分成两类:
- 一类是对现有成熟框架Spring Boot化的封装和抽象,也是数量最多的项目,如Netflix Eureka、Netflix Hystrix、Netflix Zuul等;
- 第二类是开发了一部分分布式系统的基础设施的实现,如统一配置管理中心Spring Config。
【2】Dubbo框架
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC 远程服务调用方案,以及SOA服务治理方案。简单的说,Dubbo就是个远程服务注册、调用和管理的分布式框架。
Dubbo自2008年开始在阿里内部使用,2011年开源,2014年开始停止更新,直至2017年重新开始更新。
如下图所示,
Dubbo框架由5个部分组成:
- Provider是暴露服务的服务提供方;
- Consumer是调用远程服务的服务消费方;
- Registry是服务注册与发现的注册中心;
- Monitor为统计服务的调用次调和调用时间的监控中心;
- Container为服务运行容器。
Dubbo的特点,主要可以总结为以下3个方面:
- 远程通信:提供对多种基于长连接的NIO框架的统一抽象封装,支持非阻塞1O的通信库(比如 Mina、Netty和 Grizzly),包括多种线程模型、序列化(Hessian2/ProtoBuf)以及请求-响应模式的信息交互方式。
- 集群容错:提供基于接口方法的透明远程过程调用(RPC),包括多协议支持(自定义 RPC 协议)以及软负载均衡(Random/RoundRobin)、失败容错(Failover/Failback),地址路由和动态配置等集群支持。
- 自动发现:基于注册中心目录服务,使服务消费方能动态地查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
从如上的介绍就可以知道,Dubbo和 Spring Cloud 的关注点并不相同,Dubbo更专注于 RPC领域,而 Spring Cloud是一个微服务的全方位框架。
一些文章在谈到微服务的时候总是拿Spring Cloud和 Dubbo来对比,需要强调的是Dubbo未来的定位并不是要成为一个微服务的全面解决方案,而是专注在RPC 领域,其官网上也将其定义为A High performance Java PRC framework。所以,Dubbo应该是微服务生态体系中的通信机制的重要组件之一。