server
文章平均质量分 71
taoqilin
这个作者很懒,什么都没留下…
展开
-
完全理解ICMP协议
1.ICMP出现的原因在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP 报文。在IP 网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP 协议是为了辅助IP 协议,交换各种各样的控制信息而被制造出来的。制定万维网规格的IETF 在1981 年将RFC7922作为IC转载 2022-01-25 11:13:26 · 4194 阅读 · 0 评论 -
聚簇索引(聚集索引)
总结:InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分; 一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。 我们日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助索引就是一个为了找主键索引的二级索引,先找到主键转载 2021-11-09 16:14:37 · 31169 阅读 · 2 评论 -
识别 Linux上的设备(磁盘)类型
识别 Linux上的设备(磁盘)类型1. Linux 上的设备 (device)Linux 操作系统中,各种设备驱动(device driver)通过设备控制器(device controller)来管理各种设备(device),其关系如下图所示:这些设备之中,受同一个 device driver 管理的设备都有相同的 major number,这个数字可以看作设备的类别号码,被内核用于识别一类设备 受同一个 device driver 管理的同一类设备中的每一个设备都有不同的 min转载 2021-06-09 14:28:20 · 579 阅读 · 0 评论 -
大话 Select、Poll、Epoll
言归正传,在介绍select、poll、epoll前,有必要说说linux(2.6+)内核的事件wakeup callback机制,这是IO多路复用机制存在的本质。Linux通过socket睡眠队列来管理所有等待socket的某个事件的process,同时通过wakeup机制来异步唤醒整个睡眠队列上等待事件的process,通知process相关事件发生。通常情况,socket的事件发生的时候,其会顺序遍历socket睡眠队列上的每个process节点,调用每个process节点挂载的callback函数。转载 2021-03-05 20:58:04 · 205 阅读 · 0 评论 -
CS模式网络游戏的运动同步总结
概述 目前有2种网络游戏拓扑结构:Peer to Peer和Client/Server模式。在RTS类型的游戏中大都使用Peer to Peer的帧锁定同步算法(如红警、帝国时代、war3等)。目前主流引擎都自带的是Client/Server模式的服务器(如Unity3d, UE4等)。在此推荐《multiplayer game programming》,该书对帧同步算法和CS模式的同步都有详细的阐述;并且该书介绍的对象同步思路与ue4的思路类似。本文只对CS模式下的运动同步进行总...转载 2021-02-25 15:20:15 · 476 阅读 · 0 评论 -
TCP状态转换图
这幅图来自《UNIX网络编程,卷1:套接字联网API》2.6.4 TCP状态转换图原创 2021-01-27 20:09:14 · 69 阅读 · 0 评论 -
模拟恶劣网络环境
在解决日常的支持需求中,经常会遇到一些用户反馈一些无法简单复现的bug,有很大一部分的bug是由于用户自身的网络环境波动,或者是本身网络环境就较为恶劣,而服务在面对这种恶劣的网络环境的健壮性不够,导致会出现一些意想不到的bug。而在正常的开发自测过程中很难去营造出这种恶劣的网络环境,使得这些bug较难被提前发现和修复。另外一些服务在恶劣网络环境下虽然不会出现不可用的情况,但是用户体检很差,为了优化这个情况下的用户体验,也需要去在本地模拟这种环境来进行调优。所以要去复现这些bug,甚至是去提前发现这些bu.原创 2021-01-25 19:33:52 · 260 阅读 · 0 评论 -
Mysql加锁过程详解 (1)
Mysql加锁过程详解(1)-基本知识Mysql加锁过程详解(2)-关于mysql 幻读理解Mysql加锁过程详解(3)-关于mysql 幻读理解Mysql加锁过程详解(4)-select for update/lock in share mode 对事务并发性影响Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解Mysql加锁过程详解(6)-数据库隔离级别(1)Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别Mysql加锁过程详转载 2021-01-20 20:27:51 · 295 阅读 · 0 评论 -
解析TCP之滑动窗口(动画演示)
概述滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴:TCP是双工的协议,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一个发送窗口和一个接收窗口。各自的接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的发送窗口则要求取决于对端通告的接收窗口,要求相同。滑动窗口解决的是流量控制的的问题,就是如果接收端和发送端对数据包的处理速度不同,如何让双方达成一致。接收端的缓存传输数据给应用层,但这个过程不一定是即时的,如果发送速度太快,会出现接收端数据转载 2020-11-02 10:53:01 · 571 阅读 · 0 评论 -
进程与线程
进程是资源分配的基本单位,线程是调度的基本单位。线程是更小的可以调度的单位,也就是说,只要达到线程的水平就可以被调度了,进程自然可以被调度。它强调的是分配资源时的对象必须是进程,不会给一个线程单独分配系统管理的资源。若要运行一个任务,想要获得资源,最起码得有进程,其他子任务可以以线程身份运行,资源共享就行了。进程的个体间是完全独立的,而线程间是彼此依存的。多进程环境中,任何一个进程的终止,不会影响到其他进程。而多线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。而任何一个子线程终止一般不会影原创 2020-10-10 15:10:53 · 102 阅读 · 0 评论 -
状态转移、复制状态机的概念
如果我们有一个服务器的两个副本,我们需要让它们保持同步,在实际上互为副本,这样一旦master出现故障,因为slave有所有的信息,就可以接管服务。状态转移背后的思想是,master将自己完整状态,比如说内存中的内容,拷贝并发送给slave。slave会保存收到的最近一次状态,所以slave会有所有的数据。当master故障了,slave就可以从它所保存的最新状态开始运行。所以,状态转移就是发送master的状态。复制状态机基于这个事实:我们想复制的大部分的服务或者计算机软件都有一些确定的内部操作,不确原创 2020-09-23 16:46:26 · 817 阅读 · 0 评论 -
mysql mvcc机制
隐藏列在Innodb引擎中,每个数据表都会有两个隐藏列(其实准确来说是三个,还有一个叫隐藏id,因为innodb必须要有主键,如果建表时没有显式指定的话,就会生成这个隐藏id作为主键,当然这个隐藏id和mvcc没有关系,真正和mvcc有关系的其实是两个隐藏列),分别是trx_id:创建版本号;和roll_pointer:回滚指针。其中创建版本号其实就是创建该行数据的事务id。这些隐藏列对我们客户端来说是不可见的。undo log当事务对数据行进行一次更新操作时,会把旧数据行记录在一个叫做undo原创 2020-09-22 10:23:35 · 90 阅读 · 0 评论 -
MongoDB存储引擎WiredTiger和In-Memory
详读MongoDB存储引擎WiredTiger和In-Memory存储引擎(Storage Engine)是MongoDB的核心组件,负责管理数据如何存储在硬盘(Disk)和内存(Memory)上。从MongoDB 3.2 版本开始,MongoDB 支持多数据存储引擎(Storage Engine),MongoDB支持的存储引擎有:WiredTiger,MMAPv1和In-Memory。从MongoDB 3.2 版本开始,WiredTiger成为MongDB默认的Storage Engine,用于将转载 2020-09-09 15:28:55 · 387 阅读 · 0 评论 -
select,poll,epoll
#include <sys/select.h> int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);struct timeval{ long tv_sec; /*秒 */ long tv_usec; /*微秒 */ }返回:做好准备的文件描述符的个数,超时为0,错误为-1...原创 2020-07-22 11:59:32 · 107 阅读 · 0 评论 -
AVL树的旋转
如果在AVL树中进行插入或删除节点,可能导致AVL树失去平衡,这种失去平衡的二叉树可以概括为四种姿态:LL(左左)、RR(右右)、LR(左右)、RL(右左)。它们的示意图如下:这四种失去平衡的姿态都有各自的定义:LL:LeftLeft,也称“左左”。插入或删除一个节点后,根节点的左孩子(Left Child)的左孩子(Left Child)还有非空节点,导致根节点的左子树高度比右子树高度高2,AVL树失去平衡。RR:RightRight,也称“右右”。插入或删除一个节点后,根节点的右孩子(R.原创 2020-06-08 20:58:21 · 282 阅读 · 0 评论 -
以B tree和B+ tree的区别来分析mysql索引实现
B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B树允许每个节点有更多的子节点。B树示意图如下:B树的特点:(1)所有键值分布在整个树中(2)任何关键字出现且只出现在一个节点中(3)搜索有可能在非叶子节点结束(4)在关键字全集内做一次查找,性能逼近二分查找算法B+树是B树的变体,也是一种多路平衡查找树,B+树的示意从图中也可以看到,B+树与B树的不同在于:(1)所有关键字存储在叶子节点,非叶子节点不存储真正的data(2)为所有叶子节点增加了一个链指针那...转载 2020-06-08 18:47:34 · 190 阅读 · 0 评论 -
网卡与中断
一.中断1.1 中断概念指CPU在运行期间,由于外部或由预先安排的事件引起的CPU暂时停止正在运行中的程序,然后进入内部或外部的预先安排的事件服务的程序中去,服务完毕后再返回继续运行被暂时中断的程序。1.2 中断上下部在一个特定中断的时候,内核会执行一个函数,该函数叫中断服务例程。要是既想中断服务例程运行的快,又想中断例程完成的任务多,我们把中断处理成两部分执行。中断上半部:接收中断立即执行,但有严格的超时限制。中断下半部:允许稍后完成。(下半部只是将任务推迟一点,让...转载 2020-05-25 20:10:24 · 1125 阅读 · 0 评论 -
基于RocketMQ的分布式事务解决方案
前言在系统变的复杂后,分布式、微服务等架构技术,就要考虑到应用在系统中了。尤其数据量大了后,就需要对数据库进行拆分。如:注册的用户数据,量大了后,就需要考虑分库分表一旦数据库进行了分拆,那就出现很多头疼的问题,其中之一就是事务问题。那我们就来看看问题是怎么出现的?场景先来上个图进行数据拆分后,就类似上面的架构上图中我们就拿用户的数据进行举例,用户量...转载 2020-04-26 15:43:02 · 196 阅读 · 0 评论 -
linux进程状态
R (TASK_RUNNING) 可执行状态只有在该状态的进程才可能在CPU上运行,而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行。很多操作系统教科书将正在CPU上执行的进程定义为RUNN...原创 2020-03-21 18:32:06 · 181 阅读 · 0 评论 -
https tls/ssl握手流程解析
之前转载过一篇关于https的流程及证书的一系列图片的文章https://blog.csdn.net/taoqilin/article/details/85471589,直观却也抽象,这篇文章对流程的描述非常到位,共欣赏。注意: 下面解释过程中用到的具体协议版本、算法和值都是示例,实际中可能不是这些ClientHelloclient->server: hello,咱建立...转载 2020-03-13 16:38:15 · 439 阅读 · 0 评论 -
select,poll,epoll之间的区别
(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用...转载 2020-01-13 21:52:55 · 857 阅读 · 0 评论 -
Rift算法图文解析
1. Raft 节点状态从拜占庭将军的故事映射到分布式系统上,每个将军相当于一个分布式网络节点,每个节点有三种状态:Follower,Candidate,Leader,状态之间是互相转换的,可以参考下图,具体的后面说。每个节点上都有一个倒计时器 (Election Timeout),时间随机在 150ms 到 300ms 之间。有几种情况会重设 Timeout:收到选举的请求 收...转载 2019-11-02 10:27:28 · 1311 阅读 · 0 评论 -
微服物架构一览
首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。传统的WEB应用核心分为业务逻辑、适配器以及API或通过UI访问的WEB界面。业务逻辑定义业务流程、业务规则以及领域实体。适配器包括数据库访问组件、消息组件以及访问接口等。一个打车软件的架构图如下:尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用。例如Java应用程...转载 2019-02-19 11:07:19 · 344 阅读 · 0 评论 -
I/O多路复用
作者:罗志宇链接:https://www.zhihu.com/question/32163005/answer/55772739来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 如果你把每一个航线当成一个Sock(I/O 流), 空管当成你的服务端Sock管理代码的话.第一种方法就是最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理...转载 2019-01-28 19:33:17 · 198 阅读 · 0 评论 -
https tls/ssl美图分享
本文大部分内容摘自:http://www.wosign.com/faq/faq2016-0309-05.htm 尊重知识产权,转载注明Wosign----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS协议详解(二):TLS/SSL工作原理HTTPS协议...转载 2018-12-31 16:39:54 · 272 阅读 · 0 评论 -
网络乱弹
TCP/Stream:何为stream?关键是有序性和可靠性,确保先发送的数据先收到,如何在有网络丢包的情况下作此保证?故有了接收缓冲区的概念。链路层上无序的数据包到了缓冲区,全部停下来整理,有丢包的就重发,后发的包的等一等,让先发的包过了检查再说,所以实时性上比UDP差,毕竟UDP可没让包等一等。缓冲区总有个大小,包一直在等就会导致爆掉,即著名的接收缓冲区溢出。所以网络中层得启个线程不停的等着从...原创 2018-12-30 17:40:08 · 171 阅读 · 0 评论 -
一个故事教你看懂什么是数字证书,它的原理是什么?它的作用是什么?
原创地址:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html1、基础知识 这部分内容主要解释一些概念和术语,最好是先理解这部分内容。1.1、公钥密码体制(public-key cryptography)公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:加密:通过加密算法和公钥对内容(或...转载 2018-03-11 14:44:26 · 5502 阅读 · 1 评论 -
read uncommit, read commit, repeatable read, 共享锁VS排他锁
一般大家都对事务的四种隔离模式比较熟悉,从松到严依次是:- 读取未提交(Read uncommitted):处于此模式下可能会出现脏读、幻象读、不可重复读- 读取已提交(Read committed):处于此模式下可能会出现幻象读、不可重复读- 可重复读(Repeatable read):处于此模式下可能会出现幻象读- 串行(Serialize):不会出现幻象读 那么脏读、幻象行、不可重复读是什么...转载 2018-03-11 14:43:52 · 1459 阅读 · 0 评论 -
Server与Entity
Server:物理上是服务器进程,逻辑上是消息服务器msgServer,即拥有消息收发能力。通信能力的底层是依靠操作系统层的socket,而socket依靠TCP/IP协议。Entity:服务器上可通信的最小逻辑单元,通信能力的底层依靠Server。提供以下的接口:Post(SrvType,Imsg) //向该Entity的指定部分投递消息PostToEntity(EntityId,S...原创 2019-07-23 20:32:53 · 248 阅读 · 0 评论 -
Entity与Module
Entity作为逻辑的最小通信单元,承载了业务数据。那业务逻辑放哪里?根据EC的设计,业务逻辑应该按模块拆分成一个个module,挂在Entity上,例如bagModule,buffModule,aiModule等等。根据面向接口的设计,Entity不应该直接挂moduleImpl,而应该挂iModule,例如iBagModule,iBuffModule,iAiModule等等。所以Ent...原创 2019-07-31 15:10:37 · 671 阅读 · 0 评论 -
Scene与Entity
SceneMgrServer:场景管理服务器,管理所有的SceneServer以及其上的SceneEntity。SceneServer:场景服务器,承载若干场景类型的Entity,即SceneEntity,每个SceneEntity代表一个场景,可能是世界地图也可能是副本地图。进入世界地图:1.SceneMgrServer获取该角色上次下线时的mapId和位置,根据mapId从所有Sc...原创 2019-07-31 20:27:12 · 236 阅读 · 0 评论 -
同步、异步、阻塞、非阻塞
关于同步和异步同步和异步其实指的是,请求发起方对消息结果的获取是主动发起的,还是等被动通知的。如果是请求方主动发起的,一直在等待应答结果(同步阻塞),或者可以先去处理其他的事情,但要不断轮询查看发起的请求是否有应答结果(同步非阻塞 )因为不管如何都要发起方主动获取消息结果,所以形式上还是同步操作。如果是由服务方通知的,也就是请求方发出请求后,要么在一直等待通知(异步阻塞),要么就先去干自己的事...原创 2019-08-06 20:09:48 · 227 阅读 · 0 评论 -
Redis单线程模型介绍
1. 理解单线程模型redis 会将每个客户端都关联一个指令队列。客户端的指令通过队列来按顺序处理,先到先服务。 在一个客户端的指令队列中的指令是顺序执行的,但是多个指令队列中的指令是无法保证顺序的,例如执行完 client-0 的队列中的 command-0 后,接下去是执行哪个队列中的第一个指令是无法确定的,但是肯定不会同时执行两个指令。 redis 同样也会为每个客户端关联一个响...转载 2019-08-06 20:30:12 · 193 阅读 · 0 评论 -
游戏的数据存储
使用mysql:游戏的业务需求多变,意味着数据的字段增删很频繁,如果用mysql的扁平表去存储每个字段会非常麻烦,更倾向对象数据库那样直接存储对象,确切的说是json对象。游戏里最复杂的数据就是角色数据role,以role为例:role是分布式的,数据分散在不同的业务服务器上。按服务器类别建字段,类似dataChunk1,dataChunk2,dataChunk3...把各部分数据分别以json对...原创 2019-09-03 19:58:23 · 1656 阅读 · 0 评论 -
什么是分布式系统,如何学习分布式系统
什么是分布式系统 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程...转载 2019-10-04 21:21:00 · 194 阅读 · 0 评论 -
socket与连接
谈到socket经常会说监听socket和客户端socket,对此稍作整理:1.socket(套接字)是操作系统提供的,并非用户软件提供的2.TCP/UDP是约定的协议,而IP是网络地址格式,所以TCP/UDP是基于IP的3.监听要bind端口,一个端口只能bind一次4.对TCP server而言,一个端口可以创建多个TCP连接,因为每个连接由server ip,server p...原创 2019-10-06 00:07:15 · 163 阅读 · 0 评论 -
何为spring的IOC
实体类:也是POJO类(简单的Java对象),实体类仅有属性以及获取和设置属性的get和set方法,没有事务处理方法,这是和Javabean不同的地方。哪些类适合作为POJO类呢?项目中用于描述事物本身以及需要数据传递和序列化的类。例如,项目中的数据库表、实体对象、序列化对象等。业务类:也称为BO(业务对象),用于处理项目中的业务逻辑。业务逻辑主要用于项目涉及的各类业务操作。在业务对象中,需要...原创 2019-10-06 23:27:41 · 79 阅读 · 0 评论 -
TCP标志位syn,ack,fin以及序列号(seq),响应号(ack)
一,三次握手TCP使用三次握手建立一个连接:第一次握手:客户端发送SYN包至服务器,并进入SYN_SENT状态,等待服务器确认第二次握手:服务器收到客户端的SYN包,发送一个ACK,同时发送自己的SYN,此时服务器进入SYN_RCVD状态第三次握手:客户端接收到服务器发送的SYN+ACK后,进入ESTABLISHED状态,并发送服务器SYN包的确认ACK,服务器接收到客户端ACK后,进入ESTAB...转载 2018-03-11 14:41:16 · 18025 阅读 · 2 评论