自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(255)
  • 收藏
  • 关注

原创 浅谈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 1865

原创 请不要再说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 3410 10

原创 浅谈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 5887 2

原创 《亿级流量系统架构设计与实战》第十三章 IM服务

通俗地说,所谓的IM就是聊天。实时投递单聊消息和群聊消息消息撤回消息回执消息勿扰准确性消息不可丢失实时性有序性消息:用户发出的任何内容用户状态:在线、离线、挂起设备/终端:用户使用IM的客户端,通常包括移动端和Web端单聊:两个用户一对一聊天的模式群聊:多个用户聊天的模式绘画:描述用户通过聊天建立的关联关系。

2024-08-24 20:40:44 392

原创 《亿级流量系统架构设计与实战》第十二章 评论服务

增加社交互动促进用户的参与和分享促进用户生成内容增加社交产品的流量发布评论删除评论拉取内容评论列表拉取用户评论列表运营评论评论模式:单级评论模式二级评论模式盖楼评论模式。

2024-08-24 19:11:37 567

原创 《亿级流量系统架构设计与实战》第十一章 Timeline Feed服务

Feed 流的功能在当今的互联网应用和网络社交平台中非常重要,它是一种以时间线为基础的信息流展示形式,把用户感兴趣的内容呈现在用户的Feed页面上。如果你使用过一些互联网应用就会发现,很多互联网应用的主页都是Feed页面,它们把Feed流当作自己的“门面”。Feed 流在内容聚合维度上包括但不限于如下几种形式。

2024-08-18 22:26:05 863

原创 《亿级流量系统架构设计与实战》第十章 用户关系服务

任何注重用户互动的互联网应用,都会将用户之间的关注功能作为产品的重要功能之一,因此它允许用户订阅其他用户的动态,以便获取用户的更新和动态。促进社交互动个性化推荐增加用户粘性。

2024-08-18 22:20:52 850

原创 《亿级流量系统架构设计与实战》第九章 排行榜服务

排行榜场景:游戏排行榜、商品排行榜、视频排行榜、社交排行榜排行榜特点:曝光量大、竞争激烈、实时变化、周期滚动使用关系型数据库存储会遇到性能瓶颈、磁盘IO问题,所以排行榜的实现不太适合关系型数据库。可以使用Redis的ZSET数据结构。ZSET是一种有序集合形式,该集合由Member组成,每个Member都有一个Score(积分),集合会按照Score自动排序。所以,目前Redis的ZSET便成为实现排行榜的首选。

2024-08-17 10:50:53 1121

原创 《亿级流量系统架构设计与实战》第八章 通用计数器

1)用户发布的每个作品,有点费数、分享数、评论数、转发数、收藏数;2)用户主页,有关注数、粉丝数、作品数、热度等;3)评论列表中的每条评论,有点费数、点踩数。

2024-08-17 10:25:19 1005

原创 《亿级流量系统架构设计与实战》第七章 内容发布系统

内容发布系统旨在管理从用户发布内容到内容为大众所见的全生命周期流程,包括新建内容、修改内容、内容审校、内容分发、内容下架等。可以说,内容发布系统是面向用户的应用的核心功能性系统之一。内容发布系统并不是一个简单地进行内容创建与数据存储的系统,其中有很多的业务细节与技术细节需要考虑。这里先抛出如下几个实际问题:1. 内容的表现形式可能足短文字、长文字、图片、音频、视频,也可能是这些表现形式的组合,我们应该怎样合理地存储内容?2. 用户发布的内容可能涉及反动、血腥、色情等问题,我们应该怎样迅速检测并屏蔽这些

2024-08-11 12:17:59 1080

原创 《亿级流量系统架构设计与实战》第六章 海量推送系统

在HTML5下定义了一种全新的通信协议:WebSokcet,它是一种基于TCP的全双工通信协议,允许在客户端与服务端之间建立全双工通信连接,这样客户端和服务端都可以主动将数据推送到另一端由于WebSocket协议很适合消息推送的场景,所以我们可以在客户端开发一个基于WebSocket协议的长连接通信SDK,客户端通过调用这个SDK来串门用于接收服务器推送消息的通道

2024-08-11 12:06:57 779

原创 《亿级流量系统架构设计与实战》第五章 用户登陆服务

