微服务特点:
微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。
独立部署松耦合单一职责,每个服务仅关注一件任务
微服务框架
相关概念:
为什么 Dubbo 比 Spring Cloud 性能要高一些?
Dubbo 采用单一长连接和 NIO 异步通讯(保持连接/轮询处理),使用自定义报文的 TCP 协议,并且序列化使用定制 Hessian2 框架,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况,但不适用于传输大数据的服务调用
Spring Cloud 直接使用 HTTP 协议(但也不是强绑定,也可以使用 RPC 库,或者采用 HTTP 2.0 + 长链接方式(Fegin 可以灵活设置))。
Dubbo
分布式服务框架,致力于提供高性能和透明化的RPC 远程服务调用方案,以及SOA 服务治理方案。简单的说,Dubbo 就是个服务框架,说白了就是个远程服务调用的分布式框架.
SpringCloud
基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。Spring Boot 是 Spring 的一套快速配置脚手架,使用默认大于配置的理念,用于快速开发单个微服务。
核心功能:
分布式/版本化配置服务注册和发现路由服务和服务之间的调用负载均衡断路器分布式消息传递
流程:
请求统一通过 API 网关(Zuul)来访问内部服务。网关接收到请求后,从注册中心(Eureka)获取可用服务。由 Ribbon 进行均衡负载后,分发到后端具体实例。微服务之间通过 Feign 进行通信处理业务。Hystrix 负责处理服务超时熔断。Turbine 监控服务间的调用和熔断相关指标。
对比
性能比较:
选型出发点
微服务选型要评估以下几点:
内部是否存在异构系统集成的问题;备选框架功能特性是否满足需求;HTTP 协议的通信对于应用的负载量会否真正成为瓶颈点(Spring Cloud 也并不是和 HTTP + JSON 强制绑定的,如有必要 Thrift、ProtoBuf 等高效的 RPC、序列化协议同样可以作为替代方案);社区活跃度、团队技术储备等。作为已经没有团队持续维护的开源项目,选择 Dubbo 框架内部就必须要组建一个维护团队,先不论你要准备要集成多少功能做多少改造,作为一个支撑所有工程正常运转的基础组件,问题的及时响应与解答、重大缺陷的及时修复能力就已足够重要。
选型建议
1、使用 Dubbo 构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,总是让人不怎么放心,但是如果你是一名高手,那这些都不是问题;而 Spring Cloud 就像品牌机,在 Spring Source 的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。
2、Spring Cloud 可以说是一个更完备的微服务解决方案,它从功能性上是 Dubbo 的一个超集对于一些中小型企业 Spring Cloud 可能是一个更好的选择
3、Dubbo 和 Spring Cloud 的主要不同体现在两个方面:服务调用方式不同和专注点不同(生态不同)。