使用AWS Lambdas扩展技术堆栈

面对现实吧。 调试性能问题很困难,但更难解决。

假设您发现了令人反感的代码,这些代码正在拖慢您的应用的运行速度。 最终会有一段时间,您发现该代码减速是同步的或线性执行的。 解决这些有问题的代码段的最有效方法之一是将最重的工作负载委派给以后的时间和地点。

尽管有无数种工作负载委派解决方案,但近年来在第三方服务器上执行代码(也称为无服务器功能)的想法变得越来越流行。

无服务器功能非常有用,因为我们可以配置处理这些工作负载的执行时间和频率。 此外,我们只为使用的时间和计算能力付费。 无需使用永远运行的服务器,即使不使用它也要消耗主机成本。

Amazon Web Services中的无服务器功能

在Amazon Web Services(或AWS)中,无数功能被称为Lambda。 尽管Lambdas和其他无服务器功能使我们在其他计算机上执行代码有很多好处,但在执行方式上却有一些限制。

由于我们从技术上是从AWS租用硬件和软件,因此他们可以确定运行代码的硬件规格和环境。

对于Amazon,这意味着在Ubuntu(Linux)环境中运行和执行代码。 我们需要考虑有关AWS Lambda部署和执行环境的特定限制 。

尽管它们都很重要,但我想谈谈一些限制,这些限制将决定我们如何设计和实现功能。

内存和时间限制

当我们最终尝试将工作委派给AWS Lambda时,我们需要以不超过128MB内存使用限制和执行限制的方式进行操作。 每个功能还必须花费不到300秒(五分钟)的时间来执行。

尽管您可以在五分钟内完成很多工作,但是我发现围绕模块化的重点设计Lambda函数很有用。 这意味着将功能设计为通过Lambda多次处理较小的工作单元,而不是一次发送大量要执行的数据。

使用模块化的Lambda实现,我们应该能够在这些限制下处理我们需要的任何东西。

临时存储

AWS Lambdas中的存储也有点有趣。 我们还只能在Lambda的文件系统的一部分中/tmp最多写入512MB。

尽管我们当然可以在Lambda中对数据建模,但我们依赖于外部资源来检索和永久存储执行结果数据。 我们最终关心的是创建一段代码,该代码可以计算事物的结果并将其发送到另一个要存储的地方。

部署包大小

另一点值得注意的是部署程序包限制。 虽然我们编写的带有代码的文件应该很容易就在该限制之内,但是我们不能忘记依赖关系。

AWS Lambdas要求我们在部署程序包中提取每个依赖项。 因此,我们需要确保我们的代码和依赖项之和不超过此限制!

语言限制

最后,最大的限制之一是在Lambda中只允许执行某些语言。 对于AWS Lambda,这些语言是(在撰写本文时)Python,Go,JavaScript和Java。

如果应用程序是用其中一种语言编写的,那么您很幸运! 您所要做的就是导入代码,一切顺利。

但是,我想逐步说明为什么即使您的应用程序不是用其中一种语言编写的,使用Lambda仍然有意义。

Ruby和Python的示例

我最近的许多工作都是基于Python Lambda的,该Lambda被基于Ruby的应用程序调用。 因此,我将演示使用这两种语言的示例。

Python和Ruby都是动态语言 。 尽管AWS不为Lambda提供Ruby支持,但它们确实支持Python。 为Ruby代码库编写Python Lambda很有道理,因为它们的样式和结构相似。 亚马逊还有一个很棒的Ruby SDK ,我们将使用它来调用和管理Lambda。

让我们开始编写Python Lambda:

index.py

def handler(event, context):input_message = event.get('message')print(input_message)return {'message': 'Well, hey there Ruby application!'}

您可以按照Amazon的教程来学习如何将这段代码作为Lambda进行部署。 设置完成后,我们将需要一些有关Lambda的信息:

  • 部署Lambda的AWS区域
  • 您的AWS访问密钥和访问密钥
  • Lambda的名称

掌握了这些信息之后,我们就可以开始编写Ruby应用程序了。 在开始之前,请记住将AWS Ruby SDK添加到项目的Gemfile

app.rb

