全栈空间:后现代前端和后端架构
最近忙着整活EI论文,意外发现一篇自己从前写的水文:特此纪念一下曾经深耕过的大前端。
引言
相关工作
项目环境和应用描述
软件架构设计
实施 —- 验证概念
总结
虽然使用服务端JavaScript,结合node.js框架来实现web应用程序的现象在现在的企业环境中越来越常见,但是关于node.js对web应用架构发展的影响的研究却很少出现在科技文献中。尤其是人们很少研究如何结合web组件,利用它们之间的相互影响来构建纯JavaScript的商业应用。因此,本文,我们将呈现一个在真实环境下,结合CMS/CRM的在线服务以及它的软件架构,它通过相关核心功能的原型实现进行评估。结果充分表明该方法的可行性和潜力。
当Ryan Dahl在2009年推出node.js时,人们对服务器端JavaScript利用率的好奇心明显增加了 - 无论是在商业还是在科学领域。运行在Google的V8 JavaScript引擎上的node.js,引入了非阻塞I / O事件模型的概念,它用单线程替代了传统web服务器中熟知的多线程。这种单线程事件循环可以更好的使用硬件资源,可以接受更高的并发客户端连接数,使node.js成为服务器端web应用程序开发的重要替代方案。
除了与性能相关的优点之外,JavaScript在高级应用程序前端的应用也很广泛,如今非常常见。因此,将其用于后端开发也大大简化了web应用程序开发的整个过程。此外,node.js还带有自己的包管理器“npm”,它支持第三方库及其依赖项的分发和简单安装,以便扩展现有开发项目。
考虑到node.js的所有优势,来自不同行业的许多大型企业,如Uber,PayPal 或Netflix ,都已经将node.js用于自己的项目,这种现象在现在也不足为奇了。
但是,尽管许多现代web应用程序都是基于node.js架构构建的,但只有少数的科研成果,特别是从科学的角度发表了各自的架构方法的论文少之又少。现有的科学文献主要是处理node.js的性能相关问题或评估实际的软件项目,当涉及到node.js体系结构考虑时,它们通常只表现出比较低级的描述和抽象。
因此,在本文中,我们为实际的web应用程序提供了一个基于node.js的示例软件体系结构,然后通过概念验证,实施并且最终评估。
本文的其余部分安排如下:文章在第2节中详细分析了相关文献。在第3节中介绍该项的研究背景,在第4节中描述所提出的应用程序架构,通过第5节中说明的概念来评估整个体系结构。最后总结了我们的发现。
二、相关工作
近年来,客户关系管理(CRM)系统的研究已成为研究的热点。关于CRM应用程序的与业务无关但与技术相关的方面,尤其是对基于云的解决方案的兴趣和热度一直在增加。关于CRM系统的体系结构设计,存在许多基于web的方法,但他们都没有使用服务器端JavaScript或node.js。
web内容管理系统(CMS)的主要科学研究兴趣存在于20世纪90年代末期和2000年代早期。最近有关CMS的文献侧重于与绩效相关的和与安全相关的问题,以及架构设计的方法。然而,没有一个出版物提出基于node.js或 JavaScript的方法。
最近几年,有关node.js和服务器端JavaScript的同行评审出版物的数量有所增加。尽管如此,大多数研究都侧重于平台的技术方面,如性能和可扩展性或安全,而不是调查其在构建web应用程序方面的实际能力。
一些作者在实际项目中使用node.js ,但他们主要关注项目及其本身的影响力,而不是描述在node.js上构建的软件架构。实际上,在node.js内核级别上提出或讨论潜在的web应用程序架构的出版作品很少。在CRM或CMS应用程序环境中讨论架构node体系的提议更是尚不存在。
因此,本文讨论了如何设计一个具有CMS与CRM相结合功能的真实在线服务网络平台,利用最先进的服务器端JavaScript和node.js软件架构进行示例,例如所谓的C9X平台。
三、项目环境和应用描述
C9X应用背后的主要思想是提供一个基于网络的平台,这个平台中,服务提供商和服务消费者(处于55-75岁的过渡年龄)的健康相关服务将被自动化匹配,这个背后的技术基于精确搜索(由服务消费者执行),或者基于服务 - 消费者的特定需求和自我改进机器学习,通过复杂的匹配算法自动执行。
除了匹配算法之外,平台的第一个实际核心功能是充分展示服务提供商及其服务。C9X提供类似CMS的管理界面,允许提供商舒适地将他们的服务输入app并发布各种其他多媒体信息,这个媒体平台其实就是一个类似个人档案的地方。
当服务 - 消费者选择了适当的请求类型时,他可以分别向提供者发送请求,目的是利用相应的协议生成一个”复合”的服务。一旦所有人都接受了请求所涉及的各方,就生成了所谓的’案例’,这其中包含了服务消费者和服务提供者所有与服务相关的信息。该案例代表了所有参与者沟通,共享文件的”中心”,以及有关整体服务提供的子任务的信息和状态。这种基于案例的服务处理非常类似于CRM应用程序。为了实现C9X平台的目的,两者都是必不可少的: 不同的应用程序类型 - CMS应用以及CRM应用 - 必须相互交织。
平台的实际架构设计:
•REQ1:希望能够适合过渡时期老年人的用户界面,可在桌面和移动设备上使用设备
•REQ2:面向服务提供商和专业网络协调员的更像企业环境的桌面UI
•REQ3:基于web的应用程序,可以轻松地,无处不在地访问平台,避免客户端软件安装
•REQ4:具有高级的安全性和数据完整性,以确保与健康相关的敏感客户数据被保护
四、软件架构设计
由于C9X是如此高度定制化的混合应用程序,使用或调整现有的现成后端CMS/CRM解决方案,如Keystone.js3,Ghost.js4或Enduro.js5并不是一个很好的选择。
合适的框架要求包括灵活性,可扩展性,安全性,可扩展性和高度的流程自动化,如集成的对象关系映射(ORM)或基于命令行界面的API生成的框架。满足所有这些要求的一个框架是Sails.js。Sails.js是一个基于Express.js的轻量级服务器端MVC框架。它提供了一个名为“Waterline”的集成ORM模块,有几个不同的数据库接口,以及集成的“Blueprint API”,Sails.js为使用sails命令行创建的所有模型提供基本CRUD功能的路径,为控制器和控制器方法自动生成interface。
C9X应用程序构建在CentOS 7网络服务器[REQ3]上的MEAN-Stack上,该服务器还运行该平台的mongodb数据库。持久数据存储最好使用mongodb,也就是nosql,事实证明,nosql数据库具有更高的数据吞吐量,更高的性能和可扩展性,并且功能更加简单,更适合作为密钥值存储系统,mongodb与MySQL或MariaDB [REQ4] 等传统关系数据库相比有着更大的优势。
为了满足应用程序的安全性要求,Sails.js由Waterlock.js库进行扩展,后者是一种基于JSON Web令牌(JWT)概念的用户身份验证工具。如果未经身份验证的服务器端访问,它将限制用户和社交账户的单点登录(SSO)[REQ4]。此外,作为反向代理操作的Apache2 webserver7与应用程序相互重叠,同时作为所有传入和传出HTTP请求的过滤器。Apache具有高级的安全机制,如果Sails.js应用程序发生故障,它能够提供分离的静态HTML文件,从而增加了应用程序的安全性和性能。
由于架构方法需要支持高水平的应用灵活性和短反应 - 以及合适的反馈持续时间,创建前端平台的最佳方法是遵循基于JavaScript前端框架的单页面应用程序(SPA)架构,如Angular,React.js,Vue.js或Backbone.js [ REQ1] [REQ2]。其中Vue.js非常适合构建C9X应用程序,因为它具有模块化开发的方法,大量的外部库,比Angular或React.js更轻量级。vue由Vue-Resource扩展,后者是一个HTTP客户端,用于与应用程序后端的标准化通信。Vuex是一个应用程序的总体状态管理工具。前端身份验证由Vue-Auth处理,它在与Sails.js的Waterlock库的JWT同步中,另外提供基于角色的前端访问限制的功能,整个过程与Vue-Router组合。Vue-Router是Vue的SPA前端路由包,可以方便的启用应用程序。
然后我们应该在前端级别拦截和处理URL调用,而不是直接将它们重定向到应用程序后端。最后,Vue.js使用BootstrapVue库,它表示基于Vue从而达到替换jQuery的bootstrap自适应组件(例如模态,动画或前端验证)的目的。BootstrapVue提供了一个大型模块化框架,预先构建的前端组件,所以它非常有资格组装平台上基于CMS的前端优化及其CRM仪表板,以及针对服务提供商和网络协调员进行优化[REQ2]。
五、实施 —- 验证概念
为了演示我们的架构设计的实际功能,一个完整的前端到后端通信将利用“表单向导”实现,它提供快速输入表单和数据提交的功能。该向导由交互式表单输入组成,而且具有基于BootstrapVue的前端验证机制。
表单作为JSON对象传送到调用父元素中的向导模块。所以除了实际输入的定义及其验证规则,定义了使用VueResource进行数据提交的服务器端目标路由也在那个JSON数据中。由Waterlock保护的服务器端控制器仅允许接收和处理数据,如果有有效的JWT令牌,他们的模型会自动构建Blueprint CRUD函数或自定义控制器函数。最后,数据被传递给
推荐阅读