我们的客户使用HyperTrack无需服务器即可访问实时位置。他们将我们用作实时位置的托管服务。他们不需要构建和管理服务器来摄取,处理,存储,提供和管理与其应用用户的实时位置相关的任何内容。

而我们自己则是使用AWS为我们的平台提供无服务器架构。用于从我们的SDK中提取数据流,准确处理它们,使位置可用于实时定位功能,以及在我们的数据湖中保存数据以进行分析和机器学习; 我们通过无服务器架构利用Amazon Web Services。

在这篇博客中,我们将向您介绍并分享我们的经验。

动机

HyperTrack是一个自助式平台,用于云中的实时定位。来自世界各地的数万名开发人员都在该平台上。开发人员在他们的应用中添加我们的SDK以开始跟踪。首先,他们使用此数据在测试环境中构建功能。测试结束后,该应用程序将推广给他们的用户。HyperTrack客户按使用付费,保持完全控制其使用量上升或下降,并期望它正常工作。

反过来,我们需要构建一个可以自动扩展和缩小的系统,而无需任何工程干预。我们无法预测,手动配置或取消配置服务,也无法深入了解客户在22个时区的推广周期。此外,这些服务需要具有低延迟响应,实时处理,高可用性平台和可靠的基础架构。

无服务器赢得胜利!我们使用的AWS组件旨在自动扩展,无需任何操作或管理工作。

定位服务详解

看看这个平台是怎么运行的:让我们看一下身份验证,摄取和处理部分:

1.客户应用程序中的HyperTrack SDK通过HTTP post请求向HyperTrack提取管道发送位置和相关上下文(活动,权限,电池等)。

2. API网关端点接收位置事件,检查授权标头并将数据记录放在我们的主Kinesis流上

3. Kinesis可靠地缓存数据,将我们的端点与处理资源分离,并使其可用于实时处理

4. Kinesis,DynamoDB流或其他lambda 调用各种形状和大小的Lambda函数来处理精确位置,过滤噪声并转换上游接口和应用程序的数据

5. DynamoDB仅存储实时位置,将有用位置存档到S3以供将来使用,并丢弃其余部分

现在,让我们回顾一下如何利用存储和存档的数据将其公开给我们的开发人员:

6.位置,上下文和设备数据转换为JSON格式,并通过公共REST API公开。使用基本访问身份验证控制对这些端点的访问

7.   AWS SNS验证订阅并处理Webhook调度

8. AppSync为各种Web和本机前端应用程序提供GraphQL端点,以便通过查询和订阅进行使用。

效果

我们对该平台进行了压力测试,然后自豪地向全世界宣布。一切都好。

与不同时区的客户一起抱怨抱怨API延迟和降低性能已经成为过去。成本控制良好,按使用付费的价格非常适合我们。在无服务器平台上托管的新版本的前几个峰值得到了优雅的处理,并没有在口袋中烧掉一个洞。所需的行政和监督也是最低限度的。

然后一个晴朗的早晨,API流量突然达到顶峰....

好消息是:API延迟、正常运行时间和实时性能都很正常。无服务器架构已经自动扩展,以处理比前一天高2-3个数量级的流量。但是,您不希望CFO看到这一点。

在最初几天内,数百万台设备注册了HyperTrack服务器。由于集成导致了错误:设备注册发生在应用程序启动时,而不是在启动跟踪的时候。我们的平台与位置时间序列类似地处理这些事件,并轰炸了我们的实时数据管道,虽然无意中,但它对我们的无服务器架构进行了令人敬畏的压力测试。

基础架构即代码和持续集成与部署

无服务器模式的好处是惊人的,我们发现自己很快就在我们的平台上使用它。现在我们运行数百个Lambda函数,在几乎同样多的DynamoDB表中存储数据,并利用其他几十个亚马逊服务来使我们的平台在我们的环境中工作。

管理大量资源并将它们相互连接起来的复杂性只能通过强大的自动化来管理。将所有基础架构定义为代码对于实现自动化至关重要。幸运的是,我们都非常信任自动化,并从一开始就使用IaC构建HyperTrack。

我们从Terraform开始使用配置文件定义所有资源。选择Terraform是因为开源性质和强大的社区支持。它帮助我们之前的一些人在其他项目中使用它。Terraform非常适合定义共享和静态基础架构。另一方面,必须单独定义每个资源太冗长(参见HashiCorp教程)并妨碍快速迭代产品功能。通过这种学习,我们转向无服务器框架,用于非共享基础架构部件。

Serverless是另一种开源工具,具有很强的采用率,专注于简单的开发人员体验。采用该框架减少了自定义自动化脚本和样板代码的数量。平台工程师能够更快地移动并更轻松地维护代码库。

无服务器服务通常需要了解Terraform部署的共享资源。为了支持这一点,我们将资源从Terraform写入AWS Systems Manager(SSM)并从Serverless读取SSM。与Serverless中此博客中描述的模式类似。