require ‘aws-sdk’
require 'json'credentials = Aws::Credentials.new('access-key', 'access-key-secret')lambda_client = Aws::Lambda::Client.new(region: 'lambda-aws-region',credentials: credentials
)app_payload = { message: "Hello Python Lambda!"
}response = lambda_client.invoke({function_name: "SampleAWSFunction",invocation_type: "RequestResponse",payload: app_payload
})parsed_response = JSON.parse(resp.payload.string)
puts parsed_response

考虑到这一点,我们现在可以运行app.rb并从Lambda获得实时响应!

包起来

通过此基本示例,我们现在可以使用AWS支持的任何语言将更复杂的基于Ruby的代码委托给Lambda函数。

尽管我们的示例相对于Python更为偏爱,但AWS和其他无服务器功能提供商所提供的自由是能够为当前工作选择最佳语言。

是否需要使用线程来构建性能更高的东西? 也许尝试使用Java或Go这样的语言来实现您的功能。 想留在类似于Ruby的地方吗? 坚持使用此Python模板或尝试JavaScript!

选择AWS堆栈之外的语言并运行自己的解决方案在许多方面绝对具有吸引力,但使用AWS Lambda的稳定性,成本和效率是该服务的最大卖点。 对我而言,仅凭这些原因,就可以提供一种有效且具有成本效益的方法,以帮助您更好地平衡应用程序中的同步执行瓶颈。

在使用AWS Lambdas时,我发现有趣的另一件事是,每个人都有自己独特的解决方案和使用它们的实现。

但是,每种体系结构都需要时间,试验和错误才能开发。 如果做对了,在解决应用程序速度和执行时间问题上,投资和挫败感将得到巨大回报。

最终,我们需要权衡使用Lambda的成本以及它们在我们的主应用程序服务器上释放的时间。 您最终也有一天会发现自己完全利用了无服务器架构!

无论哪种方式,了解有关AWS的Lambda Functions之类的无服务器解决方案的更多信息都将为您提供另一种解决日益增长的软件应用程序中的速度和性能问题的方法。 这可能并不总是补救措施,但它是帮助事情在未来更快更强大的有效解决方案。

翻译自: https://www.javacodegeeks.com/2018/06/expanding-tech-stack-aws-lambdas.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前馈-反馈控制系统设计(过程控制课程设计matlab/simulink)

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送关键词:前馈…

感应电机直接转矩控制系统的设计与仿真(运动控制matlab/simulink)

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送关键词:直接…

【2】C++语法与数据结构之MFC_CList学生管理系统_链表内排序_函数指针

MFC中CList类库的遍历 #include <iostream> #include "List.h" using namespace std; void main() {CList list;list.AddHead(33);list.AddHead(88);list.AddHead(99);POSITION pos list.GetHeadPosition();cout << "正向&#xff1a;" <…

neo4j cypher_neo4j / cypher:悬挂查询参数

neo4j cypher一直以来&#xff0c;我一直在使用neo4j的密码查询语言&#xff0c; 迈克尔一直在告诉我在查询中使用参数&#xff0c;但是查询的性能始终可以接受&#xff0c;因此我没有必要。 但是&#xff0c;最近我正在研究一个数据集&#xff0c;并使用类似于以下的代码创建了…

双容水箱液位模糊PID控制系统设计与仿真(Matlab/Simulink)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;双容模糊 获…

基于单片机步进电机控制器设计(正转反转指示灯挡位)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;单片机步进…

【3】C++语法与数据结构之MFC_CList学生管理系统_链表外排序_函数指针

注意&#xff1a;此时排序规则函数定义为全局函数 C中定义CStudent类 文件名&#xff1a;Student.h #pragma once #include <afxtempl.h> typedef struct SUser {int nNumb;char sName[20];float fMath; }DATA;typedef bool(*BY_FUNC)(DATA& q,DATA& m);class…

Java中Long到Int的精确转换

JDK 8附带所有令人眼前一亮的 东西 &#xff08; lambda表达式 &#xff0c; 流 &#xff0c; Optional &#xff0c;新的Date / Time API等&#xff09;来分散我的注意力 &#xff0c;我并没有过多注意添加方法Math.toIntExact&#xff08;&#xff09; 。 但是&#xff0c;这…

基于单片机的交通灯控制系统设计

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;单片机交通…

【4】C++语法与数据结构之自己实现MFC的CList类库_学生管理系统

