高流量网站的推荐结构

Cod*_*oso 13 php model-view-controller dao data-access-layer pac

我正在重写一个大网站,需要非常扎实的架构,这里是我的几个问题,请原谅我混合苹果和橙子,也许还有奇异果:)我做了很多研究,最后完全糊涂了.

主要问题:您将采用哪种方法来构建一个预计会以各种方式增长的大型网站?

  1. 单个入口点,数据库中的页面数据,通过将GET变量与数据库条目相关联来拉出(?pageid = whatever)

  2. 单个入口点,页面数据在单独的文件中,包含基于GET变量(?pageid =包含whatever.php的任何内容)

  3. MVC(好吧,伙计们,我都是为了这个,但是除了检查所有的教程和框架之外无法掌握这个概念,他们是否将"视图"存储在数据库中?从示例中可以看出,如果你有1000页相同的话它们可以由1个模型塑造,但我仍然需要1000个"视图"文件?)

  4. PAC - 这对我来说听起来更合乎逻辑,但没有找到太多资源 - 如果这是一个好方法,你能推荐任何书籍或链接吗?

  5. DAL/DAO/DDD - 在发布问题之前,我通过努力阅读堆栈溢出来了解这些术语.不确定它是否属于此列表

  6. 坐下来创建我自己的架构(如果没有人在这里启发我可能会这样做:)

  7. 没有提到的东西......

谢谢.

alp*_*ogg 7

网站的可扩展性/可用性(低流量)可以通过您提及的任何项目得到最好的解决.特别是第1点和第2点; 将页面定义存储在数据库中是绝对禁止的.MVC和其他类似模式更多的是用于代码清晰度和维护,而不是用于可伸缩性.

丢失信息的一个重要部分是您期望的并发命中/秒数是多少?有时,没有建立高流量网站的人会对实际构成"可扩展性噩梦"的命中率感到惊讶.

有关于如何设计可扩展体系结构的书籍,因此SO帖子将不能用于主题正义,但是一些非常顶级的概念,没有特别的顺序,是:

  • 首先通过查看基于硬件的解决方案来最好地处理可伸缩性.具有一系列SSD磁盘的强大服务器可以有很长的路要走.
  • 使任何可以是静态的静态.尽可能多地从Web服务器服务,而不是数据库服务.例如,网站上的许多页面从数据存储中动态生成数据列表,这些数据列表很少或从未真正改变过.
  • 缓存输出不经常更改,并调整缓存刷新.
  • 将动态页面构建为无状态或异步.查看CQRS和事件源,了解有利于/促进扩展的模式.
  • 调整你的查询.数据库通常是一个很大的瓶颈,因为它是一个共享资源.许多Web应用程序构建器使用创建不良查询的ORM.
  • 调整数据库引擎.备份,复制,扫描,日志记录,所有这些只需要引擎中的一点资源.调整它可以使更快的数据库从横向扩展中获得时间.
  • 减少来自客户端的HTTP请求数.每个HTTP连接都有开销.检查您的页面,看看是否可以增加每个请求中的有效负载,以减少单个请求的总数.

此时,您已经优化了一台服务器上的行为,并且您必须"向外扩展".现在,事情变得非常复杂.各种类型的负载均衡方案(分片,DNS驱动,哑平衡等),将读取数据与不同数据库上的写入数据分离,转到像Google Apps这样的虚拟化解决方案,将静态内容卸载到大型CDN服务,使用像Erlang或Scala这样的语言,并将你的应用程序并行化......

  • 实际上,在#2中,该技术涉及*专门和完全绕过活动缓存子系统*.我已经构建了具有来自数据库数据的完全静态页面的站点,其中该页面的更新由表的更新触发.除了创建相关页面之外,永远不会读取该表.如果表未在几个月内更新,则相关页面不会受到影响.缓存总是涉及一些"轮询",这只是更多的资源命中. (2认同)