OAuth2标准:开放的授权标准,允许用户授权乙方应用访问他们存储在第三方平台的信息,而不需要将第三方平台的用户名和密码提供给乙方应用。用户在登录完成后,服务端会基于用户身份信息加密生成一个安全的令牌返回给客户端,客户端的后续请求在请求头中携带此令牌给服务端,服务端通过验证令牌的合法性来验证用户是否已经登录。当用户输入密码登陆时,先对输入密码进行加密,然后将加密的密码与数据库中存储的值进行比较,如果一致则认为密码正确。成功则解析用户,并回写长令牌用户信息,不成功则表示登录过气,需要重新登录。

2024-08-10 17:23:25 500

原创 《亿级流量系统架构设计与实战》第一章 大型互联网公司的基础架构

根域名服务器是全球互联网的中枢神经,它负责互联网顶级域名的解析,即它学握着全部顶级城名的名称与IP地址的映射关系。每个域名对应的权威域名服务器都可能不同,每个权威域名服务器仅可解析它负责的域名,比如负责google.com 域名的权威域名服务器无法解析城名apple.com。Nginx 是一种自由的、开源的、高性能的 HTTP 服务器和反向代理服务器,同时也是IMAP、POP3、SMTP 的代理服务器。权威域名服务器负责对特定的域名进行解析,它管理顶级域名下的二级域名、三级域名、四级城名等的服务器。

2024-08-10 17:16:35 865

原创 《亿级流量系统架构设计与实战》第三章 通用的服务可用性治理手段

由于网络原因或服务设计问题,微服务一般很难保证100%对外可用。如A->B->C->D,D因为请求量突增或设计不合理导致宕机,导致C服务请求大量阻塞,最终拖垮B和A。幂等性 = 请求接口携带唯一ID + 下游接口具备幂等校验策略。内容总结自《亿级流量系统架构设计与实战》接口必备幂等特性(读接口天然具备幂等)熔断器(在业务上游)三种状态。

2024-08-04 22:01:10 659

原创 《亿级流量系统架构设计与实战》第二章 通用的高并发架构设计

高性能(PCT99):响应时间PCTn统计方式,表示请求响应时间按从小到大排序后,第n分位的响应时间。即如果100个请求,从小打大排序后,第99分位的响应时间是100ms,则PCT99=100ms。从经验数据来看,平均响应时间200ms,且PCT99=1s的高并发系统基本能够保证高性能的要求;如果请求的响应时间在200ms以内,用户不会感受到延迟;如果请求响应的时间超过1s,用户会明显感受到延迟高可用性(服务几个9)

2024-08-04 21:51:19 1173

原创 工作常用Linux命令记录

工作常用Linux命令记录

2024-03-30 17:16:56 758

原创 浅谈Spring体系的理解

本文不涉及细节,主要回答两个问题: 1. Spring家族技术生态全景图有哪些 2. Spring Framework架构下每个模块有哪些东西,以及部分模块之间的关联关系

2024-03-30 10:26:35 453

原创 浅谈RPC体系的理解

我们可以明确,类比于其他RPC框架,它们面对的问题、以及要解决的问题都是相同的,只不过不同的框架相关的实现有差异,仅此而已。同时我们不难发现,不同RPC框架经常说的性能问题,其本质也就是①Message Protocol(消息管理层)、②Transfer/Network Protocol(传输管理层)、③描述后的URL(描述服务的协议方式)、④Registration Center(注册中心)之间的差异

2024-03-17 23:54:37 1073

原创 浅谈JUC体系的理解

当我们在谈一个技术的时候,不要过多的陷入技术本身,我们需要明白技术是服务业务的。今天的我们需要以一个更为广阔的视角去看待技术,多去看看、思考那些技术细节以外的东西。JUC同理。这部分涉及知识点相对较多,属于是八股文的重灾区。仔细想来,这已经是自己第三次学习JUC知识了,第一次学习如何使用,第二次学习相关八股知识点,那这一次自己要学什么?换句话说就是,这次学习自己能收获什么?常年行走在B端产品里,老实说,使用并发工具的频率并不高。

2024-03-10 17:40:11 774 1

原创 Leetcode 203 移除链表元素

Leetcode 203 移除链表元素

2024-01-29 23:44:26 438

原创 Leetcode 206 反转链表

LeetCode 206 反转链表

2024-01-29 21:59:24 441

原创 Leetcode 206 反转链表

LeetCode 206 反转链表

2024-01-28 22:00:25 500

原创 常见递归算法题目整理

内含阶乘、二分查找、反转字符串、斐波那契数列、汉诺塔、杨辉三角题目

2024-01-28 17:51:54 576

