李智慧老师的大型网站架构已经买了两年了,之前大体看过一次,不过还未内化为自己的本领,最近项目空闲,决定尽力掌握这部分的知识,以跟上大师的节奏。今天是儿童节,祝自己和大家心态永远年轻,即使没有年轻的身体,也一定要有纯净的灵魂。
电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

发展历程

网站的发展和生物一样,都会经历不同的阶段,通过不断的成长而塑造成一个成熟的个体。也就是说大型网站不是生来就有的,也是跟随着公司业务的发展,不断推进的。毕竟网站是公司业务的载体,而不是主体,这和纯技术公司有很大的不同。李老师说的好,"是业务成就了技术,是事业成就了人"。在实际的设计中,一定谨记沟通的重要性,不能为了技术而技术,有时候合理的沟通,通过业务流程合理的改变可以解决很多技术无法解决的问题,比如12306网站通过分时段销售,排队等策略很好的解决了春运购票高峰的问题。接下来,以时间为序简单介绍一下大型网站野蛮生长的发展历程。

  1. 初始阶段:比如常见lamp,再Linux环境中,使用php构建网站,mysql数据库,部署在apache上。

  2. 应用服务和数据服务分离:随着业务的发展,越来越多的uv导致性能下降,越来越多的数据导致存储空间不足,因此需要将系统分为3个部分,分别是数据库服务器(内存和硬盘空间大),应用服务器(更强大CPU),文件服务器(图片等静态资源,更大的硬盘容量)。

  3. 使用缓存改善性能:网站访问也遵循”28定律“,比如网上购物,大家都会集中浏览成交数高、评价良好的少数商品。既然业务访问集中在小部分数据上,就可以将这部分数据缓存起来,减少数据库的压力,提高网站性能。以物理上来划分,缓存可以分为本地缓存和缓存在分布式缓存服务器上的远程缓存,前者高效但空间小,后者容量理论上可以无限扩展。

  4. 使用应用服务器集群改善网站并发能力:在使用缓存后,数据访问压力减小,但单一应用服务器能处理的并发请求仍然有限,因此需要构建应用服务器集群,通过负载均衡服务器来分发请求。

  5. 数据库的读写分离:虽然之前增加了缓存,但部分的读操作(未命中)和全部的写操作还是要访问数据库,当规模进一步增加时,数据库依然会成为瓶颈,因此可以通过数据库主从热备的方式来实现数据库的读写分离,通过主数据进行写操作,从数据库进行读操作。

  6. 使用反向代理和CDN加速网站响应:随着业务版图的进一步扩展,用户分布越来越广泛,不同地区访问网站时速度差别会很大。而访问延迟和用户流失率正相关,因此需要通过CDN和反向代理等手段,为用户提供更好的服务。两者的基础都是缓存,CDN部署在网络提供商的机房,当用户访问时可以从距离最近的机房获取数据,反向代理部署在网站中心机房,访问首先由反向代理服务器处理,如果缓存中有客户所需数据,直接返回即可。

  7. 使用分布式文件系统和分布式数据库系统:分布式数据库时网站数据库拆分的最后手段,只有在单表数据规模特别大时才使用,通常应该采用业务分库,既简单也合理。分布式文件系统比较常见,比如Hadoop的基础HDFS。

  8. 使用NoSQL和搜索引擎:NoSql和搜索引擎技术具有可伸缩的分布式特性,应用服务器可以通过统一的数据访问磨矿访问各种数据,减轻应用程序管理数据源的麻烦。

  9. 业务拆分:对于大型网站,分而治之是最棒的手段,比如电商网站,可以将商铺、订单、买家、卖家、支付等拆分为不同的产品线,归属不同业务团队。每个应用独立部署维护(docker),应用间通过链接建立关系,相互间可以通过消