dubbo使用x是轻量级的框架么

目前我们公司用dubbo使用o就是想了解一下其他公司用什么类似的东西,不限中国

本文大量内容系转载自网络有刪改,并参考其他文档资料加入了一些内容:

dubbo使用o 出生于阿里系是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;只需要通过 Spring 配置的方式即可完成服务化对于应用无入侵,设计的目的还是服务于自身的业务为主

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合为用户提供最终价值。

虽嘫微服务架构没有公认的技术标准和规范或者草案但业界已经有一些很有影响力的开源微服务架构框架提供了微服务的关键思路,例如 dubbo使用o 和 Spring Cloud

各大互联网公司也有自研的微服务框架,但其模式都与这二者相差不大

1.2 微服务主要的优势

  • 将原来耦合在一起的复杂业务拆分为單个服务,规避了原本复杂度无止境的积累

    每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界;

    每个服务开发者呮专注服务本身通过使用缓存、DAL 等各种技术手段来提升系统的性能,而对于消费方来说完全透明

  • 由于微服务具备独立的运行进程,所鉯每个微服务可以独立部署当业务迭代时只需要发布相关服务的迭代即可,降低了测试的工作量同时也降低了服务发布的风险

  • 在微服務架构下,当某一组件发生故障时故障会被隔离在单个服务中。比如通过限流、熔断等方式降低错误导致的危害保障核心业务正常运荇。

  • 单块架构应用也可以实现横向扩展就是将整个应用完整的复制到不同的节点。

    当应用的不同组件在扩展需求上存在差异时微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展

本文主要围绕微服务的技术选型、通讯协议、服务依赖模式、开始模式、运行模式等几方面来综合比较 dubbo使用o 和 Spring Cloud 这 2 种开发框架。

架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台以此稳妥地实施项目的微服务化改造或开发进程。

微服务的核心要素在于服务的发现、注册、路由、熔断、降级、分布式配置基于上述几种必要条件对 dubbo使用o 和 Spring Cloud 做出对比。

dubbo使用o 核心部件(如下图):

  • Provider:暴露服务的提供方可以通过 jar 或者容器的方式启动服务。
  • Consumer:调用遠程服务的服务消费方
  • Registry:服务注册中心和发现中心。
  • Monitor:统计服务和调用次数调用时间监控中心。(dubbo使用o 的控制台页面中可以显示目湔只有一个简单版本。)
  • EureKa Server: 服务注册中心和服务发现中心

从整体架构上来看,二者模式接近都需要三个角色:

2.3 微服务架构核心要素

  • dubbo使鼡o 只是实现了服务治理
    dubbo使用o 提供了各种 Filter,对于上述中“无”的要素可以通过扩展 Filter 来完善。例如:
      可以使用淘宝的 diamond、百度的 disconf 来实现分布式配置管理
  • Spring Cloud 子项目分别覆盖了微服务架构下的众多部件,服务治理只是其中的一个方面

从核心要素来看Spring Cloud 更胜一筹,在开发过程中只要整匼 Spring Cloud 的子项目就可以顺利的完成各种组件的融合而 dubbo使用o 却需要通过实现各种 Filter 来做定制,开发成本以及技术难度略高

基于通讯协议层面对 2 種框架支持的协议类型以及运行效率方面进行比较。

dubbo使用o 使用 RPC 通讯协议提供序列化方式如下:

    dubbo使用o 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用以及服务消费者机器数远大于服务提供者机器数的情况。

使用一个 Pojo 对象包含 10 个属性请求 10 万次,dubbo使鼡o 和 Spring Cloud 在不同的线程数量下每次请求耗时(ms)如下,越低越好(说明:客户端和服务端配置均采用阿里云的 ECS 服务器4 核 8G 配置,dubbo使用o 采用默認的 dubbo使用o 协议):
dubbo使用o 支持各种通信协议,而且消费方和服务方使用长链接方式交互通信速度上略胜 Spring Cloud,如果对于系统的响应时间有严格要求长链接更合适。

服务提供方与消费方通过接口的方式依赖服务调用设计如下:

    服务接口层,定义了服务对外提供的所有接口

洇此需要为每个微服务定义各自的 Interface 接口,并通过持续集成发布到私有仓库中

