说道大型网站,就的先说大型网站的特点:高并发,大流量,高可用,海量数据等。下面就说说大型网站的架构演化过程吧。
1、初始阶段的网站架构
初始阶段都比较简单,通常一台服务器就可以搞定一个网站了,看图。
应用程序、数据库、文件等所有资源都在一台服务器上,通常使用 Linux PHP MySQL Apache 就可以完成整个项目部署,然后再买个域名,租一个廉价的服务器就可以开始我们的网站之旅了
2、应用服务和数据服务分离
随着网站业务的发展,一台服务器逐渐不能满足需求;这时候就需要将应用和数据分离,如图。
38.21.228.1
38.21.228.2
38.21.228.3
38.21.228.4
38.21.228.5
38.21.228.6
38.21.228.7
38.21.228.8
38.21.228.9
38.21.228.10
38.21.228.11
38.21.228.12
38.21.228.13
38.21.228.14
38.21.228.15
38.21.228.16
38.21.228.17
38.21.228.18
38.21.228.19
38.21.228.20
38.21.228.21
38.21.228.22
38.21.228.23
38.21.228.24
38.21.228.25
38.21.228.26
38.21.228.27
38.21.228.28
38.21.228.29
38.21.228.30
38.21.228.31
38.21.228.32
38.21.228.33
38.21.228.34
38.21.228.35
38.21.228.36
38.21.228.37
38.21.228.38
38.21.228.39
38.21.228.40
38.21.228.41
38.21.228.42
38.21.228.43
38.21.228.44
38.21.228.45
38.21.228.46
38.21.228.47
38.21.228.48
38.21.228.49
38.21.228.50
38.21.228.51
38.21.228.52
38.21.228.53
38.21.228.54
38.21.228.55
38.21.228.56
38.21.228.57
38.21.228.58
38.21.228.59
38.21.228.60
38.21.228.61
38.21.228.62
38.21.228.63
38.21.228.64
38.21.228.65
38.21.228.66
38.21.228.67
38.21.228.68
38.21.228.69
38.21.228.70
38.21.228.71
38.21.228.72
38.21.228.73
38.21.228.74
38.21.228.75
38.21.228.76
38.21.228.77
38.21.228.78
38.21.228.79
38.21.228.80
38.21.228.81
38.21.228.82
38.21.228.83
38.21.228.84
38.21.228.85
38.21.228.86
38.21.228.87
38.21.228.88
38.21.228.89
38.21.228.90
38.21.228.91
38.21.228.92
38.21.228.93
38.21.228.94
38.21.228.95
38.21.228.96
38.21.228.97
38.21.228.98
38.21.228.99
38.21.228.100
38.21.228.101
38.21.228.102
38.21.228.103
38.21.228.104
38.21.228.105
38.21.228.106
38.21.228.107
38.21.228.108
38.21.228.109
38.21.228.110
38.21.228.111
38.21.228.112
38.21.228.113
38.21.228.114
38.21.228.115
38.21.228.116
38.21.228.117
38.21.228.118
38.21.228.119
38.21.228.120
38.21.228.121
38.21.228.122
38.21.228.123
38.21.228.124
38.21.228.125
38.21.228.126
38.21.228.127
38.21.228.128
38.21.228.129
38.21.228.130
38.21.228.131
38.21.228.132
38.21.228.133
38.21.228.134
38.21.228.135
38.21.228.136
38.21.228.137
38.21.228.138
38.21.228.139
38.21.228.140
38.21.228.141
38.21.228.142
38.21.228.143
38.21.228.144
38.21.228.145
38.21.228.146
38.21.228.147
38.21.228.148
38.21.228.149
38.21.228.150
38.21.228.151
38.21.228.152
38.21.228.153
38.21.228.154
38.21.228.155
38.21.228.156
38.21.228.157
38.21.228.158
38.21.228.159
38.21.228.160
38.21.228.161
38.21.228.162
38.21.228.163
38.21.228.164
38.21.228.165
38.21.228.166
38.21.228.167
38.21.228.168
38.21.228.169
38.21.228.170
38.21.228.171
38.21.228.172
38.21.228.173
38.21.228.174
38.21.228.175
38.21.228.176
38.21.228.177
38.21.228.178
38.21.228.179
38.21.228.180
38.21.228.181
38.21.228.182
38.21.228.183
38.21.228.184
38.21.228.185
38.21.228.186
38.21.228.187
38.21.228.188
38.21.228.189
38.21.228.190
38.21.228.191
38.21.228.192
38.21.228.193
38.21.228.194
38.21.228.195
38.21.228.196
38.21.228.197
38.21.228.198
38.21.228.199
38.21.228.200
38.21.228.201
38.21.228.202
38.21.228.203
38.21.228.204
38.21.228.205
38.21.228.206
38.21.228.207
38.21.228.208
38.21.228.209
38.21.228.210
38.21.228.211
38.21.228.212
38.21.228.213
38.21.228.214
38.21.228.215
38.21.228.216
38.21.228.217
38.21.228.218
38.21.228.219
38.21.228.220
38.21.228.221
38.21.228.222
38.21.228.223
38.21.228.224
38.21.228.225
38.21.228.226
38.21.228.227
38.21.228.228
38.21.228.229
38.21.228.230
38.21.228.231
38.21.228.232
38.21.228.233
38.21.228.234
38.21.228.235
38.21.228.236
38.21.228.237
38.21.228.238
38.21.228.239
38.21.228.240
38.21.228.241
38.21.228.242
38.21.228.243
38.21.228.244
38.21.228.245
38.21.228.246
38.21.228.247
38.21.228.248
38.21.228.249
38.21.228.250
38.21.228.251
38.21.228.252
38.21.228.253
38.21.228.254
对于这三台服务器要求各不相同
1.应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU 2.数据库服务器 需要快速的进行磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存 3.文件服务器 需要存储用户上传的文件资源,因此需要更大的硬盘存储空间
应用与数据分离后,各个的职责变得更加专一,网站的性能得到进一步的提升,但随着用户的继续增加,我们需要对网站架构进一步优化
3.使用缓存改善网站性能
毫无疑问,现在的网站基本上都会使用缓存,即:80%的业务访问都会集中在20%的数据上。
网站的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存
本地缓存 的访问速度会快一些,但是受应用服务器内存限制,缓存数据量很有限,而且会出现内存争用的情况 远程分布式缓存 可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务
4、使用应用服务器集群改善网站的并发处理能力
因为单一应用服务器能够处理的请求连接有限,在网站访问高峰时期,应用服务器会成为整个网站的瓶颈。因此使用负载均衡处理器势在必然。通过负载均衡调度服务器,可将来自浏览器的访问请求分发到应用的集群中的任何一台服务器上。
5、数据库读写分离
在使用了缓存后,大多数的操作不经过数据库访问就能完成,但仍有一部分读操作(缓存访问未命中,缓存过期)和所有的写操作需要访问数据库,在网站的用户量达到一定时,数据库的负载问题就来了
当用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。而目前主流的数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器上。网站利用数据库这一功能实现数据库读写分离,从而改善数据库负载压力。
应用服务器在写操作的时候,访问主数据库,主数据库通过主从复制机制把数据同步更新到从数据库,这样当应用服务器进行读操作的时候,就能访问从数据库获取数据
6、使用反向代理和CDN加上网站相应
提高网站的访问速度,主要手段有使用CDN和反向代理。
CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,而反向代理是部署在网站的中心机房,当用户请求到达中心机房后,首先访问的反向代理,如果反向代理缓存着用户请求的资源,则直接返回给用户。
7、使用分布式文件系统和分布式数据库系统
任何强大的单一服务器都满足不了大型网站持续增长的业务需求。
分布式数据库时网站数据库拆分的最后手段,只用在单表数据规模非常大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务拆分,将不同业务的数据部署在不同的物理服务器上。
8、使用NoSQL和搜索引擎
搜素引擎也基本已经形成现在大型网站必须提供的功能了,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。
9、业务拆分
对于大型网站,我们可以分而治之,把整个网站的业务分为不同的模块,比如大型的交易购物完整可以分为首页、店铺、订单、买家等,分别交给不同的业务团队来负责
同时我们将一个网站根据模块划分拆分成多个应用,每个应用进行单独的部署和维护,应用之间通过超链接建立关系(指向不同的应用地址),最后通过相同的数据存储系统来构成一个互相关联的完整系统
10、分布式服务
随着业务拆分,整个系统越来越大,应用的整体复杂度呈指数级增加,部署维护越来越困难,并且所有的应用服务器都要与数据库服务连接, 在数万台服务器规模的情况下,这些连接的数目是服务器规模的平方,导致资源不足
这时候就要对相同的业务进行提取,独立部署,把这些可重用的业务和连接数据库等,提取出来作为公共业务服务,而应用系统只需要通过分布式服务访问公共业务服务完成业务操作