原创 技术方案——参考模板

开发中常见案例就是,开发任务进行到一半,发现之前技术方案中的做法有问题,于是推翻重来,这是我们都不愿意看到的。当然根据我在实际工作中的观察,如果需求影响面很大,基本都无法难盘点到每一个影响点,那问题就变成了如何尽可能多的盘点。本文亦在分享一个基础版的技术方案模板,让大家在编写技术方案时,能够在一个相对完整的方案流程中,根据自身团队及业务需求的特性,快速上手,提高编写技术方案效率,最终形成自己编写技术方案的方法论

2024-01-21 16:58:09 2005

原创 五种List集合的简单实现

本文是对不同形式List集合的增删改查实现,仅是对学习过程进行记录。

2024-01-21 15:35:31 474

原创 二分查找算法

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功

2024-01-14 22:51:07 487

原创 递归、非递归、宽度遍历二叉树

本文只要记录使用三种不同的二叉树遍历形式。递归遍历、非递归遍历对二叉树分别进行前序遍历、中序遍历、后序遍历,以及利用队列完成对二叉树逐层的宽度遍历

2024-01-07 17:45:53 425

原创 献给自己技术成长的第四年

回顾过去的一年,突然意识到这一年在技术上并没有太多的突破,那些让自己有感触的成长都集中在了思考工作、汇报工作上。不知道是加班太多,还是危机感不足,自己这一年的状态极其不稳定,最终导致技术的成长十分缓慢。但好歹也是一年时间,相比于一年前,自己还是有很多变化,只是变化没有前些年那么大罢了不断学习方法论。

2024-01-02 00:10:11 858

原创 浅谈Dubbo核心概念及架构流程

Dubbo源码主体流程可以总结为:服务提供者将编写的业务Service服务,按照某种协议序列化到注册中心,标记当前服务的网络资源所在的位置;服务消费者根据指定的key(version+interfaceName+group)去注册中心中找到对应的序列化数据,再将数据反序列化为服务消费者能够识别的格式,最终对目标资源发起调用。以此达到我们调用远程服务变成跟调用本地服务一样。整体功能完成的基础上,Dubbo在设计上对扩展开放,一些比较重点的节点都能够进行扩展。

2023-12-24 17:58:46 1452

原创 消息中心常见解决方案分享

看了大部分的消息中心解决方案,发现大家的中心思想都大差不差,区别基本都是在符合自身业务场景的做了一些定制化处理。本文为我对消息中心基本骨架的知识梳理,亦在帮助大家对消息中心设计有一个基本的理解。

2023-11-13 00:24:15 360

原创 软件架构的可维护性指标——代码圈复杂度

软件架构是软件开发和维护过程中的一个重要制品,是软件需求和设计、实现之间的桥梁。软件架构的开发和维护是基于架构软件软件生命周期中的重要环节,与之相关的步骤包括导出架构需求、架构开发、架构文档化、架构分析、架构实现和架构维护。软件架构的维护与演化密不可分,维护需要对软件架构的演化过程进行追踪和控制,以保障软件架构的演化过程能够满足需求(亦有说法将架构维护作为架构演化的一个部分)那么如何衡量软件架构的可维护性呢?官方给出了六个指标。

2023-11-12 17:48:14 412

原创 系统架构设计师考试——论文模板参考(900字)

本文以我参与的某公司xx项目为例,论述了xx(论文题目要求)。该项目的目标是xx(产品能力),实现xx(主要功能),包括xx(辅助功能)。在此项目中,我作为系统分析师及主要管理人员,主导了该项目的系统分 析和设计等工作。在项目系统的xx(点题),采用xx(题目技术点说明),实现了xx(技术点带来的价值),保证了业主方对于项目各项功能和质量指标的实现,项目最终取得了成功。

2023-09-03 18:48:02 1217

原创 《系统架构设计师教程》重点章节思维导图

内容来自《系统架构设计师教程》,筛选系统架构设计师考试中分值重点分布的章节,根据章节的内容整理出相关思维导图。

2023-08-12 18:27:47 1174

原创 《微服务架构设计模式》第十三章 微服务架构的重构策略

在迁移到微服务架构之前,确保你的软件交付问题是由于业务需求超出单体架构承载能力而导致的。在架构重构之前,你可以通过改进软件开发过程来加速交付。通过逐步开发一个绞杀者应用程序来迁移到微服务非常重要。绞杀者应用程序是一个新的应用程序,由围绕现有单体应用构建的微服务组成。你应该尽早并经常证明自己的价值,以确保业务团队支持迁移工作。将微服务引入架构的一个好方法是将新功能作为服务实现。这样做可以使你使用现代技术和开发过程快速轻松地开发功能。这是快速展示迁移到微服务价值的好方法。

