一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
大型互联网应用系统特点
高并发,大流量
大型网站往往会会有大流量访问。
高可用
系统7×24小时不间断服务,
海量数据
需要存储、管理海量数据,需要使用大量服务器。
用户分布广泛,网络情况复杂
安全环境恶劣
由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击。
需求快速变更,发布频繁
和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品发布频率是极高的。
渐进式发展
与传统软件产品或企业应用系统一开始就规划好全部的功能和非功能需求不同,几乎所有的大型互联网站都是从一个小网站开始,渐进地发展起来的。
根据以上总结的大型互联网应用应用特点,对大型互联网的架构,主要包括Web前端性能优化、应用服务器性能优化、存储服务器性能优化等技术方案及手段。
Web前端性能优化
web前端是应用服务器处理之前的部分,前端主要包括:HTML,CSS,javascript,image等各种资源,针对不同的资源有不同的优化方式。可采用的技术方案有浏览器访问优化、使用反向代理、CDN等技术。
浏览器访问优化
浏览器访问主要提升在用户终端浏览器打开网页的速度,通常采用的优化技术包括减少与服务端的HTTP请求、使用浏览器本地缓存(如浏览器自身缓存、AppCache、本地数据库等)、启用压缩等技术手段对浏览器访问进行优化。
CDN
内容分发服务本质仍是一个缓存。其原理是将数据缓存在离用户最近的地方,使用户以最快的速度获取数据,由于CDN部署在网络运营商的机房,这些运营商又是终端用户的网络服务提供商,因此用户请求路由的第一跳就到达了CDN服务器,当CDN中存在浏览器请求的资源时,从CDN直接返回给浏览器,最短路径返回响应,加快用户访问速度,减少数据中心负载压力,CDN能够缓存的内容主要是静态资源,如图片,文件、CSS、脚本文件、静态网页,通过将这些静态资源缓存在CDN上,极大改善网页的打开速度。
反向代理
反向代理的实现
1)需要有一个负载均衡设备来分发用户请求,将用户请求分发到空闲的服务器上
2)服务器返回自己的服务到负载均衡设备
3)负载均衡将服务器的服务返回用户
用户和负载均衡设备直接通信,也意味着用户做服务器域名解析时,解析得到的IP其实是负载均衡的IP,而不是服务器的IP,这样有一个好处是,当新加入/移走服务器时,仅仅需要修改负载均衡的服务器列表,而不会影响现有的服务。
反向代理的优点主要包括:
(1)提高了内部服务器的安全
来自互联网的访问请求必须经过代理服务器,相当于在Web服务器和可能的网络攻击之间建立了一个屏障。
(2)加快了对内部服务器的访问速度
代理服务器也可以通过配置缓存功能加速Web请求。当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速web请求响应速度,减轻Web服务器负载压力。
(3)实现负载均衡的功能
反向代理也可以实现负载均衡的功能,而通过负载均衡构建的应用集群可以提高系统总体处理能力,进而改善网站高并发情况下的性能。
动静分离
应用服务器性能优化
应用服务器性能优化的手段我们一般使用的有:分布式缓存、对应用进行微服务化拆分、异步操作等。
分布式缓存
当我们要提高整个系统的响应性能,我们首先想到的可能就是利用缓存来实现,缓存主要用来存放那些读写比很高、很少变化的数据。应用程序读取数据时,先到缓存中读取,如果读取不到或数据已失效,再访问数据库,并将数据再次写入缓存,当数据修改时,则将缓存清除,保证数据的正确性和及时性。
分布式缓存指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务,其架构方式有两种,一种是以 JBoss Cache为代表的需要更新同步的分布式缓存,一种是以Memcached为代表的不互相通信的分布式缓存。
微服务化拆分
微服务是一种架构模式,它提倡将单一应用程序划分成一组最小集的服务,服务之间互相协调、互相配合,为用户提供最终价值。在微服务架构中,每个服务都是独立的业务单元,与其他服务高度解耦,只需要改变当前服务本身,就可以完成独立的开发、测试和部署。
异步操作
使用消息队列将调用异步化,可改善网站的扩展性,提高网站系统的性能。消息队列具有很好的削峰作用,即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。
在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,同时也使得响应延迟加剧。在使用消息队列后,用户请求的数据发送给消息队列后立即返回,再由消息队列的消费者进程(通常情况下,该进程通常独立部署在专门的服务器集群上)从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度远快于数据库(消息队列服务器也比数据库具有更好的伸缩性),因此用户的响应延迟可得到有效改善。
数据存储服务器性能优化
读写分离
高性能数据库集群的第一种方式是“读写分离”,其本质是将访问压力分散到集群中的多个节点,但是没有分散存储压力,读写分离的基本原理是将数据库读写操作分散到不同的节点上
读写分离的基本实现是:
(1)数据库服务器搭建主从集群,一主一从、一主多从都可以。
(2)数据库主机负责读写操作,从机只负责读操作。
(3)数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。
(4)业务服务器将写操作发给数据库主机,将读操作发给数据库从机。
分库分表
分库分表就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)中,以达到分散单台设备负载的效果。
使用NOSQL数据库
NoSQL有灵活的数据模型等优点,比如 可使用Dynamodb 等
垂直伸缩
通过升级硬件和网络吞吐能力可以实现垂直伸缩。由于不需要改变应用架构,所以通常被认为是最简单的短期伸缩性方案
(1)通过使用RAD(独立冗余磁盘阵列)增加O吞吐能力,主要包括以下硬件升级措施:
(1)通过切换到SsD(固态硬盘)改善MO访问速度。
(2)通过增加內存减少WO操作。
(3)通过升级网络接口或者增加网络接口提高网络吞吐能力。
(4)更新服务器使用更多处理器或者更多超线程
评论