Dubbo

瓜子二手车在 Dubbo 版本升级、多机房方案方面的思考和实践

南笙酒味 提交于 2020-01-06 23:31:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言   随着瓜子业务的不断发展,系统规模在逐渐扩大,目前在瓜子的私有云上已经运行着数百个 Dubbo 应用,上千个 Dubbo 实例。瓜子各部门业务迅速发展,版本没有来得及统一,各个部门都有自己的用法。随着第二机房的建设,Dubbo 版本统一的需求变得越发迫切。几个月前,公司发生了一次与 Dubbo 相关的生产事故,成为了公司 基于社区 Dubbo 2.7.3 版本升级的诱因。   接下来,我会从这次线上事故开始,讲讲我们这段时间所做的 Dubbo 版本升级的历程以及我们规划的 Dubbo 后续多机房的方案。 一、Ephermal节点未及时删除导致provider不能恢复注册的问题修复 事故背景   在生产环境,瓜子内部各业务线共用一套zookeeper集群作为dubbo的注册中心。2019年9月份,机房的一台交换机发生故障,导致zookeeper集群出现了几分钟的网络波动。在zookeeper集群恢复后,正常情况下dubbo的provider应该会很快重新注册到zookeeper上,但有一小部分的provider很长一段时间没有重新注册到zookeeper上,直到手动重启应用后才恢复注册。 排查过程   首先,我们统计了出现这种现象的dubbo服务的版本分布情况,发现在大多数的dubbo版本中都存在这种问题

《吐血整理》顶级大佬学习方法

爷,独闯天下 提交于 2020-01-06 23:20:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前言 很多次小伙伴问到学习方法,我也很想写这样的一篇文章来跟大家讨论下关于学习方法这件事情。 这应该是我2020的第一篇文章, 先祝所有的女生 : 落雁沉鱼 兰质蕙心 明眸皓齿 靡颜腻理 清词丽句 清辞丽曲 琪花瑶草 曲眉丰颊 螓首蛾眉 水木清华 爽心悦目 天生丽质 天香国色 我见犹怜 宛转蛾眉 霞光万道 小家碧玉 杏脸桃腮 煦色韶光 杏腮桃脸 雄伟壮观 香消玉殒 杏雨梨云 涎玉沫珠 妍蚩好恶 鱼沉雁落 宜嗔宜喜 旖旎风光 远山芙蓉 艳色绝世 余霞成绮 宜喜宜嗔 瘗玉埋香 艳紫妖红 朱唇皓齿 左家娇女 章台杨柳 阿娇金屋 闭月羞花 逞娇呈美 春暖花香 春色满园 春深似海 彩云易散 姹紫嫣红 斗美夸丽 尽态极妍 斗艳争辉 蛾眉皓齿飞阁流丹 国色天香 胡天胡帝 花颜月貌 绝色佳人天生丽质 慧质兰心 秀外慧中 暗香盈袖 闭月羞花 沉鱼落雁 倾国倾城 温婉娴淑 千娇百媚 仪态万千 美艳绝世 国色天香 花容月貌 明目皓齿 淡扫峨眉 清艳脱 俗香肌玉肤 清丽绝俗 仪态万端

关于 Dubbo 的一些经典问题

被刻印的时光 ゝ 提交于 2020-01-06 23:09:55
Dubbo是⼀个支持远程调用的分布式服务框架,提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理方案。常见的重点问题, 透明远程调用 就像调用本地方法一样调用远程方法;只需简单配置,没有任何API侵入; 负载均衡机制 客户端(client)loadbalance; 容错重试机制 服务Mock数据,重试次数、超时机制等; 自动注册发现 注册中心基于接口名查询服务提 供者的IP地址,并且能够平滑添加或删除服务提供者; 性能日志监控 Monitor统计服务的调用次调和调用时间的监控中心; 服务治理中心 路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等手动配置。 自动治理中心 无,比如:熔断限流机制、自动权重调整等。 一、Dubbo 的工作流程 角色: Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心。 Container: 服务运行容器。 流程: 0. 服务容器负责启动,加载,运行服务提供者。 1. 服务提供者在启动时,向注册中心注册自己提供的服务。 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 4.

