
文章插图
不得不提的HTTP请求方式
有的读者可能会问,为什么业务系统间通信层没有提到HTTP这样的调用方式 。毕竟很多公司目前都采用这种方式作为业务系统间的调用方式 。我们首先通过一个图来看看HTTP方式的调用过程 。(注意,此过程不考虑http客户端缓存的过程也不考虑DNS域名解析的过程,从HTTP建立可靠的TCP连接开始):

文章插图
从上图中我们可以看出以下几个问题:
- 从技术原理层面看,HTTP请求是在需要进行调用时建立TCP连接,并且发送并等待数据回送,在得到请求结果后,可能需要再关闭这个TCP连接 。这样的原理使得很多时间浪费在和业务无关的技术特性上 。
- 另外,发送Head信息和接收Head这样的数据,对业务数据来说是毫无意义的 。在访问量较小的情况下,这样的过程都还是可以接收的,但是当带宽资源吃紧的情况下,这样的数据空间就是弥足珍贵的 。
- 独立的HTTP请求由于没有SOA结构中的“治理中心”的概念,所以单纯的HTTP请求很难保证负责业务联动中的上下文一致性 。当然你可以自行编码来保证,但那样真的合理吗?
- 最后,需要说明的是,现在类似Apache HTTP Components这样的组件提供了HTTP Pool来减少TCP连接时长,但这仅仅是优化了HTTP作为业务间通信时的一个问题,其他的问题依然存在 。
基于以上的描述,本文并不推荐使用HTTP作为业务间通信/调用的方式,而建议HTTP方式仅限于WEB、iOS、Android等这样的客户端请求服务的方式 。数据存储层数据存储将是这个系列文章中将要介绍的另一个重点 。进行业务计算前的初始数据、计算过程中的临时数据、计算完成后得到的计算结果都需要进行存储 。我们通过一张思维导图首先从几个维度阐述一下数据存储的基本分类 。

文章插图
文件存储原理
我们通过一个最基本的在centos6.5系统上创建Ext4文件系统的过程,讲解文件系统的最基本原理 。
首先我们会通过fdisk命令对本地硬盘进行分区(即确定可控制的扇区的范围),如下图所示:

文章插图
然后我们会在这个区上面通过mkfs命令创建我们想要的文件系统(Ext3、Ext4、LVM、XF、BTRFS等),如下图所示:

文章插图
最后我们挂载这个文件系统到指定的路径,如下图所示:

文章插图
通过df命令查看挂载信息,如下图所示:

文章插图
万变不离其宗的创建过程告诉我们一个什么事实呢?

文章插图
物理块,一个物理块是我们上层文件系统能够操作的最小单位(通常为512字节),一个物理块在底层对应了多个物理扇区 。通常一块SATA硬盘会有若干机械手臂(决定于物理盘片数量),和若干个物理扇区(物理扇区的大小是磁盘出厂时就确定的,我们无法改变) 。
单个扇区的工作是单向的,那么映射出来的一个物理块的工作方式也是单向的 。原理就是机械手臂在读取这个扇区的数据时,硬件芯片是不允许机械手臂同时向这个扇区写入数据的 。
通过上层文件系统(EXT、NTFS、BTRFS、XF)对下层物理块的封装,OS是不需要直接操作磁盘物理块的,操作者通过ls这样的命令看到的一个一个文件也不需要关心这些文件在物理块的存储格式 。这就是为什么不同的文件系统有不同的特性(有的文件系统支持快照,有的文件系统支持数据恢复),基本原理就是这些文件系统对下层物理块的操作规范不一样 。
块存储和文件存储
上一小节我们叙述了最简单、最原始的物理块和文件格式规范的工作方式,但是随着服务器端不断扩大的数据存储容量的需求和数据安全性的需求,很显然单机的存储是没办法满足要求的,目前存储环境两种大的需求类型是:

文章插图
