Dubbo

JAVA:说说你对序列化的理解

独自空忆成欢 提交于 2020-12-16 01:23:26
本文主要内容 背景 在Java语言中,程序运行的时候,会产生很多对象,而对象信息也只是在程序运行的时候才在内存中保持其状态,一旦程序停止,内存释放,对象也就不存在了。 怎么能让对象永久的保存下来呢?-------- 对象序列化 。 何为序列化和反序列化? 序列化:对象到IO数据流 反序列化:IO数据流到对象 有哪些使用场景? Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。 除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。 Java序列化API为处理对象序列化提供了一个标准机制,该API简单易用。 很多框架中都有用到,比如典型的dubbo框架中使用了序列化。 序列化有什么作用? 序列化机制允许将实现序列化的Java对象转换位字节序列

DevOps中的测试实践

帅比萌擦擦* 提交于 2020-12-15 15:12:28
万物皆可pipeline,流程自动化解放生产力。在DevOps的pipeline中,我们发现测试环节也需要一套流水线化的能力,来保证研发流程的大批pipeline稳定高品质交付。 下面介绍下DevOps中如何构建高水平全面的测试能力。 文化、流程、组织结构、技术发生变革,对测试提出新要求 · DevOps文化对测试带来的新要求(文化) 为适应市场的快速变化,要求企业的产品快速迭代,柔性应对用户需求,滋生了DevOps。 《持续交付2.0》中,作者将DevOps简化概括为2个环:价值探索和快速验证。 价值探索是快速发现和识别外部客户的真实需求,为其创造价值点。"快速验证环"要求企业在找到业务问题制定业务目标后,快速实现和落地价值点。 测试属于"快速验证环",过程中要求开发/测试/运维的角色紧密配合,高效高质地落地验证新特性。 · 在DevOps中构建测试工作的难点(流程) 在DevOps趋势下,测试部门从原先的大量集中测试,变成了高频快速测试。 原先大部分企业采用纯手工测试的方式,从根本上无法适应DevOps的高频快节奏需求。滋生了对自动化测试的诉求。 · 头部企业测试部门的现状(组织架构) · 人力外包比重高: 金融/通信/航空等大型企业的外包人力与正式人力之比,往往超过5:1,人员流动性高,素质参差不齐。对工具和系统的稳定性和使用门槛提出要求。 · 从集中到分散又回归集中:

Dubbo系列<10>-Dubbo SPI

