- 博客(199)
- 资源 (10)
- 收藏
- 关注
原创 数据是如何在计算机中存储的
虽然在用户层面呈现的仍然是类似文件系统那样的层级结构,但是在服务端通常并非基于文件系统构建,而是基于一种称为对象存储的分布式存储系统。直观的认识是,文件等数据是存储在硬盘当中的,就像所示的这样。关于“分区”其实是存储领域的一个专业术语,我们可以暂时不深究,可以简单的理解为硬盘的一个区域即可。这就是文件系统管理数据的特点,它可以实现对数据的分类管理,而且分类可以嵌套,形成一个目录树。前面介绍了个人常见的数据存储的形式,那么对于企业来说,比如银行、电商、券商或者视频App的后端又是如何来存储数据的呢?
2023-03-04 17:32:19
607
原创 存储技术从入门到精通必读书籍推荐
存储入门这里首推《数据存储技术》这本书。有人可能会好奇,觉得《大话存储》不应该更适合入门吗?我这里想说的是,一个800多页,一个只有200多页,介绍的内容基本没有差别,深度差别也不大,你会选择哪一个?所以,这里我首先推荐大家阅读这本书来入门,如果大家有精力,可以继续阅读一下《大话存储》。这本书的内容主要集中企业级存储,企业级存储是一种集中式的存储系统。大家阅读完本书后对于企业级存储应该具备了比较全面的认识了。存储技术的另外一个方向是分布式存储,其中比较常见的如Ceph、GlusterFS和HDF
2022-05-04 20:04:10
346
原创 存储技术从入门到精通必读书籍推荐
随着人工智能、自动驾驶和大数据技术的发展和工程应用的普及,存储技术变得越来越普遍和重要。因此很多同学进入存储相关的领域,需要快速了解存储相关的技术。为了让大家能够快速了解相关技术,今天我们就推荐基本相关的图书。相信通过阅读下面基本书,大家不仅能入门存储,更能成为这方面的专家。存储入门这里首推《数据存储技术》这本书。有人可能会好奇,觉得《大话存储》不应该更适合入门吗?我这里想说的是,一个800多页,一个只有200多页,介绍的内容基本没有差别,深度差别也不大,你会选择哪一个?所以,这里我首先推荐大家阅读这本
2022-04-01 20:54:42
599
原创 终于有了这样一本系统介绍文件系统的书籍
文件系统是存储系统当中比较复杂的一个领域,从事存储研发工作十几年来一直在寻找这么一本著作,但是一直没有找到。无奈之余,自己写了一本。这本书的写作是按照自己的痛点来写的,也是从一个程序员的角度来阐述的,因此书中有很多介绍源代码的地方。文末有彩蛋!个人感觉,这个书应该能够解决很多想学习文件系统系统同学的问题。本书的基本思路是理论结合实践。在前面章节重点阐述文件系统的关键技术。后续章节则阐述每一种类型的文件系统,并结合代码介绍实现细节。下面我们大概介绍一下。整体组织结构如前文所说,前几章先从是什么
2022-02-20 18:19:05
610
原创 通过实例分析让您彻底理解NFS协议
NFS协议最为权威的参考文档自然是RFC文档了。以NFSv3为例,对应的RFC文档是RFC1813。但是当我们初次接触该文档的时候有种找不到北的感觉。以NFSv3的WRITE例程为例,在文档中的说明如下图所示,从该图中似乎看不太明白协议的具体定义。图1 NFS 写协议描述其实要理解上述内容并不困难,首先是要结合前面文章介绍的RPC的内容来理解,这样再理解NFS协议的内容就不会太难了。在RPC协议中我们了解到,RPC实现了一种远程函数调用的机制。也就是客户端在调用基于RPC的函数(存根)时,该
2021-11-06 09:08:22
373
原创 Linux NFS的整体架构与核心代码解析
前面文章我们从应用层面对NFS进行了介绍,接下来的文章我们将进入实现层面。本文首先从整体上对Linux的NFS软件架构进行介绍,然后介绍代码与实际业务逻辑介绍一下NFS的处理流程。NFS文件系统的架构分析NFS分布式文件系统是一个客户端-服务端架构(CS架构)。其客户端是Linux内核中的一个文件系统,跟Ext4和XFS类似,它是虚拟文件系统下的一个具体实现。与其它本地文件系统(例如Ext4,XFS或者Btrfs等)的差异在于其数据请求不存储在本地磁盘,而是通过网络发送到服务端进行处理。如图1是
2021-07-16 20:51:45
487
原创 Linux文件系统中的硬链接及常见面试题
如果能对inode的概念有所了解,对理解本文会有所帮助。如果对inode的概念不太清楚也没有关系,我们会捎带介绍一下。在文件系统的实现层面,我们可以认为包含两个组件:一个是包含数据块的池子,池子中的数据块是等大小的,比如4KB,8KB等;另外一个是管理这些数据块的数据库。当普通用户访问文件数据时,正是通过前面所说的数据库来找到文件对应的数据块的。什么是inodeinode是Linux(Unix)操作系统中文件系统的一个概念。inode的全称为index node,也就是索引节点。那么inode是用来
2021-07-16 20:48:26
176
原创 iSCSI存储协议发展简史
iSCSI的全称是Internet Small Computer System Interface,可以看出iSCSI是基于以太网的SCSI。SCSI的全称是SmallComputerSystemInterface,也就是小型计算机系统接口。很多设备是基于SCSI来与计算机交互数据的,常见的如硬盘、软驱、光驱、打印机、扫描仪等。SCSI协议SCSI最早发明于1982年,一路走来有多个不同的标准,比如SCSI-1,SCSI-2和SCSI-3等等。不同标准的速度不同,硬件的接口也不尽相同。如图是不...
2021-07-05 20:09:51
247
原创 NFS文件系统中的RPC协议详解
前文我们介绍了NFS的整体架构,其核心是将主机端的函数调用通过网络传输到服务端,并转化为服务端的函数调用。其主要实现是主机端与服务端的一一对应的存根。那么这种转化是如何进行的呢?这就涉及到RPC协议了。在Linux NFS中,将网络文件系统分为两层,其中RPC协议承载了NFS协议。由于RPC协议的存在,是的NFS协议变得非常简单。RPC协议的全称为Remote Procedure Call,翻译成中文是远程过程调用。也就是通过该协议,可以实现一个远程的函数调用,这样在客户端调用一个函数,可以在服
2021-06-10 19:26:53
525
原创 生产环境NFS服务配置应该考虑的因素
别光收藏,如果觉得不错请帮忙点个za ,在下这厢有礼了!前面我们搭建一个NFS服务,但是只有一个服务节点,而且在配置的时候关闭了防火墙等安全组件。这样配置在生产环境是非常不安全的,只能用于学习。一方面是由于只有一个服务节点,该服务节点就成为单点了,服务器或者内部服务的任何问题都会导致NFS服务的不可用。另外一个如果没有防火墙,那么就存在被攻击的风险。那么有没有一种方式可以提供一个高可用的,安全的NFS服务呢?其实方法是有的,一种方法就是使用商用的存储设备,比如EMC的Unity。另外一种方法.
2021-06-08 20:48:06
229
原创 NFS在Linux下的安装、部署与应用
NFS文件系统是Sun公司开发的网络文件系统,也称为分布式文件系统,其基本原理是将某个设备本地文件系统通过以太网的方式共享给其它计算节点使用。也就是说,计算机节点通过NFS存储的数据是通过网络存储在另外一个设备,而不是存储在本地磁盘。图1 NFS网络文件系统最大的特点是可以实现多个计算节点对同一个存储设备的访问,从而提升存储的利用率,并简化存储管理难度。NFS分布式文件系统本身是客户端服务器架构模式。本文将介绍如何基于Linux操作系统部署一个NFS文件系统服务,并且介绍如何在客户端进行使用
2021-06-08 20:45:13
182
原创 硬盘发展简史,看看硬盘的祖先长什么样
我们知道现在用于存储数据的介质有硬盘,SSD,优盘和光盘等。其中硬磁盘是应用最为广泛的。但是你知道他们的发展史是怎么样的吗?今天我们就介绍一下。最早的磁介质的相关文章发表在1888年9月8日的英国《电气世界》杂志上,在"一些可能形式的留声机"一文中,作者奥伯林·史密斯发表了最早的关于磁记录的作品之一,并建议(可能是第一次)使用永久磁印象来记录声音。这个只是使用磁介质来记录信息,并非用于计算机,但也是硬盘的祖先了。基于磁性的留声机(磁线)1878年,史密斯发明了电子留声机,该留声机采用磁性介质来对
2021-06-04 21:10:31
838
原创 Ext2文件系统挂载与卸载流程分析
任何文件系统在使用之前都需要挂载(mount),所谓挂载就是将一个磁盘的文件系统连接到操作系统目录树的过程。通过下面命令可以实现文件系统的挂载:mount.ext2 /dev/sdc /mnt/ext2_test完成文件系统的挂载后,磁盘上文件系统的所有数据就称为原有目录树的一个子树。普通用户就可以访问该磁盘上的数据了。Ext2文件系统的挂载自然,Ext2文件系统在使用之前也是需要挂载的。我们知道挂载操作是一个命令行的工具,也就是mount命令。该命令需要两个参数,一个是需要挂载的...
2021-05-29 20:41:00
410
1
原创 Ext2文件系统的核心元数据超级块
在Linux操作系统中,每个文件系统都必须有一个超级块。所谓超级块就是不普通的块,特别的块,其英文为SuperBlock。Ext2文件系统自然也不例外,在该文件系统开头的地方也有一个超级块,具体如图所示。Ext2文件系统的超级块位于磁盘开始偏移1KB的位置,其尾部与4KB对齐。Ext2超级块概述Ext2文件系统的超级块是对文件系统整体属性的描述,包括文件系统inode总量、磁盘块总量、inode使用情况、文件系统特性和挂载时间等等。超级块也是文件系统的入口。我们知道磁盘在使用之前必须
2021-05-29 20:40:05
445
1
原创 Ext2文件系统写数据流程及代码分析
完成了创建文件流程的介绍,下面就是向文件写数据了。今天我们主要介绍一些Ext2文件系统写数据的主要流程及核心代码。为了便于理解Ext2文件系统写数据的流程,本文先从整个Linux文件系统的角度分析一下写数据的流程,因此本文包含了部分VFS内容介绍。本文主要包含2部分内容,一部分是从总体上介绍一个写流程是如何从用户态接口到Ext2文件系统的,另一部分是Ext2文件的数据在磁盘上组织及函数流程。写文件的操作通常由用户态的程序发起,比如在开发的过程中调用系统API(write)。如图是从用户态发起一直到调
2021-05-29 20:38:41
209
原创 Ext2文件系统读数据流程及代码分析
读数据流程关于如何从用户态到Ext2文件系统公共部分(VFS)的流程本文不再详细介绍,这一部分与写流程基本一致,具体可以参考文末的相关文章介绍。如图是从用户态到Ext2文件系统的函数调用图,从图上可以看到对于Ext2文件系统在读数据流程中调用了大量VFS的函数,这主要原因是Ext2是Linux的原生文件系统,其实耦合还是比较大的。我们仔细观察一下,实际起作用的函数是Ext2文件系统的ext2_file_read_iter函数。图1 读数据整体流程像写数据一样,读数据也分为Direct读和缓存读两
2021-05-29 20:35:58
238
原创 SAN存储与协议,了解SCSI、FC和ISCSI
在前面我们介绍SAN存储及iSCSI协议的时候了解到SAN存储其实是一个CS架构的系统。存储系统本身就是整个系统的服务端。以IP-SAN(也就是基于iSCSI的SAN存储)为例,其整体架构如图1所示。图1 CS架构对于存储系统来说,通常是由专业的存储厂商提供,比较知名的如EMC、NetAPP、IBM和日立等等。国内存储厂商也迅速崛起,比较知名的如华为、宏杉、浪潮和同友等等。另外,还有一些小的存储厂商,他们往往集中在某个领域,比如专注文件系统或者块存储等等。除了专业的存储设备外,其实Linux
2021-05-27 22:05:58
1535
原创 Ext2文件系统创建文件流程及代码分析
前文我们知道在Linux操作系统中文件是由inode标识的,每个文件在磁盘上都有一个inode节点。对于Ext2文件系统来说,通常这些inode节点会相对集中的放在一个区域,这个区域叫做inode表。图1 inode位图与inode表同时,在前文中我们了解了Ext2的目录是如何组织数据,并且了解了目录与文件及文件数据的组织关系。本文我们将介绍Ext2文件系统创建一个文件的流程及关键代码。创建普通文件创建文件的操作通常是由用户态发起,通过虚拟文件系统中的vfs_create函数调用具体文件
2021-05-16 17:27:37
257
原创 Ext2文件系统的目录原理及文件管理分析
**在Linux文件系统中一切皆文件,同样目录也是文件的一种类型。**熟悉Linux服务器的同学经常会看到如下内容,这个是某个目录的列表内容。每一行的前面形如drwxr-xr-x的内容为文件的属性,而第一个字符d则表示这个文件是一个特殊的文件,也就是目录(directory)。第一个字符是用于标示文件类型的,对于块设备则是b,字符设备是c等等,每种特殊的文件这个字符都是不同的。对于有图像界面(...
2020-01-11 19:52:03
548
原创 互联网大厂offer收割之二叉树的基本概念及常见面试题汇总
更多面试题请关注头条号、微信号: itworld123任何程序是由算法和数据结构两部分组成的。其中数据结构是用来存储数据的,在程序逻辑上涉及数据的存储和检索两方面。其中线性数据结构是常用的数据结构,比如我们存储一个班级中学生信息或者成绩列表等等,通常使用的是线性数据结构。这种线性数据结构包括数组和链表等。我们知道数组是一个连续的地址空间,链表是一个非连续的地址空间。两者的应用场景有着比较明...
2019-11-26 19:58:53
382
原创 互联网大厂offer收割之数组及相关面试题解决方法
title: 互联网大厂offer收割之数组及相关面试题解决方法date: 2019-09-24 09:31:15tags:数据结构数组更多面试题请关注头条号、微信号: itworld123数组是所有数据结构中最简单的数据结构了,很多复杂的数据结构依赖数组实现,比如哈希表等。数组是一个连续的内存空间,因此我们可以一次定位其中的元素,也就是其查找是O(1)时间复杂度。因...
2019-11-26 19:54:15
485
1
转载 DPDK 入门最佳指南
01 写在前面我的读者当中应该有一部分人是做 DPDK 相关的,我自己虽然现在已经不做 DPDK 了,但对这块仍然有兴趣,今天这篇文章就来总结下 DPDK 的技术栈。注意:这篇文章是小白文,不适合大神哦。文章从 DPDK 的产生背景,到核心技术,再到应用场景,都进行了阐述,有可能是你见过的讲得最全面的文章了,当然,讲得全面自然会少了深度,你如果不屑忽略就好了。02 高性能网络技术随...
2019-09-20 10:27:30
11631
7
原创 从原理到实现,RAID5原理详解及代码实现浅析
前文我们介绍了Linux下面的RAID技术基本原理,并通过RAID1介绍了其大致的实现流程。今天我们介绍一下RAID5,因为RAID5还是比较复杂的,因此觉得有必要介绍一下。RAID5的算法关于RAID5的算法,我们在网上看到最多的一张图恐怕就是下面这张图了。这张图基本上说明了RAID5的算法,但还不够。在这张图中讲清了RAID5的关键是有一个校验数据块,校验数据块按照规则分布在不同的磁盘...
2019-08-29 10:28:41
5474
1
转载 SVN常用命令
# checkout代码svn co svn://svnbucket.com/xxx/xxx复制代码# 更新代码svn up复制代码# 添加新文件到版本库svn add filename# 添加当前目录下所有php文件svn add *.php# 递归添加当前目录下的所有新文件svn add . --no-ignore --force复制代码# 提...
2019-08-20 11:12:09
234
原创 二叉树的基本概念及常见面试题汇总
任何程序是由算法和数据结构两部分组成的。其中数据结构是用来存储数据的,在程序逻辑上涉及数据的存储和检索两方面。其中线性数据结构是常用的数据结构,比如我们存储一个班级中学生信息或者成绩列表等等,通常使用的是线性数据结构。这种线性数据结构包括数组和链表等。我们知道数组是一个连续的地址空间,链表是一个非连续的地址空间。两者的应用场景有着比较明显的差别。数组非常适合使用在元素数量已知的场景,对于有序数...
2019-08-12 08:34:18
835
原创 这些底层技术才是一个优秀架构师必须掌握的
上层应用开发的多了之后,对底层技术的接触就越来越少了。以至于很多人有了“底层技术无用论”的观点。很多人认为学习框架多好啊,大家都在用,跳槽的时候也能用的上。学习那些底层技术干啥,平时都用不到。本号并不这么认为。我们先举一个活生生的例子,比如我们现在有个Web服务应用,崩溃重启后在绑定套接字的时候出现报错(socket_bind(): unable to bind address [98]: A...
2019-07-26 07:40:53
2472
转载 十则:程序员“笑话”据说只有真正的程序员才看得懂
一、程序员被提bug之后的反应1、绝对不可能;2、在我这是好的,不信你来看看;3、真是奇怪,刚刚还好好的;4、一定是数据问题;5、你清下缓存试试;6、重启下电脑试试;7、你装的什么版本的类库(jdk);8、这谁TM写的代码;9、尼玛怎么还在用某某安全浏览器;10、用户不会像你这么操作的。二:昨天,看到一段脑残到爆的Code,忍不住骂了句:靠,这特么是哪个...
2019-07-09 16:09:01
917
原创 Go语言开发必读书目,从菜鸟到大牛必备
Go语言是最近几年流行起来的语言,该语言有谷歌发明,并得到广泛的应用。Go语言最大的特点是并发支持度好,而且开发效率高。在C语言中需要几十行,上百行代码才能实现的功能,在Go语言中可能只需要几行代码就可以搞定。因此,目前很多人开始学习Go语言进行开发。Go语言的应用领域也很广,包括服务端的开发,Web开发和应用开发等等。下面本文推荐几本Go语言入门必读的图书。Go语言程序设计这本书是Go语言入...
2019-07-09 16:00:50
6705
转载 七岁小孩都能读懂的Kubernetes 插图指南
献给所有试图向孩子们解释软件工程的家长。很久很久以前,有一个叫 Phippy 的应用程序。她是一个简单的应用程序,由 PHP 编写且只有一个页面。她住在一个需要和其他可怕的应用程序分享环境的主机中,她不认识这些应用程序并且不愿意和他们来往。她希望她能拥有一个属于自己的环境:只有她自己和她可以称之为家的 Web 服务器。每个应用程序都有个运行所依赖的环境。对于 PHP 应用程...
2019-07-08 08:48:17
377
原创 NVMe的Linux内核驱动分析
关于本文的几点说明:1. 本文基于Linux 4.1.12 版本的内核进行介绍,其它版本的内核代码可能略有不同,但不影响理解。2. 在阅读本文之前,如果能够阅读一下本号之前关于块设备和SCSI的文章,对理解本文将很有帮助。3. 建议阅读本号之前的两篇文章(一篇文章讲清什么是NVMe和理解NVMe的内部实现原理,这一篇就够了)后阅读本文,这样理解的更透彻。前面两篇文章我们对NVM...
2019-07-08 08:46:48
2494
原创 磁盘的IO重排序与调度策略
本文期望通过一个故事让大家了解磁盘驱动如何对IO进行重排序和调度。万芝堂是百年老字号了,主营中草药,并兼老中医出诊。虽然万芝堂有近百年的历史,但活动范围仅限北京城,即使在北京城也仅有2个分号。最近万芝堂换了新掌柜的。新掌柜新官上任三把火,不仅在北京增加了分号数量,在保定府也开了好几家分号。图1 总号与分号保定府本身也比较大,分号开了5家,具体的在各大街区基本都有,繁华街区开了3...
2019-07-08 08:45:16
513
原创 一篇文章讲清什么是NVMe
因为NVMe的出现,硬盘的性能得到了极大的提升。这个极大是多少呢?读带宽从500MB/s提高到了3200MB/s,写带宽从400MB/s提高到了1200MB/s左右。而读IOPS则达到了50万,甚至更高。也就是说,现在一块基于NVMe的SSD硬盘的性能比一个企业级磁盘阵列还要好。牛皮吹了这么多,那到底什么是NVMe呢?NVMe的全称是Non-Volatile Memory Express,如果...
2019-07-02 08:59:04
2666
3
原创 程序员必备高级技术之函数调用栈
大家都知道函数调用是通过栈来实现的,而且知道在栈中存放着该函数的局部变量。但是对于栈的实现细节可能不一定清楚。本文将介绍一下在Linux平台下函数栈是如何实现的。有些同学可能觉得没必要了解这么深入,其实非也。根据本号多年的经验,了解系统深层次的原理对分析疑难问题有很好的帮助。图0 函数栈就像熟悉抓包是解决网络通信问题的高级武器一样,熟悉函数调用栈则是分析程序内存问题的高级武器。本...
2019-07-02 08:55:21
553
原创 性能优化,我们应该知道的更多一点
当我们谈到性能优化,更多的同学可能想到的是系统层面的性能优化。比如在一个Web服务程序中,通过Redis或者其它缓存来提升网站访问的速度等。这一方面是编译器为我们做了很多优化工作,另外一方面是觉得系统层面的优化效果更明显,也更高大上。实际上,除了系统层面的性能优化外,在程序代码层面的性能优化效果也是非常好的。废话不多说,我们以事实说话。大家看一下下面两段程序,两段程序的作用完全相同,就是将一个二...
2019-07-01 10:22:01
2418
原创 深入理解NVMe协议的原理
前面我们介绍了一下NVMe的基本概念,让大家在直观上认识了一下什么是NVMe。今天我们将更加深入的介绍NVMe。故事要从卡利姆多和东部王国的贸易兴起说起。卡利姆多盛产粮食,而东部王国盛产丝绸和瓷器。在卡利姆多和东部王国之间有一条非常狭小的交易通道。虽然通道狭小,但两国之间贸易较少,因此基本上也是满足要求的。但突然有一天事态发生了变化。卡利姆多人发现东方王国的丝绸非常精美,而且他们现在粮食过剩...
2019-06-27 17:50:17
10809
1
原创 进一步理解Linux操作系统的块设备
在前文《理解Linux操作系统的块设备》中我们从比较高层面(Hight Level)介绍了块设备的原理和块设备的特性。但是关于Linux操作系统块设备的实现原理可能还一知半解。本文将进一步深入的分析Linux的块设备,期望能让大家更加深入的理解块设备的实现细节。其实在Linux操作系统中可以非常方便的实现一个块设备,或者说是块设备驱动。在Linux中我们熟知的RAID、多路径和Ceph的RBD...
2019-06-21 11:06:08
2078
原创 性能问题的银弹---缓存技术大观
仔细观察一下我们现有的系统,小到一颗CPU,大到一个在线交易系统。任何性能问题都可以通过一种方式有效的解决,这种方式就是缓存。不错,缓存几乎可以成为解决性能问题的银弹,百发百中。缓存的主要目的是降低数据访问延时,实现手段多种多样,下面对不同种类的缓存进行介绍。CPU的缓存能想到的最小粒度的缓存恐怕就是CPU的缓存了。CPU不但有缓存,而且将缓存分成了多种级别,如图1所示,分别是L1、L2和...
2019-06-19 20:02:06
526
原创 一篇文章理解Ext4文件系统的目录
使用过Linux的同学应该对Ext4文件系统都有了解。在Linux文件系统中一切皆文件,同样目录也是文件的一种类型。熟悉Linux服务器的同学经常会看到如下内容,这个是某个目录的列表内容。每一行的前面形如drwxr-xr-x的内容为文件的属性,而第一个字符d则表示这个文件是一个特殊的文件,也就是目录(directory)。第一个字符是用于标示文件类型的,对于块设备则是b,字符设备是c等等,每种特殊...
2019-06-14 10:25:13
6491
1
原创 由孙子兵法看程序员跳槽
下面一句话是《孙子兵法》中的原文,告诉我们在战争之前需要精确的思考,讨论,这样在后续的实战中才能有战胜的把握。在战争之前考虑的问题越多,胜算的把握也就越大,考虑的越少,胜算的把握也就是越少。夫未战而庙算胜者,得算多也,未战而庙算不胜者,得算少也。多算胜,少算不胜,而况于无算乎!那么,这个东东跟我们广大程序员跳槽有什么关系呢?相信很多同学听过“裸面”这个词吧,“裸面”的意思就是没有任何准...
2019-06-14 10:24:15
366
jscaps 破解版 珍惜啊!
2010-09-04
A Practical Guide to Linux® Commands, Editors, and Shell Programming
2010-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人