- 博客(308)
- 资源 (2)
- 收藏
- 关注
原创 go-diskqueue数据结构
一、本文目的是介绍go-diskqueuego-diskqueue,应用于nsq:https://github.com/nsqio/nsq,作用是存储内存装不下的消息,并支持读取。go-diskqueue:https://github.com/yudongdai/go-diskqueue/blob/master/diskqueue.go(注释版)二、文件的组织2.1文件的组成2.1.1元数据,文件名格式如下:{TopicName}.diskqueue.meta.dat,每个Top..
2020-08-27 00:43:43
778
原创 浅析存储引擎(4)-对比B-tree和LSM-tree
浅析日志结构的存储引擎(1)-bitcask浅析日志结构的存储引擎(2)-SSTable和LSM-Tree浅析存储引擎(3)-B-tree一、磁盘碎片率由于B-tree存储引擎按固定页写入,那么通常每一页都会有些空间无法使用。而LSM-tree不是面向页的,并且定期重写SSTable以消除碎片化,所以具有较低的碎片率。二、写入速度LSM-tree通常能够承受比B-tree更高的写入...
2020-03-07 20:59:35
1829
原创 浅析存储引擎(3)-B-tree
浅析日志结构的存储引擎(1)-bitcask浅析日志结构的存储引擎(2)-SSTable和LSM-Tree前面两篇文章介绍了比较好理解的日志结构引擎LSM-Tree,但它们不是最常见的索引类型。目前最广泛使用的索引结构是B-tree。像SSTable一样,B-tree维护着按键排序的key-value对,这样可以实现高效的key-value查找和区间查询。一、B-tree的存储...
2020-03-07 17:57:28
2933
原创 浅析日志结构的存储引擎(2)-SSTable和LSM-Tree
基于上一篇文章,我们已经知道了日志结构的存储引擎-bitcask的基本原理。在这个基础上,继续讨论SSTable。回顾一下bitcask的key-value,它在段文件中是无序的,假设按key排序,并且要求每个key在每个段中只能出现一次,排好序再写入到段文件中,这种格式称之为SSTable。一、SSTable比bitcask有什么优点?1,由于key在一个段中只出现一次,可以使用类似...
2020-03-07 00:02:53
949
原创 浅析日志结构的存储引擎(1)-bitcask
这系列文章主要是讲key-value结构的存储引擎,比如bitcask、sstable、LSM-tree等。不涉及内存型的key-value,比如redis。一、数据写入与查找对于数据写入磁盘,最简单最快的方式就是顺序写入磁盘,用简单追加日志文件的方式,就达到了性能的最高效。假设我们把key-value在文件中的offset也记录下来,那么我们就能从磁盘中查找到这对key-va...
2020-03-06 01:01:40
1021
原创 行存储和列存储的区别
一、对比行存储和列存储的区别前,我们先来聊下背景。假设我们用mysql做了一个商品订单库order,如下orderid name kind price kg time 1 猪肉 肉类 50 2.0 2020.01.01 2 牛肉 肉类 60 1.0 2020.01.01 3 白菜...
2020-03-05 00:51:09
4125
原创 MyISAM和InnoDB的区别
应用层的区别:1,MyISAM不支持外键,InnoDB支持,这是非关系型和关系型数据库的最大区别2,MyISAM不支持事务,InnoDB支持3,MyISAM不支持行锁,InnoDB支持,InnoDB也会退化为表锁4,MyISAM支持全文索引,InnoDB不支持(5.7版本后支持)5,MyISAM可以没有主键,InnoDB必须有(不设会内置)设计层的区别:1,先讲概...
2020-02-23 22:13:06
1148
原创 什么是可靠、可扩展、可维护的系统?
一,可靠性的挑战1,人为故障是线上系统故障的首要原因,应该怎么避免1.1简化设计,易于测试1.2充分测试,覆盖场景1.3快速回滚,降低损失1.4完善监控1.5规范流程,这点最重要2,软件故障2.1简单架构,降低复杂度带来的不可控2.2选择稳定的软件,包括开源2.3要有自动恢复机制,比如限流,进程自动拉起3,硬件故障3.1多机服务,但...
2020-02-23 00:33:13
3346
原创 openresty中应用murmurHash
介绍:MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。由Austin Appleby在2008年发明,并出现了多个变种,都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。当前的版本是MurmurHash3,能够产生出32-bit或128-bit哈希值。较早的Murmu...
2019-08-01 22:30:23
2969
原创 浅谈账户安全
一、什么是账号安全,主要涉及几大方面1,防养号 1.1 恶意注册/登录 危害:黑产养号,准备随时作恶2,防刷 2.1 刷广告 危害:破坏产品生态,涉黄涉政 2.2 撸羊毛 危害:损失直接的金钱3,防盗 3.1 盗号 危害:非法转移个人财产、诈骗、刷广告等 3....
2019-07-11 12:30:49
1609
原创 图解反转单向链表
核心代码/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *pNext;* };*//*反转函数,输入待反转链表头,返回反转后的链表头 */struct ListNode* reverseList(struct Lis...
2019-06-14 23:45:29
1098
原创 mysql事务隔离级别解读
一、mysql事务隔离级别,有几种?1.读未提交(read uncommitted)2.读提交(read committed)3.可重复读(repeatable read) - default4.串行化(serializable )二、场景分析:1.假设数据表 T 中只有1列,存在1行记录2.进行事务并发结果分别是读未提交:v1=2,v2=2...
2019-05-25 23:08:50
306
原创 perf top查看进程cpu高原因
几个关键的选项$perf top -h-p, --pid <pid> profile events on existing process id-g enables call-graph recording例如查看redis进程的内核调用,$perf top -p 28764原文出自:htt...
2019-05-10 09:30:35
27221
转载 关于分布式事务、两阶段提交协议、三阶提交协议
结论:无论是二阶段提交还是三阶段提交都无法彻底解决分布式的一致性问题------------------- 分割线随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。在分布式一致性一文中主要介绍了分布式系统中存在...
2019-04-28 17:24:09
333
原创 乐观锁、悲观锁、共享锁、排它锁、行锁、表锁
乐观锁:是一种设计思想,场景是读多写少,冲突少,用数据版本号解决一致性悲观锁:是一种设计思想,场景是写多,冲突多,每次都加锁共享锁:又称读锁,用法SELECT ... LOCK IN SHARE MODE;排它锁:又称写锁,用法SELECT ... FOR UPDATE;行锁:InnoDB的行锁是针对索引加的锁,不是针对记录加的锁。并且该索引不能失效,否则都会从行锁升级为表锁。...
2019-04-26 17:29:31
287
转载 深入理解乐观锁与悲观锁
先说结论写多,冲突概率高,用悲观锁。读多写少,冲突概率低,用乐观锁。数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中...
2019-04-25 23:30:58
370
原创 kafka和rabbitmq选型
前言:选择适用的消息队列,至少要关注多个维度,基于kafka和rabbitmq,文章假定读者对消息队列已有一定的了解,探讨以下内容(1)顺序性(2)幂等性(3)持久化(4)性能(5)容灾(6)安全机制(7)可靠性一、模型(1)rabbitmq消费模型(只能路由到master处理)(2)rabbitmq生产模型(只能路由到master处理)(3...
2019-04-25 19:25:43
964
原创 后端开发应该读那些计算机系统基础书籍?
书不再多,在于精,技术底层原理是共通的。读哪些?顺序如下。一、《UNIX环境高级编程》二、《UNIX网络编程卷1:套接字联网API》三、《UNIX网络编程卷2:进程间通信》四、《深入了解计算机系统》五、《深入linux内核架构》如何读?1,前三本精读(至少三遍),并写代码加以验证。2,后两本选读,主要是解答前三本精读后留下的疑问。3,在工...
2019-04-13 12:24:46
600
原创 fastdfs存储小文件的可行性分析
一、环境1,磁盘:SATA,ext4,inode数量=磁盘大小/16KB2,fastdfs:5.05,关闭合并存储。3,下载代理:弃用fastdfs nginx模块,使用nginx静态路径下载。4,假设单磁盘大小为4TB,fastdfs子目录共32*32=1024个,假设每个小文件为16KB,则每个子目录需要存储24w个文件。二、测试文件存储目录结构如下,子目录值
2017-12-09 22:11:39
3212
原创 TCP 、UDP、IP包的最大长度是多少
一、传输层TCP:对于TCP来说,数据是流式传输的,传输数据可以接近无限大,单次传输的数据受限于网络层。UDP:而对于UDP,IP报头占20字节,UDP报头占8字节,则最大的包体为65535(由报文长度字段决定)-20-8=65507,单次传输的数据受限于网络层。二、网络层局域网:MTU大约是1500字节,也就是一个IP包可以传输大约1460个字...
2017-12-02 23:53:57
15275
2
原创 linux查看磁盘挂载的文件系统
命令:$ df -T -h[root@daiyu_10_1_x_x ~]# df -T -hFilesystem Type Size Used Avail Use% Mounted on/dev/sda2 ext3 9.9G 2.2G 7.3G 23% /tmpfs tmpfs 32G 0 32G 0% /dev/s
2017-11-23 21:56:36
6891
转载 饮水机和水桶图解RAID方式,强烈推荐
到处都有关于Raid讲解的文章或资料,但是如此生动活泼的RAID水桶演示绝对是奇思妙想的,敬佩作者的丰富想象力!一个外国描述RAID各个级别的图片,感觉很多地方定义得非常准确,而且通过看图了解RAID效果会更加显著。这么教你一定能懂!用饮水机和水桶教你什么是RAID(1)先为大家讲解第一个小图,也就是标记着standalone的饮水机,该图主要是通过矿泉水桶为饮水机
2017-11-22 22:23:39
5007
原创 proxy_pass_request_headers off的坑
举个例子,客户端访问80端口,服务器需要将请求转发至8080端口处理,我们希望将客户端传递的headers过滤,再设置内部转发请求header(test:"123"),坑(通过ngx.req.set_header设置的请求头,会被过滤): server { listen 80; location / {
2017-11-19 01:12:33
6122
原创 linux查看和释放swap内存
一、查看swap内存被哪些进程占用(输出单位是MByte)for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done 2>&1 |sort -k2nr |head二、如何释放swap内存
2017-11-19 00:08:50
11198
原创 HTTP/HTTPS与流量劫持/DNS劫持
DNS劫持:类似使用导航系统时,导航被劫持,给了一条驶向贼窝的路线。流量劫持:类似写信,信的内容被改过,收信人并不知情。HTTP:1,HTTP不能防DNS劫持,劫持者可以把域名解析指向别的服务器IP。2,HTTP不能防流量劫持,内容是不加密的,劫持者可以把源站返回的内容加料,比如加些小广告。HTTPS:1,HTTPS并不能防DNS劫持域名解析,假设劫...
2017-11-05 12:51:02
7732
1
原创 HTTP表单怎么理解
HTTP表单本质上是一种HTTP的Content-Type,application/x-www-form-urlencoded,数据本质上是通过HTTP body传输例子,有HTML页面如下点击按钮提交,通过抓包工具,抓到数据如下POST http://bssmanage.test.net/query/file HTTP/1.1Host: bssmanage.
2017-11-04 23:21:52
4260
原创 深夜随想,如何突破瓶颈
当技术到达一定的天花板,方法论可以成为突破瓶颈的重要手段。方法论不仅涉及技术研发,产品运营,也涉及管理领域,需要融会贯通。知道要做什么,比做更重要。共勉;
2017-10-28 23:34:40
369
原创 商品唯一订单系列号生成简易算法
算法目标:支持中小型支付系统,单机房生成订单QPS序列号生成算法:{2字节,机房序列号}{14字节,年月日时分秒}{3字节,毫秒}{3字节,微妙}{4字节,自增序列号}机房A:"{01}{20171028195147}{655}{851}{0001}""{01}{20171028195147}{655}{851}{0002}"机房B:"{
2017-10-28 19:34:15
7166
原创 TCP/IP编程之connect函数与accept函数的关系
一、原理connect函数成功,并不代表服务器应用程序已经调用accept函数我是图:二、测试客户端代码:#include #include #include #include #include #include #include #include #include #include #include int main(){
2017-10-28 16:33:47
1826
原创 linux下查看tcp丢弃的请求数
查看由于负载等原因,被内核丢弃的请求数(总量),在高峰期可以查看这两个数值是否在增长;命令:netstat -s | grep "times the listen queue of a socket overflowed"netstat -s | grep "SYNs to LISTEN sockets ignored"原文出自:
2017-10-16 19:12:19
3691
原创 linux创建空洞文件
文件偏移量可以大于文件的当前长度,会在文件中构成空洞,文件中的空洞并不要求在磁盘上占用存储区源码:#include #include #include #include #include int main(){ char *pathname = "./test.data"; long long length = 1024 * 1024 * 1024;
2017-09-18 22:39:35
2351
原创 linux查看文件在磁盘中是否连续的block
命令:debugfs -R "stat " $disk例子:假设磁盘中有一个72MB的文件"999"1)先查看文件的Inode$stat 9992)查看文件所在的盘符$df -h3)查看是否连续块$ debugfs -R "stat " /dev/sda1可以看到共有18431个连续block,每个
2017-09-18 20:12:16
2735
原创 linux下tcp客户端能建立多少个长连接
一、TCP四元组本地IP地址、本地TCP端口号、外地IP地址、外地TCP端口号二、调整能打开的最大文件描述符$ echo "655350" > /proc/sys/fs/file-max$ vi /etc/security/limits.conf * soft nofile 655350 * hard nofile 655350三、调整临时端口范
2017-09-05 15:32:52
8859
原创 linux设置最大打开文件数
先来看man的一段解析: /proc/sys/fs/file-max This file defines a system-wide limit on the number of open files for all processes. (See also setrlimit(2), which can be use
2017-09-04 00:04:36
11035
原创 TCP/IP编程之listen函数backlog参数详解(linux)
LISTEN(2) Linux Programmer's Manual LISTEN(2)NAME listen - listen for connections on a socketSY
2017-08-30 23:07:20
1629
原创 openresty执行阶段
openresty执行阶段1)set_by_lua2)rewrite_by_lua3)access_by_lua4)content_by_lua5)header_filter_by_lua6)body_filter_by_lua7)log_by_lua注意:content_by_lua和proxy_pass同属于 content 阶段,不要混用;
2017-08-21 22:47:55
1413
原创 linux别名alias命令
在 linux 中,alias 命令(注意全为小写)的功能是设置命令的别名,以简写命令,提高操作效率。(1)列出已有别名$ alias(2)创建别名$ alias daiyu='cd /home/daiyu/'(3)使用别名$ daiyu(4)删除别名$ unalias daiyu原文出自:End;
2017-08-13 16:55:16
775
原创 twemproxy安装与简单应用
twemproxy可用于redis分片代理。github:https://github.com/twitter/twemproxy1、从github下载源码包,安装:cd twemproxyautoreconf -fvi./configuremakesudo make install2、查看帮助手册:nutcracker -v
2017-08-01 23:21:04
1157
原创 mysql统计每分钟增删改查语句次数
原理:每分钟定期采集mysql的增删改查数据(mysql实例启动以来的总数),描成曲线;show global status where variable_name in('com_select','com_insert','com_delete','com_update');原文出自:End;
2017-07-21 20:08:27
3812
原创 磁盘util高问题排查
发现DB机器磁盘util100%通过iostat命令,发现读写IO读写不超过500通常,磁盘读写次数的QPS不低于几千,所以结论是磁盘故障。原文出自:End;
2017-07-21 19:34:22
7010
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人