馋奶兔 提交于 2020-12-15 09:46:37
前面咱们已经了解了JDK SPI的原理、实现、优缺点。 Dubbo在JDK SPI基础之上做了一些优化。 大部分的思想都是和 SPI 是一样,只是下面两个地方有差异。 1. 需要在 resource 目录下配置 META-INF/dubbo 或者META-NF/dubbo/internal 或者 META-INF/services,并基于 SPI 接口去创建一个文件 2. 文件名称和接口名称保持一致,文件内容和 SPI 有差异,内容是 KEY 对应 Value 基于上面所说咱们自己来实现一个MyProtocol 第一步自定义一个类Protocl,并且实现com.alibaba.dubbo.rpc.Protocol。 package com.tian.dubbo.protocol; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.rpc.Exporter; import com.alibaba.dubbo.rpc.Invoker; import com.alibaba.dubbo.rpc.Protocol; import com.alibaba.dubbo.rpc.RpcException; /** * 自定义协议 * (这里只是做一个演示,所以只是把端口调整了) * @Author tianweichang

分布式事务框架 seata-golang 通信模型详解

♀尐吖头ヾ 提交于 2020-12-14 19:17:30
一、简介 Java 的世界里,大家广泛使用的一个高性能网络通信框架 netty,很多 RPC 框架都是基于 netty 来实现的。在 golang 的世界里,getty 也是一个类似 netty 的高性能网络通信库。getty 最初由 dubbogo 项目负责人于雨开发,作为底层通信库在 dubbo-go 中使用。随着 dubbo-go 捐献给 apache 基金会,在社区小伙伴的共同努力下,getty 也最终进入到 apache 这个大家庭,并改名 dubbo-getty 。 18 年的时候,我在公司里实践微服务,当时遇到最大的问题就是分布式事务问题。同年,阿里在社区开源他们的分布式事务解决方案,我也很快关注到这个项目,起初还叫 fescar,后来更名 seata。由于我对开源技术很感兴趣,加了很多社区群,当时也很关注 dubbo-go 这个项目,在里面默默潜水。随着对 seata 的了解,逐渐萌生了做一个 go 版本的分布式事务框架的想法。 要做一个 golang 版的分布式事务框架,首要的一个问题就是如何实现 RPC 通信。dubbo-go 就是很好的一个例子摆在眼前,遂开始研究 dubbo-go 的底层 getty。 二、如何基于 getty 实现 RPC 通信 getty 框架的整体模型图如下: 下面结合相关代码,详述 seata-golang 的 RPC 通信过程。 1

Sentinel 集群限流设计原理

时光毁灭记忆、已成空白 提交于 2020-12-13 16:34:54
点击上方 “中间件兴趣圈” , 选择 “设为星标” 做积极的人,越努力越幸运! 1、集群限流使用场景 首先一个服务有三个服务提供者,但这三台集群的硬件配置不一样,如图所示: 在这里插入图片描述 为了充分利用硬件的资源,诸如 Dubbo 都提供了基于权重的负载均衡机制,例如可以将8C16G的机器设置的权重是4C8G的两倍,这样充分利用硬件资源,假如现在需要引入 Sentinel 的限流机制,例如为一个 Dubbo 服务设置限流规则,这样由于三台集群分担的流量不均匀,会导致无法重复利用高配机器的资源。 假设经过压测,机器配置为C48G最高能承受的TPS为 1500,而机器配置为8C16G能承受的TPS为2800,那如果采取单机限流,其阔值只能设置为1500,因为如果超过1500,会将4C8G的机器压垮。 解决这种办法的方式就是针对整个集群进行限流,即为整个集群设置一个阔值,例如设置限流TPS为6000。 2、集群限流与单机限流的异同思考 限流的一个基本作用就是按照限流规则生成访问许可(Token),然后根据当前实时的调用信息进行判断是否可以获得许可而决定是否放行。 集群与单机限流在实时调用信息收集方面应该差别不大,都可以基于滑动窗口进行统计信息的收集。 集群与单机限流的最主要区别在与许可的生成,单机模式的许可直接在本地生成,但集群限流必须有一个统一的 Token 发放机制

Java中SPI机制详解

谁说我不能喝 提交于 2020-12-13 14:03:27
本文转载于 高级开发必须理解的Java中SPI机制 本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。 一、 SPI是什么 SPI全称 Service Provider Interface ,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。 Java SPI就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。所以SPI的核心思想就是解耦。 二、使用场景 概括地说,适用于:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。 比较常见的例子: 数据库驱动加载接口实现类的加载 JDBC加载不同类型数据库的驱动 日志门面接口实现类加载 SLF4J加载不同提供商的日志实现类 Spring

Spring Boot 多模块项目创建与配置 (一)

痞子三分冷 提交于 2020-12-12 17:34:00
最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块。代码中的多模块是用maven管理的,每个模块都使用spring boot框架。之前有零零散散学过一些maven多模块配置的知识,但没自己从头到尾创建和配置过,也快忘得差不多了。这次正好对照着这个项目,动手实践一下,下面我们就开始吧。 maven多模块项目通常由一个父模块和若干个子模块构成,每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块)相互关联。多模块适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。 1 多模块项目创建 因为本系列的下一篇是《Spring Boot集成Dubbo》,所以本章就以创建多模块的dubbo项目作为示例。示例中的开发环境是Win 7,编辑器是Intellij IDEA,Java版本是1.8。 1.1 父模块创建 首先我们在IDEA中创建一个spring boot工程作为父项目。 一、在界面左上角选择File->New->Project后,选择Spring Initializr,默认使用的Java版本是1.8。 二、点击Next,进入下一步,可以设置项目的一些基本信息。 这里我们先来温习下groupId、artifactId、package这三个参数的一般填写规范。 groupId和artifactId统称为

基于 getty 的分布式事务框架 seata-golang 通信模型详解

回眸只為那壹抹淺笑 提交于 2020-12-12 15:12:36
基于 getty 的 seata-golang 通信模型详解 作者 | 刘晓敏 于雨 一、简介 Java 的世界里,大家广泛使用的一个高性能网络通信框架 netty,很多 RPC 框架都是基于 netty 来实现的。在 golang 的世界里, getty 也是一个类似 netty 的高性能网络通信库。getty 最初由 dubbogo 项目负责人于雨开发,作为底层通信库在 dubbo-go 中使用。随着 dubbo-go 捐献给 apache 基金会,在社区小伙伴的共同努力下,getty 也最终进入到 apache 这个大家庭,并改名 dubbo-getty 。 18 年的时候,我在公司里实践微服务,当时遇到最大的问题就是分布式事务问题。同年,阿里在社区开源他们的分布式事务解决方案,我也很快关注到这个项目,起初还叫 fescar,后来更名 seata。由于我对开源技术很感兴趣,加了很多社区群,当时也很关注 dubbo-go 这个项目,在里面默默潜水。随着对 seata 的了解,逐渐萌生了做一个 go 版本的分布式事务框架的想法。 要做一个 golang 版的分布式事务框架,首要的一个问题就是如何实现 RPC 通信。dubbo-go 就是很好的一个例子摆在眼前,遂开始研究 dubbo-go 的底层 getty。 二、如何基于 getty 实现 RPC 通信 getty

如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构

时光总嘲笑我的痴心妄想 提交于 2020-12-12 14:54:50
作者 | 行松 阿里巴巴云原生团队 来源 | Serverless 公众号,整理自 《Serverless 技术公开课》 背景 通过前面几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解,SAE 基于 IaaS 层资源构建的一款 Serverles 应用托管产品,免除了客户很多复杂的运维工作,开箱即用、按用量付费;并且提供了丰富的 Open API 可以很容易地与其他平台做集成。 本文将为大家介绍 SAE 在微服务方面的一些能力,SAE 产品把 Serverless 技术和微服务做了很好的结合,天然支持 Java 微服务应用的托管和服务治理,对 SpringCloud/Dubbo 微服务应用能够在只修改配置和依赖,不修改代码的情况下迁移到 SAE 上,并提供服务治理能力,比如基于租户的微服务隔离环境、服务列表、无损下线、离群摘除、应用监控以及调用链分析等。 本次课程分为三部分来介绍,分别介绍微服务应用迁移到 SAE 的优势,如何迁移 SpringCloud/Dubbo 应用到 SAE 上,以及针对 SpringCloud 应用迁移的实践演示。 迁移到 SAE 的优势 在介绍迁移之前,先介绍下 SpringCloud/Dubbo 应用迁移到 SAE 的优势: SAE 内置注册中心: 所有用户共享注册中心组件,SAE 帮助用户运维,这就节省了用户的部署、运维成本

Spring Cloud for Alibaba 发布

夙愿已清 提交于 2020-12-12 03:24:09
十月三十号, Spring Cloud 公布了令人非常兴奋的消息,那就是 Alibaba Dubbo 、 Alibaba Nacos 、 Alibaba Sentinel 相关组件集成到 Spring Cloud 大家庭了…. Spring Cloud Alibaba spring-cloud-alibaba 项目由阿里的开源组件及部分阿里云产品组成,基于 Spring Framework 框架扩展和封装,同时将 Spring Boot 和 Spring Cloud 的优势带给使用阿里巴巴产品的Java开发人员。不过这里需要注意的是,除了 Dubbo ,剩下的几个项目都还不够成熟,上生产的话存在一定风险…. 版本 0.2.0.RELEASE 与 Spring Boot 2.0.x 系列兼容。版本 0.1.0.RELEASE 与 Spring Boot 1.x 系列兼容。 相关服务 Nacos: 是阿里巴巴的新开源项目,其核心定位是 一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台 。 Dubbo: Apache Dubbo (incubating) 一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:`面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现`。 Sentinel:以流量为切入点,从`流量控制、熔断降级、系统负载保护`