- 博客(12)
- 收藏
- 关注
原创 mysql 使用order by存在的问题与优化思考
前言:在很多实际业务中,往往需要涉及分页和排序,还存在where和order by一起使用的场景。开发人员往往没有关心mysql背后的逻辑,导致这部分查询在数据量大的情况下,存在查询缓慢的问题,即使部分开发针对这部分查询建立了索引,但是索引使用不恰当,也会带来额外的IO开销。当然,在业务体量不大的情况下,“乱用” ordey by,where, 分页问题不大。但是,个人觉得,事情应该尽可能做到极致,懂背后的逻辑才有意思。一 limit分页limit大数据下分页慢的本质:limit语句的查询时间与
2022-04-06 22:08:20
6101
原创 AQS源码解析---独占锁释放
在梳理清楚独占锁获取后,独占锁的释放就相对简单了。锁的释放不涉及非公平,公平的说法,逻辑都是一样的。一 release在demo代码中打断点,进入到unlock方法:图 1.1进入到release方法后,整个核心的逻辑就是tryRelease方法和unparkSuccessor方法,先来分析tryRelease方法。图 1.2二 tryRelease 先声明下,在执行tryRelease的时候设置stat...
2022-03-13 12:03:40
575
原创 AQS源码解析---独占锁获取
一 简介AQS(AbstractQueuedSynchronizer)是java并发工具的基础,底层很多实现都采用了CAS乐观锁的方式,在锁获取冲突时,通过自旋重试来轻量的获取锁(synchronized的可重入锁、轻量级锁和重量级锁也有CAS操作,我理解目的都是尽可能的减少获取锁带来的上下文开销)。 AQS是一个抽象类,但是没有抽象方法。这样子类可以根据自己的需要实现对象的方法,而不用实现所有的方法,未实现的方法会默认抛出UnsupportedOperationException异常。..
2022-03-05 17:33:53
596
原创 Netty源码初探---服务端启动源码简析
为了加深对netty的理解,主要对netty的主要源码进行了debug分析,有些细节没去深究,主要目的是通过源码流程加深理解。一、Netty模型简介netty的模型如图1.1所示:图1.1 netty模型对图1.1进行一个简要说明:1) BossGroup 负责接收客户端的连接, WorkerGroup 负责网络的读写,两者的类型均为 NioEventLoopGroup2) NioEventLoopGroup 相当于一个事件循环组, 包含多个NioEventLoop事件循环..
2022-02-20 15:22:57
455
原创 Ribbon负载均衡轮询、随机算法源码初探
一 简介Ribbon作为spring cloud中常用作为负载均衡的组件。为了保证业务的高可用性,往往都会部署采用集群式的部署(横向扩展)来提供业务服务(一般都是无状态),为了将流量均衡的打到服务器上,或者根据机器的负载程度将流量分布到合适的机器上,往往需要引入负载均衡组件来管理。负载均衡分为集中式负载均衡和进程内负载均衡:集中式负载均衡即在服务的消费方和提供方之间使用独立的负载均衡设施,如nginx。通过负载均衡设施将访问请求通过某种负载均衡策略将流量转发至服务的提供方。进程内负载均衡是将
2022-01-16 15:48:05
742
原创 微服务架构中的进程间通信——基于同步RPI的进程间通信机制学习总结
使用远程过程调用(RPI)的进程间通信机制时,客户端向服务器发送请求,服务端处理请求并返回响应。远程过程调用的通信原理如图1所示:图1 RPI调用原理客户端的业务逻辑通过调用代理接口(通常由远程过程调用代理适配器类实现)向服务端发出请求,有远程过程调用服务器适配器类来处理请求。该适配器类通过接口调用服务的业务逻辑,并通过远程过程调用代理将结果返回给客户端。注:代理接口通常封装了底层的通信协议常用的RPI通信方式有REST和RCP一 RESTREST是一种使用HTTP协议的进程间通信机
2021-12-30 22:35:14
708
原创 限界上下文简析
一 基本概念核心域:整个业务领域的一部分,是促成业务领域的主要因素,一个产品要有竞争优势需要在核心域上胜人一筹支撑子域:通常在开发中,我们会创建或购买某个限界上下文来支撑我们的业务,如果这样的限界上下文对应业务的某些重要但非核心方面,这便是一个支撑子域通用子域:如果一个子域被用于业务整个系统,那么它便是一个通用子域问题空间:是领域的一部分,在问题空间中,需要思考的是业务所面临的调整。对问题空间的开发将产生一个新的核心域。对问题空间的评估应该同时考虑已有子域和额外所需子域,因此问题空间是核心.
2021-12-23 22:53:55
3747
1
原创 nginx master-worker工作模式简析
一 master-workernginx采用的是多进程的工作模式,在nginx启动后,会有一个master进程和多个互相独立的worker进程。master进程负责接收外部信号,然后通知各个worker进程有信号到了,每个worker进程通过抢占式的方式来处理这个连接。同时,master进程能够监控每个worker进程的状态,当worker进程出现异常或退出后,master进程会fork新的worker进程。nginx的master-worker工作模式如图1所示:图1 master-wor..
2021-12-19 17:18:05
2637
原创 Zookeeper选举整体流程源码解析
一 Zookeeper选举流程概述 Zookeeper选举机制分为两种:第一次启动的时候和非第一次启动的时候。假设有5个节点,如图1.1所示:图1.1 ZK集群1.1 第一次启动 (1)服务器1启动,发起选举。服务器1投自己一票,此时服务器1有一票,未超过半数以上票数,选择无法完成,服务器保持状态为LOOKING; (2)服务器2启动,再次发起选举。服务器1和服务器2分半先投给自己1票,服务器1和服务器2会通信,此时服务器1发现服务器2的myid比自己大,...
2021-09-12 19:52:44
846
1
原创 Zookeeper服务端源码解析
目录一 服务端入口二 服务端初始化——参数解析三 服务端初始化——过期快照删除四 服务端初始化——通信初始化一 服务端入口 如何找到入口函数呢?可以从启动脚本入手,ZK的启动命令是 zkServer.sh start,因此打开该脚本一探究竟。哭了,这个脚本还挺长。。。。。,如何快速找到入口函数了?启动脚本后面跟了一个start参数,因此在脚本中搜索关键字可以快速定位到入口函数,如图1.1所示:图1.1 启动脚本局部 再定位到java的启动命令,可以发现........
2021-09-09 00:00:47
536
原创 微服务架构设计模式学习笔记——六边形架构
一 软件架构的4+1模型先上图,软件架构的4+1模型如图1.1所示 图1.1 4+1模型注:上图中的元素一词来源于软件架构的定义 计算机系统的软件架构是构建这个系统所需要的一组架构,包括软件元素、它们之间的关系以及两者的属性 -----Bass等著《Documenting Software Architectures:Views and Beyond》每个视图的目的如下: 逻...
2021-09-03 21:47:19
5108
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人