- 博客(32)
- 资源 (2)
- 收藏
- 关注
原创 mysql的一次死锁记录
但是由于事务A中有一个 'lzy6'的x-record锁,所以这里(lzy4,lzy6) gap锁是获取到的,但是 'lzy6'的记录所 会被 事务A block。# 这个时候 更新相当于 会插入一个新的索引name='lzy5', 就会有一个插入意向锁,这里 会被事务B中的锁B1 block。#这条记录原值name='lzy6',这里的更新行为 会把name='lzy6'的索引记录标记为删除,并非真的删。#锁B1# 索引:name 数据范围(lzy4,lzy6) 类型:S锁。# 所以此时的锁有一个。
2023-05-04 14:05:26 418 2
转载 Linux进程分配内存的两种方式--brk() 和mmap()
原文链接:https://www.cnblogs.com/vinozly/p/5489138.html这篇文章将brk和mmap讲解的很到位,以及缺页的过程。如何查看进程发生缺页中断的次数?用ps -o majflt,minflt -C program命令查看。majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。 这两个数值表示一个进程自启动以来所发生的缺页中断的次数。...
2022-04-19 14:44:19 2149
转载 浅谈Linux 中的进程栈、线程栈、内核栈、中断栈
栈是什么?栈有什么作用?首先,栈 (stack) 是一种串列形式的数据结构。这种数据结构的特点是后入先出(LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行推入(push) 和弹出(pop) 操作。根据栈的特点,很容易的想到可以利用数组,来实现这种数据结构。但是本文要讨论的并不是软件层面的栈,而是硬件层面的栈。大多数的处理器架构,都有实现硬件栈。有专门的栈指针寄存器,以及特定的硬件指令来完成 入栈/出栈 的操作。例如在 AR...
2022-04-18 21:24:24 683
转载 SQL中的where条件,在数据库中提取与应用浅析
声明:转自何登成的博客:http://hedengcheng.com/?p=577给定一条SQL,如何提取其中的where条件?where条件中的每个子条件,在SQL执行的过程中有分别起着什么样的作用?关系型数据库中的数据组织关系型数据库中,数据组织涉及到两个最基本的结构:表与索引。表中存储的是完整记录,一般有两种组织形式:堆表(所有的记录无序存储),或者是聚簇索引表(所有的记录,按照记录主键进行排序存储)。索引中存储的是完整记录的一个子集,用于加速记录的查询速度,索引的组织形式,一般均为B
2022-03-28 16:19:11 736
转载 linux-虚拟内存空间
由来虚拟内存毋庸置疑,虚拟内存绝对是操作系统中最重要的概念之一。我想主要是由于内存的重要”战略地位”。CPU太快,但容量小且功能单一,其他 I/O 硬件支持各种花式功能,可是相对于 CPU,它们又太慢。于是它们之间就需要一种润滑剂来作为缓冲,这就是内存大显身手的地方。而在现代操作系统中,多任务已是标配。多任务并行,大大提升了 CPU 利用率,但却引出了多个进程对内存操作的冲突问题,虚拟内存概念的提出就是为了解决这个问题。上图是虚拟内存最简单也是最直观的解释。操作系统有一块物理内存(中
2022-03-28 16:16:57 393
转载 linux 线程的前世今生
一.定义关于进程、轻量级进程、线程、用户线程、内核线程的定义,这个很容易找到,但是看完之后你可以说你懂了,但实际上你真的明白了么?在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合和资源集合。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。线程有自己的私有数据:程序计数器,栈空间以及寄存器。传统进程的缺点现实中有很多需要并发处理的任务,如数据库的
2022-03-11 16:48:39 741 2
转载 MySQL 加锁处理分析
本文来自:何登成的技术博客一、背景MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。注:MySQL是一个支持插件式存储引擎的
2022-03-01 22:18:43 275
转载 TCP分段与IP分片的区别与联系
全文概要我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段(Segmentation),在接收时进行重组,同样IP数据报在长度超过一定值时也会发生分片(Fragmentation),在接收端再将分片重组。如果之前你和曾经的我一样,经常混淆这两个概念,甚至一度以为两者表示的是同一个协议栈机制,那么本文就将通过详细介绍分段与分片的区别与联系,力图让你对此有一个更为完整、严谨的理解。背景首先需要强调的一点是,不管你之前从什么渠道获取了关于分段/分片方面的知识,甚至会觉得两
2021-12-07 17:23:55 1492
转载 详细分析MySQL事务日志(redo log和undo log)
文章目录 1 redo log 1.1 redo log 和二进制日志的区别 1.2 redo log 的基本概念 1.3 日志块(log block) 1.4 log group 和 redo log file 1.5 redo log 的格式 1.6 日志刷盘的规则 1.7 数据页刷盘的规则及 checkpoint 1.8 LSN 超详细分析 1.9 InnoDB 的恢复行为 1.10 和 redo log 有关的几个变量
2021-05-08 17:13:17 1360
原创 服务治理-梳理和调研
1.总体概述1.1.根据实现方式分类微服务1.0: 用库的形式在微服务应用程序中导入使用。 基于nginx,kong等 微服务2.0:用代理的方式为应用服务提供能力-服务网格(Service mesh) 用直接代理的方式, Linkerd1.0 sidecar的形式运行,基于k8s istio 1.2.服务网格-service mesh服务网格(Service mesh)是用于处理服务间通信的专用基础设施层。它负责通过一系列措施来保证服务间请求的可靠传递,对上层业务应用..
2020-08-26 17:33:27 520
转载 K8s网络模型
一、前言k8s对Pods之间如何进行组网通信提出了要求,k8s对集群的网络有以下要求:所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信 所有的Nodes之间可以在不使用NAT网络地址转换的情况下相互通信 每个Pod自己看到的自己的ip和其他Pod看到的一致k8s网络模型设计基础原则:每个Pod都拥有一个独立的 IP地址,而且 假定所有 Pod 都在一个可以直接连通的、扁平的网络空间中 。 所以不管它们是否运行在同 一 个 Node (宿主机)中,都要求它们可以直接通...
2020-05-26 10:12:29 1220 2
转载 高并发-网络IO模型
高并发服务器编程经历了从同步IO到异步IO,从多进程或多线程模型到事件驱动的演变,基于事件的并发编程依赖于操作系统提供的IO多路复用技术。这篇文章从什么是IO多路复用谈起,列举基于事件的高并发服务器,并且对比了select,poll和epoll三种事件通知机制,libevent,libev和libuv三个事件框架,最后给出了分别使用select和epoll实现的echo server示例。CO...
2020-05-26 10:07:02 412
原创 grpc 报错解决 code = Unavailable desc = transport is closing
最近遇到 grpc 客户端报错rpc error: code = Unavailable desc = transport is closing,原因是连接长时间没有使用,被服务端断开,但是看过grpc源码的都知道,如果failfast 设置为false的话,应该会重试的;并且 连接关闭之后grpc.clientConn也会维护这个状态,所以不应该出现这个问题才对,这个是个很奇怪的事情...
2020-03-05 15:21:16 29296 2
原创 mysql的问题解决:dial tcp connect: connection reset by peer
背景当并发请求高的时候会出现connection reset by peer 这样的错误,也就是 服务端主动关闭了socket但是客户端依然再用分析正常的tcp 建立连接的时候tcp connect 请求进来的时候 服务端 会加入 SYN队列 当三次握手成功之后,会从 SYN队列移动到ACCEPT队列 然后应用层通过accept 方法接受新的socket结论...
2020-03-05 14:40:00 10724
转载 HTTP2协议-二进制帧结构总结
前言:HTTP2引入了二进制分帧层,将普通的请求/响应,拆解为帧实现请求和响应的并发。HTTP2规定了10中类型的帧。本文将对这10种类型的帧做总结。帧的结构:所有的帧都包含一个9 byte的帧头 + 可边长的正文不同。根据帧的类型不同,正文部分的结构也不一样。帧头:Length(3 bypte):表示帧的正文部分Payload的长度。初始设为2^14(1...
2020-02-22 11:05:10 3409
原创 记一次服务注册&服务发现的问题和解决(etcd和k8s同时结合使用情况下)
目录背景分析原因总结背景早先的都采用基于grpc+etcd做服务注册和服务发现,都是正常的 后来有部分服务采用k8s部署,为了新旧兼容,服务会按照老方式把宿主机的ip注册到etcd上,k8s体系类使用体系类的服务发现,k8s体系外的依然使用原来的方式,互不影响 但是有服务基于k8s部署之后,发现client调用接口超时,而直接通过ip调用却是正常 且多数是发生在...
2019-11-27 18:20:51 2373 2
原创 网络通信或者LVS相关原理说明-整理
网络:MAC地址表、ARP缓存表、路由表及交换机、路由器基本原理TCP/UDP/IP体系结构和协议简介IP数据报的分片和组装原理LVS-DR(Virtual Server via Direct Routing)原理说明与配置用例LVS负载均衡之持久性连接介绍让LVS更持久LVS原理、模式、调度算法...
2019-10-15 10:47:40 178
转载 MAC地址表、ARP缓存表、路由表及交换机、路由器基本原理
MAC地址表说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的。在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。交换机的工作原理 交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否...
2019-10-15 10:36:43 377
原创 mysql连接池长连接机制无效的问题排查-(go-sql-driver的问题)
背景:golang的mysql库采用的是驱动模型Go官方提供了database/sql包来给用户进行和数据库打交道的工作,database/sql库实际只提供了一套操作数据库的接口和规范,例如抽象好的SQL预处理(prepare),连接池管理,数据绑定,事务,错误处理等等。官方并没有提供具体某种数据库实现的协议支持。和具体的数据库,例如MySQL打交道,还需要再引入MySQL的驱动...
2019-08-28 21:26:54 2021 3
原创 以太坊的共识算法解读
TechNeo 技术沙龙第20期有幸参加 51cto这次组织的技术分享,当时接到消息的时候只有两天了, ppt做的比较仓促TechN目录在这里:PPT 放在 这里了: https://download.csdn.net/download/liangzhiyang/10368696好像博客没有上传 附件的功能,只能放到 这里了,吐槽一下这个里面有分享的视频:http://mdsa.51cto.co...
2018-04-23 16:59:36 1560 2
原创 各编程语言的值语义和引用语义的区别详解(golang,c++,php,solidity)
最近在使用 solidity(以太坊ethereum的智能合约的语言)的语言的时候,发现一些问题,只要是solidity语言中array和struct类型在storage和memory情况下的引用语义的理解问题另外对于不同语言的引用语义的理解其实是不一样的,这一点对于新人来说就比较坑~对于值语义,各个语言没有差别的,这个很好理解但是对于引用语义,这里以c++和php中的引用类型中的...
2018-03-12 20:55:05 1305
原创 go-ethereum源码分析-consensus - 共识
源码包路径:github.com/ethereum/go-ethereum/consensus/共识算法引擎接口的定义如下type Engine interface { // Author retrieves the Ethereum address of the account that minted the given // block, which may be different ...
2018-03-02 15:40:32 1500
原创 轻松筹1.6亿注册用户的Passport账户系统架构
轻松筹是全国1.6亿人使用的全民众筹平台,几乎所有核心业务都依赖于账号系统,账号系统的用户体验,安全性,稳定性直接影响着轻松筹所有业务的运行;轻松筹的发展非常迅速,已经展开了多条产品线,单点登录的需求愈加强烈;另外由于历史包袱的原因,也遗留了一些问题亟待解决。本次交流主要与大家分享一下轻松筹账号系统(侧重登录授权服务)的架构设计和改造方案。历史背景:由于历史包袱的遗留问题,轻松筹的账号...
2017-09-08 15:19:17 4292
原创 mysql技术内幕innodb存储引擎-学习记录
mysql技术内幕innodb存储引擎 本书面向那些使用MySQL InnoDB存储引擎作为数据库后端开发应用程序的开发者和有一定经验的MySQL DBA。这本书真的可以反复阅读揣摩的(边看边实操),这几年自己反复看了好多遍了,每次看都有新的理解,新的收获(O(∩∩)O哈哈~因为一次性阅读一遍很难理解的那么多,那么透彻~~人的脑力一段时间内是有限的啊,(*^_^*) 嘻嘻……) 下载地址:h
2017-03-28 15:46:46 978
原创 关于golang的context.WithTimeout的cancel的说明
简介context是一个在go中时常用到的程序包,google官方开发。特别常见的一个应用场景是由一个请求衍生出的各个goroutine之间需要满足一定的约束关系,以实现一些诸如有效期,中止routine树,传递请求全局变量之类的功能。使用context实现上下文功能约定需要在你的方法的传入参数的第一个传入一个context.Context类型的变量。 比如:上层需要指定超时的情况: ctx,
2017-03-24 17:25:40 20854
转载 tcp/ip协议原理
作服务端开发的,tcp/ip等等都还是需要理解其原理和机制的转载几个~~TCP/IP原理浅析TCP 的那些事儿理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
2017-03-17 17:17:23 1103
原创 grpc的invoke(一次请求)正常执行流程
请先阅读 grpc的dial正常执行流程和 grpc服务异常情况的执行流程默认配置情况下(还有其它没有提到的配置都取默认值):设置了balancer(etcd等)没有设置WithBlock,即dialOptions.block = false没有设置FailOnNonTempDialError,即dialOptions.copts.FailOnNonTempDialError =
2017-03-15 17:09:21 9854
原创 grpc服务异常情况的执行流程
请先阅读 grpc的dial正常执行流程 默认配置情况下(还有其它没有提到的配置都取默认值):设置了balancer(etcd等)没有设置WithBlock,即dialOptions.block = false没有设置FailOnNonTempDialError,即dialOptions.copts.FailOnNonTempDialError = false
2017-03-13 17:07:03 6519
原创 grpc的dial正常执行流程
请先阅读 grpc源码注解(golang)以下基于默认配置情况下(还有其它没有提到的配置都取默认值):设置了balancer(etcd等)没有设置WithBlock,即dialOptions.block = false没有设置FailOnNonTempDialError,即dialOptions.copts.FailOnNonTempDialError = falsegr
2017-03-13 17:04:32 11104
原创 grpc源码注解(golang)
grpc源码注解(通过阅读源码的一些理解)最近在看grpc的源码(基于golang),为了方便自己阅读以及理解,增加了一些注解。这里分享出来,希望对大家有些帮助,也是督促自己啦地址: https://github.com/liangzhiyang/annotate-grpc-go目前client端基本流程都ok了(还有server端等等)会持续更新~~接
2017-03-09 16:47:33 6081 2
原创 golang的垃圾回收(GC)机制
请先阅读 golang的goroutine调度机制然后再到这里 golang的垃圾回收采用的是 标记-清理(Mark-and-Sweep) 算法就是先标记出需要回收的内存对象快,然后在清理掉;在这里不介绍标记和清理的具体策略,只介绍 GC过程是怎么调度的以及stw相关这个算法,会导致 stw (stop the world)的问题,中断用户逻辑触发GC机制1.
2016-09-26 14:35:52 18686
原创 golang的goroutine调度机制
一直对goroutine的调度机制很好奇,最近在看雨痕的golang源码分析,感觉豁然开朗,受益匪浅;去繁就简,再加上自己的一些理解,整理了一下~~调度器主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/runtime.h文件中)1. G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象2. M代表一个线程,
2016-09-26 14:28:08 29113 20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人