武汉PHP培训
达内武汉民大中心

18062071755

热门课程

武汉PHP培训丨使用AWS Lambda的无服务器计算

  • 时间:2018-01-31 17:48
  • 发布:武汉PHP培训
  • 来源:互联网

    查看所有内幕
    无服务器计算可能是当今云计算中最热门的事情,但究竟是什么呢?在这个由两部分组成的文章中,您将开始使用无服务器计算 - 从它是什么,为什么它被认为是对传统云计算的破坏,以及如何在基于Java的编程中发现自己使用它.概述之后,您将获得有关AWS Lambda的教程介绍,许多基于Java的无服务器计算解决方案已经考虑到了这一点.在第1部分中,您将使用AWS Lambda在Java中构建您的第一个无服务器功能.在第2部分中,您将将Lambda函数与DynamoDB集成,然后使用AWS SDK在Java应用程序中调用Lambda函数.
    无服务器计算和纳米服务
    去年,我正在和一个公司实习生谈论不同的架构模式,并提到无服务器架构.他很快注意到,所有的应用程序都需要一个服务器,并且不能在空气中运行.实习生有一个点,即使他失踪了.无服务器计算不是运行应用程序的神奇平台.
    事实上,无服务器计算只是意味着开发人员不必处理服务器.像AWS Lambda这样的无服务器计算平台允许您构建代码并进行部署,而无需配置或管理底层服务器.你的部署单位是你的代码; 不是承载代码的容器,也不是运行代码的服务器,而只是代码本身.从生产力的角度来看,卸载代码存储位置的细节以及执行环境的管理方式显然是有益的.无服务器计算也是基于执行指标定价的,所以也有财务优势.
    AWS Lambda的成本是多少?
    在撰写本文时,AWS Lambda的价格层级基于执行次数和执行持续时间:
    你每月执行的第一百万次处罚是免费的,那么你以后每个月支付0.20美元(每个请求0.000000美元).
    持续时间是从你的代码开始执行直到它返回一个结果,四舍五入到最接近的100ms来计算的.收费金额基于分配给该功能的RAM数量,其中每GB秒的成本为$ 0.00001667.
    定价细节和免费层次分配比概述所暗示的要复杂一些.访问价格层面来了解几个定价方案.
    为了了解无服务器计算如何工作,我们从无服务器计算执行模型开始,如图1所示.
    史蒂文海恩斯
    图1.无服务器计算执行模型
    简而言之,下面是无服务器的执行模型:
    客户端向无服务器计算平台发出请求以执行特定功能.
    无服务器计算平台首先检查功能是否在其任何服务器上运行.如果函数尚未运行,则平台从数据存储装载该函数.
    然后平台将该功能部署到其服务器之一,该服务器预先配置有可运行该功能的执行环境.
    它执行该功能并捕获结果.
    它将结果返回给客户端.
    有时无服务器计算称为函数即服务(FaaS),因为您构建的代码的粒度是一个函数.该平台在自己的服务器上执行您的功能,并协调功能请求和功能响应之间的过程.
    纳米服务,可扩展性和价格
    无服务器计算有三点非常重要:它的纳米服务体系结构; 它实际上是无限可扩展的; 以及与该无限可扩展性相关的定价模型.我们将深入到这些因素中的每一个.
    Nanoservices
    你已经听说过微服务,你可能知道12个因素的应用程序,但无服务器功能采取的组件范例,把它的组成部分打破了一个全新的水平."纳米服务"这一术语并不是一个行业公认的术语,但其思路很简单:每个纳米服务应该执行一个单一的行动或责任.例如,如果你想创建一个小部件,创建的行为将是它自己的nanoservice; 如果你想检索一个小部件,检索行为也将是一个纳米服务; 如果你想订购一个小部件,那么这个订单将是另一个纳米服务.
    纳米服务体系结构允许您在非常细致的级别上定义您的应用程序.类似于测试驱动的开发(通过在单个测试级别编写代码,可以帮助您避免不必要的副作用),纳米服务体系结构鼓励使用非常细粒度和特定的功能来定义您的应用程序.这种方法增加了你正在构建的东西的清晰度,并减少了新代码带来的不必要的副作用.
    微服务与纳米服务
    微服务鼓励我们将应用程序分解成一组服务,每个服务完成特定的任务.挑战是没有人真正量化微服务的范围.因此,我们最终将微服务定义为相关服务的集合,所有服务都与相同的数据模型进行交互.从概念上讲,如果您的低级功能与给定的数据模型进行交互,则该功能应该放入其相关服务之一中.高级交互应该调用服务而不是直接查询数据库.
    在无服务器计算中,关于是否要在微服务或纳米服务层面上构建Lambda函数,存在一个争论.好消息是,你可以非常容易地按照粒度来构建你的函数,但是一个微服务策略在你的请求处理器中需要一些额外的路由逻辑.
    从设计角度来看,无服务器应用程序应该是非常清晰和清晰的.从部署的角度来看,您将需要管理更多的部署,但是您也可以单独部署新版本的功能,而不会影响其他功能.无服务器计算特别适合在大型团队中进行开发,它可以帮助开发过程更轻松,代码更少出错.
    可扩展性

    除了引入新的架构范例之外,无服务器计算平台还提供了几乎无限的可扩展性.我说"实际上"是因为没有真正的事情无限的可扩展性.然而,对于所有的实际用途,像亚马逊这样的无服务器计算提供商可以处理的负担比你可能投入的要多.如果要管理扩展自己的服务器(或基于云的虚拟机)以满足日益增长的需求,则需要监视使用情况,确定何时启动更多服务器,以及在正确的时间向群集添加更多服务器.同样,当需求下降时,您需要手动缩减.借助无服务器计算,您可以告诉无服务器计算平台您要运行的最大并发功能请求数,并且平台可以为您进行扩展.

