Web 应用程序的架构体系变迁

在过去的几年里,Web应用程序开发环境,包括客户端(前端)以及服务器端(后端)在不断地发生变化。在客户端侧,我们已经有了很多优秀且新的JavaScript(或其它脚本语言)框架;而在服务器端,我们有新的架构类型,如单页应用程序、微服务、以及无服务器体系架构。

此文是面向全栈开发者的系列文章,特别是来自服务器端的内容,关于Web应用程序设计和开发的趋势和最佳实践。

我们一起来看服务器端架构已经发生的变化。

刚刚的过去:传统的N层架构

在过去的十年里,互联网已经成为提供内容和服务的首要平台。因此,每个企业都需要走到线上,提供在线服务。这种需求的激增,使得开发人员采用N层架构方法来构建和部署应用程序。

N 层体系结构由多个独立的层组成;每一层都代表着系统的不同关注点。从层次顺序来看,大多数系统通常分为三个主要层:客户端,服务器和持久存储层。

客户端层是最终用户看到并与之交互的内容,通常指的是瘦客户端(如Web浏览器)或胖客户端(比如完整的基于Java Swing / .NET的应用程序) 。

即使电源关闭, 持久存储层也会保留重要数据,并且通常是基本的关系数据库系统(如MySQL,Oracle或SQLServer)。

服务器层位于客户端和存储层之间,是应用程序所有实际操作发生的地方。 由于在这个层中发生了这么多事情,所以服务器层通常被进一步分成多个子层:网络,可用性和持久性。

服务器Web层是应用程序在服务器端的入口,负责处理用户交互,将请求转换为模型,渲染为动态用户界面,会话管理和其它任务。 许多Java开发人员依靠诸如Spring MVC或Struts之类的框架来实现这一层。

服务器业务层是业务逻辑作为组合和定义良好的API(应用程序编程接口 - 函数调用集合)实现的地方。 像EJB,.NET和Spring等技术用来实现这一层。

服务器持久层负责通过对象关系映射(ORM)工具(如Hibernate,EclipseLink,Spring JDBC模板或其他ORM工具)抽取应用程序与存储层特定关系数据库的交互。

下图描述了传统的N层架构体系。

架构转变#1:单页应用的兴起(SPA)

随着Gmail和Facebook等产品的成功应用,开发者开启了Ajax的新时代,整个网页刷新的时代已经成为过去。

应用程序现在只需要根据需要请求必要的内容和信息片段(部分响应),以便用瘦客户机创建高度交互式的用户体验。

以前只有使用胖客户机才能实现这种体验。 在客户端执行此操作所需的额外逻辑并不是什么新鲜事 - 它几乎与以前在服务器Web层中使用的相同。 我们基本上将Web层从服务器移到客户端(Web浏览器)。

然而,这种额外的客户端逻辑带来了新的挑战和复杂性,例如必须处理大量的XML Http请求,并在比以往更深入的层次上理解Web浏览器的DOM对象(文档对象模型)。

为了处理这个额外的复杂性,许多新的基于JavaScript的框架出现以处理低级细节和例行操作。 有些框架有View层,有些则没有; 有些提供了简单的功能,有些是端到端的解决方案。 虽然看起来每隔一天都会有一个新框架出现,但好的框架都利用了以前在服务器Web层成功使用的最佳实践和模式,包括组件,MVC(模型,视图和控制器),注释,依赖注入,服务和通过接口的协议等。

由于Web层已从服务器端移至客户端层,因此在服务器层中引入了新的精简层,以便将现有的服务器业务层直接公开给新的客户端Web层。 这通常是使用自定义SOAP或REST API完成的。这些API的创建以及Web层布局的体系结构转变为支持脱机支持等功能铺平了道路。

但更重要的是,支持多种客户端类型的能力,比如为iOS和Android应用程序以及桌面和移动Web界面提供支持的单一后端接口。

下图描述了体系结构转换:Web层从服务器迁移到客户端。

架构转变#2:微服务的流行

将应用程序构建和部署为单个压缩包的传统方法是如何创建单个应用。而微服务是一种微型应用程序,只实现完整应用程序功能的一小部分。 微服务的目标是做一件事并做好这件事,并且可以使用几乎任何技术栈来实现,不一定与其它服务栈相同。

有许多微服务增加了分布式管理,微服务间通信,身份验证和授权,分布式日志记录和跟踪,服务注册和发现,反向代理和网关等方面的复杂性。有像Spring和Lagom这样的框架可以通过大部分抽象为分布式。

虽然微服务是构建现代应用程序的新趋势,但选择设计和构建单一应用程序并不存在太大问题。 只要软件可扩展性需求和需求仍在大规模变化,使用单一应用程序可以轻松地从单个代码库进行部署,管理与开发。

但是,当应用程序的功能增长、正常运行时间要求更快、可伸缩性需求非常高时,考虑重构或将应用程序设计为一组微型服务是明智的选择。 微服务允许应用程序水平扩展并独立更改,但这些好处不是免费的。 众所周知,分布式应用程序难以监视,管理和测试。

下图描述了微服务的流行。

架构转变#3:无服务器体系结构

无服务器架构是我们最近常看到的流行词汇。 我不想将它称为Web应用程序架构的下一个迭代。现在更多的是一个有趣的想法。

这个概念很简单:我们已经有了一个客户端Web层 ,为什么不重构后端,利用第三方托管服务来解决后端问题; 通过使用Lambda(或纯函数),您的应用程序可以在第三方的云基础架构上执行任何所需的定制逻辑。 这与微服务的概念非常相似,但主要区别在于用户并不拥有后端服务。不需要他来开发,管理运行的服务与硬件,从而使生活变得更简单。

这种将所有跨领域关注(包括持久性数据)融入基础架构的想法具有许多优点:

它将简化分布式应用程序体系结构,但是还有一些问题需要解决,无服务器体系结构成为主流还需要一些时间。 目前,无服务器体系结构与几年前的云托管主机有些类似; 企业和客户更关注云托管对数据隐私的威胁,还没有看到它在基础设施简化方面的潜力。

下图描述了无服务器体系结构。

作者:Amit Rathi

编译:高明

整理:21世纪技术官社区

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180223B005LP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券