本文通过自己实现的CList双向链表数据结构来完成学生管理系统&#xff0c;同样采用链表外排序。 注意&#xff1a;此时排序规则函数仍然定义为全局函数 自己定义CList类 文件名&#xff1a;List.h -注意&#xff1a; POSITION不是VS默认的类型&#xff0c;而是重新定义为vo…

36个精美完整网站网页完整源码HTML+CSS+JS

以下列举前9个效果图&#xff0c;源码详见微信公众号下载 ①效果图 ②效果图 ③效果图 ④效果图 ⑤效果图 ⑥效果图 ⑦效果图 ⑧效果图 ⑨效果图 微信公众号&#xff1a;创享日记 发送&#xff1a;36 获取全部完整源码&#xff08;打开.html文件均即可用&…

【5】C++语法与数据结构之STL_list学生管理系统_链表内排序_函数指针

本文通过STL类库的list数据结构来完成学生管理系统&#xff0c;采用链表内排序&#xff0c;通过list类库自带sort函数进行排序。 注意&#xff1a;此时排序规则函数定义为类静态成员函数&#xff0c;等价于全局函数函数指针定义为 BY_FUNC ps[] { CStudent::byNumb,CStudent:…

ajax异步监控_监控整页(非AJAX),需要通知

ajax异步监控最近&#xff0c;在JSF中处理新图表和图表“导出服务”时&#xff0c;我遇到了一个非常普遍的问题。 当您执行长时间运行的任务&#xff08;操作&#xff09;时&#xff0c;您希望在开始时显示一个状态“请稍候……”对话框&#xff0c;并在响应到达时结束时关闭此…

公司产品移动端网页-前端网页设计技术精美网站源码HTML+CSS+JS

微信公众号&#xff1a;创享日记 发送&#xff1a;产品网页 获取完整源码&#xff08;打开即可用&#xff09; 效果①主页首页 /*页面重置*/ html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,f…

【6】C++语法与数据结构之STL_list学生管理系统_链表外排序_函数指针

本文通过STL类库的list数据结构来完成学生管理系统&#xff0c;采用链表外排序&#xff0c;通过函数指针实现。 注意&#xff1a;此时排序规则函数定义为类静态成员函数&#xff0c;等价于全局函数函数指针定义为 BY_FUNC ps[] { CStudent::byNumb,CStudent::byName,CStudent…

创建一个坚固的备份系统

在Foreach&#xff0c;我们拥有Synology RS815 来存储所有备份。 这些备份来自我们网络中的不同来源&#xff0c;例如路由器&#xff0c;交换机&#xff0c;数据库服务器&#xff0c;Web服务器&#xff0c;应用程序日志文件&#xff0c;邮件服务器等等。 Synology NAS使配置这…

班级网站-前端网页技术精美完整源码HTML+CSS+JS

微信公众号&#xff1a;创享日记 发送&#xff1a;班级网站 获取完整源码&#xff08;打开即可用&#xff09; 效果图①首页主页 效果图②关于页面 效果图③联系方式及留言 效果图④我们的画廊展示 其余及源码详见微信公众号下载&#xff01; <!DOCTYPE html> <html…

医药协会网站-前端网页技术设计HTML+CSS精美完整网页网站源码

微信公众号&#xff1a;创享日记 发送&#xff1a;医药协会网站 获取完整源码 效果图预览①主页首页 效果图预览②资源下载中心 效果图预览③登录/注册 效果图预览④文章资讯详情 效果图预览⑤文章资讯列表 效果图预览⑥留言板 效果图预览⑦图文列表 效果图预览⑧图文详情 源码…

数字通信系统仿真的MATLAB实现(QPSK)

关注公号【逆向通信猿】更精彩!!! 仿真结果 本文以QPSK为调制体制进行仿真,以下结果为比特信噪比Eb/N0=10dB(此时符号信噪比Es/N0=13dB,SNR信噪比=3.98dB,换算关系在代码中为第44行)时的各步骤结果图

动漫网站-前端网页技术精美网站源码HTML+CSS+JS

微信公众号&#xff1a;创享日记 发送&#xff1a;动漫网站 获取完整源码&#xff08;打开即可用&#xff09; 效果图①主页首页 效果图②作品列表展示页 效果图③作品详情展示页 效果图④联系我们 效果图⑤博客列表 效果图⑥博客详情 效果图⑦其它 其它及源码详见微信公众号下…