摘要:Pipeline 设计原理 Channel 与ChannelPipeline: 相信大家都已经知道,在Netty 中每个Channel 都有且仅有一个ChannelPipeline 与之对应,它们的组成关系如下: 通过上图我们可以看到, 一个Channel 包含了一个ChannelPipeline 阅读全文
posted @ 2019-07-21 16:17 吴振照 阅读(503) 评论(0) 推荐(0) 编辑
摘要:EventLoopGroup 与Reactor: 前面的章节中我们已经知道了,一个Netty 程序启动时,至少要指定一个EventLoopGroup(如果使用到的是NIO,通常是指NioEventLoopGroup),那么,这个NioEventLoopGroup 在Netty 中到底扮演着什么角色呢 阅读全文
posted @ 2019-07-21 14:45 吴振照 阅读(519) 评论(0) 推荐(0) 编辑
摘要:客户端BootStrap: Bootstrap 是Netty 提供的一个便利的工厂类, 我们可以通过它来完成Netty 的客户端或服务器端的Netty 初始化。下面我先来看一个例子, 从客户端和服务器端分别分析一下Netty 的程序是如何启动的。首先,让我们从客户端的代码片段开始: EventLoo 阅读全文
posted @ 2019-07-19 21:57 吴振照 阅读(420) 评论(0) 推荐(0) 编辑
摘要:传统RPC 调用性能差的三宗罪 网络传输方式问题:传统的RPC 框架或者基于RMI 等方式的远程服务(过程)调用采用了同步阻塞IO,当客户端的并发压力或者网络时延增大之后,同步阻塞IO 会由于频繁的wait 导致IO 线程经常性的阻塞,由于线程无法高效的工作,IO 处理能力自然下降。下面,我们通过B 阅读全文
posted @ 2019-07-17 18:43 吴振照 阅读(1193) 评论(0) 推荐(0) 编辑
摘要:先来看一下MyBatis 的编程式使用的方法: public void testMapper() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getR 阅读全文
posted @ 2019-07-02 14:37 吴振照 阅读(4181) 评论(0) 推荐(0) 编辑
摘要:MyBatis 缓存详解 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力。跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口。 缓存体系结构: MyBatis 跟缓存相关的类都在cache 包里面,其中有一个Cache 阅读全文
posted @ 2019-06-28 15:43 吴振照 阅读(18573) 评论(4) 推荐(4) 编辑
摘要:1、BeanFactory Spring Bean 的创建是典型的工厂模式,这一系列的Bean 工厂,也即IOC 容器为开发者管理对象间的依赖关系提供了很多便利和基础服务,在Spring 中有许多的IOC 容器的实现供用户选择和使用,其相互关系如下: 其中BeanFactory 作为最顶层的一个接口 阅读全文
posted @ 2019-05-10 19:01 吴振照 阅读(375) 评论(3) 推荐(0) 编辑
摘要:1,索引谁实现的: 索引是搜索引擎去实现的,在建立表的时候都会指定,搜索引擎是一种插拔式的,根据自己的选择去决定使用哪一个。 2,索引的定义: 索引是为了加速对表中数据行的检索而创建的一种分散存储的(不连续的)数据结构,硬盘级的。 索引意义:索引能极大的减少存储引擎需要扫描的数据量,索引可以把随机I 阅读全文
posted @ 2019-02-01 11:33 吴振照 阅读(2383) 评论(2) 推荐(1) 编辑
摘要:在多线程并发编程中synchronized一直是元老级角色,我们在开发过程中可以使用它来解决线程安全问题中提到的原子性,可见性,以及顺序性。很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了,Java SE 1.6中为 阅读全文
posted @ 2019-01-11 14:32 吴振照 阅读(5888) 评论(4) 推荐(2) 编辑
摘要:消息的存储原理: 消息的文件存储机制: 前面我们知道了一个 topic 的多个 partition 在物理磁盘上的保存路径,那么我们再来分析日志的存储方式。通过 ll /tmp/kafka-logs/testTopic-0/ 命令找到对应 partition 下的日志内容: kafka 是通过分段的 阅读全文
posted @ 2018-12-20 17:05 吴振照 阅读(4053) 评论(0) 推荐(1) 编辑
摘要:关于 Topic 和 Partition: Topic: 在 kafka 中,topic 是一个存储消息的逻辑概念,可以认为是一个消息集合。每条消息发送到 kafka 集群的消息都有一个类别。物理上来说,不同的 topic 的消息是分开存储的,每个 topic 可以有多个生产者向它发送消息,也可以有 阅读全文
posted @ 2018-12-19 13:58 吴振照 阅读(3667) 评论(0) 推荐(2) 编辑
摘要:消费端消费消息: 在 初识ActiveMQ 中我提到过,两种方法可以接收消息,一种是使用同步阻塞的ActiveMQMessageConsumer#receive方法。另一种是使用消息监听器MessageListener。这里需要注意的是,在同一个session下,这两者不能同时工作,也就是说不能针对 阅读全文
posted @ 2018-12-14 16:51 吴振照 阅读(6366) 评论(0) 推荐(0) 编辑
摘要:持久化消息和非持久化消息的发送策略:消息同步发送和异步发送 ActiveMQ支持同步、异步两种发送模式将消息发送到broker上。同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消息,表示消息已经被broker处理。这个机制提供了消息的安全性保障,但是由于是阻塞的操作,会影响到客 阅读全文
posted @ 2018-12-12 10:08 吴振照 阅读(7359) 评论(0) 推荐(0) 编辑
摘要:消费端启动初始化过程: 消费端的代码解析也是从配置文件解析开始的,服务发布对应的<dubbo:service,解析xml的时候解析了一个ServiceBean,并且调用ServiceConfig进行服务的发布。服务的消费对应的<dubbo:reference,在初始化的过程中也解析了一个 Refer 阅读全文
posted @ 2018-12-04 16:46 吴振照 阅读(231) 评论(0) 推荐(0) 编辑
摘要:服务端发布流程: dubbo 是基于 spring 配置来实现服务的发布的,对于dubbo 配置文件中看到的<dubbo:service>等标签都是服务发布的重要配置 ,对于这些提供可配置化的支持,spring功不可没,spring提供了可拓展的Schema的支持。也就是自定义标签的使用,这样 du 阅读全文
posted @ 2018-11-29 16:54 吴振照 阅读(786) 评论(0) 推荐(0) 编辑
摘要:事件机制: Watcher 监听机制是 Zookeeper 中非常重要的特性,我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听事件,比如可以监听节点数据变更、节点删除、子节点状态变更等事件,通过这个事件机制,可以基于 zookeeper实现分布式锁、集群管理等功能。 watcher 阅读全文
posted @ 2018-11-21 13:20 吴振照 阅读(4897) 评论(0) 推荐(0) 编辑
摘要:zookeeper 的由来: 分布式系统的很多难题,都是由于缺少协调机制造成的。在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper。Google Chubby 是一个分布式锁服务,通过 Google Chubby 来解决分布式协作、Maste 阅读全文
posted @ 2018-11-19 15:13 吴振照 阅读(2472) 评论(0) 推荐(0) 编辑
摘要:1.spring boot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration,先看一下启动类的main方法 public ConfigurableApplicationContext run(String... args) { StopWatch stopWa 阅读全文
posted @ 2018-06-07 17:05 吴振照 阅读(552) 评论(0) 推荐(0) 编辑
摘要:spring-cloud-netflix-eureka 源码解析: 本文主要针对 spring-cloud-dependencies Hoxton.SR4版本, spring-cloud-starter-netflix-eureka-server 的 2.2.2.RELEASE 版本进行源码的解析。 阅读全文
posted @ 2020-09-19 12:27 吴振照 阅读(4) 评论(0) 推荐(0) 编辑
摘要:spring-cloud-openfeign 源码解析: 本文主要针对 spring-cloud-starter-openfeign 的 2.2.3.RELEASE 版本进行源码的解析。 对于未接触过 Feign的小伙伴可以参考 https://www.cnblogs.com/wuzhenzhao/ 阅读全文
posted @ 2020-09-16 19:08 吴振照 阅读(6) 评论(0) 推荐(0) 编辑
摘要:spring-cloud-netflix-ribbon 源码分析: 本文主要针对 spring-cloud-starter-netflix-ribbon 的 2.2.3.RELEASE 版本进行源码的解析。 对于未接触过 Ribbon 的小伙伴可以参考 https://www.cnblogs.com 阅读全文
posted @ 2020-09-15 14:34 吴振照 阅读(9) 评论(0) 推荐(0) 编辑
摘要:集群选举问题: Nacos支持集群模式,很显然。而一旦涉及到集群,就涉及到主从,那么nacos是一种什么样的机制来实现的集群呢? Nacos的集群类似于zookeeper, 它分为leader角色和follower角色, 那么从这个角色的名字可以看出来,这个集群存在选举的机制。 因为如果自己不具备选 阅读全文
posted @ 2020-09-09 20:20 吴振照 阅读(26) 评论(0) 推荐(0) 编辑
摘要:继 Nacos服务注册原理 后,我们来看一下Nacos 是怎么实现服务的消费的。 服务注册成功之后,消费者就可以从nacos server中获取到服务提供者的地址,然后进行服务的调用。在服务消费中,有一个核心的类 NacosDiscoveryClient 来负责和nacos交互,去获得服务提供者的地 阅读全文
posted @ 2020-09-07 10:36 吴振照 阅读(38) 评论(0) 推荐(0) 编辑
摘要:Nacos 服务注册需要具备的能力: 服务提供者把自己的协议地址注册到Nacos server 服务消费者需要从Nacos Server上去查询服务提供者的地址(根据服务名称) Nacos Server需要感知到服务提供者的上下线的变化 服务消费者需要动态感知到Nacos Server端服务地址的变 阅读全文
posted @ 2020-09-07 10:35 吴振照 阅读(44) 评论(0) 推荐(0) 编辑
摘要:分片策略详解 : https://shardingsphere.apache.org/document/current/cn/features/sharding/concept/sharding/ Sharding-JDBC 中的分片策略有两个维度:分库(数据源分片)策略和分表策略。 分库策略表示数 阅读全文
posted @ 2020-08-11 10:25 吴振照 阅读(144) 评论(0) 推荐(0) 编辑
摘要:在分布式服务中,要实现数据源得选择有如下相关方案 DAO:继承 AbstractRoutingDataSource 类,实现对应的切换数据源的方法,结合自定义注解 + 切面实现动态数据源切换。 ORM:MyBatis 插件进行数据源切换 JDBC:Sharding-JDBC 基于客户端的分库分表方案 阅读全文
posted @ 2020-08-11 10:22 吴振照 阅读(35) 评论(0) 推荐(0) 编辑
摘要:有许多逻辑关系并不是简单的线性关系,在实际场景中,常常存在着一对多,甚至是多对多的情况。其中树和图就是典型的非线性数据结构,我们首先讲一讲树的知识。 什么是树呢? 在现实生活中有很多体现树的逻辑的例子。例如企业里的职级关系,就是一个“树”。 除人与人之间的关系之外,许多抽象的东西也可以成为一个“树” 阅读全文
posted @ 2020-07-24 15:05 吴振照 阅读(38) 评论(0) 推荐(0) 编辑
摘要:什么是数组? 数组对应的英文是array,是有限个相同类型的变量所组成的有序集合,数组中的每一个变量被称为元素。数组是最为简单、最为常用的数据结构。以整型数组为例,数组的存储形式如下图所示。 正如军队里的士兵存在编号一样,数组中的每一个元素也有着自己的下标,只不过这个下标从0开始,一直到数组长度-1 阅读全文
posted @ 2020-07-24 10:05 吴振照 阅读(23) 评论(0) 推荐(0) 编辑
摘要:什么是算法? 算法,对应的英文单词是algorithm,这是一个很古老的概念,最早来自数学领域。在数学领域里,算法是用于解决某一类问题的公式和思想。 计算机科学领域的算法,它的本质是一系列程序指令,用于解决特定的运算和逻辑问题。从宏观上来看,数学领域的算法和计算机领域的算法有很多相通之处。算法有简单 阅读全文
posted @ 2020-07-23 20:41 吴振照 阅读(23) 评论(0) 推荐(0) 编辑
摘要:私服是一种私有服务器,是在局域网中搭建的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建,私服搭建成功之后,当maven需要下载构件时,直接请求私服。私服上存在则下载到本地仓库,不存在才请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载,可以减少重复网络流量下载问题。 目前搭建 mav 阅读全文
posted @ 2020-07-16 14:22 吴振照 阅读(134) 评论(0) 推荐(0) 编辑
摘要:Archetype 是一个 Maven 项目模板工具包。原型被定义为原始模式或模型,从中创建所有其他相同类型的东西。这些名称适合我们尝试提供一个系统,该系统提供生成Maven项目的一致方法。Archetype 将帮助作者为用户创建 Maven 项目模板,并为用户提供生成这些项目模板的参数化版本的方法 阅读全文
posted @ 2020-07-16 11:05 吴振照 阅读(49) 评论(0) 推荐(0) 编辑
摘要:Maven 是一个系统管理框架或体系,专注管理构建的生命周期和各个阶段。真正工作的是绑定到各个阶段的 Maven 插件。每个插件具有一个或一个以上的目标,可以将这些插件的目标绑定到 Maven 生命周期的各个阶段中,或直接从命令行运行这些插件的目标。用户可以从 Apache 和其他的参考 Maven 阅读全文
posted @ 2020-07-15 19:19 吴振照 阅读(145) 评论(0) 推荐(0) 编辑
摘要:认识 Elastic-Job: 任务调度高级需求,Quartz 的不足: 作业只能通过 DB 抢占随机负载,无法协调 任务不能分片——单个任务数据太多了跑不完,消耗线程,负载不均 作业日志可视化监控、统计 发展历史: 官网:http:://elasticjob.io/docs/elastic-job 阅读全文
posted @ 2020-07-14 15:49 吴振照 阅读(760) 评论(0) 推荐(0) 编辑