2023-07-16 16:38:21 1388 2

原创 《微服务架构设计模式》第十二章 部署微服务应用

要在计算机上部署Restaurant Service,首先要安装必要的运行时环境,在本例中为JDK。如果它是WAR文件,则还需要安装Web容器,例如Apache Tomcat。配置完计算机后,将程序发布包复制到计算机并启动该服务。每个服务实例都作为JVM进程运行。理想情况下,你已经设置好部署流水线,它会自动将服务部署到生产环境。部署流水线构建可执行的JAR文件或WAR文件。然后,它调用生产环境的服务管理接口来部署新版本。

2023-07-16 15:17:53 584

原创 《微服务架构设计模式》第十一章 开发面向生产环境的微服务应用

身份验证:验证尝试访问应用程序的应用程序或人员(安全的术语叫主体)的身份。例如,应用程序通常会验证访问主体的凭据,例如用户的ID和密码,或应用程序的API密钥。访问授权:验证是否允许访问主体对指定数据完成请求的操作。应用程序通常使用基于角色的安全性和访问控制列表(ACL)的组合。基于角色的安全性为每个用户分配一个或多个角色,授予他们调用特定操作的权限。ACL授予用户或角色对特定业务对象或聚合执行操作的权限。审计:跟踪用户在应用中执行的所有操作,以便检测安全问题,帮助客户实现并强制执行合规性。

2023-07-16 12:11:39 443

原创 《微服务架构设计模式》第八章 外部API模式

其实就是抽一层,将前端的组合逻辑抽到统一的一层,这一层就是API Gateway层API Gateway负责请求路由、API组合和协议转换。来自外部客户端的所有API请求首先转到APl Gateway,后者将一些请求路由到相应的服务。API Gateway使用API组合模式处理其他请求,调用多个服务并聚合结果。它还可以在客户端友好的协议(如HTTP和WebSockets)与客户端不友好的协议之间进行转换。API组合:API Gateway通常不仅仅是简单地扮演反向代理的角色。

2023-07-16 10:55:34 493

原创 TaskExecutor和ExecutorService的简单整合

自己负责的项目想通过引入一个中间件,达到在业务场景维度的全链路日志监控。当接入相关中间件后,发现如果在业务中开启了多线程,链路日志就会缺失。当然,该中间件官方给出了解决办法,那就是使用中间件提供的工具类对线程池包装一下(TrackTraceHelper.wrappedExecutorService(executorService))就可以解决。当然这个问题确实解决了,但我们还存在以下几个问题:问题一:项目原本使用的线程池是Spring的ThreadPoolTaskExecutor,在其setTaskDe

2023-07-15 23:57:05 1160

原创 《微服务架构设计模式》第七章 在微服务架构中实现查询

这是最简单的方法,应尽可能使用。它的工作原理是让拥有数据的服务的客户端负责调用服务,并组合服务返回的查询结果,实现从多个服务检索数据的查询。它将持久化数据模型和使用数据的模块分为两部分:命令端和查询端。命令端模块和数据模型实现创建、更新和删除操作(缩写为CUD,例如:HTTP POST、PUT和DELETE)。查询端模块和数据模型实现查询(例如HTTP GET)。查询端通过订阅命令端发布的事件,使其数据模型与命令端数据模型保持同步。实现从多个服务检索数据的查询具有挑战性,因为每个服务的数据都是私有的。

2023-07-11 23:49:42 493 1

原创 《微服务架构设计模式》第六章 使用事件溯源开发业务逻辑

事件溯源是一种以事件为中心的技术,用于实现业务逻辑和聚合的持久化。聚合作为一系列事件存储在数据库中。每个事件代表聚合的状态变化。聚合的业务逻辑围绕生成和使用这些事件的要求而构建。1、事件溯源通过事件来持久化聚合将聚合的字段映射到数据库表的列,将聚合的实例映射到数据库表的行。事件溯源采用基于领域事件的概念来实现聚合的持久化,这是一种非同寻常的方法。它将每个聚合持久化为数据库中的一系列事件,我们称之为事件存储。2、事件代表状态的改变使用事件溯源时,事件不再是可有可无的。

2023-07-11 23:13:18 399

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除