自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

诸般世界

知识改变命运,技术改变世界。

  • 博客(212)
  • 收藏
  • 关注

原创 分布式RPC系统框架Dubbo-23Dubbo的内核解析-Wrapper机制

Wrapper机制,即扩展类的包装机制;就是对扩展类中的SPI接口方法进行增强,进行包装,是AOP思想的提现,是Wrapper(装饰者)设计模式的应用(是一种特例的装饰者设计模式),一个SPI可以包含多个Wrapper。注意,Wrapper类不属于“拓展类”;1.Wrapper类规范Wrapper机制不是通过注解实现的,而是通过Wrapper类实现,Wrapper类在定义时需要遵循如下规范: 类要实现SPI接口; 类中要有SPI接口的引用; 在接口实现方...

2020-10-08 11:39:45 688

原创 分布式RPC系统框架Dubbo-22Dubbo的内核解析-Adaptive机制

Adaptive机制,即扩展类的自适应机制;其可以指定想要加载的扩展类名,也可以不指定,若不指定则直接加载默认的扩展类,会自动匹配,做到自适应,通过@Adaptive注解实现;3.1 @Adaptive注解@Adaptive注解可以修饰类与方法,其作用相差很大;3.1.1 @Adaptive修饰类被@Adaptive修饰的SPI接口扩展类称为Adaptive类,表示该SPI扩展类会按照该类中指定的方式获取,即用于固定实现方式,其是装饰者设计模式的应用;dubbo中只有两个@A...

2020-10-07 10:49:09 2470

原创 分布式RPC系统框架Dubbo-21Dubbo的内核解析-SPI机制

