无服务器的微服务 3

来源:开源中国社区 作者:oschina
  

多区域部署

到目前为止我们还没有更多讨论代码运行的环境。Lambda 会指定一个区域部署你的代码,但你必须决定你想要在哪个(或哪些)区域运行它。在我初始的版本中,我在美国东1区(又名弗吉尼亚数据中心)创建了初始程序。为了能够在网络中获得更好地体验,我们建立了一个全球性的服务,我们把它扩展到包括 eu-west-1(爱尔兰)和 ap-northeast-1(东京),这样我们的移动应用程序可以从世界各地快速地连接:

Cross-region Auto-deployment from Amazon S3 with an AWS Lambda function一种在两个附加的区域内部署 Lambda 功能的无服务器机制

下面的内容我们已经在博客中提到:在 S3 部署博客中,我展示了如何使用 lambda 函数部署其他存储在亚马逊 S3 的 lambda 函数压缩文件。在 ContainerCon 演示中,我们搭建了小型的平台并打开了 S3 跨区域复制,这样我们就可以以 ZIP 压缩文件的方式上传图片处理服务到爱尔兰数据中心,并自动拷贝到东京数据中心,然后将部署在两个区域的服务关连起来,形成了各自区域的 Lambda 服务。

快来享受无服务器的解决方案吧:)

搭建无服务器 web 应用,第一部分:API 端点
 

经过上面的步骤,我们已经拥有了一个可以工作的 mobile 应用程序和一个为 mobile 应用程序提供图片处理服务的后端,这个后端通过 AWS Lambda 服务部署到了全球多个节点。下面让我们把注意力集中到为那些喜欢使用浏览器的群体创建一个无服务器的web应用。我们将分2步来实现它。第一步:我们将创建API端点,这个API端点对外提供了图片处理服务;第二步:我们将在Amazon S3上面创建真正的web应用。在这个章节,我们将实现第一步的内容。

AWS Lambda 通过提供一个内置的 web service 前端来实现将一段具体的代码变成一个 service,但是在访问这个 service 的时候,需要客户端使用 AWS 提供的身份信息进行对服务请求进行签名(在我们上一节创建的 Android 应用中,我们通过使用 Amazon Congnito 验证客户端来实现这个功能)。但我们创建一个 web 应用去调用图片处理服务的时候,应该如何实现这个签名的功能呢?

为了完成这个,我们将转向另外的服务器, Amazon API Gateway。这个服务让你能定义一个 API 而不需要任何架构-这个 API 是由 AWS 完全管理的。我们将用这个 API 网关去创建 1 个 URL 给图像处理服务,该服务的众多能力之一就是能给在线的任何用户提供访问。亚马逊 API 网关提供了众多途径来控制 API 的访问:API 调用被 AWS 证书签名来认证,你可以使用 OAuth 标志并且能简单将标志头用于认证,你也可以使用 API 钥匙(不推荐,因为是不安全的),或者让 API 变成公共的,如我们马上在这儿演示的。

另外 API 网关提供了多种多样的访问模型,我们不会全在这次来探索。有些是内建的(比如防 DDOS 保护)和其他的,比如缓存化,可以为某些重复访问的流行的图片减少延时和访问代价。通过在客户端和(微)服务插入一个间接层,透过 API 网关,这些文件也能把通过自身的版本和分阶段特性来独立更新。从现在开始,我们将要聚焦和暴露我们的图像处理服务 API 的基本任务了。

OK,让我们来创建我们的 API。在 AWS 控制台上,选择 API 网关然后选择“新API”,为这个 API 提供一个名字和可选的描述。在我的例子中,我取名“ImageAPI”.

API Gateway API Creation Button

下一步,为你的新 API 创建一个资源(我把它叫做"ImageProcessingService"),然后在其中创建1个 POST 方法。选择“Lambda函数”作为集成类型,然后输入使用你的图像处理服务的 Lambda 函数的名字。在“Method Request”配置中,设置认证类型为空类型。(也就是说,这将会是公用的端点)。这就差不多了。

Method and Resource creation in Amazon API Gateway

为了测试集成成功与否,点击"Test"按钮:

API Gateway API Test Button


 


 

然后提供一个测试负荷比如{“operation”: “ping”}。你应该得到期待结果“pong” ,提示你已经成功把你的 API 和你的 Lambda 函数连接起来了。

旁白:我们会得到更多和(更深层次)的测试,但是我有时觉得有用的事是在我的 API 中添加一个顶级资源的 GET 方法,这会变得简单,像 ping 操作一样,让我很快可以用任何浏览器快速审查,正如预期的那样,我的 API 是链接到我的 Lambda 函数。虽说这不需要演示(或总的来说),但您会发现它有用。

接下来会发生什么(S3静态内容),我们要使 CORS 成为必须。这总的来说是简单的,主要有这么几个步骤。API Gateway 团队会继续让它变得简单,在这里不是重复指令(并有可能让他们很快变得过时),我将会在文档中告诉你。

点击“部署这个 API ”按钮。然后,你的所有设置就用在了你的网站上了。


 

你可以简单地改变这个方法来合并验证,运行各种各样的单元测试,等等。如果你不需要web应用的基础设施,你可以跳过API网关和HTTP调用,并在你的单元测试中直接运行图像处理服务。如果你想要汇总或分析测试输出,你可以简单附加一个Lambda函数作为一个事件处理添加到DynamoDB表中,来保留测试结果。

 

总结

这真是一篇很长的文章,但是它包含着建立一个真实的,可扩展的前(移动端/网页)后端服务的内容,所有这些内容不需要服务器或其他基础设施系统的任何部分:前端,后端,API,部署,或者测试。来吧,无服务!

下一次,只需要有快乐的Lambda (无服务,微服务)编程!

-Tim

本文转自:开源中国社区 [http://www.oschina.net]
本文标题:无服务器的微服务
本文地址:http://www.oschina.net/translate/microservices-without-the-servers
参与翻译:Iam魔方, leoxu, HAILINCAI, 武汉加油, 无若, 木兰宿莽

英文原文:Microservices without the Servers


时间:2015-10-29 10:58 来源:开源中国社区 作者:oschina 原文链接

好文,顶一下
(0)
0%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量