我们正在升级FutureStack的注册,仅到4月30日。条款和条件适用。 现在注册

与一家138年历史的航运公司一起进入无服务器的世界

8分钟阅读

[编辑注:从内部数据中心到AWS Lambda函数Matson首席软件工程师Dave Townsend分享了在一家成立于1882年的航运公司构建全球集装箱跟踪旗舰移动应用程序的实践经验。]

在2015年完成了将系统从大型机迁移到现代Java堆栈的10年努力后,马特森公司。它是一家有138年历史的美国太平洋领先航运公司,也是我现在的雇主。第二年,它关闭了四个内部数据中心,并将业务转移到AWS。至少可以说,这是一个杰作。

对AWS云的“全力投入”完成了美森的本土云之旅的第一段。随着数据中心的“提升和转变”已经过去,我们可以开始关注创新和数字转型。

这是我们去无服务器之旅的故事。

第一次见到Lambda

和许多人一样,我对此很感兴趣AWSλ函数,但并没有立即使用它们做很多事情。与此同时,美森的创新与建筑团队(我是其中的一分子)开始大量使用Amazon EC2在我们的实验室帐户的实验和运行证明的概念。当然,这是一个相当大的月账单。

将Amazon EC2实例的调度自动化,使其仅在工作时间可用,是开始试验AWS Lambda函数的低风险机会。事实证明,这是一个有价值的、零成本的解决方案。

另外,我们对一些积分Amazon API网关为我们的海外合同团队提供一种简单、安全的方式来停止/启动服务器,而无需创建额外的AWS用户帐户。

实验的结果产生了两个积极的结果:

  • 每月在Amazon EC2上的花费(期望的结果)
  • 对无服务器方法的好处的认识,这使我们对更广泛的Matson企业的无服务器计算的可能性非常兴奋(奖金)

设置无服务器的路线

创新和架构团队的职责之一是领导移动产品开发。我们有机会建立一个全球集装箱跟踪的旗舰移动应用程序,以及一些额外的增值,如交互式船舶时刻表,基于位置的港口地图,和实时闸门摄像头馈电。

基于我们基于web的在线跟踪系统的已知流量模式,将移动后端构建为一个高可用性——包括可能的低总成本——无服务器解决方案是一个完美的选择。

体系结构概述

所有进入系统的移动设备都是通过Amazon API网关。使用Amazon API Gateway可以确保我们有一个高可用性和可伸缩的终端,用于美国各地的移动访问。我们还在这个服务中做了相当多的缓存。

应用程序所需的大部分数据可以在我们的亚马逊VPC。其中一些api并不完全适合移动设备。AWS Lambdas为执行优化移动有效负载所需的任何数据转换提供了一个很好的地方。

AWS Lambda函数被架构为微服务,每个服务对于给定的业务功能都有一个限定上下文,例如跟踪服务、船舶服务等。

亚马逊DynamoDB主要用于外部化移动设备和内部系统的环境配置。

高级体系结构

可观测性的重要性

我们的客户希望准确、及时的集装箱跟踪和船舶状态更新,因此我们必须为运行系统设置适当的可观察性和警报机制。为了实现这一点,我们使用组合亚马逊CloudWatch日志使用自定义亚马逊CloudWatch度量过滤器,亚马逊SNS,亚马逊SES、AWS Lambda函数、松弛和New Relic。

New Relic为我们提供了一个无服务器的监控和跟踪工具,它提供了对运行AWS Lambda函数的健康状况的即时观察和警报。凭借其干净、易于使用、直观的用户界面,New Relic已经证明了自己是整个移动产品团队的宝贵工具。

资源编排

我们之前有过将AWS Lambda和Amazon API Gateway集成到AWS web控制台的经验(痛苦),我们知道,试图只使用web控制台来管理一个更大的应用程序不是什么好玩的事情。

看到紧急工具,如Serverless框架,我们从最初的原型开始就成为粉丝。使用它感觉像是一种非常自然的方式来表示资源供应和编排,以及整个应用程序的部署。这是AWS CloudFormation一直往下。

自动化就是一切

没有完全自动化的部署管道,应用程序只完成了一半,因此部署自动化不是一个选项。

在内部,我们在Amazon EC2上运行了Bamboo和Jenkins,用于持续集成和各种操作自动化任务,但对于这个应用程序,我们希望尽可能保持100%的无服务器状态。我们发现AWS CodePipelineAWS CodeBuild这很好,不仅因为功能,而且因为两个服务都遵循只按执行付费的模型;因此severlessness。

我们在设置部署管道时面临的主要挑战是从单个AWS帐户运行它,并跨多个AWS帐户(实验室、开发、预产品、生产)部署应用程序。但一旦我们理清了如何在AWS CodeBuild中使用AWS跨账户角色,一切就顺利了。

部署管道

管道的过程

所有提交到GitHub主分支的操作都会触发自动构建、测试和部署到Lab账户。AWS CodePipeline批准阶段用于为产品和OPS团队添加控制级别。产品团队控制到生产阶段的部署。当管道到达生产审批阶段时,一条Slack消息将发送给OPS团队,提供一键式生产部署流程。

基础设施代码

应用程序的每个部分都已经用AWS CloudFormation进行了编码并进行了版本控制。我们越来越喜欢使用“基础设施即代码”模型构建、维护和部署无服务器应用程序的实践,它为我们提供了一个版本化的可复制过程来创建环境。此实践还极大地简化了灾难恢复过程。

此外,套用保罗·约翰斯顿:如果没有作为代码的基础设施,您真的不像您可能认为的那样了解您的系统。我不得不同意。

未来的目的地

移动产品团队目前正在开发下一组无服务器产品,以支持我们的移动平台和即将推出的物联网(IoT)计划。亚博最新版直播

在移动领域之外,我们正在关注企业中其他可以从无服务器方法中获益的领域。在内部,Matson的创新和架构小组正在讨论构建应用程序的“服务器优先”方法——后退到容器平台——可能是什么样的。

最终的想法

就企业采用而言,无服务器正在成为主流。我倾向于同意Simon Wardley他说,未来几年,它将以一种巨大的方式着陆。

基于西蒙著名的企业IT采用周期,我想我们现在可以跳过“哦,废话!””的时刻。

访问AWS Lambda的新Relic无服务器了解关于在一次体验中监视、可视化、故障排除和对所有功能发出警报的更多信息。