我的面试标准:1.能干活;2.Java基础好;3.熟悉分布式框架

心不动则不痛 提交于 2020-01-06 22:02:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文授权转载自: https://www.cnblogs.com/JavaArchitect/p/10011253.html . awesome-java: https://github.com/Snailclimb/awesome-java (Github 上非常棒的 Java 开源项目集合) 我的面试标准 在上周,我密集面试了若干位 Java 后端的候选人,工作经验在3到5年间。我的标准其实不复杂: 第一能干活; 第二 Java 基础要好; 第三最好熟悉些分布式框架; 我相信其它公司招初级开发时,应该也照着这个标准来面的。 我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断。 但现实情况是,大多数人可能面试前没准备,或准备方法不得当。要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类面试必问的问题点,换句话说,面试准备点和平时工作要点匹配度很小。 作为面试官,我只能根据候选人的回答来决定面试结果。不过,与人方便自己方便,所以我在本文里,将通过一些常用的问题来介绍面试的准备技巧。大家在看后一定会感叹:只要方法得当,准备面试第一不难,第二用的时间也不会太多。 框架是重点

【每日3分钟技术干货 | 面试题+答案 | SpringCloud篇(一)】

坚强是说给别人听的谎言 提交于 2020-01-06 21:52:54
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 什么是 spring cloud? spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。 2. spring cloud 断路器的作用是什么? 在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。 3. spring cloud 的核心组件有哪些? Eureka:服务注册于发现。 Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。 Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。 Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。 Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。 4.SpringCloud和Dubbo SpringCloud和Dubbo都是现在主流的微服务架构

Linux Centos7 环境基于Docker部署Zookeeper服务搭建实战

。_饼干妹妹 提交于 2020-01-06 18:24:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 配置Zookeeper安装目录 在宿主机配置zookeeper安装目录:/docker/develop/zookeeper 并且在文件夹创建 data 和logs 目录: mkdir -p /docker/develop/zookeeper/data mkdir -p /docker/develop/zookeeper/logs [root@centos-knight ~]# cd /docker/develop/zookeeper [root@centos-knight zookeeper]# mkdir -p /docker/develop/zookeeper/data [root@centos-knight zookeeper]# mkdir -p /docker/develop/zookeeper/logs 授权文件目录:chmod -R 777 /docker/develop/zookeeper/ [root@centos-knight zookeeper]# chmod -R 777 /docker/develop/zookeeper/ [root@centos-knight zookeeper]# 安装和部署Zookeeper 拉取zookeeper镜像:docker pull zookeeper

云原生时代,微服务到底应该怎么玩儿?

爷,独闯天下 提交于 2020-01-06 18:23:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在微服务诞生之初,并没有太多方案的选择:选一个注册中心用来做服务注册和发现,通过客户端SDK进行负载均衡和容错,再搭配上日志、监控、调用链全套观测手段,一套微服务架构便建立起来了。 作为最流行的业务开发语言,Java体系里诞生了很多微服务架构,例如Spring Cloud。使用Spring Cloud,Spring技术栈的开发人员可以快速的开发和管理微服务,丰富的功能让其他语言体系的开发者们羡慕不已。 在云原生时代,Kubernetes快速普及,除了解决微服务所需要的应用编排、伸缩、保活等功能外,Kubernetes里本身还带了服务发现、配置管理、负载均衡和网关。既然这样,那么是否就可以不再注重注册中心和服务治理框架,只基于Kubernetes构建微服务系统呢? 很多公司进行了这方面的尝试,尝试后发现从治理功能丰富度、大规模集群效率等方面,还是有不太满意的地方。于是,后来又诞生了治理功能更为丰富的服务网格架构,让Kubernetes的服务治理能力极大增强,这些项目很快便得到了大范围的关注,例如Istio。 那么, 在云原生时代,我们的微服务体系到底应该怎么建设和维护呢? Kubernetes良好的应用编排能力,使其成为微服务部署、伸缩、管理的最佳工具。假如是为新增业务做技术选型

