欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

全栈空间:后现代前端和后端架构

最编程 2024-04-06 20:46:34
...


 

最近忙着整活EI论文,意外发现一篇自己从前写的水文:特此纪念一下曾经深耕过的大前端。



 


  1. 引言

  2. 相关工作

  3. 项目环境和应用描述

  4. 软件架构设计

  5. 实施 —- 验证概念

  6. 总结




虽然使用服务端JavaScript,结合node.js框架来实现web应用程序的现象在现在的企业环境中越来越常见,但是关于node.jsweb应用架构发展的影响的研究却很少出现在科技文献中。尤其是人们很少研究如何结合web组件,利用它们之间的相互影响来构建纯JavaScript的商业应用。因此,本文,我们将呈现一个真实环境下,结合CMS/CRM的在线服务以及它的软件架构,它通过相关核心功能的原型实现进行评估。结果充分表明该方法的可行性和潜力。




、引言


Ryan Dahl2009年推出node.js时,人们对服务器端JavaScript利用率的好奇心明显增加了 - 无论是在商业还是在科学领域。运行在GoogleV8 JavaScript引擎上的node.js,引入了非阻塞I / O事件模型的概念,它用单线程替代了传统web服务器中熟知的多线程。这种单线程事件循环可以更好的使用硬件资源,可以接受更高的并发客户端连接数,使node.js成为服务器端web应用程序开发的重要替代方案

除了与性能相关的优点之外,JavaScript在高级应用程序前端的应用也很广泛,如今非常常见。因此,将其用于后端开发也大大简化了web应用程序开发的整个过程。此外,node.js还带有自己的包管理器“npm”,它支持第三方库及其依赖项的分发和简单安装,以便扩展现有开发项目

考虑到node.js的所有优势,来自不同行业的许多大型企业,如UberPayPal Netflix ,都已经将node.js用于自己的项目,这种现象在现在也不足为奇了。

但是,尽管许多现代web应用程序都是基于node.js架构构建的,但只有少数的科研成果,特别是从科学的角度发表了各自的架构方法的论文少之又少。现有的科学文献主要是处理node.js的性能相关问题或评估实际的软件项目,当涉及到node.js体系结构考虑时,它们通常只表现出比较低级的描述和抽象。

因此,在本文中,我们为实际的web应用程序提供了一个基于node.js的示例软件体系结构,然后通过概念验证,实施并且最终评估。

本文的其余部分安排如下:文章在第2节中详细分析了相关文献。在第3节中介绍该项的研究背景,在第4节中描述所提出的应用程序架构,通过第5节中说明的概念来评估整个体系结构。最后总结了我们的发现。



、相关工作

近年来,客户关系管理(CRM)系统的研究已成为研究的热点。关于CRM应用程序的与业务无关但与技术相关的方面,尤其是对基于云的解决方案的兴趣和热度一直在增加。关于CRM系统的体系结构设计,存在许多基于web的方法,但他们都没有使用服务器端JavaScriptnode.js

web内容管理系统(CMS)的主要科学研究兴趣存在于20世纪90年代末期和2000年代早期。最近有关CMS的文献侧重于与绩效相关的和与安全相关的问题,以及架构设计方法。然而,没有一个出版物提出基于node.js JavaScript的方法。

最近几年,有关node.js和服务器端JavaScript的同行评审出版物的数量有所增加。尽管如此,大多数研究都侧重于平台的技术方面,如性能和可扩展性或安全,而不是调查其在构建web应用程序方面的实际能力。

一些作者在实际项目中使用node.js ,但他们主要关注项目及其本身的影响力,而不是描述在node.js上构建的软件架构。实际上,在node.js内核级别上提出或讨论潜在的web应用程序架构的出版作品很少。在CRMCMS应用程序环境中讨论架构node体系的提议更是尚不存在。

因此,本文讨论了如何设计一个具有CMSCRM相结合功能的真实在线服务网络平台,利用最先进的服务器端JavaScriptnode.js软件架构进行示例,例如所谓的C9X平台。




 、项目环境和应用描述

C9X应用背后的主要思想是提供一个基于网络的平台,这个平台中,服务提供商和服务消费者(处于55-75岁的过渡年龄)的健康相关服务将被自动化匹配,这个背后的技术基于精确搜索(由服务消费者执行),或者基于服务 - 消费者的特定需求和自我改进机器学习,通过复杂的匹配算法自动执行。 

除了匹配算法之外,平台的第一个实际核心功能是充分展示服务提供商及其服务。C9X提供类似CMS的管理界面,允许提供商舒适地将他们的服务输入app并发布各种其他多媒体信息,这个媒体平台其实就是一个类似个人档案的地方。

 