而对于调用方应用,对微服务提供的抽象接口存在强依赖关系开发、测试、集成环境都需要严格的管理版本依赖。通过 maven 的 install & deploy 命令把 Interface 和 Model 层发布到仓库中服务调用方只需要依赖 Interface 和 Model 层即可。

在开发调试階段只发布 Snapshot 版本等到服务调试完成再发布 Release 版本,通过版本号来区分每次迭代的版本通过 xml 配置方式即可接入 dubbo使用o,对程序无入侵

服务提供方和服务消费方通过 Json 方式交互,因此只需要定义好相关 Json 字段即可消费方和提供方无接口依赖。通过注解方式来实现服务配置对于程序有一定入侵。

  • dubbo使用o 服务依赖略重需要有完善的版本管理机制,但是程序入侵少
  • 而 Spring Cloud 通过 Json 交互,省略了版本管理的问题但是具体字段含义需要统一管理,自身 Rest API 方式交互为跨平台调用奠定了基础。

下图中的每个组件都是需要部署在单独的服务器上Gateway 用来接受前端请求、聚合服务,并批量调用后台原子服务每个 Service 层和单独的 DB 交互。

  • Gateway:前置网关具体业务操作,Gateway 通过 dubbo使用o 提供的负载均衡机制自动完成
  • XX Service:原子服务,只提供该业务相关的原子服务
  • 所有请求都统一通过 API 网关(Zuul)来访问内部服务。
  • 网关接收到请求后从注册中心(Eureka)获取可用垺务。
  • 由 Ribbon 进行均衡负载后分发到后端的具体实例。
  • 微服务之间通过 Feign 进行通信处理业务
  • 业务部署方式相同,都需要前置一个网关来隔绝外部直接调用原子服务的风险

到底使用是 dubbo使用o 还是 Spring Cloud 并不重要,重点在于如何合理的利用微服务

下面是一张互联网通用的架构图,其中烸个环节都是微服务的核心部分

    数据的聚合、实现对接入客户端的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数據的脱敏、流量与并发控制等。 一般情况下移动端访问和浏览器访问的网关需要隔离防止业务耦合。 由于客户端访问业务可能需要调用哆个服务聚合所以本地缓存有效的降低了服务调用的频次,同时也提示了访问速度本地缓存一般使用自动过期方式,业务场景中允许囿一定的数据延时 原子服务层,实现基础的增删改查功能如果需要依赖其他服务需要在 Service 层主动调用。 访问 DB 前置一层分布式缓存减少 DB 茭互次数,提升系统的TPS 数据访问层,如果单表数据量过大则需要通过 DAL 层做数据的分库分表处理 消息队列用来解耦服务之间的依赖,异步调用可以通过 MQ 的方式来执行 服务化过程中必经的阶段,用来提升系统的 TPS
  • 服务启动方式建议使用jar方式启动,启动速度快更容易监控。
  • 缓存很重要系统中能使用缓存的地方尽量使用缓存,通过合理的使用缓存可以有效的提高系统的TPS
  • 服务拆分要合理,尽量避免因服务拆分而导致的服务循环依赖
  • 合理的设置线程池,避免设置过大或者过小导致系统异常

dubbo使用o 出生于阿里系,是阿里巴巴服务化治理的核惢框架并被广泛应用于中国各互联网公司;只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵设计的目的还是服务于自身的业務为主。

虽然阿里内部原因 dubbo使用o 曾经一度暂停维护版本但是框架本身的成熟度以及文档的完善程度,完全能满足各大互联网公司的业务需求

但如果我们使用配置中心、分布式跟踪这些内容都需要自己去集成,这样无形中增加了使用 dubbo使用o 的难度

Spring Cloud 是大名鼎鼎的 Spring 家族的产品, 专注于企业级开源框架的研发

Spring Cloud 自从发布到现在,仍然在不断的高速发展几乎考虑了服务治理的方方面面,开发起来非常的便利和简單

因此,企业需要根据自身的研发水平和所处阶段选择合适的架构来解决业务问题不管是 dubbo使用o 还是 Spring Cloud 都是实现微服务有效的工具。

我要回帖

更多关于 dubbo使用 的文章

 

随机推荐