武汉PHP培训

    价钱
    最后,无服务器计算定价模型允许您根据使用情况来扩展您的云账单.当你有轻的使用,你的账单将是低的(或零,如果你留在自由范围内).当然,你的账单会随着使用量的增加而增加,但是希望你也会有新的收入来支持你的更高的云账单.相比之下,如果您要管理自己的服务器,则必须支付基本成本才能运行所需的最少服务器数量.随着使用量的增加,您可以按整个服务器的增量进行扩展,而不是单个函数调用的增量.无服务器计算定价模型与您的使用量成正比.
    AWS Lambda
    AWS Lambda是在Amazon Web Services平台(如EC2和S3)上实施的无服务器计算平台.AWS Lambda会在S3中加密和存储您的代码.当一个函数被请求运行时,它会使用您的运行时规范创建一个"容器",并将其部署到其计算场中的一个EC2实例,并执行该函数.这个过程如图2所示.
    史蒂文海恩斯
    图2. AWS Lambda中的执行过程
    在创建Lambda函数时,可以在AWS Lambda中对其进行配置,指定运行时环境(我们将在本文中使用Java 8),分配多少内存,身份和访问管理角色以及执行.AWS Lambda使用您的配置来设置容器并将容器部署到EC2实例.然后按照包,类和方法的顺序执行你指定的方法.
    在编写本文时,您可以在Node,Java,Python和最近的C#中构建Lambda函数.为了本文的目的,我们将使用Java.
    什么是功能?
    当您编写旨在在AWS Lambda中运行的代码时,您正在编写函数.术语函数来自函数式编程,起源于lambda演算.其基本思想是将应用程序组合成一个函数集合,这些函数是接受参数,计算结果并且没有不需要的副作用的方法.函数式编程采用数学方法编写可以证明是正确的代码.在编写AWS Lambda代码时,记住函数式编程是一件好事,但您真正需要了解的是该函数是接受输入对象并返回输出对象的单一方法入口点.
    执行模式
    虽然Lambda函数可以如上所述同步运行,但它们也可以异步运行并响应事件.例如,只要文件上传到S3存储桶,就可以配置一个lambda运行.此配置有时用于图像或视频处理:当新图像上传到S3存储桶时,会调用Lambda函数并引用图像来处理它.
    我曾与一家非常大的公司合作,这个解决方案适用于马拉松比赛的摄影师.摄影师正在拍摄照片.一旦他们的存储卡已满,他们将图像加载到笔记本电脑上,并将文件上传到S3.当图像被上传时,Lambda函数被执行来调整大小,加水印,并且将每个图像的引用添加到其在数据库中的跑步者.
    所有这些都需要大量的工作来完成,但是在这种情况下,由于AWS Lambda的横向扩展性,这项工作不仅得到了更快的处理,而且还可以无缝地扩大和缩小,从而优化了公司的云账单.
    除了响应上传到S3的文件之外,lambdas还可以被其他来源触发,例如插入DynamoDB数据库的记录和Amazon Kinesis的分析信息流.我们将在第2部分看一个以DynamoDB为特色的例子.
    Java中的AWS Lambda函数
    现在您已经对无服务器计算和AWS Lambda有所了解了,下面将介绍如何使用Java构建AWS Lambda函数.
    下载
    获取代码
    本教程示例应用程序的源代码"使用AWS Lambda的无服务器计算".由Steven Haines为JavaWorld创建.
    实现Lambda函数
    您可以通过以下两种方式之一编写Lambda函数:
    该函数可以接收到客户端的输入流,并将输出流写回到客户端.
    该函数可以使用预定义的接口,在这种情况下,AWS Lambda会将输入流自动反序列化为对象,将其传递给您的函数,并在将函数的响应序列化并返回给客户端之前进行序列化.
    实现AWS Lambda函数的最简单方法是使用预定义的接口.对于Java,首先需要在项目中包含以下AWS Lambda核心库(请注意,此示例使用Maven):
    <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.1.0</version></dependency>
    接下来,让你的类实现以下接口:
    清单1. RequestHandler.java
    public interface RequestHandler<I, O> { /** * Handles a Lambda function request * @param input The Lambda function input * @param context The Lambda execution environment context object. * @return The Lambda function output */ public O handleRequest(I input, Context context);}
    该RequestHandler接口定义了一个单一的方法:handleRequest(),它传递一个输入对象和一个Context对象,并返回一个输出对象.例如,如果你要定义一个Request类和一个Response类,你可以实现你的lambda,如下所示:
    public class MyHandler implements RequestHandler<Request, Response> { public Response handleRequest(Request request, Context context) { ... }}
    或者,如果您想绕过预定义的界面,则可以通过实施具有以下签名的方法手动处理InputStream和您OutputStream自己:
    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { ...}
    该Context对象提供有关您的函数及其运行环境的信息,例如函数名称,内存限制,记录器以及剩余时间(以毫秒为单位),该函数必须在AWS Lambda杀死之前完成.

    本篇文章是由武汉PHP培训为您呈现,希望给您带来更多更好的文章,喜欢的朋友们可以添加微信公众号.

更多武汉PHP培训相关咨询,请扫描下方二维码

武汉PHP培训

马上预约七天免费试听课

姓名:

电话:

上一篇:武汉PHP培训丨对JVM开发工具的调查
下一篇:武汉PHP培训丨使用PHP将文件上传到MySQL数据库

达内与广西城市职业学院(本科)携手签约,共同培育技术技能型人才!

2018百度品牌数字资产榜揭晓,达内教育、可口可乐、海尔等上榜

校企融合达内携手宁夏财经职业技术学院联合培养高质量技能型人才

达内与浙江广厦建设职业技术学院携手签约,共建达内学院!

选择城市和中心
贵州省

广西省

海南省

有位老师想和您聊一聊