Dubbo

Sentinel 快速入门

风格不统一 提交于 2020-01-23 11:00:26
提起 Spring Cloud 的限流降级组件,一般首先想到的是 Netflix 的 Hystrix。 不过就在2018年底,Netflix 宣布不再积极开发 Hystrix,该项目将处于维护模式。官方表示 1.5.18 版本的 Hystrix 已经足够稳定,可以满足 Netflix 现有应用的需求,所以接下来其会把焦点转向对于自适应的实现,更多关注对应用程序的实时性能做出响应。对于新应用的熔断需求,将采用其它项目实现,Netflix 推荐了 Resilience4j。 作为 Spring Cloud Netflix 重要套件,Hystrix已经成为保障微服务稳定性的首选应用。其实除了 Netflix 和 Resilience4j,限流降级还有一个新的选择,就是阿里巴巴的Sentinel组件。 Sentinel官方文档 一、阿里开源 Sentinel 简介 2018年8月,阿里巴巴宣布将 Sentinel 进行开源,同时推出了结合Dubbo的适配器,捐赠给了Apache Dubbo社区。 1.Sentinel 的历史 2012 年,Sentinel 诞生,主要功能为入口流量控制。 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。 2018 年,Sentinel

替代 Hystrix,Spring Cloud Alibaba Sentinel 快速入门

自古美人都是妖i 提交于 2020-01-23 09:54:04
提起 Spring Cloud 的限流降级组件,一般首先想到的是 Netflix 的 Hystrix。 不过就在2018年底,Netflix 宣布不再积极开发 Hystrix,该项目将处于维护模式。官方表示 1.5.18 版本的 Hystrix 已经足够稳定,可以满足 Netflix 现有应用的需求,所以接下来其会把焦点转向对于自适应的实现,更多关注对应用程序的实时性能做出响应。对于新应用的熔断需求,将采用其它项目实现,Netflix 推荐了 Resilience4j。 作为 Spring Cloud Netflix 重要套件,Hystrix已经成为保障微服务稳定性的首选应用。其实除了 Netflix 和 Resilience4j,限流降级还有一个新的选择,就是阿里巴巴的Sentinel组件。 一、阿里开源 Sentinel 简介 2018年8月,阿里巴巴宣布将 Sentinel 进行开源,同时推出了结合Dubbo的适配器,捐赠给了Apache Dubbo社区。 1.Sentinel 的历史 2012 年,Sentinel 诞生,主要功能为入口流量控制。 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。 2018 年,Sentinel 开源,并持续演进。 2

基于Spring Cloud微服务架构

前提是你 提交于 2020-01-22 23:05:58
1. 微服务简介 1.1 什么是微服务架构 微服务架构是系统架构上的一种设计风格 将大系统拆分成N个小型服务 这些小型服务都在各自的线程中运行 小服务间通过HTTP协议进行通信 有自己的数据存储、业务开发、自动化测试和独立部署机制 可以由不同语言编写 小结:微服务架构的思想,不只是停留在开发阶段,它贯穿了设计,研发,测试,发布,运维等各个软件生命周期。 2. 架构体系 架构样例: 2.1 微服务发布--持续集成 3. 微服务架构九大特性 服务组件化 -- 组件是可独立更换、升级的单元。就像PC中的内存,CPU一样。 按业务组织团队 -- 要求人员全栈技能 做“产品”的态度 -- 对整个产品生命周期负责,而不是做“项目”交付态度 智能端点与哑管道 -- 微服务间的通讯方式: --- HTTP的RESTful API --- MessageMQ消息队列 去中心化治理 --不是每一个问题都是钉子,不是每一个解决方案都是锤子。 去中心化数据管理 --独立维护各服务数据存储,尽量使服务间“无事物”调用,通过补偿机制维护数据一致性问题 基础设施自动化 -- 自动化测试 -- 自动化部署 容错设计 -- 每个服务实现监控和日志组件,比如服务状态,断路器状态,吞吐量,网络数据等关键数据仪表盘 演进式设计 --初期单体,逐步拆分,抽取公共组件 4. 微服务选型 Dubbo

springboot整合dubbo时,消费者调用提供者的方法时出现空指针异常

