天猫网站内容架构分析(大型网站架构演化过程本人参考资源总结而得(一))

优采云 发布时间: 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、其他

  目前对于上述架构的实现已经有很多成熟稳定的技术支持,博客会持续更新和添加相关技术文章。

  对于架构的选择,不应一味追求大而全,而应根据当前业务和后续发展情况选择合理的选择,既可以节省直接成本,又可以降低开发、部署和维护的成本。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线