Dubbo

聊聊dubbo-go的RPCInvocation

 ̄綄美尐妖づ 提交于 2020-08-19 01:03:04
序 本文主要研究一下dubbo-go的RPCInvocation Invocation dubbo-go-v1.4.2/protocol/invocation.go // Invocation ... type Invocation interface { MethodName() string ParameterTypes() []reflect.Type ParameterValues() []reflect.Value Arguments() []interface{} Reply() interface{} Attachments() map[string]string AttachmentsByKey(string, string) string Invoker() Invoker } Invocation定义了MethodName、ParameterTypes、ParameterValues、Arguments、Reply、Attachments、AttachmentsByKey、Invoker方法 RPCInvocation dubbo-go-v1.4.2/protocol/invocation/rpcinvocation.go type RPCInvocation struct { methodName string parameterTypes []reflect

解Bug之路-dubbo流量上线时的非平滑问题

蹲街弑〆低调 提交于 2020-08-18 14:24:43
前言 笔者最近解决了一个困扰了业务系统很久的问题。这个问题只在发布时出现,每次只影响一两次调用,相较于其它的问题来说,这个问题有点不够受重视。由于种种原因,使得这个问题到了业务必须解决的程度,于是就到了笔者的手上。 问题现场 我们采用的是dubbo服务,这是个稳定成熟的RPC框架。但是我们在某些应用中会发现,只要这个应用一发布(或者重启),就会出现请求超时的问题,如下图所示: 而且都是第一笔请求会报错,之后就再也没有问题了。 排查日志 好了,现象我们知道了,于是开始排查那个时间点的日志。Server端没有任何日志,而Client(App1)端报错超时。报错如下所示: 2019-08-22 20:33:50.798 com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method set in the servce XXXFacade, tries 1 times ...... start time: 2019-08-22 20:32:50.474 end time: 2019-08-22 30:33:50.767 timeout=60000,channel:/1.1.1.1:44502->2.2.2.2:20880 看日志报错是这个tcp五元组(1.1.1.1:44502->2.2.2.2:20880)有问题

朋友国企干了5年java,居然不知道Dubbo是做什么呢?我真信了

你说的曾经没有我的故事 提交于 2020-08-18 12:20:32
点赞再看,养成习惯,微信搜一搜【 三太子敖丙 】关注这个喜欢写情怀的程序员。 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及我的系列文章。 前言 接下来一段时间敖丙将带大家开启紧张刺激的 Dubbo 之旅!是的要开始写 Dubbo 系列的文章了,之前我已经写过一篇架构演进的文章,也说明了微服务的普及化以及重要性,服务化场景下随之而来的就是服务之间的通信问题,那服务间的通信脑海中想到的就是 RPC,说到 RPC 就离不开咱们的 Dubbo。 这篇文章敖丙先带着大家来 总览全局 ,一般而言熟悉一个框架你要先知道这玩意是做什么的,能解决什么痛点,核心的模块是什么,大致运转流程是怎样的。 你要一来就扎入细节之中无法自拔,一波 DFS 直接被劝退的可能性高达99.99%,所以本暖男敖丙将带大家先过一遍 Dubbo 的简介、总体分层、核心组件以及大致调用流程 。 不仅如此我还会带着大家过一遍如果要让你 设计一个 RPC 框架你看看都需要什么功能 ?这波操作之后你会发现嘿嘿 Dubbo 怎么设计的和我想的一样呢?真是英雄所见略同啊! 而且我还会写一个简单版 RPC 框架实现,让大家明白 RPC 到底是如何工作的。 如果看了这篇文章你要还是不知道 Dubbo 是啥,我可以要劝退了。 我们先来谈一谈什么叫 RPC

年薪百万架构师,纯手写的Dubbo面试核心笔记,帮我搞了90%面试题