当服务 - 消费者选择了适当的请求类型时,他可以分别向提供者发送请求,目的是利用相应的协议生成一个复合的服务。一旦所有人都接受了请求所涉及的各方,就生成了所谓的案例,这其中包含了服务消费者和服务提供者所有与服务相关的信息。该案例代表了所有参与者沟通,共享文件的中心,以及有关整体服务提供的子任务的信息和状态。这种基于案例的服务处理非常类似于CRM应用程序。为了实现C9X平台的目的,两者都是必不可少的: 不同的应用程序类型 -  CMS应用以及CRM应用 - 必须相互交织

平台的实际架构设计:

REQ1:希望能够适合过渡时期老年人的用户界面,可在桌面和移动设备上使用设备

REQ2:面向服务提供商和专业网络协调员的更像企业环境的桌面UI

REQ3:基于web的应用程序,可以轻松地,无处不在地访问平台,避免客户端软件安装

REQ4:具有高级的安全性和数据完整性,以确保与健康相关的敏感客户数据被保护




、软件架构设计

 由于C9X是如此高度定制化的混合应用程序,使用或调整现有的现成后端CMS/CRM解决方案,如Keystone.js3Ghost.js4Enduro.js5并不是一个很好的选择。


 

 


合适的框架要求包括灵活性,可扩展性,安全性,可扩展性和高度的流程自动化,如集成的对象关系映射(ORM)或基于命令行界面的API生成的框架。满足所有这些要求的一个框架是Sails.jsSails.js是一个基于Express.js的轻量级服务器端MVC框架。它提供了一个名为Waterline的集成ORM模块,有几个不同的数据库接口,以及集成的“Blueprint API”Sails.js为使用sails命令行创建的所有模型提供基本CRUD功能的路径,为控制器和控制器方法自动生成interface

C9X应用程序构建在CentOS 7网络服务器[REQ3]上的MEAN-Stack上,该服务器还运行该平台的mongodb数据库。持久数据存储最好使用mongodb,也就是nosql,事实证明,nosql数据库具有更高的数据吞吐量,更高的性能和可扩展性,并且功能更加简单,更适合作为密钥值存储系统,mongodbMySQLMariaDB [REQ4] 等传统关系数据库相比有着更大的优势。

为了满足应用程序的安全性要求,Sails.jsWaterlock.js库进行扩展,后者是一种基于JSON Web令牌(JWT)概念的用户身份验证工具。如果未经身份验证的服务器端访问,它将限制用户和社交账户的单点登录(SSO[REQ4]。此外,作为反向代理操作的Apache2 webserver7与应用程序相互重叠,同时作为所有传入和传出HTTP请求的过滤器。Apache具有高级的安全机制,如果Sails.js应用程序发生故障,它能够提供分离的静态HTML文件,从而增加了应用程序的安全性和性能。

由于架构方法需要支持高水平的应用灵活性和短反应 - 以及合适的反馈持续时间,创建前端平台的最佳方法是遵循基于JavaScript前端框架的单页面应用程序(SPA)架构,如AngularReact.jsVue.jsBackbone.js [ REQ1] [REQ2]。其中Vue.js非常适合构建C9X应用程序,因为它具有模块化开发的方法,大量的外部库,比AngularReact.js更轻量级。vueVue-Resource扩展,后者是一个HTTP客户端,用于与应用程序后端的标准化通信。Vuex是一个应用程序的总体状态管理工具。前端身份验证由Vue-Auth处理,它在与Sails.jsWaterlock库的JWT同步中,另外提供基于角色的前端访问限制的功能,整个过程与Vue-Router组合。Vue-RouterVueSPA前端路由包,可以方便的启用应用程序。

然后我们应该在前端级别拦截和处理URL调用,而不是直接将它们重定向到应用程序后端。最后,Vue.js使用BootstrapVue库,它表示基于Vue从而达到替换jQuerybootstrap自适应组件(例如模态,动画或前端验证)的目的。BootstrapVue提供了一个大型模块化框架,预先构建的前端组件,所以它非常有资格组装平台上基于CMS的前端优化及其CRM仪表板,以及针对服务提供商和网络协调员进行优化[REQ2]



、实施 - 验证概念

为了演示我们的架构设计的实际功能,一个完整的前端到后端通信将利用表单向导实现,它提供快速输入表单和数据提交的功能。该向导由交互式表单输入组成,而且具有基于BootstrapVue的前端验证机制。

表单作为JSON对象传送到调用父元素中的向导模块。所以除了实际输入的定义及其验证规则,定义了使用VueResource进行数据提交的服务器端目标路由也在那个JSON数据中。由Waterlock保护的服务器端控制器仅允许接收和处理数据,如果有有效的JWT令牌,他们的模型会自动构建Blueprint CRUD函数或自定义控制器函数。最后,数据被传递给

上一篇: oss 购买的资源包和预留空间有什么区别?

下一篇: 如何估算集群所需的存储和计算资源?-网络资源估算