前言
记录一次科研训练,本文整合了目前互联网企业解决高并发时的一些技术栈,比如CDN、负载均衡策略、数据库的分库分表、I/O选型、还有分布式计算等。由于是word转markdown,所以文章格式和论文格式会有所不一致.
目录
引言
开发一个网站的应用程序,当用户规模比较小的时候,使用简单的架构,即一台应用服务器+一台数据库服务器+一台静态资源服务器就可以完全解决一部分问题,也可以通过升级硬件的方式来提高应用的访问性能。当问题的规模非常极端的情况下,比如春运期间的抢票阶段、双11淘宝京东,这个每秒处理的事务量非常大,升级硬件是一个很昂贵的选项。我们可以通过其他思路去解决问题:比如通过改变架构,海量数据的情况下使用缓存、页面静态化技术、数据库优化、业务拆分等;高并发情况下搭建集群和分布式、负载均衡、CDN等。
实际处理海量并发数据时,可以先对数据分治,通过在各个层使用负载均衡技术来实现:先在链路层做一轮ip的负载,然后通过反向代理服务器做一轮集群的负载,最终将并发数据按照一致性哈希原理均分到各个集群中。但极限情况下即便是削峰过的数据并发也是非常大的,业务会频繁使用数据库完成事务,事务规模往往与响应时长呈对数增长,为了提高数据库的吞吐性能,可以使用数据库集群实现分库分表和读写分离,解决性能瓶颈。与此同时应用层的优化也至关重要,应该选择合理的I/O模型,使用多线程技术尽可能的用到CPU的每个核心。业务请求也存在”二八定律”:即大量的并发请求会集中在20%的服务器上。会很容易出现服务器闲置的情况,可以通过分布式计算合理使用每一台服务器的算力以减轻核心业务服务器的压力。静态化技术属”外援”,但也可以最大化的分担服务器压力。
总的来说按照技术的顺序可以划分为:
- 静态化技术
- 负载均衡技术
- 数据库优化技术
- 应用层优化
- 分布式计算技术
1. 页面静态化
1.1 页面缓存
系统都是逐渐演进的,一个系统在运行中必须是根据场景逐渐地提高优化性能。高并发就是对资源节约的考验,而使用缓存则是一种解决资源的手段。
Web内容可以缓存在客户端、代理服务器以及服务器端[2]。
在客户端缓存即浏览器缓存,对于一般的Web浏览器来说一般都能设置一些缓存方面的配置:通过在你的电脑上开辟一块硬盘空间用于保存已经看过的页面以及页面中的静态数据副本。而是否去加载缓存有两种方式,强制缓存和协商缓存:
- (1) 强制缓存,通过HTTP参数Expires和Cache-Control来控制。Expires是通过告诉服务器缓存过期的时间,下一次请求如果没有达到过期时间则直接请求浏览器缓存;而Cache-Control则是通过一个相对时间来请求缓存。
- (2) 协商缓存,当强制缓存失效后,不管是否服务器中的页面数据是否有所改动都会重新生成。而协商缓存则是浏览器与服务器进行协商,服务器每次返回响应的同时告诉浏览器页面数据在服务器中最后的修改时间,服务器会比较文件的修改时间和请求头中的修改时间,如果一致则会直接使用浏览器本地缓存,HTTP会响应302状态码。协商缓存通过Last-Modified参数控制。
在代理服务器中的缓存规模要比客户端的更大。代理服务器集群为成百上千的用户服务使用同样的机制。代理服务器缓存是一种共享缓存,不只为一个用户服务,同一个缓存副本会被复用多次,所以在减少响应时间和带宽方面很有效。
在服务端缓存又被称为网关缓存、反向代理缓存。所有的请求都必须先经过反向代理服务器,然后再由反向代理服务器转发给内部真实服务器,可以通过服务器配置缓存功能以加速Web请求,减轻真实服务器负载压力。
1.2 CDN加速
内容分发网络[3](CDN,Content Delivery Network)是构建在现有的互联网基础上的一种先进的流量分配网络。结合缓存技术将源站内容分发到全国所有的节点,通过先进的内容智能路由技术,在互联网用户访问网站时,将请求自动指向到分布于各地的离用户最近的缓存服务器上直接访问,缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性。
CDN的工作原理就是将源站上的资源缓存到全球各地的CDN节点上,用户请求资源时,就返回离此用户最近的节点的资源缓存,而不需要每个用户的请求都从源站获取。从技术上避免了网络拥塞、缓解源站压力,保证用户访问的低延时和高效率。
1.3 智能DNS
网站的访问是通过URL来发布和请求资源的,而URL中的域名需要解析成IP地址才能与远程主机建立连接,如何将域名解析成IP地址就属于DNS的工作范畴。DNS解析过程往往很多有步骤:
- (1) 输入一个URL并按下回车
- (2) 浏览器检查自身缓存是否有该URL的解析,如果有则直接返回缓存IP
- (3) 浏览器查找操作系统缓存是否存在URL的解析,如果有则直接返回缓存IP
- (4) 从本机”DNS服务器”中查找该URL的解析,如果有则返回解析IP
- (5) 从ISP运营商的DNS服务器中查找,如果有则返回IP
- (6) 从根域名服务器解析URL解析服务器地址,拿到解析地址会再去ISP查找IP,将结果返回
这个过程是很漫长的,可能出现整个解析过程都不命中从而导致解析过程耗时很久。智能DNS可以让用户访问同线路最近的服务器,从而提供更好的网络服务。
1.4 HTTP/2和HTTP/3
HTTP/1.1[4]自从1997年发布以来,我们已经使用HTTP/1.x 相当长一段时间了,但是随着近十年互联网的爆炸式发展,从当初网页内容以文本为主,到现在以富媒体(如图片、声音、视频)为主,而且对页面内容实时性高要求的应用越来越多(比如聊天、视频直播),于是当时协议规定的某些特性,已经无法满足现代网络的需求了。
HTTP/1.1的缺陷如下:
- (1) 高延迟,虽然带宽增长的非常快,但由于队头阻塞(Head-Of Line Blocking)导致带宽无法被充分利用。
- (2) 无状态协议,HTTP是无状态协议,需要通过Cookie来维持状态,报文也会携带User-Agent、Query-String-Parameters、Body等,由此也带来巨大的HTTP头部,而报文中的字段很多也是重复的,某种程度上来说增加了传输成本。
- (3) 明文传输,HTTP传输时,所有的内容皆为明文,客户端和服务端无法验证对方的身份,这在一定程度上无法保证数据的安全性。
HTTP/2是现行HTTP协议(HTTP/1.x)的替代,但并非重写,HTTP/2的语义与状态码与HTTP/1.x一样,但HTTP/2专注于性能,使用HTTP/2部署能带来20%~60%的效率提升。
HTTP/3更换了底层的TCP协议,采用基于UDP的QUIC协议为基础,带来更大的灵活性的同时也不会产生对头阻塞等问题,实现了既快又可靠的协议。
1.5 应用程序与静态资源分离
所谓的应用程序就是我们网站中用到的Html、Css、Js、多媒体资源等。用程序和静态资源文件进行分离也是常见的前后端分离的解决方案[1],应用服务只提供相应的数据服务,静态资源部署在指定的服务器上(Nginx服务器或者是CDN服务器上),前端通过Angular JS或者NodeJS提供的路由技术访问应用服务器的具体服务获取相应的数据在前端游览器上进行渲染。这样可以在很大程度上减轻后端服务器的压力。
2. 负载均衡
2.1 集群与分布式
集群(cluster)指的是,当单机处理达到瓶颈时,把单机架构复制几份,这样就形成了一个集群。集群中的每台服务器就叫做这个集群中的"节点",所有的节点构成了一个集群。每个节点提供相同的服务,那么这样的系统处理能力就相当于提高了好几倍。
分布式(distributed)指的是,将业务水平划分,切割成几个子业务然后分布在不同的服务器上相互协调。
集群和分布式的联系与区别如下:
- (1) 集群重点强调个体与群体之间的联系;分布式强调请求与处理的分发状况。
- (2) 集群是一种物理形态;分布式是种工作方式。
- (3) 集群并不一定是分布式的;分布式中的每一个节点都可以做成集群。
- (4) 集群是通过提高单位时间内执行的任务数来提升效率;分布式是通过缩短单个任务的执行时间来提升效率
2.2 硬件负载均衡
硬件负载均衡通过专用的硬件设备来转发请求,直接在服务器和外部网络间安装负载均衡设备,这种设备也叫负载均衡器,由于专门的设 备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。
缺点则是非常的昂贵和不能进行动态扩容。
2.3 LVS负载均衡
LVS[5]工作在四层,也就是在网络层利用IP地址进行地址转发,负载均衡服务器通过算法计算出真实服务器的IP地址,然后修改TCP的源地址和目的地址以达到IP负载均衡的目的。
2.4 反向代理负载均衡
反向代理是实现负载均衡的一种方法,对于用户请求通过内网转发给真实服务器,通过多台真实服务器组成的集群分担用户请求,以实现负载均衡。反向代理服务器转发请求在HTTP协议层,也就是第七层,因此也叫应用层负载均衡
2.5 负载均衡算法
负载均衡算法可分为两类:静态负载均衡算法和动态负载均衡算法:
- (1) 静态负载均衡算法包括:轮询、比率、优先权:
-
- a) 轮询(Round Robin):顺序循环将请求一次顺序循环地连接每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。
-
- b) 比率(Ratio):给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。
-
- c) 优先权(Priority):给所有服务器分组,给每个组定义优先权,BIG-IP 用户的请求,分配给优先级最高的服务器组(在同一组内,采用轮询或比率算法,分配用户的请求);当最高优先级中所有服务器出现故障,BIG-IP 才将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。
- (2) 动态负载均衡算法包括: 最少连接数,最快响应速度,观察方法,预测法,动态性能分配,动态服务器补充,服务质量,服务类型,规则模式:
-
- a) 最少的连接方式(Least Connection):传递新的连接给那些进行最少连接处理的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。
-
- b) 最快模式(Fastest):传递连接给那些响应最快的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
-
- c) 观察模式(Observed):连接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
-
- d) 预测模式(Predictive):BIG-IP利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器相应用户的请求。(被BIG-IP 进行检测)
-
- e) 动态性能分配(Dynamic Ratio-APM):BIG-IP 收集到的应用程序和应用服务器的各项性能参数,动态调整流量分配。
-
- f) 动态服务器补充(Dynamic Server Act.):当主服务器群中因故障导致数量减少时,动态地将备份服务器补充至主服务器群。
-
- g) 服务质量(QoS):按不同的优先级对数据流进行分配。
-
- h) 服务类型(ToS):按不同的服务类型(在Type of Field中标识)负载均衡对数据流进行分配。
-
- i) 规则模式:针对不同的数据流设置导向规则,用户可自行。
3. 数据库优化
3.1 分库分表
面对大量访问的时候,数据库瓶颈很快就显现出来,对单一数据库进行性能调优或者SQL基本优化空间也不满足系统的性能需求,基于性能考虑,一台数据库很快将无法满足应用,于是需要使用数据库集群和库表分片,以减轻对磁盘I/O的竞争。
数据库拆分[13]的方式有很多种,例如将原来主服务器上多个数据库拆分到不同物理服务器的数据库实例中,在一个MySQL数据库中可能包含多个逻辑数据库,在某个MySQL节点中存在多个逻辑数据库,该节点不是一台单一的MySQL数据库服务器,而是MySQL数据库集群,而且其中所有数据库中的数据保证强一致性。
数据表的水平拆分也能实现。水平拆分即对数据库进行分片处理,对一个数据库中的相关表进行水平拆分,存放到不同实例的数据库中。
3.2 读写分离
读写分离[8][13]一般指数据库层面,即在主数据库提供服务的基础上,再增加一个或多个提供只读服务的数据库,这种方案称为增加读库。广义上的读写分离可以扩展到很多场景,只要是能够提供读服务的”数据源”、能够分担主数据库中读操作压力的方案,都可以称之为读写分离,例如数据缓存和搜索引擎等。
读写分离的实质是将应用程序对数据库的读写操作分配到多个数据库服务器上,从而降低单台数据库的访问压力。对于同一个用户的数据,如果其读操作和写操作全在一个数据库里,那么读性能将会很低,所以数据库配置了主从库。增删改操作写到主库里,然后通过MySQL的主从库支持将主库里面的数据及时同步到从库中,然后读操作在从库中进行,这样可以达到提高读操作的性能。可以配置0到多个从库。
3.3 使用分布式数据库
使用分库分表和读写分离的技术虽然减轻了单一数据库的压力,但仍满足不了持续增长的业务需求和庞大的数据量。分布式数据库[9]是将网站数据库拆分的最后手段,只有在单表数据规模非常大的时候才使用。
分布式数据库具备高可用、高扩展、高并发等特点,解决了传统数据库无法解决的问题,目前海量数据处理还是一个比较新的研究方向,大多数都是各公司或组织各自研究自家的解决方案,比如阿里研发的OceanBase、华为研发的GaussDB。研究的方式和结果也是各有千秋。
图1分布式数据库简单的架构图:
3.4 使用NoSQL
Hadoop、MongoDB、Redis、VoldemortDynomite……这些都是NoSQL项目的名字,都具有一个相同的性质:都是非关系型数据库[6]。
Wikipedia上定义:NoSQL打破了关系型数据库长久以来占据的主导地位,它是一种快速成长起来的非关系松散数据存储类型,正因为其关系的松散性,则不会出现JOIN操作和水平分割,也无需设计表的属性和属性间的关系。学术界称这种数据库为结构化存储。
关系型数据库中的数据是结构化的数据,每个属性之间的关系都能体现出来,也可以对每个属性执行各种操作,这样便于表与表之间进行连接(JOIN)等操作,但凡事都有两面性,复制的属性关系容易导致性能瓶颈。相反的,菲关系型数据库结构不固定,以键值对存储,它的每一个元组的字段都可以不同,每个元组可以根据自己需要增加独特的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。
虽然NoSQL有许多难以取代的优势,但它的缺点也十分明显:首先,它很难实现数据的完整性,而这恰好是SQL数据库中最容易实现的功能。现在绝大部分互联网企业应用数据的特点具有天然的结构化优势,对完整性的要求较高,所以NoSQL无法成为主流。其次,NoSQL通常都公布开源,这样可以获得更多人的关注,积聚更多人的智慧。但因缺少商业支持,NoSQL的维护十分不便。相反的,SQL数据库早已投入在各个生产线中,经过几十年的技术考验,较为稳定成熟,并且有很好的维护服务和售后支持,可以保证产品的稳定性。所以NoSQL暂时并不会取代传统的关系型数据库。
3.5 分布式存储
集中式关系型数据库在处理海量数据时面临巨大的挑战[11],表现出他的不足:
- (1) 一台单机数据库存放的数据量有限,当扩张到TB级别时,单机数据库将无法满足数据级别要求
- (2) 数据集中存储在一台服务器上,一旦该服务器发生故障,则整个数据中心都有可能瘫痪,可用性低
- (3) 集中式数据存储的规模过小,只能通过提升硬盘和外存规模来满足存储需求,不仅很容易就遇到瓶颈,且容易引发性能底下的问题。
综上所述,对于庞大的数据量存储需求,可以采用对数据化整为零,分而治之的方式来解决这个问题。可以通过将数据分片[12],通过一致性哈希(Consistent-hash)策略选择散列的数据片进行读写操作。分布式存储的关键技术如下[10]:
- (1) 元数据管理:大数据环境下元数据体量非常大,常见的元数据管理可以分为集中式和分布式元数据管理架构。集中式元数据架构实现简单,但是存在单点故障的问题;分布式元数据则将元数据分散在多个节点上进而解决服务器性能瓶颈问题,但实现较为复杂,并引入了数据一致性等问题。
- (2) 系统弹性扩展技术:大数据环境下,数据规模和复杂度的增加往往非常迅速,对系统扩展性要求比较高,大数据存储体系规模庞大,节点失效率高,因此还需要一定的自适应管理功能。
- (3) 存储层级内的优化技术:构建存储系统时,需要基于成本和性能来考虑,因此存储系统通常采用多层不同性价比的存储器组成存储器结构。因此高效的构建存储器结构可以有效的降低成本和提高数据的访问速率。
- (4) 针对应用和负载的存储优化技术:大数据具有大规模、高动态及快速处理等特性,通用的数据存储模型通常并不是最能提高应用性能的模型,而大数据更关注于存储系统对上层应用的通用性。针对应用和负载来优化存储,将数据和应用解耦合,使应用达到最优性能。
4. 应用层优化
4.1 高并发下的网络I/O模型
高并发下的瓶颈最终也会归为I/O瓶颈[14],即便是用分库分表、读写分离技术,最终数据的持久化还是和I/O逃不开。如何选择网络I/O模型是提高服务器吞吐量的关键。
I/O(Input/Output)也就是输入和输出,即读写操作,在操作系统内部逻辑上一般分为两个空间:用户空间和内核空间。保护模式下,只有内核才有权限直接与物理存储介质打交道,所以一次I/O请求被分为了两个阶段:
- (1) 内核程序读取物理介质的数据并拷贝至内核空间
- (2) 复制内核空间中的数据至用户进程空间
由此划分出5中I/O交互模型:
- (1) 阻塞I/O(Blocking I/O):应用进程发出一个I/O请求,该I/O操作不会立刻完成,会等待内核程序将数据读出来,再等待数据从内核空间拷贝至进程空间。这个环节完成之前,应用程序都会处于阻塞状态。
- (2) 非阻塞I/O(Non-blocking I/O):应用程序向内核发送一个I/O请求,如果内核空间没有缓存过可用数据,内核会直接向进程返回一个错误值然后缓存该数据,用户会在合适的时间再次请求I/O,这样避免了进程的阻塞,这种操作也被称为轮询。
- (3) 多路复用I/O(I/O Multiplexing):多路复用I/O在Linux系统中一般只用于网络 I/O,非阻塞I/O中用户进程通过轮询频繁占用CPU调度,大量消耗系统资源。多路复用提出将多个I/O请求注册到一个复用器上,通过复用器来完成轮询。本质上基于阻塞I/O的。
- (4) 信号驱动式I/O(Single-driven I/O):信号驱动式IO也有叫事件驱动式IO,进程事先告知内核向内核注册一个信号处理函数,然后用户进程返回不阻塞。当内核数据准备就绪时会发送一个信号给进程,用户进程便在信号处理函数中调用I/O读取数据。
- (5) 异步I/O(Asynchronous I/O):用户进程提出I/O请求后会立即返回执行其他操作,当数据准备好后,内核再通知用户进程I/O处理结果。这种机制和信号驱动机制类似,二者不同的是:异步I/O返回时I/O操作已经完成,返回的是I/O结果;信号驱动I/O则是内核通知我们何时可以启动一个I/O操作,最终的I/O还是由自身去完成。
4.2 多线程与并发编程技术
多线程[15]是一种通过硬件和软件的手段实现多个线程并发执行的技术,线程相比进程是一种更加轻量级的调度单位,线程的引入可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度。
并发编程[16]则是一种在同一时间同时处理多个任务的技术手段。可以在资源限制的情况下,让程序执行的更快。可以将程序中串行部分改为并发执行的代码。 通过多线程和并发编程技术,可以对数据进行分治,让线程分布到CPU所有核心,最大化开发CPU的效率。
5. 分布式计算
5.1 分布式计算概述
分布式计算是一种新的计算方式,所谓的分布式就是在两个或多个软件互相共享信息,这些软件既可以在同一台机器上运行,也可以通过网络协议在多台机器上协同运行。分布式计算比起其他计算算法具有以下几个优点:
- (1) 稀有资源共享
- (2) 平衡每台机器计算负载
- (3) 可以把程序放在最适合它的机器上
其中,平衡负载和共享资源是最核心的思想之一。
分布式计算是利用互联网上的计算机闲置CPU来解决大型计算问题的一种思路,高并发场景下也会出现二八效应,即80%的热点流量会集中在20%的机器中,所以并非所有的机器CPU和带宽资源都被打满,而此时热点机器的CPU和带宽可能已经岌岌可危了,通过分布式计算可以平衡热点机器的负载,让闲置机器的CPU也能最大化功效。
5.2 分布式架构
传统的集中式架构,将所有的功能打包好集中在一个Web容器中部署,所有的功能模块使用同一个数据库,集中式架构扩展性和可用性较差,单机部署也会导致并发性较差。
针对集中式架构的缺陷,将集中式架构的业务模块垂直拆分成若干个子系统,每个子系统间通过网络完成交互,而每个子系统也可以集群部署,我们可以对热点模块集群部署以分担并发压力,提高并发度。常见的分布式架构有SOA架构、微服务架构等。
5.3 数据同步
分布式计算中有一个CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance),这三个要素只能满足实现两点。
分布式计算中,为了不影响正常的业务,需要实时同步数据,并且数据保持一致性。数据同步可以通过消息队列机制,接受到数据变化时,消息队列将变化数据实时同步到其他集群节点中,保证数据的强一致性而放弃了可用性。
如果实时操作并没有那么重要,但需要保证每个机器的可用性,强一致性则应该放弃,只保证数据同步[19]的最终一致性即可。即当数据更新后,不会立即写入数据,尽可能的在某个时间级别达成数据的一致性。
5.4 远程过程调用
分布式计算中,进程间的通信是一切分布式系统的核心,如果不仔细拆分分布式系统中各机器间信息交换机制,对分布式系统的研究就成了空谈。
RPC[18][17](Remote Procedu Call,远程过程调用)是支持分布式应用系统之间通信的一种重要机制,RPC采用软件代理的模式,实现位于不同地址空间的执行程序之间的通讯。RPC技术的提出,使得协同工作的应用程序可同时分布于多台主机,方便地实现了跨越多个操作系统、多种网络协议的应用程序的开发,提高了网络上主机资源的共享。
调用程序通过本地代理封装请求并向远端发送请求并阻塞等待响应结果,远端接受到请求会接受和解析请求并实现远程过程调用,将调用结果传回请求端。这一切都是在代理层完成,对于调用者,根本感受不到封装请求的过程,就像”调用本地方法”一样调用远程方法。
消息映射和消息处理是RPC技术的两个重要方面,消息映射包括数据类型的映射和需要调用方法参数的映射。消息处理包括消息封装、消息传输和消息解析,消息封装由代理对象完成,消息传输一般是通过建立TCP连接然后通过HTTP协议进行数据的传输,解析可以自行定义解析规范,调用方与被调用方达成约定即可。
RPC在分布式系统中有着广泛的应用,包括但不限于如下方面:
- (1) 分布式操作系统的进程间通讯
- (2) 构造分布式计算的软件环境
- (3) 远程数据库服务
- (4) 分布式应用程序设计
- (5) 分布式应用程序调试
- (6) ……
RPC使得构建分布式计算应用更加容易、透明,可以充分利用非共享内存的多处理器环境,这样可以简便地将应用程序分布在多态应用服务器上,就像在一台应用服务器中运行那样。可以实现代码共享、提高系统资源的利用率。
总结
分布式数据处理技术,可以看做是大数据存储、计算机网络技术、数据库技术和分布式计算技术等的结合。计算机网络技术则是尽可能的将数据访问入口分散化处理,而数据库则是相反,提供一个集中的数据访问入口。分布式计算则是将二者结合起来。分布式系统有以下几个特点:一是整体存储并不在一个物理空间,而是分散开的,通过网络协议实现通信。二是在物理上虽然是分开的,但逻辑上确实一个整体,读写分离等技术也需要进行数据同步以达成数据的一致性。三是虽然概念上是一个整体的数据库,但其多个分布式节点却都可以实现自主管理。
本文针对海量请求数据与高并发系统的处理,主要研究了互联网中常见的数据处理技术和架构,其实主要还是化整为零、分而治之的思想,数据库中垂直拆分、分库分表和读写分离是如此,负载均衡、分布式计算技术是如此,海量数据存储更是如此,只不过由一种形式的分治变成了另外一种形式的分治。学无止境,后续还是有很多技术点需要继续深入探究的。
参考文献
- [1] 赵志勤,朱永虎,林玉凤;面向数据分析的Web页面静态化方法研究与实现; 现代计算机(专业版) 2014年19期;
- [2] 高飞,侯瑞春,周志明;Web页面缓存技术在业务系统中的应用; 计算机技术与发展2010年01期;
- [3] 谌丽;基于云计算的CDN平台研究及其缓存技术探索; 华南理工大学硕士学位论文;
- [4] 许兆伟,王颖;HTTP/2新特性与Web性能关系的研究与实验; 计算机技术与发展2017年11期;
- [5] 秦霞;基于LVS负载均衡集群的设计和实现;西安电子科技大学硕士学位论文;
- [6] 李绍俊,杨海军,黄耀欢,周芹;基于NoSQL数据库的空间大数据分布式存储策略; 武汉大学学报(信息科学版) 2017年02期;
- [7] 刘京义; 探索数据库分片技术; 网络安全和信息化2017年06期;
- [8] 沙光华,陈泳,张长江; 读写分离技术在运营支撑系统中的应用; 计算机工程与应用2015年12期;
- [9] 刘晓光;基于MySQL的分布式SQL数据库的设计与实现; 中国科学院大学(工程管理与信息技术学院)硕士学位论文;
- [10] 李存琛;海量数据分布式存储技术的研究与应用; 北京邮电大学硕士学位论文;
- [11] 吴婷;海量存储系统中元数据管理机制的研究;江苏大学硕士学位论文;
- [12] 张俊,马迅飞,张进铎,李华松,向光阳;海量数据的分布式并行集群存储技术研究与应用; 信息系统工程2019年02期;
- [13] 严成武;支持分库分表和读写分离的 ORM 框架的设计与实现; 哈尔滨工业大学硕士学位论文;
- [14] 常正超;高并发访问量下网络I/O模型选择的研究; 电脑知识与技术2016年19期;
- [15] 眭俊华*,刘慧娜,王建鑫,秦庆旺;多核多线程技术综述; 计算机应用2013年S1期;
- [16] 陈凌阳;可伸缩web架构中的并发编程模式; 北京邮电大学硕士学位论文;
- [17] 罗玲,白晓颖;基于XML的RPC技术分析; 计算机科学2004年02期;
- [18] 周筱瑜,雷晓俊,陈芳;分布式系统中的通信方式:RPC与RMI; 电脑与电信2012年03期;
- [19] 刘峰,鄂海红;基于海量数据的消息队列的性能对比与优化方案; 软件2016年10期;
- [20] 杨立鹏;王富章;梅巧玲;朱建军;互联网售票中的海量请求处理技术研究[J];铁路计算机应用;2015年07期;