主宰稳场 提交于 2020-08-18 08:51:05
前言 本次面试题主要围绕Dubbo28个核心知识点复盘面试整个过程,也是大厂最常问到的dubbo面试题,从Dubbo是什么,到Dubbo的架构设计,Dubbo的服务治理,dubbo和spring cloud 的区别等技术来展开探究,面试题以及答案我已经整理成了文档。 首先为什么要用 Dubbo? 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。 就这样为分布式系统的服务治理框架就出现了,Dubbo 也就这样产生了。 Dubbo面试题核心目录 Dubbo是什么? Dubbo的核心组件? Dubbo的架构设计? Dubbo的服务治理? Dubbo在安全机制方面是如何解决? Dubbo面试题核心面试题的答案我已经整理成文档打包好了 需要Dubbo面试题的小伙伴,可以加我微信免费领取 加好友备注:博客园面试题 来源: oschina 链接: https://my.oschina.net/u/4295775/blog/4321412

优秀的 Java 项目,代码都是如何分层的?

回眸只為那壹抹淺笑 提交于 2020-08-18 04:05:15
作者: 咖啡拿铁 来源: https://urlify.cn/juam Iv 1、背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。 的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签,有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,后续其他人修改的时候,一看,我靠这个人写的代码和我平常的习惯完全不同,修改的时候到底是按着自己以前的习惯改,还是跟着前辈们走,这又是个艰难的选择,选择一旦有偏差,你的后辈又维护你的代码的时候,恐怕就要骂人了。 所以一个好的应用分层需要具备以下几点: 方便后续代码进行维护扩展; 分层的效果需要让整个团队都接受; 各个层职责边界清晰。 2、如何进行分层 2.1、阿里规范 在阿里的编码规范中约束的分层如下:

纯手打!字字珠玑!cookie,token,session/接口测试和面试官扯得明明白白!

北战南征 提交于 2020-08-18 03:09:47
1,目前市面上流行的接口大多有哪几种协议的接口? 答:http,https,dubbo,rpc等即可。 2,接口的请求方式有哪几种? 答:get,post,put,delete,head,Trace,opions等,大多以get和post请求为主 3、get和post区别是什么? 答:POST和GET都是向服务器提交数据,并且都会从服务器获取数据。 区别: (1)传送方式:get通过地址栏传输,post通过报文传输,故而post更相对来说私密性一点 (2)传送长度:get参数有长度限制(受限于url长度),而post无限制 (3)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留 (4)get方式大多用作查询接口,获取响应数据;而post方式更多做数据添加、修改或删除等操作 4,post请求的请求类型有哪几种? • application/json json字符串 • • application/x-www-from-urlencoded 表单传递 • • multipart/form-data 主要用于上传文件 • 5、cookie和session的区别 • cookie数据存放在客户的浏览器上,session数据放在服务器上 • • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session • •

一篇文章带你快速理解springcloud微服务架构

蓝咒 提交于 2020-08-18 02:34:56
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! SpringCloud微服务 微服务的模式和形式我在前面已经进行部分的提及,但是一直没落实到技术层面,这段时间我也在次研究了一下微服务,下面我先贴出SpringCloud整体涉及的结构: 上面展示的这些是SpringCloud整体的结构 先对这些空间做一个初步的介绍: Ribbon,客户端负载均衡,重试机制。 Hystrix,客户端容错保护,服务熔断、请求缓存、请求合并、依赖隔离。 Feign,声明式服务调用,本质上就是Ribbon+Hystrix(优化代码,避免直接使用RestTemplate的混乱)Bus,消息总线,配合Config仓库修改的一种Stream实现,独自启动不需要依赖其它组件。 Eureka,服务注册中心,特性有失效剔除、服务保护。 Dashboard,Hystrix仪表盘,监控集群模式和单点模式,其中集群模式需要收集器Turbine配合。Zuul,API服务网关,功能有路由分发和过滤。还有其它服务空间,包括configuration等等 那么什么是注册中心呢? 注册中心,是服务的提供者发布自己服务的地方,传统手写的restful接口提供的服务会涉及到服务发布者的端口IP等等,通过注册中心可以直接调用已经发布在上面的服务,只需要通过服务名即可 从图中可以看出

java技术遇到瓶颈?不慌,这份java全体系脑图与面试题集合可助你冲上云巅