对于Terraform基础架构,开发人员正在运行Jenkins作业来部署更改。在应用基础架构变更之前,我们运行“terraform计划”以了解在不进行任何实际更改的情况下添加和删除哪些资源。此过程可降低共享和关键基础架构被破坏或受到其他影响的风险,但需要额外的工程监督。

对于所有其他服务,我们使用CircleCI持续构建,测试和部署。这是另一种无需服务器即可实现CI / CD实现全自动化而无需维护自己的基础架构的方法。此外,我们已经看到了允许平台工程师更快地迭代的巨大成功。

aws消息服务器,经验分享:我们如何使用AWS构建无服务器架构 - hypertrack相关推荐

  1. aws lambda使用_如何使用AWS Lambda和S3构建无服务器URL缩短器

    aws lambda使用 by Daniel Ireson 丹尼尔·埃里森(Daniel Ireson) 如何使用AWS Lambda和S3构建无服务器URL缩短器 (How to build a S ...

  2. 使用 Amazon Aurora Serverless构建无服务器应用程序仅仅只需要10分钟

    官方操作手册地址:使用 Amazon Aurora Serverless构建无服务器应用程序 亚马逊云科技提供了100余种产品免费套餐.其中,计算资源Amazon EC2首年12个月免费,750小时/ ...

  3. 网络爬虫数据挖掘_我如何构建无服务器网络爬虫以大规模挖掘温哥华房地产数据...

    网络爬虫数据挖掘 by Marcello Lins 通过Marcello Lins 我如何构建无服务器网络爬虫以大规模挖掘温哥华房地产数据 (How I built a serverless web ...

  4. 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统

    前言 在上一篇"5分钟Serverless实践"系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例 ...

  5. 超微服务器主板启动无反应_我如何构建无服务器启动

    超微服务器主板启动无反应 by Vikram Rangnekar 由Vikram Rangnekar 我如何构建无服务器启动 (How I Built a Serverless Startup) Le ...

  6. linux修改ip配置文件_协助调试Linux服务器经验分享

    achair教程网,原创教程,经验分享.有个微信群,与WordPress爱好者交流,加群方法:添加微信号368537,回复WordPress群. 大家好,我是achair,周末整个下午都在搞Linux ...

  7. aws lambda_我如何在一天内在Node.js中构建无服务器的AWS Lambda Twitter机器人

    aws lambda Have you ever wanted to create a Twitter Bot? It's been on my list of things to do for qu ...

  8. 构建静态服务器_为静态网站构建无服务器联系表

    构建静态服务器 介绍 (Introduction) A few years ago AWS launched static hosting service S3, which was a paradi ...

  9. 如何构建无服务器 WebSockets 平台

    如何将 WebSockets 集成到您的堆栈中 您可以通过为客户端设置专用的 WebSocket 服务器来连接和接收更新来交付事件驱动的架构.然而,这种架构有几个缺点,包括需要管理和扩展服务器以及从该 ...

最新文章

  1. cc2530期末试卷_ZigBee应用技术答案试题题目及答案,期末考试题库,章节测验答案...
  2. ReportViewer改变图表类型
  3. 2025年公有云或将服务中国过半数字经济
  4. ecplice java run_java – EventDispatchThread.run()行:eclipse中不...
  5. python中主要内建函数
  6. NFS网络文件系统服务介绍与实战
  7. 【CCF】201612-1中间数
  8. 小米变了?红米Note7今日开售 坚持了9分36秒...
  9. java乱码解决方法
  10. 白板推导系列Pytorch-PCA降维
  11. 小程序源码:全新外卖侠cps5.6全套微信小程序源码下载-多玩法安装简单
  12. java applet开发_Java Applet程序开发步骤
  13. 直播丨易鲸捷SQL编译器、达梦DM8数据库体系结构
  14. 个人微信开发api文档
  15. 概率论中两个独立连续随机变量X,Y,变量Z=X+Y的密度函数为X,Y的卷积与特征函数原理
  16. 浏览网页隐藏图片 html,Html、Js实现网页图片切换及隐藏
  17. C语言实现可视化,运用EasyX实现拼图+文字解谜+迷宫+猜数游戏
  18. 编译内核使tilera支持网桥和netfilter功能
  19. NetworkManager is not running
  20. 踩坑:IE的兼容性视图

热门文章

  1. cesium js 路径_[CesiumJS]Cesium入门3 – Cesium目录框架结构
  2. 夏天面试男生穿什么_你今年夏天在做什么?
  3. bash 别名_Linux的10个方便的Bash别名
  4. vue-cli禁用eslint的方式
  5. js 数据结构中邻接矩阵的图的直观表示
  6. Bootstrap 输入框组中控件的尺寸
  7. swift java_swift语法和java的比较
  8. 瑞利分布概率密度函数推导_IBL推导及实现
  9. node配置ssl证书_在Linux服务器上部署node项目(git部署,forever持续运行,配置SSL证书)...
  10. 子查询返回多个字段_ElasticSearch搜索之QueryFiltering、多/单字符串的多字段查询...