- 博客(84)
- 资源 (1)
- 收藏
- 关注
原创 配置中心nacos的实现原理
配置中心的实现原理猜想**在我们了解nacos实现配置中心的原理之前,可以先思考一个问题,如果我们需要自己实现一个配置中心,需要考虑到哪些问题,或者需要满足哪些条件?
2020-02-01 22:15:29
2377
原创 深入netty之Pipeline 设计原理
通过上图我们可以看到,一个 Channel 包含了一个 ChannelPipeline,而 ChannelPipeline 中又维护了一个由 ChannelHandlerContext 组成的双向链表。这个链表的头是 HeadContext,链表的尾是 TailContext,并且每个 ChannelHandlerContext 中又关联着一个 ChannelHandler
2019-12-21 21:36:18
765
原创 深入netty之BootStrap源码分析
BootstrapBootstrap 是 Netty 提供的一个便利的工厂类, 我们可以通过它来完成 Netty 的客户端或服务器端的 Netty 初始化。 下面我先来看一个例子, 从客户端和服务器端分别分析一下 Netty 的程序是如何启动的。首先,让我们从客户端的代码 片段开始
2019-12-14 22:40:36
445
原创 深入netty之核心类关系梳理
业务中 Netty 的使用场景netty是属于更底层的东西,主要用于构建高性能、低时延的各种 Java 中间件,例如 MQ、分布式服务框架、ESB 消息总线等,Netty 主要作为基础通信框架为消息中间件、RPC 框架等产品提供高性能、低时延的通信服务;例如阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,dubbo的服务提供者、服务消费者和性能统计等节点之间使用 Netty 进行异步/同步通信
2019-12-08 20:30:38
386
原创 深入kafka之副本机制
分区的副本(Replica)机制我们已经知道Kafka的每个topic都可以分为多个Partition,并且多个partition会均匀分布在集群的各个节点下。虽然这种方式能够有效的对数据进行分片,但是对于每个partition来说,都是单点的,当其中一个partition不可用的时候,那么这部分消息就没办法消费。所以kafka为了提高partition的可靠性而提供了副本的概念(Replica),通过副本机制来实现冗余备份每个分区可以有多个副本,并且在副本集合中会存在一个leader的副本,所
2019-11-23 20:37:13
366
原创 深入kafka之消息分区策略原理
kafka消息消费原理在实际生产过程中,每个topic都会有多个partitions,多个partitions的好处在于,一方面能够对broker上的数据进行分片有效减少了消息的容量从而提升io性能。另外一方面,为了提高消费端的消费能力,一般会通过多个consumer去消费同一个topic ,也就是消费端的负载均衡机制,也就是我们接下来要了解的,在多个partition以及多个consumer的情况下,消费者是如何消费消息的
2019-11-18 23:32:12
329
原创 InnoDB 中事务的解决方案
InnoDB 中事务的解决方案我们知道单机事务中事务的解决方案有两个层面:其一是事务本身需要满足的条件:也就是事务的ACID四大特性,数据库需要采用什么措施来保证其二是并发事务带来的问题:也就是脏读,不可重复读和幻读,数据库应该如何来解决这些问题
2019-11-09 12:58:58
700
原创 Redis Cluster的分布式实现机制
Redis ClusterRedis Cluster 是在 Redis 3.0 的版本正式推出的,用来解决分布式的需求,同时也 可以实现高可用。跟 Codis 不一样,它是去中心化的,客户端可以连接到任意一个可用 节点Redis Cluster 可以看成是由多个 Redis 实例组成的数据集合。客户端不需要关注数 据的子集到底存储在哪个节点,只需要关注这个集合整体。 以 3 主 3 从为例,节点之间两两交互,共享数据分片、节点状态等信息
2019-10-27 19:07:35
214
原创 Tomcat架构设计
tomcat功能我们知道如果要设计一个系统,首先是要了解需求。 Tomcat 要实现本质是2个核心功能处理 Socket 连接,负责网络字节流与 Request 和 Response 对象相互转化加载和管理 Servlet,以及具体处理 Request 请求
2019-10-20 14:12:59
169
原创 RocketMQ的整体架构
rocketmqrocketmq天然支持高可用,它可以支持多主多从的部署架构,这也是和kafka最大的区别之一原因是RocketMQ中并没有master选举功能,所以通过配置多个master节点来保证rocketMQ的高可用。和所有的集群角色定位一样,master节点负责接受事务请求、slave节点只负责接收读请求,并且接收master同步过来的数据和slave保持一直。当master挂了以后,如果当前rocketmq是一主多从,就意味着无法接受发送端的消息,但是消费者仍然能够继续消费
2019-10-06 19:21:38
305
原创 使用zookeeper作为注册中心实现RPC
我们使用netty作为底层通讯机制,结合zookeeper实现RPCNetty 基本上是作为架构的技术底层而存在的,主要用于完成高性能的网络通信,我们可以使用要完成基于netty去重构RPC框架,首先要明白RPC完成了什么工作?其次要明白netty完成了什么工作
2019-09-03 10:19:48
1076
原创 深入探究synchronize锁机制
思考锁是如何存储的我们以对象在 jvm 内存中是如何存储作为切入点,去看看对象里面有什么特性能够实现锁锁的状态标识就是存放在对象的存储空间中,虚拟机中对对象的存储分为三部分:对象头、实例数据、对齐填充
2019-05-13 20:15:01
879
原创 MyCat分片策略
MyCat分片策略分片的目标是将大量数据和访问请求均匀分布在多个节点上,通过这种方式提升数据服务的存储和负载能力Mycat 分片策略总体上分为连续分片和离散分片,还有一种是连续分片和离散分片的结合,例如先范围后取模
2019-01-28 16:09:24
835
原创 mycat分库分表
Mycat是数据库分库分表的中间件,Mycat使用最多的两个功能是:读写分离和分库分表功能,支持全局表和E-R关系(这两个比较实用)mycat相当于是一个代理,可以将多个实际数据库组合成一个完整的虚拟数据库我们可以直接访问mycat的端口,其使用的是mysql原生的协议连接数据库进行通信mycat主要用来解决水平拆分的问题,因为水平拆分和架构无关数据量大了就必须要做,而垂直拆分更多的是架构设计的问题
2018-12-26 18:16:19
857
原创 InnoDB 内存结构和磁盘结构
一条更新 SQL 是如何执行的 update 操作其实包括了更新、插入和删除。如果有看过 MyBatis 的源码,应该知道 Executor 里面也只有 doQuery()和 doUpdate()的方法,更新流程和查询流程有什么不同呢?基本流程也是一致的,也就是说,它也要经过解析器、优化器的处理,最后交给执行器。区别就在于拿到符合条件的数据之后的操作
2018-12-23 19:21:38
1114
原创 mySql架构
mysql架构分层总体上,我们可以把 MySQL 分成三层,跟客户端对接的连接层,真正执行操作的服务层,和跟硬件打交道的存储引擎层(参考 MyBatis:接口、核心、基础)连接层我们的客户端要连接到 MySQL 服务器 3306 端口,必须要跟服务端建立连接,那么管理所有的连接,验证客户端的身份和权限,这些功能就在连接层完成
2018-12-21 19:43:19
260
原创 分布式事务解决方案
事务ACID特性:原子性(Atomicity),一致性(Consistency),隔离性(lsolation),持久性(Durability)1. 原子性原子性是指一个事务是一个不可再分割的工作单位,事务中的操作要么都执行,要么都不执行例如:A给B转账,如果B的账户操作失败,则本次交易失败,A和B的账户都不会进行修改。
2018-04-10 09:54:56
263
原创 CAP与一致性协议算法
长轮训的概念客户端发起一个请求到服务端,服务端收到客户端的请求后,并不会立刻响应给客户端,而是先把这个请求hold住,然后服务端会在hold住的这段时间检查数据是否有更新,如果有,则响应给客户端,如果一直没有数据变更,则达到一定的时间(长轮训时间间隔)才返回,如下图所示:
2018-04-09 19:20:28
430
1
转载 一致性协议总览
一致性模型一致性模型本质上是进程与数据存储的约定,主要是用于解决分布式系统中数据复制时保持一致性的问题一致性协议一致性模型就像是接口,而一致性协议就像是接口的具体实现
2018-03-23 20:36:09
5965
2
原创 一致性协议 Zab协议
Zab协议Zab协议 的全称是Zookeeper Atomic Broadcast(Zookeeper原子广播)。Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性zab 协议介绍(单主模式--顺序一致性协议)ZAB 协议包含两种基本模式,分别是1. 崩溃恢复选举leader数据同步2. 原子广播(消息广播--也就是主节点和从节点数据同步)
2018-03-18 17:01:59
636
原创 zookeeper服务的实现原理
1.ZooKeeper是什么ZooKeeper是分布式应用程序协调服务,是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作2.ZooKeeper提供了什么1)文件系统2)通知机制
2018-03-13 19:32:25
7011
原创 java设计模式之责任链模式、状态模式、策略模式
若您对我的分享感兴趣可以访问:java设计模式专栏在常用的23中设计模式中,有三种模式容易混淆,这三种模式分别是:责任链模式、状态模式以及策略模式因此接下来我们把这三种模式放在一起讨论1、责任链模式(okHttp)职责链的本质是:不同的类对同一个问题的反应 责任链模式下处理者所处的位置决定了其功能,在这里,最后一个 Interceptor 一定是负责和服务器实际通讯的,重定向、缓存等一定是在...
2018-03-08 14:20:29
3346
原创 java设计模式分析之桥接模式、适配器模式
一个优秀的android开源框架中往往会体现出很多Java设计模式的影子,了解设计模式有助于理解开源框架中的程序设计之美接下来我会将自己整理的对一些设计模式的理解记录在这里若您对我的分享感兴趣可以访问:java设计模式专栏1、适配器模式(retrofit)适配器模式的应用非常广泛,因为适配器是作为两个不兼容的接口之间的桥梁,什么意思呢?例如:读卡器就是内存卡和笔记本之间的适配器,我们将内存卡插入读...
2018-03-08 14:16:25
2037
2
原创 dubbo服务引用源码分析
dubbo服务引用流程大致如下:(1)首先在dubbo容器启动的时候,会扫描所有的reference配置(也就是dubbo客户端配置的远程引用),生成对应ReferenceBean,例如:客户端的DemoClient类依赖了远程服务DemoService,那么dubbo就会生成一个ReferenceBean<DemoService>(2)spring容器在初始化本地的bean的时候,发现DemoClient类依赖了DemoService类,于是spring会寻找DemoService的工厂类,结果就
2018-03-06 10:57:45
362
原创 java设计模式分析之过滤器模式 、组合模式、外观模式
一个优秀的android开源框架中往往会体现出很多Java设计模式的影子,了解设计模式有助于理解开源框架中的程序设计之美接下来我会将自己整理的对一些设计模式的理解记录在这里若您对我的分享感兴趣可以访问:java设计模式专栏本篇记录:过滤器模式 、组合模式、外观模式传送门: java设计模式分析及在android中的应用一参考:java设计模式之组合模式从真实项目中抠出来的设计模式:过滤器模式1、...
2018-03-05 20:08:19
1312
原创 Dubbo 服务导出过程
Dubbo 服务导出过程dubbo采用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息,通过上一篇文章:dubbo源码实现之SPI 和自适应扩展点中我们可以了解到dubbo是如何确保扩展点一定可以获取到url的URL 是 Dubbo 配置的载体,通过 URL 可让 Dubbo 的各种配置在各个模块之间传递如下是一个使用dubbo协议发布服务的url:
2018-03-03 20:02:15
951
原创 java设计模式分析之工厂、享元、建造者、原型模式
一个优秀的开源框架中往往会体现出很多Java设计模式的影子,了解设计模式有助于理解开源框架中的程序设计之美接下来我会将自己整理的对一些设计模式的理解记录在这里这个系列我会尽量将设计模式中比较容易混淆的概念统一起来进行分析和比较,而一些比较简单的模式例如单例模式,会直接忽略文章中设计一些个人的理解如有偏差,敬请指正若您对我的分享感兴趣可以访问:java设计模式专栏本篇记录:工厂模式、 ...
2018-03-01 19:07:28
499
1
原创 dubbo源码实现之SPI 和自适应扩展点
API和SPIAPI (应用程序接口编程)直接被应用开发人员使用,SPI(服务提供者接口编程) 被框架扩展人员使用,两者本质都是面向接口进行编程两者的区别是什么呢?区别是一个将接口放在调用者包中,一个将实现放在实现者包中SPI常见的例子是:插件模式的插件。如:数据库驱动 Driver日志 LogDubboSPI的使用场景
2018-02-28 15:38:53
4465
原创 分布式架构dubbo
为什么需要dubbodubbo不仅仅是一个RPC框架,还是一个服务治理框架远程通信背景技术架构的发展从单体到分布式,是一种顺势而为的架构演进,和传统的单体架构相比,分布式多了一个远程服务之间的通信不管是 soa还是微服务,他们本质上都是对于业务服务的提炼和使用。强调一个服务通常以独立的形式存在。各个服务之间通过网络调用。远程服务之间的如何相互调用才是实现分布式的关键因素
2017-12-09 15:21:38
349
原创 分布式架构的演进过程
架构的概念一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。架构的本质就是对系统进行有序化重构,使系统不断进化
2017-12-05 16:33:14
306
原创 聊一聊GC(垃圾回收器)
垃圾回收器垃圾回收算法是理论垃圾回收器是实现目前有如下几种垃圾回收器,连线描述了各个垃圾回收器应用在哪里,以及相互之间是否可以相互配合使用
2017-10-18 16:15:30
1123
原创 BIO、NIO、AIO
5种IO模型,只有异步IO方式达到了完全的非阻塞,阻塞式IO则是完全阻塞。但是常用的还是复用IO的方式,设计的好足以媲美aio,而且aio在某些情况性能不如epoll方式,和其具体实现有关。select/epoll和aio造就了两种设计模式,前者是reactor,后者就是proactor
2017-07-05 13:24:11
5734
原创 消息中间件ActiveMQ
消息中间件例如一个注册可能不仅仅是一个数据库入库操作,可能还有其他的例如:发送激活邮件,赠送积分或者新人红包,发送营销短信等以往我们的处理方式一般是将这些操作统一放在一个方法里面,来保证事务统一性以往我们的处理方式一般是将这些操作统一放在一个方法里面,来保证事务统一性
2017-04-28 09:08:12
1845
原创 SourceTree注意事项
SourceTree切换分支注意事项 checkOut:检出:就是切换分支操作(一旦切换本地数据会和分支数据一致,未保存的数据将会丢失)但是注意:当从远端获取分支进行切换的时候,SourceTree会提醒你需要先提交本地的数据,但是却无法提交到新切换的分支,因此只能提交到老的分支也就是说,当你切换分支之前,你一定要先保存数据到当前分支,然后再创建分支,就可以保持数据一致不丢失但如果其他人在远端先切
2017-04-17 16:17:49
1304
原创 测试之自动化测试
详细Python教程见:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014316090478912dab2a3a9e8f4ed49d28854b292f85bb000 Python是一款面向对象的高级语言,十分的简单优雅,而且代码量比Java更少,这里我们使用Python语言
2017-04-12 19:58:51
487
1
fiddler工具
2016-07-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人