牧云@^-^@ 提交于 2020-08-17 18:05:05
所谓并发编程是指在一台处理器上“同时”处理多个任务。 并发是在同一实体上的多个事件。 多个事件在同一时间间隔发生,编写优质的并发代码是一件难度极高的事情。 Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的. 但是当我们对并发编程有了更深刻的认识和更多的实践后. 实现并发编程就有了更多的方案和更好的选择,并发编程的目标是充分的利用处理器的每一个核. 以达到最高的处理性能. 并发编程路线脑图 并发编程面试题汇集: Synchronized用过吗 ,其原理是什么 ? 什么是可重入性,为什么说 Synchronized是可重入锁 ? JVM对Java的原生锁做了哪些优化 ? 那么请谈谈AQS框架是怎么回事儿 ? 请尽可能详 尽地对比下Synchronized和ReentrantLock的异同 。 什么是原子操作,Java 中的原子操作是什么? 创建线程池的几个核心构造参数 ? 什么是Java的内存模型,Java中各个线程是怎么彼此看到对方的变量的 ? 在Java中CycliBarriar和CountdownLatch有什么区别? 请谈谈ThreadLocal是怎么解决并发安全的 ? 文末底下有面试题汇集以及学习全脑图 曾经我也对 JVM 感到很头痛,完全搞不懂应该如何入门 JVM 的学习。 但经过了几年的学习,我对 JVM 有了更深入的理解。

面试官:没搞懂接口测试这些点,哪里来的自信投简历?

流过昼夜 提交于 2020-08-17 17:04:44
1,目前市面上流行的接口大多有哪几种协议的接口? 答:http,https,dubbo,rpc等即可。 2,接口的请求方式有哪几种? 答:get,post,put,delete,head,Trace,opions等,大多以get和post请求为主 3、get和post区别是什么? 答:POST和GET都是向服务器提交数据,并且都会从服务器获取数据。 区别: (1)传送方式:get通过地址栏传输,post通过报文传输,故而post更相对来说私密性一点 (2)传送长度:get参数有长度限制(受限于url长度),而post无限制 (3)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留 (4)get方式大多用作查询接口,获取响应数据;而post方式更多做数据添加、修改或删除等操作 4,post请求的请求类型有哪几种? [if !supportLists]· [endif] application/json json字符串 [if !supportLists]· [endif] [if !supportLists]· [endif] application/x-www-from-urlencoded 表单传递 [if !supportLists]· [endif] [if !supportLists]· [endif] multipart/form-data

RPC的超时设置,一不小心就是线上事故

送分小仙女□ 提交于 2020-08-17 11:59:13
上面这张监控图,对于服务端的研发同学来说再熟悉不过了。在日常的系统维护中,『服务超时』应该属于监控报警最多的一类问题。 尤其在微服务架构下,一次请求可能要经过一条很长的链路,跨多个服务调用后才能返回结果。当服务超时发生时,研发同学往往要抽丝剥茧般去分析自身系统的性能以及依赖服务的性能,这也是为什么服务超时相对于服务出错和服务调用量异常更难调查的原因。 这篇文章将通过一个真实的线上事故,系统性地介绍下: 在微服务架构下,该如何正确理解并设置RPC接口的超时时间 ,让大家在开发服务端接口时有更全局的视野。内容将分成以下4个部分: 从一次RPC接口超时引发的线上事故说起 超时的实现原理是什么? 设置超时时间到底是为了解决什么问题? 应该如何合理的设置超时时间? 01 从一次线上事故说起 事故发生在电商APP的首页推荐模块,某天中午突然收到用户反馈:APP首页除了banner图和导航区域,下方的推荐模块变成空白页了(推荐模块占到首页2/3的空间,是根据用户兴趣由算法实时推荐的商品list)。 上面的业务场景可以借助下面的调用链来理解 APP端发起一个HTTP请求到业务网关 业务网关RPC调用推荐服务,获取推荐商品list 如果第2步调用失败,则服务降级,改成RPC调用商品排序服务,获取热销商品list进行托底 如果第3步调用失败,则再次降级,直接获取Redis缓存中的热销商品list