Dubbo路由机制概述

旧街凉风 提交于 2020-01-06 16:39:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一节我们主要讲解了利用dubbo-admin如何进行参数的动态修改,本节将重点介绍集群实现中另外一个实现细节:路由机制,Dubbo的路由机制主要解决的目的就是服务调用时,从已知的所有服务提供者中根据路由规则刷选服务提供者。 1、Dubbo路由机制概述 以下内容来源于官方文档: 以上是Dubbo 路由机制的基本知识,接下来从源码的角度分析一下其实现原理。 2、Router相关类图 Router:dubbo路由接口类 ● URL getUrl() :获取路由配置URL。 ● < T> List< Invoker< T>> route(List< Invoker< T>> invokers, URL url, Invocation invocation) :根据路由规则返回符合规则的服务调用者。 ConditionRouter:条件路由规则。 ScriptRouter:脚本路由规则(JavaScript)。 2.1 如何添加路由规则 可以通过dubbo-admin管理后台,动态添加路由规则,其界面如图所示: 点击保存后,使用URL描述一条路由规则,并将存储在注册中心${service}/routers目录下,然后通知相关订阅者(服务消费者【调用方】)。 具体调用的方法为RegistryDirecotry

面试-PA和XSYX面试小结

﹥>﹥吖頭↗ 提交于 2020-01-06 15:33:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> XSYX 1.自我介绍 2. 最近一个项目的业务和技术栈 3. 分布式锁解决库存问题 4. spring的IOC和AOP讲解 5. 类加载器层级 6.线程池核心参数和问题 7. 期待的团队是怎样的? 8.反向提问(对docker和k8s的应用以及技术栈的升级的态度和规划) PA 1. 自我介绍 我是x,y年毕业于z大学a专业,现在已经工作了b年,先后在c,d,e等领域做研发工作。我的技能栈是:xxxx; 我最近做的一个比较贴合岗位要求的项目是A,主要做健康saas平台,我主导了整个健康saas云平台的架构设计,封装了一整套公共技术组件,各种saas平台碰到的问题,我基本也踩过相关的坑了。 接下来你看是先讨论项目还是跟项目无关的技术。 结合面试前整理的岗位技能要求,背书一遍,比如下面是职位要求。 Java架构师 工作职责 参与SaaS云平台系统架构设计; 分布式云平台系统开发; SaaS云平台公共技术组件设计和开发; 参与解决各类疑难技术问题。 任职资格 本科学历, 计算机相关专业,5年以上开发和设计工作经验 ; 有千万级云平台架构设计和开发工作经验,精通Java编程; 深入理解网络编程模型,对各类开源框架有深入的了解; 熟悉并能熟练运用Redis、Kafka、Solr/ES、MQ等开源组件 ;

dubbo的常用配置(基于注解)

二次信任 提交于 2020-01-05 11:16:43
  之前记录了基于springboot的dubbo入门案例,今天在此基础上记录dubbo官网介绍的常用属性配置,dubbo读取我们配置的属性时是有优先级的,优先级如下图:                        如图所示,优先级的属性依次为虚拟机参数>xml配置>dubbo.properties,虚拟机参数即程序启动之前我们通过-D配置的dubbo属性,xml配置即我们项目中自己写的xml文件或者是springboot中的application.properties,当公共配置很简单,没有多注册中心,多协议等情况,或者想多个 Spring 容器想共享配置的情况下可以用dubbo.properties作为缺省配置;需要注意的是我这里的测试用例都是写在application.properties中,当然如果感觉不习惯,也可以跟普通maven项目一样新建xml文件,在xml中进行配置,只是不要忘了在springboot的启动类中添加@ImportResource(locations="xml路径")注解来引入就行,下面开始记录dubbo的常用配置;   一、启动时检查(check)   默认情况下dubbo是开启自动检查的,即当项目启动时会自动检查其依赖的服务是否开启,如果没开是会阻止spring的初始化的,即check=true;我们可以将check置为false来关闭启动时检查