Dubbo

Dubbo分析之Cluster层

不打扰是莪最后的温柔 提交于 2019-12-29 16:06:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 系列文章 Dubbo分析Serialize层 Dubbo分析之Transport层 Dubbo分析之Exchange 层 Dubbo分析之Protocol层 Dubbo分析之Cluster层 Dubbo分析之Registry层 前言 紧接上文 Dubbo分析之Protocol层 ,本文继续分析dubbo的cluster层,此层封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster, Directory, Router, LoadBalance; Cluster接口 整个cluster层可以使用如下图片概括: 各节点关系: 这里的Invoker是Provider的一个可调用Service的抽象,Invoker封装了Provider地址及Service接口信息; Directory代表多个Invoker,可以把它看成List ,但与List不同的是,它的值可能是动态变化的,比如注册中心推送变更; Cluster将Directory中的多个Invoker伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个; Router负责从多个Invoker中按路由规则选出子集,比如读写分离,应用隔离等;

源码分析Dubbo服务注册与发现机制RegistryDirectory)

十年热恋 提交于 2019-12-29 16:02:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> RegistryDirectory,基于注册中心的服务发现,本文将重点探讨Dubbo是如何实现服务的自动注册与发现。从上篇文章,得知在消息消费者在创建服务调用器(Invoker)【消费者在初始时】时需要根据不同的协议,例如dubbo、registry(从注册中心获取服务提供者)来构建,其调用的方法为Protocol#refer,基于注册中心发现服务提供者的实现协议为RegistryProtocol。 RegistryProtocol#refer ----> doRefer方法。 RegistryProtocol#doRefer private <t> Invoker<t> doRefer(Cluster cluster, Registry registry, Class<t> type, URL url) { // @1 RegistryDirectory<t> directory = new RegistryDirectory<t>(type, url); // @2 directory.setRegistry(registry); directory.setProtocol(protocol); // @3 // all attributes of REFER_KEY Map<string, string>

Spring boot 集成 Dubbo 快速搭建

﹥>﹥吖頭↗ 提交于 2019-12-28 21:13:41
架构:   1、ZooKeeper:服务注册中心   2、api工程:提供对外暴露的服务API   3、provider:服务提供者   4、consumer:服务消费者 示例如下: (一)新建 Maven 项目 api 1、 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.dubbo</groupId> <artifactId>api</artifactId> <version>1.0.0</version> <build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin<

浅谈dubbo spi机制

