一种可升级的方法来设计Web应用程序系统

Tra*_*v L 7 architecture performance scalability web-applications

许多人在他们的头脑中有可能吸引数百万的在线创业公司,但大多数时候你只有最低的预算(时间和资源),所以你想在一年的时间内交付它.启动后不久,您必须执行一个或一系列升级,其中可能包括:更新基础的代码重构,在软件架构中添加层次结构或重组数据库.这个升级/重构循环继续如下:

  • 您使用的最新版本的语言/框架中提供了新功能.
  • 可能改进产品的新组件/框架/插件的可用性.
  • 要求改变了它的方向,现有产品的设计并不是为了应对新的需求.

以上述为先决条件,我想认真对待这个讨论,并确定Web应用程序可升级解决方案的本质.在讨论中,您可以讨论任何开发阶段(初始,早期升级,增量升级),并涵盖以下其中一项:

  • 选择Web应用程序的语言.
  • 是否决定使用框架?(考虑开销)
  • DBMS的选择及其设计
  • 选择硬件和设置?
  • 需求不断变化的策略(可以是Web应用程序的自然变化)
  • 全面重新设计的战略/决策

Mar*_*ham 5

我们公司的网络解决方案是其第四代,已经在过去8年中相当大的变化.最新一代引入了各种各样的结构来帮助完成这项任务,因为根据新的客户需求更新上一代变得笨拙.因此,我在2009年花了不少时间思考这个问题.

您可以做的最有价值的事情是采用敏捷方法来构建软件.特别是,您应该维护一个可以每天创建(和)新构建的环境.虽然每日构建只是敏捷的一个方面,但这是解决您的问题最重要的做法.虽然这与可升级性本身不同,但它仍然在流程中引入了一个规则,有助于降低代码库变得难以操作的机会(或者您将成为建筑师宇航员).

框架和语言而言,有两个主要要求:框架是长寿和稳定的,环境支持分离关注.在这方面,ASP.NET对我来说效果很好:它以合理的方式发展,没有使旧代码无效的不连续性.我使用单独的业务逻辑层来管理SoC,但ASP.NET现在也支持MVC开发.相比之下,我在使用它几个月后开始不喜欢PHP,因为它似乎只是鼓励混乱的做法会危及未来的升级.

关于DBMS选择,任何现代RDMS(SQL Server,MySQL,Oracle)都能为您提供良好的服务.这里虽然是关键:你需要保持DDL脚本来管理升级.这只是生活中的一个事实.那么,你如何使这个易于处理?来自任何第三方开发人员的最有价值的工具是我从Red Gate获得的SQL Compare副本.这个过程曾经是一个彻头彻尾的噩梦,并且在我找到这个工具之前,我的代码发展能力受到了很大的影响.因此,通用建议是使用存在工具的数据库来比较数据库结构.SQL Server在这方面非常幸运.

硬件几乎是一个不在乎.只要您的开发过程包含合理的发布构建过程,您就可以随时转移到新硬件.

不断变化的需求战略. 再次,请参阅敏捷.我鼓励你们不要再将它们视为"要求" - 传统意义上的大型文件充满了规范.敏捷以重要方式改变了这一点.除了在为外部付费客户签订合同时,我不会保留需求文档,以便我可以确保适当的计费并防止功能蔓延.此时,我们的内部流程非常迅速和流畅,我们的功能请求/错误管理软件(FogBugz,如果您想知道)的报告在记录新版本的营销时用作我们的文档.

总体重新设计策略/决定是:不要.如果你对你将要使用的过程进行合理的思考,选择主流工具,并强制执行一个关注点,那么完全放弃HTTP和RDBMS就会导致全面的重新设计.

如果你足够灵活,任何东西都可以改变,你就不可能永远处于一切必须改变的位置.