- 博客(265)
- 收藏
- 关注

原创 浅谈Netty中ServerBootstrap服务端源码(含bind全流程)
文章目录一、梳理Java中NIO代码二、Netty服务端代码1、new NioEventLoopGroup()2、group3、channel4、NioServerSocketChannel.class5、childHandler6、bind 一、梳理Java中NIO代码Java中的NIO其本质是网络层面定义中的多路复用IO模型(一定要和NIO模型区分开)。NIO代码主要分为下列几步:初始ServerSocketChannel初始化Selector,完成Selector和Channel的绑
2022-03-27 17:07:41
2064

原创 请不要再说NIO和多路复用IO是同一个东西了(内含BIO、NIO、多路复用、Netty、AIO案例测试代码)
文章目录一、写在最前面1、误区2、IO模型分类3、概念再梳理(重点)二、BIO(Blocking IO)1、客户端2、服务端3、效果展示4、总结三、NIO(NonBlocking IO)1、客户端2、服务端3、效果展示4、总结四、多路复用(Multiplexing)1、客户端2、服务端3、效果展示4、总结五、Netty(基于多路复用IO)1、客户端2、服务端3、效果展示4、总结六、AIO(Asynchronous IO)1、客户端2、服务端3、效果展示4、总结一、写在最前面1、误区在我阅读了网上很多关
2022-03-24 23:41:58
4322
11

