大型网站架构演化


对于技术人员来说,“架构”是一个再常见不过的词了。我们会对新员工培训整个系统的架构,参加架构设计评审,学习业界开源系统(例如,MySQL、Hadoop)的架构,研究大公司的架构实现(例如,微信架构、淘宝架构)……虽然“架构”这个词常见,但如果深究一下“架构”到底指什么,大部分人也许并不一定能够准确地回答。

大型网站软件系统的特点

  • 高并发、大流量:需要面对高并发用户,大流量访问。
  • 高可用:系统 7x24小时不间断服务。
  • 海量数据:需要存储、管理海量数据,需要使用大量的服务器。
  • 用户分布广泛,网络情况复杂:很多大型互联网服务的用户都是全球各地的,而且各个运营商之间的通信也是难题。
  • 安全环境恶劣:互联网的开放性,使得有很多网站遭受攻击。
  • 需求快速变更,发布频繁:和传统软件不同,互联网项目为了快速适应市场,满足用户需求,其发布的速度是极高的。
  • 渐进式发展:很多大型的互联网都是从一个小网站开始的,逐渐的发展起来的。

大型网站架构演化发展历程

  1. 初始阶段的网站架构:应用程序、数据库、文件等所有的资源都放在一个服务器上,通常是Linux。用户一多导致性能越来越差。
  2. 应用服务和数据服务分离:应用程序、数据库、文件分别放在三个不同的服务器上。用户多了会导致数据库压力太大,影响整个性能。
  3. 使用缓存改善网站性能:网站访问也遵循着二八定律:80%的业务访问集中在20%的数据上。我们可以将一小部分数据缓存在内存中,就可以减少数据库的压力,改善数据库的写入性能。
  4. 使用应用服务器集群改善网络的并发处理能力:一个服务部署多个节点,通过负载均衡,可以将单台服务器的压力分散到多个服务器上。
  5. 数据库读写分离:大部分主流数据库提供热备功能,通过配置两台数据库的主从关系,可以将一台数据库服务器的数据同步到另一台上。写数据访问主数据库,读数据访问从数据库。
  6. 使用反向代理和CDN加速响应:CDN和反向代理其实都是缓存,区别在于CDN部署在网络提供商的机房,可以在用户访问的时候访问所在最近的机房获取数据;用户首先访问反向代理服务器,如果服务器上有用户请求的资源,可以直接返回给用户。
  7. 使用分布式文件系统和分布式数据库系统:可以使用云上的OSS系统,数据量如果很多,采用分库分表的方式访问。
  8. 使用NoSQL和搜索引擎:随着业务的发展,对数据的存储和检索也很复杂,网站需要一些NoSQL和非数据库查询手段。
  9. 业务拆分:业务越来越多的时候,通过使用分而治之的手段将这个业务分拆不同的产品线,如大型的电商可以分为首页、商铺、订单、买家、卖家等。
  10. 分布式服务:可以将许多相同的业务操作,如用户管理,商品管理等这些公共等业务抽取出来,独立部署。

大型网站演化的价值观

没有什么网站一开始就是大型网站,都是从小型网站发展过来的,淘宝、京东也是如此。大型网站架构要做到可变形,随着网站所要的需求灵活应对。驱动大型网站架构发展的力量是网站的业务发展。不要一味这追随大公司的解救方案,学会借鉴大公司的经验成功模式,而不是跟着抄。也不要盲目追求最新的技术,适合就行。


Author: Re:0
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Re:0 !
 Previous
通过 CompletableFuture 组装异步计算单元 通过 CompletableFuture 组装异步计算单元
CompletableFuture是1.8引入的新特性,一些比较复杂的异步计算场景,尤其是需要串联多个异步计算单元的场景,可以考虑使用 CompletableFuture 来实现。
2022-04-06
Next 
线程池详解 线程池详解
java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类。线程池使用场景:并行操作,异步提交等
2022-03-30
  TOC