热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为无服务器的Web应用程序带来实时性ITNEXT

在Web应用程序中,通常会有一个前端与RESTAPI进行通信,以便在后端完成工作。通常,API会返回一个结果,表示您要从系统中检索成功或某些值。但是在无服务器基础设施中有一种棘手的



在Web应用程序中,通常会有一个前端与REST API进行通信,以便在后端完成工作。通常,API会返回一个结果,表示您要从系统中检索成功或某些值。
但是在无服务器基础设施中有一种棘手的类型的呼叫,其中返回值“消失”或者很难推回到前端,因为它需要太长时间或者 - 由于事件的链接性质 - 来自调用者需要更长时间才可以访问最终结果。

看看这个例子:

在此图中,一些前端代码调用API网关,从而在DynamoDB中生成一个条目,该条目生成一个流,触发Lambda函数。但是最后一个Lambda函数的返回值无处可去。因此,如果出现错误,问题或需要原始前端代码知道的问题,我们就会陷入困境。

实际上,每当您将函数附加到从S3,DynamoDB或任何其他AWS服务生成的事件时,返回值都不能被推回到链中。例如,如果使用Rekognition分析放入S3 Bucket的照片,则需要将响应发送到函数返回值以外的其他位置。
这些问题有几种解决方案,每种方法都有各自的优缺点,具体取决于您的使用情况。

选项1:等待
在最简单的情况下,你有一个需要一段时间的功能,你可以等待。您受限于API网关的30秒超时,因此对于长期存在的进程,这是行不通的。从成本的角度来看,这也不是很好,因为你在为等待付出代价。但对于简单,临时,低使用率的应用程序,这是最简单的解决方案。
示例:每月一次,前端请求将大对象从一个S3存储桶复制到另一个区域,并等待3-5秒,直到S3确认成功完成。在这种情况下,设计更复杂的东西可能不值得。

选项2:轮询
这适用于后端进程花费的时间超过几秒钟,或者执行的长度可能超过API网关上的30秒超时的情况。
这里前端提出了API的请求,发生了两件事:


  • 被叫函数立即响应,确认已成功接收请求(但不是工作结果)。此响应可能包括稍后引用的前端ID(如果前端未首先生成ID)。
  • 接下来,有一个用于检查工作状态的第二个API,并且前端将定期轮询,直到工作报告为完成,并且该函数返回响应。在AWS中,此状态函数通常会检查DynamoDB表,其中包含管理请求状态的ID。

这种方法易于实现,但会产生许多不必要的请求,并且不是很实时。例如,如果事务需要20秒并且前端每秒轮询一次,则在前端收到完成的响应之前需要20-21个轮询请求。
在无服务器方面,从成本的角度来看,这可能仍然是优选的 - 20 x 100ms的请求成本低于等待20秒,但是有一个开销,而且代码相当于在车后面让孩子们反复询问“我们还在那里吗? ?”。

选项3:物联网

虽然IoT会让人联想到硬件设备的图像,但它也可以用于无服务器的Web应用程序。物联网使用称为MQTT的轻量级消息传递协议,这是一种简单有效的推送消息的方法。

发布 - 订阅方法通常保留给实时应用程序,但可以很好地解决此问题。好处是您不需要编写轮询功能或发出多个必要的请求,并且您不受API网关30秒超时的限制。更好的是,无论过程需要5秒还是5分钟,前端都会立即知道任务何时完成,因为通信是实时的。
对于诸如仪表板之类的前端而言,这是一个很好的解决方案,其中网页加载一次但希望与后端数据的更改保持同步。但它对于任何时间要求严格的前端应用程序也很有效,因为您希望最大限度地减少等待时间。
在表面下,发布 - 订阅是复杂的,它是一个繁琐的过程,定期保持活跃的ping,以确保各方仍然存在。幸运的是,AWS IoT设备SDK将这一切抽象出来,使我们可以轻松构建一个前端,该前端正在侦听后端某些远程进程生成的消息。

从成本角度来看,AWS通过连接分钟和消息数量向您收费(还有一个慷慨的免费等级补贴)。连接一年的单个客户将花费4.2美分(不包括数据费用),因此如果您有数千名用户,美元很重要,那么它仍然相对便宜。




 

推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Windows简单部署Exceptionless
    部署准备Elasticsearch、Exceptionless.API、Exceptionless.UI、URLRewrite、.NET运行时 1、安装ElasticSearch1 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
author-avatar
agree_6398026768
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有