原创 浅谈Tomcat的启动流程(源码级别)
文章目录一、启动入口1、startup.sh2、catalina.sh二、基础组件概念梳理1、整体架构2、LifecycleBase抽象类3、实现了LifecycleBase抽象类的子类三、tomcat初始化(init)1、tomcat自定义类加载器四、tomcat加载(load)1、createStartDigester(第2步)1)抽象指定的层级关系2)addObjectCreate3)addRuleSet4)addRule2、getServer().init(第5步)1)JMX2)globalNami
2022-01-23 15:37:29
6583
2
原创 SpringBoot Actuator
SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变 量、日志信息、线程信息等。
2025-03-05 23:34:25
1232
原创 ByteBuddy
ByteBuddy是基于ASM(ow2.io)实现的字节码操作类库。比起ASM,ByteBuddy的API更加简单易用。开发者无需了解知识,也可通过ByteBuddy完成字节码编辑。ByteBuddy使用java5实现,并且支持生成JDK6及以上版本的字节码(由于jdk6和jdk7使用未加密的HTTP类库, 作者建议至少使用jdk8版本)和其他字节码操作类库一样,ByteBuddy支持生成类和修改现存类。
2025-03-02 23:08:26
977
原创 再谈SpringCloud Gateway源码
之前有阅读过一次SpringCloud Gateway的源码,不过那时更多的是浮于表面,走了一遍流程。直到现在工作中真的遇到了基于SpringCloud Gateway的业务开发,才发现源码中很多机制还是不熟悉,于时又重新学习了一遍源码,并做此记录
2025-02-16 22:39:39
1370
原创 Spring WebFlux
我们不难发现整个响应式编程和传统的ServletAPI属于两套完全不同但是又并行的技术栈,所以如果老项目想要改造为响应式编程,项目改造的成本很大
2025-01-19 21:51:52
807
原创 Reactive Streams&Reactor Core
传统的命令式编程在面对当前需求时会有一些限制,比如,在应用负载较高时,应用需要有更高的可用性,并提供低的延迟时间。1)资源消耗大使用Servlet开发的单体应用,是基于传统的ThreadperRequest模型。当服务部署到Tomcat后,Tomcat有线程池,每个请求交给线程池中的一个线程来执行,如果执行过程中包括访问数据库,或者包括读取文件,则在调用数据库时或读取文件时,请求线程是阻塞的,即使是阻塞线程也是占用资源的,典型的每个线程要使用1MB的内存。
2025-01-18 23:42:03
1423
原创 浅谈分布式共识算法
共识算法:在分布式系统中,如何让集群的每个成员都认同某个值(提案指令),“一致”是要求每个成员的数据完全相同;而“共识”并不要求数据相同,只要求从任意成员上获取的值是相同的即可。Paxos是一个具有高度容错性的共识算法,它的容错性来源于只需要多数派的正常响应。达成有效共识的关键在于,提案指令直到第二阶段才会被真正提出。Paxos分为两个阶段,即Prepare阶段和Accept阶段,如果在两阶段都获得多数派的支持,则视为提案通过。
2025-01-04 23:37:35
1255
原创 献给自己技术成长的第五年
六月底,我离开了我职业生涯的第一站——杭州,那一刻我切实的感受到内心对这座城市是有留恋的。但就像歌词里说的——无名的人啊,车来了,太多牵挂就别回头。无名的人啊,车开啦,往前吧,带着你的梦。所以,我走了,带着我的梦。
2024-12-30 23:05:32
870
原创 分布式数据库(二)
控制广播消息的总顺序收集并保存全局状态接收消息,并在节点之间传播和同步它们进行系统重置,一般是在发生故障后、初始化期间,或重要系统状态更新时操作初始化时触发选举,称为首次领导选举当选举出来的领导崩溃不可用时,也会再次出发领导选举安全性:选举必须产生一个领导活跃性:选举必须有结果Bully算法ZABRAFT。
2024-12-08 16:55:51
712
原创 分布式数据库(一)
像Google Spanner和TiDB这样的Distributed SQL数据库崛起,NewSQL数据库的地位收到了进一步的挑战NewSQL更像是用户侧的狂欢,它可以解决一类问题,但并不完备,需要小心评估和使用,Distributed SQL数据库使用的是特殊的底层存储引擎,来构建水平可伸缩的数据库。一致且容忍分区的系统,更倾向于减少服务时间,而不是将不一致的数据提供出去,一些面相交易场景构建的NewSQL数据库,如TiDB、PolarDB,倾向于这种策略,会生成自己的A,即可用性很高。
2024-12-08 16:40:55
1144
原创 《亿级流量系统架构设计与实战》第十三章 IM服务
通俗地说,所谓的IM就是聊天。实时投递单聊消息和群聊消息消息撤回消息回执消息勿扰准确性消息不可丢失实时性有序性消息:用户发出的任何内容用户状态:在线、离线、挂起设备/终端:用户使用IM的客户端,通常包括移动端和Web端单聊:两个用户一对一聊天的模式群聊:多个用户聊天的模式绘画:描述用户通过聊天建立的关联关系。
2024-08-24 20:40:44
1667
1
原创 《亿级流量系统架构设计与实战》第十二章 评论服务
增加社交互动促进用户的参与和分享促进用户生成内容增加社交产品的流量发布评论删除评论拉取内容评论列表拉取用户评论列表运营评论评论模式:单级评论模式二级评论模式盖楼评论模式。
2024-08-24 19:11:37
1721
原创 《亿级流量系统架构设计与实战》第十一章 Timeline Feed服务
Feed 流的功能在当今的互联网应用和网络社交平台中非常重要,它是一种以时间线为基础的信息流展示形式,把用户感兴趣的内容呈现在用户的Feed页面上。如果你使用过一些互联网应用就会发现,很多互联网应用的主页都是Feed页面,它们把Feed流当作自己的“门面”。Feed 流在内容聚合维度上包括但不限于如下几种形式。
2024-08-18 22:26:05
1137
原创 《亿级流量系统架构设计与实战》第十章 用户关系服务
任何注重用户互动的互联网应用,都会将用户之间的关注功能作为产品的重要功能之一,因此它允许用户订阅其他用户的动态,以便获取用户的更新和动态。促进社交互动个性化推荐增加用户粘性。
2024-08-18 22:20:52
1111
原创 《亿级流量系统架构设计与实战》第九章 排行榜服务
排行榜场景:游戏排行榜、商品排行榜、视频排行榜、社交排行榜排行榜特点:曝光量大、竞争激烈、实时变化、周期滚动使用关系型数据库存储会遇到性能瓶颈、磁盘IO问题,所以排行榜的实现不太适合关系型数据库。可以使用Redis的ZSET数据结构。ZSET是一种有序集合形式,该集合由Member组成,每个Member都有一个Score(积分),集合会按照Score自动排序。所以,目前Redis的ZSET便成为实现排行榜的首选。
2024-08-17 10:50:53
1459
原创 《亿级流量系统架构设计与实战》第八章 通用计数器
1)用户发布的每个作品,有点费数、分享数、评论数、转发数、收藏数;2)用户主页,有关注数、粉丝数、作品数、热度等;3)评论列表中的每条评论,有点费数、点踩数。
2024-08-17 10:25:19
1283
原创 《亿级流量系统架构设计与实战》第七章 内容发布系统
内容发布系统旨在管理从用户发布内容到内容为大众所见的全生命周期流程,包括新建内容、修改内容、内容审校、内容分发、内容下架等。可以说,内容发布系统是面向用户的应用的核心功能性系统之一。内容发布系统并不是一个简单地进行内容创建与数据存储的系统,其中有很多的业务细节与技术细节需要考虑。这里先抛出如下几个实际问题:1. 内容的表现形式可能足短文字、长文字、图片、音频、视频,也可能是这些表现形式的组合,我们应该怎样合理地存储内容?2. 用户发布的内容可能涉及反动、血腥、色情等问题,我们应该怎样迅速检测并屏蔽这些
2024-08-11 12:17:59
1308
原创 《亿级流量系统架构设计与实战》第六章 海量推送系统
在HTML5下定义了一种全新的通信协议:WebSokcet,它是一种基于TCP的全双工通信协议,允许在客户端与服务端之间建立全双工通信连接,这样客户端和服务端都可以主动将数据推送到另一端由于WebSocket协议很适合消息推送的场景,所以我们可以在客户端开发一个基于WebSocket协议的长连接通信SDK,客户端通过调用这个SDK来串门用于接收服务器推送消息的通道
2024-08-11 12:06:57
990
原创 《亿级流量系统架构设计与实战》第五章 用户登陆服务
OAuth2标准:开放的授权标准,允许用户授权乙方应用访问他们存储在第三方平台的信息,而不需要将第三方平台的用户名和密码提供给乙方应用。用户在登录完成后,服务端会基于用户身份信息加密生成一个安全的令牌返回给客户端,客户端的后续请求在请求头中携带此令牌给服务端,服务端通过验证令牌的合法性来验证用户是否已经登录。当用户输入密码登陆时,先对输入密码进行加密,然后将加密的密码与数据库中存储的值进行比较,如果一致则认为密码正确。成功则解析用户,并回写长令牌用户信息,不成功则表示登录过气,需要重新登录。
2024-08-10 17:23:25
764
原创 《亿级流量系统架构设计与实战》第一章 大型互联网公司的基础架构
根域名服务器是全球互联网的中枢神经,它负责互联网顶级域名的解析,即它学握着全部顶级城名的名称与IP地址的映射关系。每个域名对应的权威域名服务器都可能不同,每个权威域名服务器仅可解析它负责的域名,比如负责google.com 域名的权威域名服务器无法解析城名apple.com。Nginx 是一种自由的、开源的、高性能的 HTTP 服务器和反向代理服务器,同时也是IMAP、POP3、SMTP 的代理服务器。权威域名服务器负责对特定的域名进行解析,它管理顶级域名下的二级域名、三级域名、四级城名等的服务器。
2024-08-10 17:16:35
1355
3
原创 《亿级流量系统架构设计与实战》第三章 通用的服务可用性治理手段
由于网络原因或服务设计问题,微服务一般很难保证100%对外可用。如A->B->C->D,D因为请求量突增或设计不合理导致宕机,导致C服务请求大量阻塞,最终拖垮B和A。幂等性 = 请求接口携带唯一ID + 下游接口具备幂等校验策略。内容总结自《亿级流量系统架构设计与实战》接口必备幂等特性(读接口天然具备幂等)熔断器(在业务上游)三种状态。
2024-08-04 22:01:10
859
1
原创 《亿级流量系统架构设计与实战》第二章 通用的高并发架构设计
高性能(PCT99):响应时间PCTn统计方式,表示请求响应时间按从小到大排序后,第n分位的响应时间。即如果100个请求,从小打大排序后,第99分位的响应时间是100ms,则PCT99=100ms。从经验数据来看,平均响应时间200ms,且PCT99=1s的高并发系统基本能够保证高性能的要求;如果请求的响应时间在200ms以内,用户不会感受到延迟;如果请求响应的时间超过1s,用户会明显感受到延迟高可用性(服务几个9)
2024-08-04 21:51:19
1621
1
原创 浅谈Spring体系的理解
本文不涉及细节,主要回答两个问题: 1. Spring家族技术生态全景图有哪些 2. Spring Framework架构下每个模块有哪些东西,以及部分模块之间的关联关系
2024-03-30 10:26:35
520
原创 浅谈RPC体系的理解
我们可以明确,类比于其他RPC框架,它们面对的问题、以及要解决的问题都是相同的,只不过不同的框架相关的实现有差异,仅此而已。同时我们不难发现,不同RPC框架经常说的性能问题,其本质也就是①Message Protocol(消息管理层)、②Transfer/Network Protocol(传输管理层)、③描述后的URL(描述服务的协议方式)、④Registration Center(注册中心)之间的差异
2024-03-17 23:54:37
1163
原创 浅谈JUC体系的理解
当我们在谈一个技术的时候,不要过多的陷入技术本身,我们需要明白技术是服务业务的。今天的我们需要以一个更为广阔的视角去看待技术,多去看看、思考那些技术细节以外的东西。JUC同理。这部分涉及知识点相对较多,属于是八股文的重灾区。仔细想来,这已经是自己第三次学习JUC知识了,第一次学习如何使用,第二次学习相关八股知识点,那这一次自己要学什么?换句话说就是,这次学习自己能收获什么?常年行走在B端产品里,老实说,使用并发工具的频率并不高。
2024-03-10 17:40:11
892
1
原创 技术方案——参考模板
开发中常见案例就是,开发任务进行到一半,发现之前技术方案中的做法有问题,于是推翻重来,这是我们都不愿意看到的。当然根据我在实际工作中的观察,如果需求影响面很大,基本都无法难盘点到每一个影响点,那问题就变成了如何尽可能多的盘点。本文亦在分享一个基础版的技术方案模板,让大家在编写技术方案时,能够在一个相对完整的方案流程中,根据自身团队及业务需求的特性,快速上手,提高编写技术方案效率,最终形成自己编写技术方案的方法论
2024-01-21 16:58:09
4407
原创 二分查找算法
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功
2024-01-14 22:51:07
521
原创 递归、非递归、宽度遍历二叉树
本文只要记录使用三种不同的二叉树遍历形式。递归遍历、非递归遍历对二叉树分别进行前序遍历、中序遍历、后序遍历,以及利用队列完成对二叉树逐层的宽度遍历
2024-01-07 17:45:53
462
原创 献给自己技术成长的第四年
回顾过去的一年,突然意识到这一年在技术上并没有太多的突破,那些让自己有感触的成长都集中在了思考工作、汇报工作上。不知道是加班太多,还是危机感不足,自己这一年的状态极其不稳定,最终导致技术的成长十分缓慢。但好歹也是一年时间,相比于一年前,自己还是有很多变化,只是变化没有前些年那么大罢了不断学习方法论。
2024-01-02 00:10:11
910
原创 浅谈Dubbo核心概念及架构流程
Dubbo源码主体流程可以总结为:服务提供者将编写的业务Service服务,按照某种协议序列化到注册中心,标记当前服务的网络资源所在的位置;服务消费者根据指定的key(version+interfaceName+group)去注册中心中找到对应的序列化数据,再将数据反序列化为服务消费者能够识别的格式,最终对目标资源发起调用。以此达到我们调用远程服务变成跟调用本地服务一样。整体功能完成的基础上,Dubbo在设计上对扩展开放,一些比较重点的节点都能够进行扩展。
2023-12-24 17:58:46
1516
原创 消息中心常见解决方案分享
看了大部分的消息中心解决方案,发现大家的中心思想都大差不差,区别基本都是在符合自身业务场景的做了一些定制化处理。本文为我对消息中心基本骨架的知识梳理,亦在帮助大家对消息中心设计有一个基本的理解。
2023-11-13 00:24:15
514
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人