|
|
|
@ -39,7 +39,7 @@
|
|
|
|
|
|
|
|
|
|
大型网站都是从小型网站发展而来,网站架构也是一样,是从小型网站架构逐步演化而来。小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,这时的网站架构如下图所示,应用程序、数据库、文件等所有资源都在一台服务器上
|
|
|
|
|
|
|
|
|
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710151757707.png" alt="image-20220710151757707" style="zoom:50%;" />
|
|
|
|
|
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220710151757707.png" alt="image-20220710151757707" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
#### 2.应用服务和数据服务分离
|
|
|
|
|
|
|
|
|
@ -51,7 +51,7 @@
|
|
|
|
|
|
|
|
|
|
文件服务器需要存储大量用户上传的文件,因此需要更大的硬盘
|
|
|
|
|
|
|
|
|
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710151937584.png" alt="image-20220710151937584" style="zoom:50%;" />
|
|
|
|
|
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220710151937584.png" alt="image-20220710151937584" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
#### 3.使用缓存改善网站性能
|
|
|
|
|
|
|
|
|
@ -61,13 +61,13 @@
|
|
|
|
|
|
|
|
|
|
远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务
|
|
|
|
|
|
|
|
|
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710152124678.png" alt="image-20220710152124678" style="zoom:50%;" />
|
|
|
|
|
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220710152124678.png" alt="image-20220710152124678" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
#### 4.使用集群改善网站并发能力
|
|
|
|
|
|
|
|
|
|
应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数;应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。
|
|
|
|
|
|
|
|
|
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710152332946.png" alt="image-20220710152332946" style="zoom:50%;" />
|
|
|
|
|
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220710152332946.png" alt="image-20220710152332946" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服 务器,Nginx和HAProxy是七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而 Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)
|
|
|
|
|
|
|
|
|
@ -75,7 +75,7 @@
|
|
|
|
|
|
|
|
|
|
随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。
|
|
|
|
|
|
|
|
|
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710152631824.png" alt="image-20220710152631824" style="zoom:50%;" />
|
|
|
|
|
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220710152631824.png" alt="image-20220710152631824" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
#### 6.使用CDN和反向代理
|
|
|
|
|
|
|
|
|
@ -83,31 +83,31 @@
|
|
|
|
|
|
|
|
|
|
而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。
|
|
|
|
|
|
|
|
|
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710152631824.png" alt="image-20220710152631824" style="zoom:50%;" />
|
|
|
|
|
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220710152631824.png" alt="image-20220710152631824" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
#### 7.使用分布式文件系统
|
|
|
|
|
|
|
|
|
|
用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS。
|
|
|
|
|
|
|
|
|
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\1.png)
|
|
|
|
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/1.png)
|
|
|
|
|
|
|
|
|
|
#### 8.使用NoSql和搜索引擎
|
|
|
|
|
|
|
|
|
|
对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有lucene
|
|
|
|
|
|
|
|
|
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\1-16574383609512.png)
|
|
|
|
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/1-16574383609512.png)
|
|
|
|
|
|
|
|
|
|
#### 9.将应用服务器进行业务拆分
|
|
|
|
|
|
|
|
|
|
随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。
|
|
|
|
|
|
|
|
|
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\1-16574384224444.png)
|
|
|
|
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/1-16574384224444.png)
|
|
|
|
|
|
|
|
|
|
#### 10.搭建分布式服务
|
|
|
|
|
|
|
|
|
|
这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择。
|
|
|
|
|
|
|
|
|
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\1-16574385141946.png)
|
|
|
|
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/1-16574385141946.png)
|
|
|
|
|
|
|
|
|
|
总结:
|
|
|
|
|
|
|
|
|
|