所谓Dubbo的内核是指,Dubbo中所有功能都是基于内核完成的,都是由内核作为基础;dubbo的内核包含四部分,SPI、AOP、IOC与Compiler,后三部分的实现都基于SPI,所以说SPI是内核的内核;1.1 JDK的SPI机制 SPI,Service Provider Interface,服务提供者接口,是一种服务发现机制;1.2 JDK的SPI规范 接口名:可随意定义(符合命名约定) 实现类名:可随意定义(约定为serviceI...

2020-09-21 21:41:33 360

原创 分布式RPC系统框架Dubbo-20Dubbo系统架构分析

1-Dubbo的系统架构分析 阿里系的RPC框架;hsf:淘宝正在使用的RPC框架; sofa:蚂蚁经正在使用的RPC框架; dubbo:阿里B2B开发的RPC框架;1.1 Dubbo的两大设计原则Dubbo框架在设计时遵循两大设计原则: Dubbo使用“微内核+组件”的设计模式;内核只负责组装插件(扩展点),Dubbo的功能都是由插件实现的,也就是Dubbo的所有功能点都可以被用户自定义扩展类所替代,只需要增加某功能接口的实现类即可实现业务功能; 采用URL...

2020-09-21 21:31:20 199

原创 分布式RPC系统框架Dubbo-19Spring Boot中使用Dubbo

一、Spring Boot中使用Dubbo1 定义commons工程11-dubboCommons(1) 创建工程这里就创建一个普通的Maven的Java工程,并命名为dubboCommons。(2) 定义pom文件<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.

2020-09-18 14:19:27 160

原创 分布式RPC系统框架Dubbo-18延迟服务暴露与异步消费

一、延迟服务暴露 如果服务启动过程需要warmup事件(预热事件),就可以使用delay进行服务延迟暴露。只需在服务提供者的dubbo:service/标签中添加delay属性。其值可以有三类: 正数:单位为毫秒,表示在提供者对象创建完毕后的指定时间后再发布服务; 0:默认值,表示当前提供者创建完毕后马上向注册中心暴露服务; -1:表示在Spring容器初始化完毕后再向注册中心暴露服务; 注意:0与-1的区别,spring容器中的bean分为两类,即singl...

2020-09-17 09:37:04 426

原创 分布式RPC系统框架Dubbo-15多注册中心与单功能注册中心

一、多注册中心 根据项目业务的不同需求,会出现需要将不同的服务注册到不同服务中心,例,某些功能需要区域化差异,那么就可以将服务注册到特定区域的注册中心,比如北京用户查询与推荐数据以北京地区为限,那么其访问的就是北京数据仓库,对于其用户请求也就由北京注册中心提供服务;并且相同的服务注册到各个地域的注册中心有利于提高用户体验,那个区域请求对应当前区域的注册中心,响应高效,用户体验好; 常用的场景实现是不同的服务注册到不同的服务中心。1 创建提供者(1) 创建工程...

2020-09-16 17:26:33 524

原创 分布式RPC系统框架Dubbo-14声明式缓存

为了进一步提高消费者对用户的响应速度,减轻提供者的压力,Dubbo提供了基于结果的声明式缓存。该缓存是基于消费者端的,所以使用很简单,只需修改消费者配置文件,与提供者无关。1 缓存设置(1) 创建工程 应用https://blog.csdn.net/zxylwj/article/details/108542567中的提供者与消费者工程,更名消费者工程为consumer-cache;(2) 修改消费者配置文件 仅需在dubbo:reference...

2020-09-15 16:56:17 295

原创 分布式RPC系统框架Dubbo-13服务限流

为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流; Dubbo中能够实现服务限流的方式较多,可以划分为两类:直接限流与间接限流; 直接限流:通过对连接数量直接进行限制来达到限流的目的; 间接限流:通过一些非连接数量设置来达到限制流量的目的; 1 直接限流 创建一个简单的dubbo生产消费环境,可以通过https://blog.csdn.net/zxylwj/a...

2020-09-15 15:37:39 254

原创 分布式RPC系统框架Dubbo-12服务调用超时

服务降级的发生,其实是由于消费者调用服务超时引起的,即从发出调用请求到获取到提供者的响应结果这个时间超出了设定的时限,默认服务调用超时时限为1秒,可以在消费者端与提供者端设置超时时限;1 创建提供者工程(1) 创建工程 创建provider-timeout,并导入依赖;<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding&g...

2020-09-15 13:18:25 260

原创 分布式RPC系统框架Dubbo-11服务降级

服务降级 解决高并发的三把利器:降级、限流、缓存。1 什么是服务降级服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务有策略的降低服务级别,以释放服务器资源,保证核心任务的正常运行。2 服务降级方式能够实现服务降级方式很多,常见的有如下几种情况: 部分服务暂停 系统可以访问,一部分业务权重相对低的服务暂时停止服务,例,某猫光棍节平台不通过修改收货地址、不可查看历史订单等; 全部服务暂停 系统不可访问,请求会被告知系统维护中,跳转至预...

2020-09-14 17:07:56 170

原创 分布式RPC系统框架Dubbo-10集群容错

集群容错 集群容错指的是,当消费者调用提供者集群时发生异常的处理方案。1.Dubbo内置的容错策略 Dubbo内置了6种集群容错策略。(1) Failover 故障转移策略,默认容错策略,需根据业务配置重试策略;当消费者调用提供者集群中的某个服务器失败时,其会自动尝试着调用其它服务器;该策略通常用于读操作,例如,消费者要通过提供者从DB中读取某数据,但重试会带来服务延迟。(2) Failfast 快速失败策略,...

2020-09-14 10:48:23 326

原创 分布式RPC系统框架Dubbo-09负载均衡

1 搭建负载均衡环境 例,负载均衡中同一服务会有三个提供者,提供的功能与服务一致,消费者只有一个。step1 创建提供者provider-loadbalance-xxx 创建三个提供者,工程尾名区分(one、two、three);A、创建工程添加依赖<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <...

2020-09-13 17:59:14 134

原创 分布式RPC系统框架Dubbo-08多协议支持

除了Dubbo服务暴露Dubbo协议外,Dubbo框架还支持另外8种服务暴露协议:RMI协议、Hessian协议、HTTP协议、WebService协议、Thrift协议、Memcached协议、Redis协议、Rest协议,但在实际生产中,使用最多的就是Dubbo服务暴露协议。1 各个协议的特点 小数据大并发使用Dubbo,大数据小并发使用其它。1.1 dubbo协议 Dubbo默认传输协议 连接个数:单连接 连接方式:长连接 ...

2020-09-13 14:59:14 224

原创 分布式RPC系统框架Dubbo-07服务分组

服务分组与多版本控制的使用方式几乎是相同的,只要将version替换为group即可,但使用目的不同,使用版本控制的目的是为了升级,将原有老版本替换掉,将来不再提供老版本的服务,所以不同版本间不能出现相互调用,而分组的目的则不同,其也是针对相同接口,给出了多种实现类,但不同的是,这些不同实现并没有谁替换掉谁的意思,是针对不同需求,或针对不同功能模块所给出的不同实现,这些实现所提供的服务是并存的,所以它们间可以出现相互调用关系,例如,对于支付服务的实现,可以有微信支付实现与支付宝支付实现等。...

2020-09-13 14:03:08 431

原创 分布式RPC系统框架Dubbo-06版本控制实现灰度发布

多版本控制 当系统进行升级时,一般都是采用“灰度发布(又称为金丝雀发布)”过程,即在低压力时段,让部分消费者先调用新的提供者实现类,其余的仍然调用老的实现类,在新的实现类运行没有问题的情况下,逐步让所有消费者全部调用成新的实现类,多版本控制就可以实现灰度发布。 接口为同一个,说明注册到注册中心的服务名称是一致的,因此old与new的区分,是通过服务名即接口结合version版本号来确定。1.创建提供者provider-versionstep1 创建工程 ...

2020-09-13 10:32:30 545

原创 分布式RPC系统框架Dubbo-05关闭duboo服务检查

关闭服务检查step1 修改工程02-consumer-zkA、修改ConsumerRun类将对消费者方法的调用语句注释掉,使消费者暂时不调用消费者方法。B、运行测试 运行后会报错,错误原因是检查SomeService的状态失败。Caused by: java.lang.IllegalStateException: Failed to check the status of the service com.zxy.service.SomeService. No p...

2020-09-12 16:49:38 171

原创 分布式RPC系统框架Dubbo-04应用Zookeeper注册中心

应用Zookeeper注册中心 直连式存在单点问题,解决方法是提供多个provider,然后将providers注册到注册中心,consumer通过负载均衡策略来访问服务;在生产环境下使用最多的注册中心为Zookeeper,当然,Redis也可以做注册中心,此处应用Zookeeper作为注册中心。1 创建提供者02-provider-zkstep1 导入依赖 复制前面的提供者工程01-provider,并更名为02-provider-zk。修改pom文件,并在其中...

2020-09-11 22:16:06 110

原创 分布式RPC系统框架Dubbo-03直连式Dubbo

直连式Dubbo程序1. 创建业务接口工程0-api业务接口名即服务名称,无论是服务提供者向服务注册中心注册服务,还是服务消费者从注册中心索取服务,都是通过接口名称进行注册与查找的。即,提供者与消费者都依赖于业务接口。所以,一般情况下,会将业务接口专门定义为一个工程,让提供者与消费者依赖。step1 创建Maven的Java工程step2 创建业务接口 public interface SomeService { String helloDubbo(String msg);}

2020-09-11 19:59:28 178

原创 分布式RPC系统框架Dubbo-02Dubbo初识

Dubbo初识3.1 Dubbo官网 Dubbo官网为http://dubbo.apache.org,该官网是Dubbo正式进入Apache开源孵化器后更改为该网址,Dubbo原官网为:http://dubbo.io 。 Dubbo官网已做过了中英文国际化,用户可在中英文间任何切换。3.2 什么是PRC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需...

2020-09-11 16:29:21 155

原创 分布式RPC系统框架Dubbo-01Dubbo概述

Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。1.系统架构的发展 dubbo为分布式而生开源框架,比较流行的说法“如果没有分布式微服务应用,那么就不需要dubbo的存在”,印证了dubbo在分布式无服务环境中的重要性;因此首先要了解一下系统架构的发展历程。1.1 单体系统架构 当站点功能与流量都很小时,只需一个应用,将所有功能都...

2020-09-11 15:02:06 174

原创 generator简单应用

step 1 命令运行方式 Mybatis-generator自动生成器,Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,可以利用Mybatis-Generator来自动生成文件,其生成的文件包含entity、mapper、mapping;1.下载( Mybatis-generator:https://github.com/chenxingxing6/my-mybatis-generator)mybatis-...

2020-06-13 19:53:23 352

原创 016 Sharding JDBC组件

官方网站:http://shardingsphere.apache.org/index_zh.html Sharding JDBC是Apache ShardingSphere(Incubator) 的一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。MyCat与Sharding JDBC的实现方式对比图:一、Sharding...

2020-06-03 09:57:30 228

原创 015 MySQL分库分表

一、传统项目结构1.数据库性能瓶颈 数据库连接数有限 MySQL数据库默认100个连接、单机最大1500连接。 表数据量 单机表数量千级 单表数据千万级别 查询问题,索引命中率问题,索引存磁盘,占空间 硬件问题 2.数据库性能优化 1、参数优化 2、缓存、索引 3、读写分离 4、分库分表 (最终方案) 二、分库分表介绍1 使用背景 当【表的数量】达到了几百上千张表时,众多的业务模块都访问这个数据库,压力会比较...

2020-06-03 09:45:34 161

原创 014 mysql集群搭建之读写分离

一、读写分离意义 主从集群的问题,主对外工作,从不对外工作。主即要负责写操作,也要负责读操作,对于主从集群来说,只是保证了数据的安全备份。HAC:High Availability Cluster,高可用集群注意: MySQL的主从复制,只会保证主机对外提供服务,而从机是不对外提供服务的,只是在后台为主机进行备份;读写分离后,主负责写和部分读,从负责读,实现高性能高可用的数据库集群。二、读写分离演示需求MySQL master:128 MySQL...

2020-06-02 08:52:47 223

原创 013 MySQL集群搭建之主从复制

一、主从复制原理 主对外工作,从对内备份。1.关闭主从机器的防火墙systemctl stop iptables(需要安装iptables服务)systemctl stop firewalld(默认)systemctl disable firewalld.service(设置开启不启动)2.主服务器配置2.1修改my.cnf文件#启用二进制日志log-bin=mysql-bin#服务器唯一ID,一般取IP最后一段server-id=133#指定复...

2020-06-02 08:34:39 184

原创 012 mysql性能优化

一、服务器层面优化1.将数据保存在内存中,保证从内存读取数据 mysql的内存空间buffer pool默认128M,可以通过扩大buffer pool来实现内存读取,buffer pool理论上能够扩大到内存的3/4或4/5;--检查buffer pool是否够用?怎样确定 innodb_buffer_pool_size 足够大,数据是从内存读取而不是硬盘?mysql>show global status like 'innodb_buffer_pool_pages_%...

2020-06-02 08:17:04 121

原创 011 MySQL性能分析

一、性能分析的思路1.首先需要使用【慢查询日志】功能,去获取所有查询时间比较长的SQL语句;2.其次【查看执行计划】查看有问题的SQL的执行计划 explain;3.最后可以使用【show profile[s]】查看有问题的SQL的性能使用情况;二、慢查询日志--开启slow_query_log=ONlong_query_time=3slow_query_log_file=/var/lib/mysql/slow-log.log1.开启慢查询功能2.慢查询日志格式...

2020-06-01 20:53:52 196

原创 010 mysql行锁原理分析

一、简单SQL的加锁分析组合一:id主键+RC 最简单,最容易分析的组合,id是主键,Read Committed隔离级别;delete from t1 where id = 10; 只需要将主键上id = 10的记录加上X锁即可。组合二:id唯一索引+RC id不是主键,而是一个Unique的二级索引键值。delete from t1 where id = 10;组合三:id非唯一索引+RC 相对于...

2020-05-14 20:35:00 1069

原创 009 mysql事务分析

一、InnoDB的事务分析 数据库事务具有ACID四大特性;原子性(atomicity) :事务最小工作单元,要么全成功,要么全失败 。 一致性(consistency): 事务开始和结束后,数据库的完整性不会被破坏 。 隔离性(isolation) :不同事务之间互不影响,四种隔离级别为RU(读未提交)、RC(读已提交)、RR(可重复读)、SERIALIZABLE (串行化)。 持久性(durability) :事务提交后,对数据的修改是永久性的,即使系统故障也不会丢失 。...

2020-05-14 20:16:35 142

原创 008 mysql事务

MySQL中的事务由存储引擎实现,支持事务的存储引擎不多,本文主要了解InnoDB存储引擎中的事务。 ​ 事务处理用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。 ​ 事务用来管理DDL、DML、DCL 操作,如insert,update,delete 语句,默认是自动提交的。一、事务ACID特性 Atomicity 原子性,构成事务的所有必须是一个逻辑单元,要么全部执行,要么全部不执行(失败); ...

2020-05-14 19:55:00 138

原创 007 mysql行级锁

step1行级锁介绍 行级锁是由存储引擎实现(InnoDB存储引擎实现),InnoDB的行级锁,按照锁定范围来说,分为三种 ;记录锁(Record Locks):锁定索引中一条记录(主键指定where id=3) 间隙锁(Gap Locks): 锁定记录前、记录中、记录后的行 Next-Key 锁:(只出现在RR隔离级别中) 记录锁 + 间隙锁step2行级锁分类...

2020-05-07 21:57:03 219 1

原创 006 mysql锁

step1MySQL锁介绍(悲观锁) mysql在处理并发时采用锁机制; 乐观锁:默认无问题,当问题出现后再加锁; 悲观锁:默认会出现问题,未出现问题的时候就加锁; step2MySQL表级锁 表级锁由MySQL SQL layer层实现,表级锁锁定的是表,开销小加锁快,但是锁定粒度大,出现锁冲突的概率高(死锁); ...

2020-05-06 22:17:09 127

原创 005 mysql索引失效

step1 通过执行计划查看索引情况 explain + sql语句explain select * from t1 where a=1 and b=1 and c=1 and d=1 ;1.参数 explain出来的信息有10列:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra;...

2020-05-04 22:26:40 236

原创 004 mysql索引应用

step1 索引使用场景一、需创建索引的场景:主键自动建立唯一索引; 频繁作为查询条件的字段应该创建为索引; 多表关联查询中,关联字段应该创建索引 on 两边都要创建索引; 查询中排序的字段,应该创建索引, B + tree 有顺序,其插入就是以小到大, 取出的时候依据排序的字段查出就不用在排序了; 覆盖索引,应用覆盖缩影不需要回表,通过组合索引来创建覆盖索引; 统计或者分组字段...

2020-05-04 22:04:50 334

原创 003 mysql索引

step1索引介绍 官方介绍索引是帮助MySQL高效获取数据的数据结构。通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。优势:①检索:可以提高数据检索的效率,降低数据库的IO成本,类似于书的目录。②排序:通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。 被索引的列会自动进行排序,包括【单列索引】和【组合索引】,只是组合索引...

2020-05-04 21:49:06 113

原创 002 mysql物理结构

step1mysql物理结构 MySQL是通过文件系统对数据和索引进行存储的。 MySQL从物理结构上可以分为日志文件和数据索引文件。 MySQL在Linux中的数据索引文件和日志文件都在/var/lib/mysql目录下。 日志文件采用顺序IO方式存储、数据文件采用随机IO方式存储。 顺序IO:记录首地址与偏移量,只存储和查询,记录速度快,只能...

2020-05-04 10:02:54 925

原创 001 mysql架构

step1 逻辑架构图 mysql的逻辑架构按层次分为连接层、SQL业务层、存储引擎层,最下层是文件系统;step2组件分析1.Connectors 连接器 mysql面向开发者的APIS,根据不同的开发环境及连接方式提供标准的驱动方式;例如,java开发常用的jdbc与odbc方式就是在选择connector连接器。 MySQL...

2020-04-20 14:06:06 224

原创 eclipse中maven引入自定义依赖

描述: 开发自定义项目(框架)过程中,经常将项目本身作为依赖引入其他工程,如引入过程中出现无法识别情况,使用:mvn clean install进行安装;将spring-framework-custom作为依赖引入spring_custom,非父pom管理;...

2020-03-25 23:09:15 291

转载 003 设计模式(Design Pattern)——单例模式

摘要:   本文首先概述了单例模式产生动机,揭示了单例模式的本质和应用场景。紧接着,我们给出了单例模式在单线程环境下的两种经典实现:饿汉式 和 懒汉式,但是饿汉式是线程安全的,而懒汉式是非线程安全的。在多线程环境下,我们特别介绍了五种方式来在多线程环境下创建线程安全的单例,即分别使用 synchronized方法、synchronized块、静态内部类、双重检查模式 ...

2020-03-25 12:39:27 128

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除