网站架构演变
大型网站介绍
与传统企业应用系统相比,大型互联网网站系统具有以下特点1、大流量、高并发
这一点往往是传统企业应用系统根本就不会遇到的问题,比如Goole每日访问量都是几十亿,如果服务器端处理不好早就被压的宕机了。2、高可用
由于其面向的受众用户很多,所以对其要求也高,系统7 x 24小时运转。3、海量数据
需要存储和管理的数据非常的庞大,facebook天上传图片量就达到数亿张。4、用户分布广泛,网络情况复杂
跨市跨区跨省甚至跨国家对大型互联网系统都是正常的5、网络安全问题
对于大型网站来说,安全问题就非常重要了,因为被更多的人关注着6、需求变更较频繁
相比传统企业系统有比较固定和成熟的模型和解决方案,互联网系统则比较新,一切都在探索中发展。7、渐进式发展
没有一开始就设计的完美的架构,只有逐渐演变完美的架构
备注:一切最初不是问题的问题,当数据量和用户量递增到一定规模之后不是问题的问题就成为问题了。
网站架构发展史
初始阶段的网站架构
大型网站都是由小型网站发展而来的,网站架构也一样,由小型简单架构到复杂大型架构。
小型网站由于开始访问人数不多,不存在多少的并发量,也许只需要一台服务器就足够了。这阶段往往应用程序、数据库、文件数据都存在同一台服务器上。
经典的LAMP架构往往就是如此
应用服务器和数据库服务器分离
随着网站的发展,越来越多的用户访问,一台服务器提供的性能开始并不能很好满足发展需求。
此时将应用程序、数据库、文件单独各自放在私有服务器上市很有必要的。备注:应用程序、数据库、文件对服务器配置资源要求是不同的。
应用程序服务器:强大的CPU(处理大量的业务逻辑)
数据库服务器:快速磁盘(固态硬盘)和大内存
文件服务器:大容量磁盘
使用缓存改善网站性能
网站中很多的数据都是集中在查询部分数据,因此将一些频繁查询和很少改动的数据作为缓存数据存储在内存中,
可以大大提高网站访问数据性能和减轻数据库查询压力。网站使用缓存通常可以分为两种:
1、应用服务中的内存缓存(很快)
2、分布式缓存(比较快)备注:应用程序中的内存缓存受限于服务器内存大小,并且还存在和应用程序抢占资源情况。
分布式缓存理论上是不存在内存大小限制,因为可以集群。
使用缓存可以有效的减轻网站大流量和并发带给数据库的压力,但是应用程序的压力并没有减小,因此下一步就要使用集群了来减轻应用服务器压力了
应用服务器集群改善网站并发能力
使用集群式网站解决高并发、海量数据问题的常用和有效的手段。当一台服务器处理能力有限时,
不要试图换更强大的服务器,因为随着业务和流量的增大,再强大的单台服务器都很能满足性能要求。
备注:
1、负载均衡我们可以选择F5(硬件负载)/nginx(软件负载)
2、应用程序服务器和缓存服务器的集群相对比较简单容易实现
3、最难实现的可能就是数据库服务器的集群了
数据库读写分离提高网站并发能力
随着网站的发展,数据库再一次成为了性能瓶颈。由于读库和写库都在一个数据库服务器中操作因此数据库压力还是很大。此时将数据库分为一个主库多个读库就可以大大减轻数据库访问压力了。主库:只进行写/更新操作
从库:只进行查询操作
从库的查询时存在一点点时延的(比较小)数据库主从热备份,基于日志推拉模式来同步数据
备注数据库读写分离后程序段如何访问数据库
1、根据业务是查询操作还是写入操作指定不同的数据库配置
2、由数据库中间件单独统一处理,对请求的SQL语句分析,指定请求数据库
使用反向代理和CDN加速网站响应
由于地理因素和网络环境因素,导致网络环境比较复杂,因此要加速网站访问速度可以借组CDN和反向代理。CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户访问网站服务时,
可以从最近的网络提供商机房那里获取数据(通常是静态文件)。而反向代理则部署在网站的中心机房,
当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器缓存着用户请求资源的话,那么就直接响应用户。
使用CDN和反向代理的目的都是为了尽早返回数据给用户,一方面提高用户访问速度,另一方面可以减轻后端服务器的负载压力。
使用分布式文件系统和分布式数据库系统
分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大时才使用。
更多时候我们倾向业务拆分,将不同的业务数据放在不同的物理服务器上。
使用NO-SQL和搜索引擎
随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系型数据库技术入股NOSQL和非数据库查询技术如搜索引擎。
NoSQL和搜索引擎都是来自互联网的技术手段,对可伸缩的分布式特性具有很好的支持。
应用服务器则通过一个统一的数据访问模块访问各种数据源,减轻应用程序管理诸多数据源的麻烦。
业务拆分
良好的业务拆分可以使得原本复杂的网站架构降低复杂度。
参考
1、大型网站技术架构