大型技术网站,都是一项非常庞繁宏大的系统工程。

米扑科技,一家初创企业,从一开始就非常重视技术积累和系统架构。

米扑博客,从网上搜集了一些系统架构资料,整理了本文,分享给技术读者。

 

本文内容大部分来自《大型网站技术架构:核心原理与案例分析》(李智慧 著),这本书很值得一看,强烈推荐。

摘要的核心技术点,可参见米扑博客:大型网站技术架构的知识总结大型网站技术架构的知识总结大型网站技术架构:核心原理与案例分析

 

大型网站的挑战主要来自庞大的用户,高并发的访问和海量数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得棘手。

大型网站架构主要就是解决这类问题,网站系统架构层次,如下图所示:

1、前端架构

前端指用户请求到达网站应用服务器之前经历的环节,通常不包含网站业务逻辑,不处理动态内容。

浏览器优化技术

并不是优化浏览器,而是通过优化响应页面,加快浏览器页面的加载和显示,常用的有页面缓存、合并HTTP、js/css/img等资源,减少请求次数、使用页面压缩等。

CDN

内容分发网络,部署在网络运营商机房,通过将静态页面内容分发到离用户最近最近的CDN服务器,使用户可以通过最短路径获取内容。

动静分离,静态资源独立部署

静态资源,如JS、CSS等文件部署在专门的服务器集群上,和Web应用动态内容服务分离,并使用专门的(二级)域名。

图片服务

图片不是指网站Logo、按钮图标等,这些文件属于上面提到的静态资源,应该和JS、CSS部署在一起。

这里的图片指用户上传的图片,如产品图片、用户头像等,图片服务同样适用独立部署的图片服务器集群,并使用独立(二级)域名。

反向代理

部署在网站机房,在应用服务器、静态资源服务器、图片服务器之前,提供页面缓存服务。

DNS

域名服务,将域名解析成IP地址,利用DNS可以实现DNS负载均衡,配置CDN也需要修改DNS,使域名解析后指向CDN服务器。

 

2、应用层架构

应用层是处理网站主要业务逻辑的地方。

开发框架

网站业务是多变的,网站的大部分软件工程师都是在加班加点开发网站业务,一个好的开发框架至关重要。

一个号的开发框架应该能够分离关注面,使美工、开发工程师可以各司其事,易于协作。同时还应该内置一些安全策略,防护Web用攻击。

页面渲染

将分别开发维护的动态内容和静态页面模板集成起来,组合成最终显示给用户的完整页面。

负载均衡

将多台应用服务器组成一个集群,通过负载均衡技术将用户请求分发到不同的服务器上,以应对大量用户同时访问时产生的高并发负载压力。

Session管理

为了实现高可用的应用服务器集群,应用服务器通常设计为无状态,不保存用户请求上下文信息,但是网站业务通常需要保持用户会话信息,需要专门的机制管理Session,使集群内甚至跨集群的应用服务器可以共享Session。

动态页面静态化

对于访问量特别大而更新又不很频繁的动态页面,可以将其静态化,即生成一个静态页面,利用静态页面