标准Web系统的架构分层

标准Web系统的架构分层

– 转载请注明出处

1、架构体系分层图

在上图中我们描述了Web系统架构中的组成部分。并且给出了每一层常用的技术组件/服务实现。需要注意以下几点:

2、负载分配层

实际上负载均衡的概念很广泛,所述的过程是将来源于外部的处理压力通过某种规律/手段分摊到内部各个处理节点上。在日常生活中我们随时随地在和负载技术打交道,例如:上下班高峰期的车流量引导、民航空管局的航空流量管制、银行柜台的叫号系统。

这里我们所说的负载分配层,是单指利用软件实现的计算机系统上的狭义负载均衡。一个大型(日PV一亿+)、中型(日PV一千万+)Web业务系统,是不可能只有一个业务处理服务,而是多台服务器同时进行某一个相同业务的服务。所以我们需要根据业务形态设计一种架构方式,将来自外部客户端的业务请求分担到每一个可用的业务节点上。如下图所示:

负载层还有一个作用,是根据用户的请求规则,将不同的请求类型分派到不同的服务器上。例如:如果某一个HTTP请求是请求一张图片,那么负载层会直接到图片存储介质上寻找相应的图片;如果某一个HTTP请求是提交的一张订单,那么负载层会根据规则将这张订单提交发送到指定的“订单服务”节点上。

不同的业务需求,使用的负载层方案也是不同的,这就考验架构师的方案选择能力。例如Nginx只能处理TCP/IP协议的之上应用层HTTP协议,如果要处理TCP/IP协议,则要按照第三方的TCP-Proxy-Module模。更好的直接在TCP/IP层负载的方案,,是使用HAProxy。

常用的负载层架构方式包括: – 独立的Nginx负载或HAProxy方案 – LVS(DR)+ Nginx方案 – DNS轮询 + LVS + Nginx方案 – 智能DNS(DNS路由) + LVS + Nginx方案

随后的文章中将详细介绍这些负载架构方案以及这些方案的变形。

3、业务服务层和通信层3.1、概述

通俗来讲就是我们的核心业务层,订单业务、施工管理业务、诊疗业务、付款业务、日志业务等等。如下图所示:

很明显在中大型系统中,这些业务不可能是独立存在的,一般的设计要求都会涉及到子系统间脱耦:即X1系统除了知晓底层支撑系统的存在外(例如用户权限系统),X1系统不需要知道和它逻辑对等的X2系统的存在就可以工作。这种情况下要完成一个较复杂业务,子系统间调用又是必不可少的:例如A业务在处理成功后,会调用B业务进行执行;A业务在处理失败后,会调用C业务进行执行;又或者A业务和D业务在某种情况下是不可分割的整体,只有同时成功才成功,其中有一个失败整个大的业务过程都失败。如下图所示:

这样一来业务间的通信层又是一个逃不开的话题。 在随后的文章中,我们将以Alibaba的Dubbo框架、基于AMQP协议的消息队列和Kafka消息队列技术的原理和使用方式,来讲解业务通信层技术,特别是业务通信层的技术选型注意事项。

3.2、不得不提的HTTP请求方式

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

从上图中我们可以看出以下几个问题:

基于以上的描述,本文并不推荐使用HTTP作为业务间通信/调用的方式,而建议HTTP方式仅限于WEB、iOS、Android等这样的客户端请求服务的方式。

4、数据存储层

数据存储将是这个系列文章中将要介绍的另一个重点。进行业务计算前的初始数据、计算过程中的临时数据、计算完成后得到的计算结果都需要进行存储。我们通过一张思维导图首先从几个维度阐述一下数据存储的基本分类。

4.1、文件存储原理

我们通过一个最基本的在Centos6.5系统上创建Ext4文件系统的过程,讲解文件系统的最基本原理。

首先我们会通过fdisk命令对本地硬盘进行分区(即确定可控制的扇区的范围),如下图所示:

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

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

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

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

4.2、块存储和文件存储

上一小节我们叙述了最简单、最原始的物理块和文件格式规范的工作方式,但是随着服务器端不断扩大的数据存储容量的需求和数据安全性的需求,很显然单机的存储是没办法满足要求的,目前存储环境两种大的需求类型是:

稳定的扩展存储容量,并且不破坏目前已存储的数据信息,不影响整个存储系统的稳定性。

文件共享,让多台服务器能够共享存储数据,并且都可以对文件系统进行读写操作。

要解决这两个问题,我们首先要将问题扩展到上一小节的图例中,如下图所示:

很明显图中两个问题的答案是肯定的,也就是我们将要介绍的块存储系统要解决的问题。

4.2.1、块存储系统长江后浪催前浪,一辈新人换旧人。

标准Web系统的架构分层

相关文章:

你感兴趣的文章:

标签云: