aws lambda使用_使用AWS Lambdas扩展技术堆栈

aws lambda使用

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

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

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

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

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

aws lambda使用

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

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

相关文章

Java声明定义抽象类/接口/继承/实现

文章目录声明定义抽象类声明定义接口派生类、抽象类、接口的继承要点声明定义抽象类 public abstract class CRMSystem {public abstract Client add(Client newGuy); //添加用户方法public abstract Event add(Event e, Client guy); //重载添加事件、用户方法public abstrac…

cuba开发_使用CUBA进行开发–与Spring相比有很大的转变?

cuba开发阅读另一个供内部公司使用的Web项目的要求时,您(至少是我自己)通常会看到一个很普通的集合:定义明确的数据存储结构(或有时是现有的旧数据库),大量的数据输入形式,非常复杂的…

imagettftext php7,mac php7 imagettftext

Mac OS X 自带PHP环境gd库安装扩展freetype问题: “Call to undefined function imagettftext()”解决方法:curl -s [http://php-osx.liip.ch/install.sh](https://link.jianshu.com/?thttp://php-osx.liip.ch/install.sh) | bash -s 7.3sudo vim ~/.ba…

图片授权模式

RM、RF、PE是3种不同的图片授权模式,由图片卖家设定,图片买家根据自己的需要来进行选择。这三种模式是图片行业在发展过程中,经过对图片用户需求的不断总结而确定的。摄影师可以根据自己的销售意愿,在编辑图片的时候,对…

java线程池延期执行一次_Java使用者的延期执行

java线程池延期执行一次在前面的博客文章(“ 延迟执行Java的供应商 “),我引用礁HORSTMANN的陈述书中‘ 的Java SE8为真的很急关于lambda表达式’,‘所有的lambda表达式的点被推迟执行 。’ Horstmann在最后一年为Dobb博士的杂志写…

python时间序列数据分析,Python数据分析之时间序列

Python数据分析之时间序列发布时间:2020-07-10 06:56:27来源:51CTO阅读:808作者:up4ever1. 时间序列类型时间戳(timestramp)即特定的时刻固定时期(period)如2018年1月或2018年1月1日时间间隔(interval)由起始和结束时间戳表示2. P…

java jdk 序列化_JDK 11:Java序列化的终结开始了吗?

java jdk 序列化在博客文章“ 将Google的协议缓冲区与Java结合使用 ”中,我引用了乔什布洛赫(Josh Bloch)的第三版的有效Java ,他写道:“没有理由在您编写的任何新系统中使用Java序列化。” Bloch建议使用“跨平台结构…

php+ksort+返回true,PHP preg_replace函数

mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit] )在PHP中用来执行正则表达式的匹配以及替换的函数。可以返回一个正则表达式转换后的值。在subject中搜索pattern模式的匹配项,并用replacement模式进行替换。如果指定了 limit&…

下拉选择框

</select> 标签有一个属性 multiple&#xff0c;将其设置成 multiple"multiple" 按住 Ctrl 键即可实现多选。 请看例子&#xff1a; <html><head><meta http-equiv"Content-Type" content"text/html; charsetgb2312" />…

rest端点_REST:使用Controller端点?

rest端点在一般的REST架构中&#xff0c;基本概念是资源。 在资源之后&#xff0c;下一步是为这些资源开发一个统一接口&#xff0c;这在HTTP领域通常意味着&#xff1a; 创建为POST 阅读就是GET 更新为PUT&#xff08;或部分更新为PATCH&#xff09; 删除已删除 在现实世…

Java 字符串与整数之间的互相转换

1、如何将字符串String转化为整数int int i Integer.parseInt(str); int i Integer.valueOf(my_str).intValue(); 注: 字串转成Double, Float, Long的方法大同小异。 2、如何将字符串String转化为Integer Integer integerInteger.valueOf(i)3、如何将整数 int 转换成字串 Str…

hello world_建立无服务器的“ Hello World”功能

hello world无服务器 &#xff0c;功能即服务&#xff08;FaaS&#xff09;或仅具有云功能&#xff0c;就可以编写将在云中运行的代码。 您可以使用多种不同的语言&#xff08;例如JavaScript&#xff08;Node.js&#xff09;&#xff0c;Swift&#xff0c;Python&#xff0c;J…

xshell调出oracle安装界面,XShell+Xmanager实现在XShell中显示远程服务器的图形界面

你可以使用Xmanager软件&#xff0c;远程安装Oracle软件&#xff0c;Linux操作系统使用字符安装并不影响这种方式的使用。这个方案也可以大大优化你的Linux系统的性能&#xff0c;进而提高你的数据库性能。启动你的的Xmanager&#xff0c;我现在使用的是3.0版本&#xff0c;接收…

Oracle 数据库错误信息:动态执行表不可访问,本会话的自动统计被禁止

使用 PL/SQL 时, 每次第一次打开表的时候会提示以下信息&#xff1a; 动态执行表不可访问&#xff0c;本会话的自动统计被禁止&#xff0c;原因&#xff1a;V$SESSION,V$SESSTAT,V$STATNAME 没有被授权&#xff0c;没有权限访问这几张表&#xff0c;所以没有本法进行统计!那就…

jdk类加载器执行步骤_[JDK 11] jcmd中的类加载器层次结构详细信息

jdk类加载器执行步骤自从在JavaOne 2012上听说 jcmd以来&#xff0c;我就一直是命令行诊断工具jcmd的 粉丝 。 从那时起&#xff0c;我已经广泛使用了此工具&#xff0c;并多次在此博客中发布过此工具&#xff1a; jcmd&#xff1a;一个可以全部统治的JDK命令行工具 确定活动…

7445 oracle,Oracle 10g impdp 报 ORA-7445 [_INTEL_FAST_MEMCPY.A] 解决方法

在Oracle 10.2.0.4 以后的平台&#xff0c;我们在使用数据泵导入物化视图时&#xff0c;可能会遇到如下错误&#xff1a;...ksedmp: internal or fatal errorORA-7445: exception encountered: core dump [_intel_fast_memcpy.A()10][SIGSEGV] [Address not mapped to object] …

如何通过 PL/SQL Developer 将 Excel 数据导入 Oracle 对应的表中

首先将 Excel 文件另存为文本文件&#xff0c;然后在点击 PL/SQL Developer 菜单栏的【工具】-【文本导入器】&#xff0c;打开后如图所示&#xff1a; 上述步骤操作完之后&#xff0c;点击【到oracle的数据】&#xff1a;

kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST

kafka grpc机器学习/深度学习模型可以通过不同的方式进行预测。 我的首选方法是将分析模型直接部署到流处理应用程序&#xff08;如Kafka Streams或KSQL &#xff09;中。 您可以例如使用TensorFlow for Java API 。 这样可以实现最佳延迟和外部服务的独立性。 在我的Github项目…

Linux命令gitview,使用linux的gitview命令查看文件内容

使用linux的gitview命令查看文件内容发布时间&#xff1a;2020-07-22 10:23:42来源&#xff1a;亿速云阅读&#xff1a;99作者&#xff1a;清晨栏目&#xff1a;服务器这篇文章将为大家详细讲解有关使用linux的gitview命令查看文件内容&#xff0c;小编觉得挺实用的&#xff0c…