谁说胖子不能爱 提交于 2020-01-22 21:37:48
最近在看尚硅谷雷老师的springboot整合bubbo视频,发现报空指针异常,如下是我踩的坑。 1、首先看到的是zookeeper发现了服务,这并没啥问题; 2、ProviderTicketApplication主程序也能跑起来,如下; 3、但是在运行ConsumerUserApplicationTests测试类时,报错; 4、细看自己的配置文件之后,才发现消费者的zookeeper地址那里少了个":",这样子肯定为空啊,找不到服务。 5.其他情况有可能也会找不到服务,要谨慎注意,service实现类用的@Service注解不是spring的,而是 com.alibaba.dubbo.config.annotation包下的,当然用了这个注解之后,还不能缺少@Component注解(这个类还是要交给spring管理的),其次主程序类上要加@EnableDubbo注解,另外还要注意提供者的application.yml文件里的dubbo.scan.base-packages=xxx一定要写啊,扫描的包路径不对,注册不上服务的。注意这几个点,配置文件不要错,应该能解决这个问题了。 来源: CSDN 作者: 是清风啊 链接: https://blog.csdn.net/weixin_41359273/article/details/103927596

dubbo参数调优

心不动则不痛 提交于 2020-01-22 08:26:24
dubbo作为一个服务治理框架,功能相对比较完善,性能也挺不错。但很多朋友在使用dubbo的时候,只是简单的参考官方说明进行搭建,并没有过多的去思考一些关键参数的意义(也可能是时间紧任务多,没空出来研究),最终做出来的效果有一定的打折。 这里我根据目前我们项目的使用情况列出几个性能调优的参数及其意义,供大家参考。 在介绍参数之前,我们先了解下dubbo中配置的优先级,以免出现调优参数设置了却没发现效果实际是配置被覆盖导致这样的问题。dubbo分为consumer和provider端,在配置各个参数时,其优先级如下: 1、consumer的method配置 2、provider的method配置 3、consumer的reference配置 4、provider的service配置 5、consumer的consumer节点配置 6、provider的provider节点配置 可以看到,方法级的配置优先级高于接口级,consumer的优先级高于provider。同时,在本地参数配置还存在一层优先级: 1、系统参数(-D),如-Ddubbo.protocol.port=20881 2、xml配置 3、property文件 了解了这两个优先级,调优起来才会更加清晰,省去了一些诸如配置设置了不生效这样的麻烦。注意,其实dubbo中还可以通过将配置写入注册中心的方式覆盖用户配置

dubbo-admin安装使用

隐身守侯 提交于 2020-01-22 08:10:21
1、下载zip包 https://github.com/alibaba/dubbo/releases 2、解压 3、 进到解压后的根目录 4、解压后,根目录里存在dubbo-admin,进入 mvn package -Dmaven.test.skip=true 安装完后,生成target目录,进入这个目录,找到dubbo-admin-2.6.0这个目录,把这个目录全部copy到tomcat的目录webapps下的ROOT下面(删除tomcat webapps目录下ROOT原有内容) 启动tomcat,就可以看到dubbo-admin的界面,默认帐号密码root/root 启动tomcat方法:进入目录/home/admin/apache-tomcat-8.5.24/bin,然后 sh startup.sh 来源: https://www.cnblogs.com/sjzxs/p/11546962.html

DUBBO学习笔记

一笑奈何 提交于 2020-01-22 06:51:36
1、先参看这2篇文章,非常全面,容易理解: (1) https://blog.csdn.net/hua1586981/article/details/79195111 该例子是spring整合dubbo,spring包有点问题 (2) https://blog.csdn.net/zxljsbk/article/details/81626559 (3) https://blog.csdn.net/weixin_43841693/article/details/103282241 springboot整合dubb,可以运行 2、zookeeper安装 (1) http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.6/ (2)从目前的最新版本3.5.5开始,带有bin名称的包才是我们想要的下载可以直接使用的里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。因此要下载带bin的安装包 (3)具体安装操作参考第一个网址 3、下载最新版本的eclipse企业版,使用maven构建项目。他会自动添加所需的jar包 4、对第三个网址的样例部分说明: 生产者和消费者工程的application.properties文件中配置了请求端口号,zookeeper地址和端口等信息 server.port=8082

高并发常用解决方案汇总

