提到大型网站,总会听到分布式、集群、K8S(kubernetes)、Docker、虚机、CDN、负载均衡等概念
其实这些都是大型网站部署相关的概念
只是过多的概念让大型网站的部署变得很难理解
那么,本期我们就来聊一聊网站系统的部署架构
以主流的B/S架构网站为例,大型网站的部署一般分为几个部分
1、前端部分
2、后端部分
3、云计算部分
4、存储部分与第三方云计算服务部分
1、前端部分
单个前端服务器一般包含2个部分,Web服务器软件、网页资源文件
前端部分Web服务器软件是Nginx、Apache等软件
其作用是在接收到请求后,在磁盘上找到对应的网页资源文件,并将其发送给请求端
网页资源文件指的是网页的静态资源文件,包括HTML文件、CSS文件、JavaScript文件、图片文件、视频文件等
其中,一部分网页资源文件可能会存在单独的文件服务当中(如上传的头像、视频等)
对于前端服务器集群而言,前面需要增加负载均衡以分发请求
负载均衡可以是自己搭建的服务器(Nginx等)或者是购买云服务
在负载均衡前面需要增加CDN服务(缓存网页资源文件),增加CDN是为了加速网页资源文件的下载速度
2、后端部分
单个后端服务器一般包含2个部分,Web应用服务器软件、后端应用程序
后端部分Web应用服务器软件根据不同的开发语言有所区别,Java的话一般是Tomcat或者Jetty
其作用是接收到请求后,调用相对应的后端应用程序,并把后端应用程序处理的结果返回请求端
后端应用程序是真正处理请求的程序,java编写的话一般是以.war结尾的文件
后端应用程序在网站系统中处于“司令塔”的位置
会调用很多第三方软件,如数据库、非关系型数据库(如Redis)、消息队列、第三方云计算服务等
而且后端应用程序还会操作共享文件,如上传头像、视频等
对于后端服务器集群而言,前面需要增加负载均衡以分发请求,负载均衡可以与前端服务共用
3、云计算部分
由于没有比较通用且流行的框架,其结构因具体实现方式而异。
云计算部分不过云计算部分的工作原理一般是,后端应用程序向消息队列下发任务,云计算服务软件监听消息队列并执行任务
云计算服务集群一般是监听同一个消息队列,以抢占的方式获取任务的,所以不需要考虑分发任务的问题
当然,云计算服务根据具体的功能,也可能会使用第三方软件(如数据库等)或者操作共享文件
后续我们将会详细讨论云计算服务部分的架构
4、存储部分与第三方云计算服务部分
存储部分包括数据库、文件服务器、非关系型数据库等
储存部分与第三方云计算服务部分这些软件都会提供自己的集群方式
第三方云计算服务部分一般是通过API调用的
总结
在决定使用某个服务之前,除了明确功能点以外,还需要明确其是否能承接当前系统的请求量
总体的部署架构如图所示
总体的部署架构根据实际项目,可能会有一些细节上的调整
另外,根据项目规模,图中的每个部分或软件都可能部署多个
结尾解释一下开头提到的一些概念
集群指的是,多个服务器提供相同的功能,集群主要是为了降低单台服务器的压力和突破单台服务器的性能极限
分布式指的是,不同服务器提供不同的功能,简单地说,就是把不同软件安装在不同的服务器
主要是为了专门服务器做专门的事情,即方便管理,又能更有针对性地选择物理性能
Docker是Linux系统的容器管理软件,管理的是单个服务器,一个服务器是可以有多个容器的,每个容器可以简单地理解为一个独立服务器(环境是隔离的),但容器间一般是共用物理性能的
K8S是docker等容器的管理软件,管理多个服务器中的多个容器
虚机是云服务器的一个概念,虚机可以认为是单独的服务器,一般是拥有独立物理性能的