本秂侑毒 提交于 2019-12-28 15:54:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 例如: private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension(); 首先分析getExtensionLoader方法:很简单先查询EXTENSION_LOADERS是否存在不存在就new一个返回 public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) { if (type == null) { throw new IllegalArgumentException("Extension type == null"); } if (!type.isInterface()) { throw new IllegalArgumentException("Extension type(" + type + ") is not interface!"); } if (!withExtensionAnnotation(type)) { throw new IllegalArgumentException("Extension type(" + type + ") is

dubbo第一课(dubbo介绍)

别等时光非礼了梦想. 提交于 2019-12-28 15:54:34
课程目录 1.dubbo框架介绍 2.dubbo服务注册与发现,调用 3.dubbo负载均衡 4.dubbo集群容错 5.dubbo与springboot整合 带着问题去学习 了解一个框架并不是说,知道这个东西怎么用就好了,而是要去细致的了解这个框架,这个应用可以干什么,可以为我们带来什么便利。 1. dubbo是什么 Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 2.为什么要使用dubbo 项目初始阶段: 随着用户量的增多,可以增加应用服务器进行负载,短期内可以产生非常大的成效,但是长期来看投入产出比会逐渐的下降。这时候会对服务进行拆分。 各种业务层、服务层之间的调用一定是通过某种远程RPC技术进行调用。这时候就涉及到以下几个问题: 1.地址维护(当服务越来越多时,服务 URL 配置管理变得非常困难); 2.负载均衡(当服务越来越多时,F5 硬件负载均衡器的单点压力也越来越大); 3.限流/容错/降级; 4.链路监控; 解决方案 如果我们使用比如WebService或者简单的使用Http进行调用是没有办法解决这几个问题的。因为这些技术只能实现一个远程的调用,但是在大规模服务化后很多问题都无法解决。Dubbo就是其中一种解决方案。 1.关于地址服务,这时候需要一个服务注册中心

Dubbo基本讲解

帅比萌擦擦* 提交于 2019-12-28 15:09:14
Dubbo(开源分布式服务框架) Dubbo由阿里巴巴开源的一个高性能优秀的服务框架,使得应用可通过高新能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现 工作原理 Provider:暴露服务方称之为“服务提供者” Consumer:调用远程服务方称之为“服务消费者” Registry:服务注册与发现的中心目录服务称之为“服务注册中心” Monitor:统计服务的调用次数和调用时间的日志服务称之为“服务监控中心” 调用关系说明: 0.服务容器负责启动,加载,运行服务提供者 1.服务提供者在启动时,向注册中心注册自己提供的服务 2.服务消费者在启动时,向注册中心订阅自己所需的服务 3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者 4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用 5.服务消费者和提供者,在内存中累计调用次数二号调用时间,定时每分钟后发送一次统计数据到监控中心 特性 dubbo架构具有连通性、健壮性、伸缩性以及向未来架构的升级性 来源: CSDN 作者: 十四期-曹轩 链接: https://blog.csdn

Dubbo源码分析之SPI(二)

∥☆過路亽.° 提交于 2019-12-28 09:41:22
一、概述   本篇文章是 dubbo SPI源码分析的第二篇,接着第一篇继续分析dubbo SPI的内容,我们主要介绍 getDefaultExtension() 获取默认扩展点方法。 由于此方法比较简单,我们略过示例部分,直接分析源码。 二、源码分析   获取默认扩展方法getDefaultExtension()是一个public、可对外提供调用的方法。我们知道,dubbo中扩展点接口必须要有@SPI注解修饰,@SPI注解代码如下: 1 @Documented 2 @Retention(RetentionPolicy.RUNTIME) 3 @Target({ElementType.TYPE}) 4 public @ interface SPI { 5 6 /** 7 * default extension name 8 */ 9 String value() default "" ; 10 11 }   注解可以修饰类和接口,同时提供 一个默认为空的value字段。   这个value字段 就是本篇文章要介绍的默认扩展实现。   现在我们来看getDefaultExtension()方法内部: 1 public T getDefaultExtension() { 2 getExtensionClasses(); 3 // cachedDefaultName为@SPI中的value

微服务治理实践:如何对单点异常进行自动摘除

為{幸葍}努か 提交于 2019-12-28 03:18:53
微服务架构下,稳定性和高可用性一个永恒的话题,在实际的治理过程中,我们有可能会遇到以下场景: 某个应用灰度发布,先上了几台机器,由于代码逻辑写的有问题,造成线程池满,出现运行异常。 服务端集群中,某几台机器由于磁盘满,或者是宿主机资源争抢导致 load 过高,客户端出现调用超时。 服务端集群中,某几台机器由于线程池满,造成 Full Garbage Collection。 在以上 3 种场景中,由于客户端并不法感知已经出现问题的那些服务端,依然会发送请求到这些机器上,造成业务调用报错,上游的机子将会被下游的某台机子的短暂故障拖垮,造成应用雪崩的风险。 面对这种场景,如果仅仅为此而进行服务降级,对应用的伤害未免过大,但如果我们可以检测出服务集群中某些故障机子,并对其进行短暂隔离,即可有效保障服务的高可用与系统的稳定性,同时给运维人员提供了宝贵的缓冲时间,用于问题定位,排除故障。 本文将作为《微服务治理实践》系列篇的第一篇,为大家介绍如何实现离群实例摘除。该系列文章是基于阿里云商业化产品 EDAS 的微服务实践,如果您团队具备较强的微服务治理能力,那么希望我们在微服务治理方面的实践和背后的思考,可以为您提供一些参考。 企业级分布式服务 EDAS 重磅升级,12月17日下午15:00–17:00中间件小师妹在直播间等你,携开发工程师十眠为您详细介绍 EDAS 离群实例摘除等微服务治理能力

一、微服务架构Spring Cloud的基本介绍

百般思念 提交于 2019-12-27 17:26:02
1. 前言 之前接触过不少的分布式、微服务等相关技术,但是从未真正系统的总结过,趁着年底有些空闲的时间,写点博客来总结、梳理一下自己知识点。要知道程序员是一个不断学习的过程。我最初接触的语言并非是Java,因为本身对网站技术比较感兴趣,所以在高中时候就接触了HTML超文本传输语言,那时候先研究的是网页三剑客:Dreamweaver、Fireworks、Flash三个东西。后来接触了Java,进而开发网站项目使用Java Web,使用最多的是SSM、SSH架构,也是最为流行的,甚至目前有些新开单体应用项目依旧使用。单体应用项目是相对于分布式项目而言的,但现在开发的单体项目基本上都是用Spring Boot来开发,Spring Boot这个东西一旦用上之后,就很难再去使用SSM、SSH这种配置很复杂的东西,Spring Boot确实简化了我们繁琐的一些配置,使我们更加专注的进行业务开发。废话不多说了,前言这里面主要强点一点本文章写的,是本人对Spring Cloud知识点的复盘和总结,有些可能会借鉴别人的一些知识点和看法,也有可能写的一些地方稍有误差,请大家积极指正。 2. Spring Cloud基本架构 介绍Spring Cloud之前,首先谈一谈架构的演变过程。上面讲到单体应用,其实微服务架构和单体应用之间,还有SOA面向服务、ESB企业服务总线等

10 万开发者都知道的部署方式,你居然不知道!?(内含悬赏活动)

我的梦境 提交于 2019-12-27 17:19:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 作者 | 铃铛、滚动的轮子 Cloud Toolkit 的一键部署方式 今天为大家介绍的这一款免费 IDE 插件——Cloud Toolkit,已经有超 12 万开发者下载,是一种公认的极速部署方式,如果你还不了解,点击下方视频,立即查看详情。 视频链接: https://www.aliyun.com/daily-act/video?src=https://cloud.video.taobao.com/play/u/2311856963/p/1/e/6/t/1/247487624012.mp4 当您每次修改完代码后,是否正在经历反复地打包?采用 SCP 工具上传?使用 XShell 或 SecureCRT 登陆服务器?替换部署包?重启? 从现在开始,请把这些重复繁琐的工作交给 Cloud Toolkit 吧,它能够帮助开发者更高效地开发、测试、诊断并部署应用。Cloud Toolkit 与主流 IDE 及阿里云其他产品无缝集成,帮助您大大简化应用部署到服务器,尤其是阿里云服务器中的操作。通过插件,可以将本地应用一键部署到任意服务器,甚至云端—— ECS、ECS、EDAS、ACK、ACR 和 小程序云 等,而且还可以通过其内嵌的 Arthas 程序诊断、 Terminal Shell 终端和 MySQL