倾然丶 夕夏残阳落幕 提交于 2020-01-21 05:11:17
1、扩容 扩容思路: u 垂直扩容(纵向扩展):提高系统部件能力 u 水平扩容(横向扩展):增加更多系统成员来实现 数据库扩容: 读操作扩展:memcache、redis、CDN等缓存 写操作扩展:Cassandra、Hbase 2、缓存 (1) 浏览器:页面静态化 (2) 网络转发:nginx反向代理 (3) 应用服务:集群 (4) 数据库:读写分离、分表分库 缓存特性: 命中率:命中数/(命中数+没有命中数) 最大元素(空间) 清空策略:FIFO(先进先出)、LFU(淘汰一定时期内被访问次数最少的)、LRU(淘汰最长时间未被使用的)、过期时间、随机等 一般来说:项目中开发,使用缓存的时候,都是读多写少; 可以使用复制特性扩展读性能 可以使用客户端分片扩展写性能 缓存分类和应用场景 本地缓存:编程实现(成员变量、局部变量、静态变量)、Guava Cache 分布式缓存:Memcache、Redis Guava Cache相当于利用hashmap实现了本地缓存的管理 高并发场景下缓存常见问题 u 缓存一致性 u 缓存并发问题 u 缓存穿透问题 u 缓存的雪崩现象 缓存一致性 雪崩: 执行了增删改操作,此时缓存中并没有key所对应的数据(缓存被清除了),那么可能某一时间点,多个请求同时访问,越过缓存服务器直接访问数据库服务器,造成服务雪崩现象; 解决方案:使用锁机制解决该问题

Dubbo 2.7.5在线程模型上的优化

ぃ、小莉子 提交于 2020-01-21 04:05:09
这是why技术的第30篇原创文章 这可能是全网第一篇解析Dubbo 2.7.5里程碑版本中的改进点之一:客户端线程模型优化的文章。 先劝退:文本共计8190字,54张图。阅读之前需要对Dubbo相关知识点有一定的基础。内容比较硬核,劝君谨慎阅读。 读不下去不要紧,我写的真的很辛苦的,帮忙拉到最后点个赞吧。 本文目录 第一节:官方发布 本小节主要是通过官方发布的一篇名为《Dubbo 发布里程碑版本,性能提升30%》的文章作为引子,引出本文所要分享的内容:客户端线程模型优化。 第二节:官网上的介绍 在介绍优化后的消费端线程模型之前,先简单的介绍一下Dubbo的线程模型是什么。同时发现官方文档对于该部分的介绍十分简略,所以结合代码对其进行补充说明。 第三节:2.7.5版本之前的线程模型的问题 通过一个issue串联本小节,道出并分析一些消费端应用,当面临需要消费大量服务且并发数比较大的大流量场景时(典型如网关类场景),经常会出现消费端线程数分配过多的问题。 第四节:thredless是什么 通过第三节引出了新版本的解决方案,thredless。并对其进行一个简单的介绍。 第五节:场景复现 由于条件有限,场景复现起来比较麻烦,但是我在issues#890中发现了一个很好的终结,所以我搬过来了。 第六节:新旧线程模型对比 本小节通过对比新老线程模型的调用流程,并对比2.7.4.1版本和2.7

Dubbo-服务引用

为君一笑 提交于 2020-01-21 03:10:55
前言 使用 Dubbo,只需要服务消费者引用服务提供者的接口jar包(泛化调用可以不用服务提供者的接口jar包),就可以像调用本地方法一样,调用远程的服务,但在消费者这边,并没有服务实现的代码,那是怎么实现调用的呢?本文就分析一下服务引用的原理。 服务引用流程 解析配置文件 根据配置文件 <dubbo:reference init=“true”> init的配置走不同的服务引用时机,最终都走到同样的路口:ReferenceBean#getObject。 服务引用的时机 服务引用使用 < dubbo:reference> 标签,按照是否配置 init=“true” 会有两种服务引用的时机: 配置了 <dubbo:reference init=“true”> 会在解析到这个标签的时候就进行服务引用,也就是 饿汉式 的方式。 配置了 <dubbo:reference > 并不会在解析这个标签的时候进行服务引用,而是在获取这个 bean 的时候进行服务引用,也就是 懒汉式 的方式。 饿汉式的服务引用原理是 ReferenceBean 标签实体类实现了 InitializingBean 接口,会在 初始化 Bean 的时候 就执行 afterPropertiesSet 方法,并且 afterPropertiesSet 方法会判断 init =true 是否成立,成立的话就调用