天猫网站内容架构分析(大型网站架构演化过程本人参考资源总结而得(一))
优采云 发布时间: 2022-01-19 14:20天猫网站内容架构分析(大型网站架构演化过程本人参考资源总结而得(一))
1、概览
没有经历过网站从小到大的演进过程(这种机会太小了,越来越小了),现在很多网站,从成立之初,已经建立在大型网站提供的云计算服务之上,所有需要的资源都可以按需购买,并且非常容易扩展。不过,我觉得还是有必要了解一下大网站的演变过程。以下是来自各种来源的参考资料汇编。
2、大型网站架构演进
以下是我参考各种资源的总结。
2.1、初始阶段网站架构
网站刚开始用的人不多,流量也比较小,单台服务器已经完全满足要求了。我们的个人主页和博客可以使用如下结构:
应用程序、数据库和文件等资源都在同一台服务器上。通常也会使用一些开源免费软件来最小化成本。
2.2、应用服务与数据服务分离
随着业务的发展,一台服务器最终将无法满足需求。即应用服务和数据服务可以按需分离:应用服务器、数据库服务器和文件服务器。
他们根据自己的特点对cpu、内存和硬盘有不同的要求:
应用服务与数据服务分离后,不同特性的服务器扮演不同的角色,系统的整体性能将得到很大提升。
2.3、使用缓存提高性能
我们很清楚,并不是所有的资源都被平等地访问,相反,有些资源可能被非常频繁地访问,而另一些则很少被访问。
如果我们把最频繁访问的资源直接放到内存中(或者其他缓存方式),由于不需要从数据库(硬盘)读取,速度会大大提高,但也会增加对内存的需求。
缓存一般分为两种,应用服务器本地缓存和远程缓存。本地缓存由于内存原因不适合存储太多,所以可以专门部署一台内存大的服务器作为远程缓存服务器(速度会比本地缓存慢)。目前有很多缓存技术。常见的 NoSQL 数据库通常用作缓存工具。本地缓存也可以用一些框架来实现。此时的架构如下:
使用缓存后,数据访问压力会大大降低。
2.4、使用服务器集群
业务不断发展后,高并发访问是不可避免的,使用服务器集群是一种常用且有效的方法。
这相当于复制多个应用服务器,然后通过负载均衡服务器将请求分发到不同的应用服务器。他们做同样的事情,但压力会大大减轻:
根据高并发情况,可以增加或减少应用服务器,使系统具有更好的扩展性。
2.5、数据库读写分离
虽然缓存可以在一定程度上优化数据访问,但是当业务发展到一定程度时,数据库的负载压力可能仍然过高,从而成为瓶颈。
目前主流的数据库都支持主从数据库的配置。利用这个特性,我们可以部署两台数据库服务器,一台用于写操作,主库,从库用于读。数据库提供的机制,增量同步到从库,从而提高数据库的负载压力:
为了方便应用服务器的扩展,更方便地访问主从数据库,通常会与应用服务器分离一个专门用于访问数据库的数据访问模块。
2.6、使用反向代理和CDN加速访问
CND 和反向代理都使用缓存的原理。不同的是,前者部署在网络提供商的机房,这样用户在请求资源时就可以从最近的机房获取数据;后者部署在应用服务器的前端。将返回缓存在服务器中的有限数量的可用资源。
这两种技术的主要目的是加速用户访问,使数据返回更快,减少后端服务器的负载压力。
2.7、分布式文件服务器和分布式数据库
随着业务的发展,任何一台强大的服务器都无法满足业务的需求。这时候可以使用分布式数据库和分布式文件服务器。
当数据达到服务器无法支持的程度时,可以拆分业务,将他们使用的数据库服务器部署在不同的物理服务器上:
2.8、使用 NoSQL 和搜索引擎
复杂的数据存储和检索通常使用 NoSQL 和搜索引擎技术来处理:
2.9、业务拆分
随着业务的进一步发展,它也变得更加复杂,使得整个系统难以维护。
这时候可以把整个业务划分成不同的产品线,然后每个产品线可以根据需要划分成不同的应用,这些应用可以分别部署和维护,然后通过超链接、消息队列数据分发和使用权。关联这个完整系统的数据存储系统:
2.10、分布式服务
随着业务越来越小,整个系统的关联越来越复杂,部署和维护仍然非常困难。
这时候,这些业务的一些通用部分就可以独立提取部署,重用,提供统一的服务:
3、其他
目前对于上述架构的实现已经有很多成熟稳定的技术支持,博客会持续更新和添加相关技术文章。
对于架构的选择,不应一味追求大而全,而应根据当前业务和后续发展情况选择合理的选择,既可以节省直接成本,又可以降低开发、部署和维护的成本。