写点什么

Dubbo

  • 2022 年 5 月 07 日
  • 本文字数:2199 字

    阅读完需:约 7 分钟




集群:很多“人”一起 ,干一样的事。


一个业务模块,部署在多台服务器上。


分布式:很多“人”一起,干不一样的事。这些不一样的事,合起来是一件大事。


一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上。


[](()架构演进





Dubbo 是 SOA 时代的产物,SpringCloud 是微服务时代的产物

[](()架构演进–单体架构


优点:


简单:开发部署都很方便,小型项目首选


缺点:


项目启动慢


可靠性差


可伸缩性差


扩展性和可维护性差


性能低

[](()架构演进–垂直架构


垂直架构是指将单体架构中的多个模块拆分为多个独立的项目。形成多个独立的单体架构。


单体架构存在的问题:


项目启动慢


可靠性差


可伸缩性差


扩展性和可维护性差


性能低


垂直架构存在的问题:


重复功能太多

[](()架构演进–分布式架构


分布式架构是指在垂直架构的基础上,将公共业务模块抽取出来,作为独立的服务,供其他调用者消费,以实现服务的共享和重用。


RPC: Remote Procedure Call 远程过程调用。有非常多的协议和技术来都实现了 RPC 的过程。比如:HTTP REST 风格,Java RMI 规范、WebService SOAP 协议、Hession 等等。


垂直架构存在的问题:


重复功能太多


分布式架构存在的问题:


服务提供方一旦产生变更,所有消费方都需要变更。

[](()架构演进–SOA 架构


SOA:(Service-Oriented Architecture,面向服务的架构)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。


ESB:(Enterparise Servce Bus) 企业服务总线,服务中介。主要是提供了一个服务于服务之间的交互。ESB 包含的功能如:负载均衡,流量控制,加密处理,服务的监控,异常处理,监控告急等等。


分布式架构存在的问题:


服务提供方一旦产生变更,所有消费方都需要变更

[](()架构演进–微服务架构


微服务架构是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。


微服务架构 = 80%的 SOA 服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想


特点:


服务实现组件化:开发者可以自由选择开发技术。也不需要协调其他团队


服务之间交互一般使用 REST API


去中心化:每个微服务有自己私有的数据库持久化业务数据


自动化部署:把应用拆分成为一个一个独立的单个服务,方便自动化部署、测试、运维


[](()Dubbo 概述


======================================================================


[](()Dubbo 概念




Dubbo 是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。


致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。


官网:http://dubbo.apache.org


[](()Dubbo 架构





节点角色说明:


Provider:暴露服务的服务提供方


Container:服务运行容器


Consumer:调用远程服务的服务消费方


Registry:服务注册与发现的注册中心


Monitor:统计服务的调用次数和调用时间的监控中心


[](()Dubbo 快速入门


========================================================================


[](()Zookeeper 安装





Dubbo 官方推荐使用 Zookeeper 作为注册中心


[](()Dubbo 快速入门





实现步骤:


创建服务提供者 Provider 模块


创建服务消费者 Consumer 模块


在服务提供者模块编写 UserServiceImpl 提供服务


在服务消费者中的 UserController 远程调用 UserServiceImpl 提供的服务


分别启动两个服务,测试



[](()Dubbo 高级特性


========================================================================


[](()dubbo-admin





dubbo-admin 管理平台,是图形化的服务管理页面


从注册中心中获取到所有的提供者 / 消费者进行配置管理


路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能


dubbo-admin 是一个前后端分离的项目。前端使用 vue,后端使用 springboot


安装 dubbo-admin 其实就是部署该项目


[](()序列化





dubbo 内部已经将序列化和反序列化的过程内部封装了


我们只需要在定义 pojo 类时实现 Serializable 接口即可


一般会定义一个公共的 pojo 模块,让生产者和消费者都依赖该模块。


[](()地址缓存





注册中心挂了,服务是否可以正常访问?


可以,因为 dubbo 服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。


当服务提供者地址发生变化时,注册中心会通知服务消费者。


[](()超时与重试





服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。


在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。



服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。


在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。


dubbo 利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。


使用 timeout 属性配置超时时间,默认值 1000,单位毫秒。



设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。


如果出现网络抖动,则这一次请求就会失败。


Dubbo 提供重试机制来避免类似问题的发生。


通过 retries 属性来设置重试次数。默认为 2 次。


[](()多版本





灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。


dubbo 中使用 version 属性来设置和调用同一个接口的不同版本


[](()负载均衡




用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Dubbo_程序员_爱好编程进阶_InfoQ写作社区