我正在重写一个大网站,需要非常扎实的架构,这里是我的几个问题,请原谅我混合苹果和橙子,也许还有猕猴桃:)我做了很多研究,最后完全糊涂了。 / p>
主要问题:您将采用哪种方法来构建一个预计会以各种方式增长的大型网站?
单一入口点,数据库中的页面数据,通过将GET变量与数据库条目相关联来拉出(?pageid = what)
单个入口点,页面数据在单独的文件中,包含基于GET变量(?pageid =包含whatever.php的任何内容)
MVC(好吧,伙计们,我全都是为了它,但除了检查那里的所有教程和框架之外无法掌握这个概念,它们是否将“视图”存储在数据库中?从示例中我看来,如果你有1000个相同类型的页面,它们可以由1个模型塑造,但我仍然需要1000个“视图”文件?)
PAC - 这对我来说更合乎逻辑,但没有找到太多资源 - 如果这是一个好方法,你能推荐任何书籍或链接吗?
DAL / DAO / DDD - 在发布问题之前,我通过努力阅读堆栈溢出了解了这些术语。不确定它是否属于此列表
坐下来创建我自己的建筑(如果没有人在这里启发我可能会这样做)。
未提及的内容......
感谢。
答案 0 :(得分:7)
网站的可扩展性/可用性(低流量)可以通过您提及的任何项目得到最好的解决。特别是第1点和第2点;将页面定义存储在数据库中是绝对禁止的。 MVC和其他类似模式更多的是代码清晰度和维护,而不是可伸缩性。
一条重要的缺失信息是您期望的并发点击次数/秒?有时,没有建立高流量网站的人会对实际构成“可扩展性噩梦”的命中率感到惊讶。
有关于如何设计可扩展架构的书籍,因此SO帖子不能主题正义,但是一些非常顶级的概念,没有特别的顺序,是:
此时,您已优化了一台服务器上的行为,并且您必须“向外扩展”。现在,事情变得非常复杂。各种类型的负载均衡方案(分片,DNS驱动,哑平衡等),将读取数据与不同数据库上的写入数据分离,转到像Google Apps这样的虚拟化解决方案,将静态内容卸载到大型CDN服务,使用像Erlang或Scala这样的语言,并将你的应用程序并行化等......
答案 1 :(得分:2)
单个入口点,页面中的数据 数据库,通过关联GET拉取 变量与数据库条目 (?的pageid =无论)
潜在的维护噩梦。如果您的团队超过2-3人,也可以进行开发。您需要创建一组严格的规则供每个人遵守 - 如果使用MVC,那将更好地花费。同样适用于2.
MVC(好吧,伙计们,我全都是为了它,但是 除此之外无法掌握这个概念 检查所有教程和框架 在那里,他们存储“视图” 数据库?从例子中可以看出来 如果你有1000页的相同 他们可以用1个型号塑造, 但我还需要1000 “查看”文件?)
这取决于有多少页面布局。大多数MVC框架允许您使用结构化视图(即主页面视图,子视图)。将视图视为网页的HTML模板。您需要的模板和子模板中有多少是您拥有的视图数量。我相信大多数网站最多可以获得50个主视图和最多100个子视图 - 但这些都是非常大的网站。看一下我运行的一些网站,它总共更像50个观看次数。
DAL / DAO / DDD - 我了解了这些 努力阅读的条款 发布前堆栈溢出 题。不确定它是否属于 这个清单
确实如此。如果您需要元视图或元模型,DDD非常棒。比如,如果所有模型的结构非常相似,但仅在使用的数据库表中有所不同,并且您的视图几乎将1:1映射到模型。在这种情况下,这是DDD的好时机。一个很好的例子是一些ERP软件,你不需要为所有数据库表单独设计,你可以使用一些统一的方式来完成所有的CRUD操作。在这种情况下,您可能可以使用一个模型和几个视图 - 所有视图都是在运行时使用将数据库列,类型和规则映射到编程语言逻辑的元模型动态生成的。但是,请注意,构建高质量的DDD引擎需要花费一些时间和精力,以便您的应用程序看起来不像是黑客攻击MS Access程序。
坐下来创造我自己的 建筑(如果没有人可能会这样做) 在这里启发我:)
如果您正在构建一个面向公众的网站,那么您最有可能在MVC上做得很好。一个非常好的起点是查看CodeIgniter视频教程。它帮助我理解MVC的真正含义以及如何使用它比我阅读的任何HOWTO或手册更好。他们只需要29分钟:
http://codeigniter.com/tutorials/
享受。
答案 2 :(得分:1)
我是MVC的粉丝,因为我发现当一切都有一个地方并且很好并且划分区域时,更容易扩展你的团队。需要一些时间来习惯,但最简单的方法就是深入了解。
那说肯定要检查你当地的图书馆,看看他们是否有关于缩放的O'Reilley书:http://oreilly.com/catalog/9780596102357这是一个很好的起点。
答案 3 :(得分:1)
如果您正在创建一个“大”网站并且没有完全掌握MVC或Web框架,那么CMS可能是更好的途径,因为您可以根据需要使用插件扩展它。使用此路由,您可以更多地关注内容和页面结构,而不是平台。只要您选择合适的CMS。
答案 4 :(得分:0)
我建议在野外创建一个带有一些web mvc框架的模拟应用程序并选择一个,你的开发足够顺利。如果您想要掌握mvc的概念并准备好轻松地向Web添加新功能,那么在可靠的基础上建立代码是至关重要的。