[02] 分布式与高并发
文章平均质量分 93
涉及并发编程, 消息中间件, 分表分库, 任务调度, Redis, ZooKeeper, Netty, Dubbo
安全新司机
这个作者很懒,什么都没留下…
展开
-
[02][08][01] Dubbo 基础
文章目录1. Dubbo 的整体架构2. Dubbo 的使用2.1 dubbo-api2.2 dubbo-provider2.3 dubbo-consumer2.4 引入 Dubbo 发布服务2.5 服务消费者引入 Dubbo2.6 无注册中心下指定服务提供端的 url3. 引入注册中心3.1 集成 Zookeeper 作为服务注册中心3.2 本地缓存 dubbo 配置3.3 多注册中心支持3.4 将服务注册到不同的注册中心3.5 配置管理3.5.1 配置组件3.5.2 配置来源3.2.3 覆盖关系4. A原创 2022-05-25 18:00:00 · 114 阅读 · 0 评论 -
[02][07][04] Netty 源码学习
文章目录1. BootStrap1.1 客户端 BootStrap1.2 服务端 ServerBootStrap2. EventLoopGroup2.1 EventLoopGroup 源码分析2.2 bossGroup 与 workerGroup3. Channel3.1 Channel 简介3.2 客户端 NioSocketChannel3.3 服务端 NioServerSocktChannel4. ChannelHandler4.1 客户端 ChannelHandler4.2 服务端 ChannelHa原创 2022-05-24 19:57:41 · 222 阅读 · 0 评论 -
[02][05][01] Redis 基础篇
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VpI2tQvX-1649748794029)(https://huaweirookie.oss-cn-shenzhen.aliyuncs.com/20200721152553.jpg?)]原创 2022-04-20 19:56:57 · 594 阅读 · 0 评论 -
[02][06][02] SPI 机制
文章目录1. 基本概念2. 使用场景3. 使用要求4. JDK SPI 实现5. Spring SPI 实现1. 基本概念SPI (Service Provider Interface), 是 Java 提供的一套用来被第三方实现或者扩展的 API, 它可以用来启用框架扩展和替换组件Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制2. 使用场景数据库驱动日志 SLF4JSpring 使用 SPIDubbo 使用 SPI, 但对原生 SPI 做了封装,原创 2022-05-12 19:52:46 · 180 阅读 · 0 评论 -
[02][06][01] ZooKeeper 基础
文章目录1. ZooKeeper 基本概率1.1 服务架构1.2 分层命名空间1.3 简单的 API2. 结点状态信息 Stat3. watcher 机制3.1 一次性监听3.2 长久监听4. Session 会话机制5. ZooKeeper 权限控制 (ACL)5.1 Scheme 权限模式5.2 Id 授权对象5.3 Permission 权限类型6. 自己实现配置中心6.1 读取本地自定义配置6.2 监听 ZooKeeper 动态加载配置7. Curator 框架7.1 Curator 实现分布式锁7原创 2022-04-20 19:52:48 · 2320 阅读 · 0 评论 -
[02][06][03] ZooKeeper 架构设计与 Leader 选举
文章目录1. 集群1.1 Leader1.2 Follower1.3 Observer1.4 节点之间的数据同步1.5 2PC1.5.1 提交事务请求 (阶段 1)1.5.2 执行事务提交 (阶段 2)2. ZooKeeper 的一致性2.1 顺序一致性模型2.2 Single System Image 的理解3. ZooKeeper 数据同步流程3.1 ZAB 协议3.2 消息广播的实现原理3.3 崩溃恢复的实现原理3.4 已经被处理的消息不能丢3.5 被丢弃的消息不能再次出现3.6 ZXID3.7 Zo原创 2022-04-20 20:02:30 · 2100 阅读 · 0 评论 -
[02][07][03] 基于 Netty 实现 RPC 框架
文章目录1. RPC 概述2. 手写 RPC 实现3.1 rpc api 模块3.2 rpc protocol 模块3.3 rpc provider 模块3.4 rpc registry 模块3.5 rpc consumer 模块1. RPC 概述Dubbo 官网中的一张图描述了项目架构的演进过程描述了每一种架构需要的具体配置和组织形态ORM: 当网站流量很小时, 只需一个应用, 将所有功能都部署在一起, 以减少部署节点和成本, 我们通常会采用单一应用架构. ORM 框架, 主要用于简化增删改查原创 2022-05-12 11:43:44 · 112 阅读 · 0 评论 -
[02][07][01] Netty 简介
文章目录1. IO 发展1.1 同步阻塞 IO(BIO)1.2 非阻塞 IO (NIO)1.3 多路复用机制1.4 异步 IO1.5 Reactor 模型1.5.1 多线程单 Reactor 模型1.5.2 多线程多 Reactor 模型2. Netty2.1 Netty 的生态介绍2.2 Netty 的基本使用2.2.1 创建 Netty Server 服务2.2.2 设置 Channel 类型2.2.3 NormalMessageHandler2.3 Netty 的整体工作机制2.3.1 网络通信层2.原创 2022-05-01 17:40:24 · 724 阅读 · 0 评论 -
[02][07][02] Netty 中的拆包粘包原理分析
文章目录1. ByteBuf 详解1.1 ByteBuf 的创建1.2 ByteBuf 的存储结构1.3 ByteBuf 的常用方法1.3.1 写入1.3.2 扩容1.3.3 读取1.4 ByteBuf 的零拷贝机制1.5 Unpooled1.6 内存释放2. 拆包和粘包问题3. 应用层定义通信协议3.1 消息长度固定3.2 特定分隔符3.3 消息长度+消息内容+分隔符4. Netty 的编解码器4.1 FixedLengthFrameDecoder 解码器4.2 DelimiterBasedFrameDe原创 2022-05-07 10:24:35 · 288 阅读 · 0 评论 -
[03][01][07] 阻塞队列、原子操作的原理分析
文章目录生产者消费者的实际使用阻塞队列的使用案例注册成功后增加积分改造之前的代码逻辑改造之后的逻辑阻塞队列的应用场景J.U.C 中的阻塞队列J.U.C 提供的阻塞队列阻塞队列的操作方法插入操作移除操作ArrayBlockingQueue 原理分析构造方法Add 方法offer 方法enqueueput 方法take 方法dequeue 方法itrs.elementDequeued()remove 方法原子操作类J.U.C 中的原子操作类AtomicInteger 原理分析getAndIncrementget原创 2021-05-19 10:23:41 · 60 阅读 · 0 评论 -
[03][01][04] ReentrantLock的底层原理分析
文章目录J.U.C 简介LockLock 简介Lock 的实现Lock 的类关系图ReentrantLock 重入锁重入锁的设计目的ReentrantLock 的使用案例ReentrantReadWriteLockReentrantLock 的实现原理AQS 是什么AQS 的两种功能AQS 的内部实现Node 的组成释放锁以及添加线程对于队列的变化ReentrantLock 的源码分析NofairSync.lockCAS 的实现原理Unsafe 类stateOffsetcompareAndSwapIntAQ原创 2021-05-19 10:31:15 · 193 阅读 · 0 评论 -
[02][01][02] 多线程的基本原理及挑战
文章目录由一个问题引发的思考多线程对于共享变量访问带来的安全性问题思考如何保证线程并行的数据安全性synchronized 的基本认识synchronized 的基本语法synchronized 的应用思考锁是如何存储的对象在内存中的布局探究 Jvm 源码实现MarkWord为什么任何对象都可以实现锁synchronized 锁的升级偏向锁的基本原理偏向锁的获取和撤销逻辑偏向锁的撤销轻量级锁的基本原理轻量级锁的加锁和解锁逻辑自旋锁轻量级锁的解锁重量级锁的基本原理回顾线程的竞争机制偏向锁轻量级锁重量级锁Syn原创 2021-04-26 20:14:18 · 90 阅读 · 0 评论 -
[03][01][08] 线程池的实现原理分析
文章目录什么是线程池线程池的优势Java 中提供的线程池 API线程池的使用Java 中提供的线程池 ApiThreadpoolExecutornewFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutor线程池的实现原理分析线程池原理分析(FixedThreadPool)源码分析executectl 的作用状态转化addWorkerWorker 类说明addWorkerFailedrunWorker 方法processWorkerExitexecu原创 2021-05-19 10:23:07 · 97 阅读 · 0 评论 -
[03][01][05] 常见并发工具的基本原理分析
文章目录ConditionCondition 的基本使用Condition WaitCondition SignalCondition 源码分析condition.awaitaddConditionWaiter图解分析fullyRelease图解分析isOnSyncQueueCondition.signalCondition.doSignalAQS.transferForSignal图解分析被阻塞的线程唤醒后的逻辑checkInterruptWhileWaitingacquireQueuedreportIn原创 2021-05-19 10:30:55 · 72 阅读 · 0 评论 -
[03][01][06] ConcurrentHashMap 底层原理分析
文章目录ConcurrentHashMap 的初步使用及场景CHM 的使用api 使用ConcurrentHashMap 的源码分析JDK1.7 和 Jdk1.8 版本的变化put 方法第一阶段initTabletabAt图解分析put 方法第二阶段addCountCounterCells 解释fullAddCount 源码分析CounterCells 初始化图解transfer 扩容阶段resizeStamptransfer扩容过程图解sizeCtl 扩容退出机制数据迁移阶段的实现分析高低位原理分析为什么原创 2021-05-19 10:23:58 · 60 阅读 · 0 评论 -
[02][01][03] 线程安全性的原理分析
文章目录初步认识 Volatile一段代码引发的思考volatile 的作用volatile 关键字是如何保证可见性的?从硬件层面了解可见性的本质CPU 高速缓存什么叫缓存一致性呢总线锁和缓存锁缓存一致性协议总结可见性的本质MESI 优化带来的可见性问题CPU 层面的内存屏障JMM什么是 JMMJMM 是如何解决可见性有序性问题的JMM 如何解决顺序一致性问题重排序问题JMM 层面的内存屏障Happen-BeforeJMM 中有哪些方法建立 happen-before 规则程序顺序规则volatile 变量原创 2021-05-19 10:31:30 · 123 阅读 · 0 评论 -
[02][01][01] 并发编程基础
文章目录进程的概念线程的概念线程解决的问题线程的创建继承 Thread 类实现 Runnable 接口Callable/Future 带返回值的线程ThreadPool多线程的实际应用zookeeper 源码的异步责任链模式时序图代码实现线程的生命周期调试代码线程的启动线程的终止interrupt 方法Thread.interrupted其他的线程复位为什么要复位线程的终止原理InterruptedException资源信息进程的概念进程的本质是一个正在执行的程序,程序运行时系统会创建一个进程,并且给每原创 2021-04-26 20:12:25 · 57 阅读 · 0 评论 -
[03][01][10] macOS下载配置Hsdis 、JITWatch
文章目录HsdisHsdis是什么下载Hsdis配置Hsdis运行HsdisJITWatchJITWatch是什么下载JITWatch使用JITWatchHsdisHsdis是什么下载Hsdisgit clone https://github.com/liuzhengyang/hsdiscd hsdistar -zxvf binutils-2.26.tar.gzmake BINUTILS=binutils-2.26 ARCH=amd64配置Hsdissudo cp build/macos原创 2021-05-19 10:22:50 · 120 阅读 · 0 评论