泰州做网站哪家好,悬赏做海报的网站,学校ui设计培训,mysql 网站 数据库面对现实吧。 调试性能问题很困难#xff0c;但更难解决。 假设您发现了令人反感的代码#xff0c;这些代码正在拖慢您的应用的运行速度。 最终会有一段时间#xff0c;您发现该代码减速是同步的或线性执行的。 解决这些有问题的代码段的最有效方法之一是将最重的工作负载委… 面对现实吧。 调试性能问题很困难但更难解决。 假设您发现了令人反感的代码这些代码正在拖慢您的应用的运行速度。 最终会有一段时间您发现该代码减速是同步的或线性执行的。 解决这些有问题的代码段的最有效方法之一是将最重的工作负载委派给以后的时间和地点。 尽管有无数种工作负载委派解决方案但近年来在第三方服务器上执行代码也称为无服务器功能的想法变得越来越流行。 无服务器功能非常有用因为我们可以配置处理这些工作负载的执行时间和频率。 此外我们只为使用的时间和计算能力付费。 无需使用永远运行的服务器即使不使用它也要消耗主机成本。 Amazon Web Services中的无服务器功能 在Amazon Web Services或AWS中无数功能被称为Lambda。 尽管Lambdas和其他无服务器功能使我们在其他计算机上执行代码有很多好处但在执行方式上却有一些限制。 由于我们从技术上是从AWS租用硬件和软件因此他们可以确定运行代码的硬件规格和环境。 对于Amazon这意味着在UbuntuLinux环境中运行和执行代码。 我们需要考虑有关AWS Lambda部署和执行环境的特定限制 。 尽管它们都很重要但我想谈谈一些限制这些限制将决定我们如何设计和实现功能。 内存和时间限制 当我们最终尝试将工作委派给AWS Lambda时我们需要以不超过128MB内存使用限制和执行限制的方式进行操作。 每个功能还必须花费不到300秒五分钟的时间来执行。 尽管您可以在五分钟内完成很多工作但是我发现围绕模块化的重点设计Lambda函数很有用。 这意味着将功能设计为通过Lambda多次处理较小的工作单元而不是一次发送大量要执行的数据。 使用模块化的Lambda实现我们应该能够在这些限制下处理我们需要的任何东西。 临时存储 AWS Lambdas中的存储也有点有趣。 我们还只能在Lambda的文件系统的一部分中/tmp最多写入512MB。 尽管我们当然可以在Lambda中对数据建模但我们依赖于外部资源来检索和永久存储执行结果数据。 我们最终关心的是创建一段代码该代码可以计算事物的结果并将其发送到另一个要存储的地方。 部署包大小 另一点值得注意的是部署程序包限制。 虽然我们编写的带有代码的文件应该很容易就在该限制之内但是我们不能忘记依赖关系。 AWS Lambdas要求我们在部署程序包中提取每个依赖项。 因此我们需要确保我们的代码和依赖项之和不超过此限制 语言限制 最后最大的限制之一是在Lambda中只允许执行某些语言。 对于AWS Lambda这些语言是在撰写本文时PythonGoJavaScript和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 jsoncredentials 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