Architecture 实现模块化体系结构的RFC

Architecture 实现模块化体系结构的RFC,architecture,service,high-availability,Architecture,Service,High Availability,寻找关于web应用程序模块化的意见。无论使用何种语言,大多数应用程序都有后端数据库,并支持与各自的web应用程序服务器(Apache、IIS、Lighttp等)的连接,但我处理过的许多开发人员在使用Memcached或web应用程序直接处理空间之外的任何东西时遇到了问题 web应用程序的模块化是我所认为的一件好事,还是我遗漏了一些东西,导致从高级开发人员到CTO的每个人都对将业务逻辑的特定部分从web前端转移到专门的后端服务犹豫不决 例如,几年前,我在一个流量非常高的网站的项目设计会议上被否决了

寻找关于web应用程序模块化的意见。无论使用何种语言,大多数应用程序都有后端数据库,并支持与各自的web应用程序服务器(Apache、IIS、Lighttp等)的连接,但我处理过的许多开发人员在使用Memcached或web应用程序直接处理空间之外的任何东西时遇到了问题

web应用程序的模块化是我所认为的一件好事,还是我遗漏了一些东西,导致从高级开发人员到CTO的每个人都对将业务逻辑的特定部分从web前端转移到专门的后端服务犹豫不决

例如,几年前,我在一个流量非常高的网站的项目设计会议上被否决了,当时我建议我们将流程密集型ACL逻辑从前端框架中剥离出来,并在后端将其转换为半集群式服务应用程序。对我来说,好处在于代码的更清晰分离,以及通过使用REST/JSON作为PHP和Python之间的桥梁,在多个地方重用ACL逻辑的能力

不同意我想法的开发人员认为它“太复杂”,但我就是不明白怎么做?我的观点是,正如表示层可以有标记汤一样,也可以而且经常有一个逻辑汤,代码是如此紧密地结合在一起,以至于如果出现问题,几乎不可能执行“外科手术”修复

因此,为了缩短时间,将大型应用程序分解为独立但协作的进程(而不是线程或子请求)的优点是什么。MySQL、Memcache和类似的服务流程都很棒……但为什么不做其他事情呢?这条路怎么会“太复杂”?

嗯,有时候“太复杂”的意思是“我不想在我的混乱区域之外思考。”

基本概念听起来不错——您在这里谈论的是相当合理的面向服务的体系结构

现在,就正反两方面而言,反对它的第一件事是,你确实必须让人们在舒适区之外思考。一个更具技术性的缺点是,您需要保留实际上是会话状态的内容。假设您从身份验证服务中提取身份验证令牌;该令牌将如何与正确的用户会话保持关联

另一个问题是调试可能更困难,因为它的发生更加动态


不过,在专业方面,如果您能够满足会话状态问题,那么您将获得一个高度可扩展的体系结构;如果您需要更多的服务,您可以扩大服务器或简单地添加另一台服务器。

我喜欢将核心服务器/业务逻辑功能与web应用程序代码分离。这有几个不同的原因:

  • 您可以更好地控制业务逻辑。将无法将此与GUI代码混合在一起,从而造成混乱。您希望将所有业务逻辑分开,以便以后可以制作一个API来调用代码功能,而不希望任何业务逻辑进入GUI代码
  • 从一开始,您就必须设计一个好的API,您必须使用自己从客户端与服务器通信。客户端可以是web界面,也可以是远程用户
  • 稳定。GUI web代码很容易编写错误,并消耗过多内存,从而导致整个应用程序瘫痪
  • 要进行扩展,可以将这些单独的组件移动到不同的服务器。如果您使用的缓存系统已经允许集群扩展,那么只需添加更多缓存服务器即可
  • 我发现,应用程序更新最常对GUI代码进行,因此大多数时候不必关闭核心服务
  • 安全。您可以确保安全代码是在服务器代码中实现的,因此如果有人使用您的API,他们将无法绕过进入GUI代码的任何安全代码

  • 我们的系统有一个作为Java应用程序实现的核心“引擎”服务。web应用程序也是用Java编写的,(目前)通过RMI进行通信。我们的站点/应用程序正在增长,我们还没有开始使用像memcached或JCS这样的缓存服务

    好吧,从好的方面来说,我在这个新项目上已经有了资历……所以也许是时候打破+2的管理模式了。