大型应用程序中的AWSSQS
关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。
什么是以及如何使用 AWS SQS 来扩展您的应用程序。本文向读者展示了如何设计您的内部基础架构以解耦系统组件。
(资料图)
在今天的文章中,我将向您展示我们如何在 Laravel 应用程序中使用 AWS SQS,以及它如何帮助我们管理每月16亿次操作。
在下图中,您可以看到我们使用 AWS SQS 一个月的典型账单:
在进入我们系统设计的细节之前,我将介绍 SQS 技术,为什么您应该考虑消息系统,以及如何将其与类似服务进行比较。
什么是 AWS SQS?
Amazon Simple Queue Service 是一个完全托管的消息队列系统,可实现分布式软件组件或微服务之间的通信。
解耦系统的某些部分允许您独立运行和失败您的软件组件。它还允许您构建易于扩展的应用程序。
消息队列充当中介:
什么是消息?
这是我想回答的一个重要问题,以帮助第一次接触这项技术的开发人员。
每个消息队列系统都接受文本作为消息的内容。使不同系统交换结构化数据的最常见方法是使用 JSON 对象。
将新消息推送到队列时,JSON 可以很容易地序列化为文本,并在系统的另一端使用时反序列化。
Laravel 之道
Laravel 在与队列系统交换消息时实现了自己的格式。这是一个例子:
当您调度作业时,JSON 由框架的内部队列系统自动创建。它在开发人员的眼中有些隐藏。
JSON 消息包含 Laravel 了解应该执行哪个作业类以及在什么条件下(尝试次数、maxTries 等)所需的所有数据。
如果您的应用程序没有像 Laravel 提供的预打包解决方案,您可以定义自己的格式。目标是为队列的消费者提供所有信息以处理所需的任务。
如何消费队列中的消息
您必须实现一个持续轮询等待消息到达的队列的系统。
Laravel 提供了一个内置的“worker”,你可以使用一个简单的命令来运行它:
php artisan queue:work
此命令运行一个请求新消息的后台进程。检索到消息时,工作人员可以运行消息中包含的作业类。
你可以在类中看到这个过程\Illuminate\Queue\Worker.php:
while (true){// Before reserving any jobs, we will make sure this queue is not paused and// if it is we will just pause this worker for a given amount of time and// make sure we do not need to kill this worker process off completely.if (!$this->daemonShouldRun($options,$connectionName,$queue)){$status =$this->pauseWorker($options,$lastRestart);if (! isnull($status)){return $this->stop($status,$options);}continue;}...// If the daemon should run (not in maintenance mode, etc.), then we can run// fire off this job for processing. Otherwise, we will need to sleep the// worker so no more jobs are processed until they should be processed.if ($job){$jobsProcessed++;$this->runJob($job,$connectionName,$options);if ($options->rest >0){$this->sleep($options->rest);}} else {$this->sleep($options->sleep);}...
为什么要使用 AWS SQS?
由于我的产品是开发人员工具,我几乎每周都会与其他开发人员讨论他们软件的内部设计。
在我有机会分析的大多数应用程序中,都引入了消息传递系统来启用异步任务执行。
Inspector也是如此。
我认为这是当今消息系统最常见的用例。一般来说,微服务或大型分布式软件是非常小众的用例。可能更属于企业环境。
什么是异步任务?
想象一下,您的产品能够通过上传大文件来导入帐户信息。用户从本地 PC 中选择文件并单击“导入”。
此操作可能需要一段时间才能完成。您必须打开文件,读取每一行,将其转换为适当的格式,并将此信息存储在您的系统中。
在 HTTP 请求时可能无法处理此过程。
多亏了消息队列系统,我们可以将文件存储在我们的服务器上,并使用文件所在的路径将消息推送到“导入”队列。
下一步是制作一个等待这些消息来处理导入过程的后台系统。用户无需等到导入完成。在此期间,他们可以继续使用该产品,也可以等待导入完成时收到通知:
Inspector 如何使用 AWS SQS
Inspector 最重要的挑战是能够处理大量的流量,同时保证良好的性能。
Inspector 从受监控应用程序接收数据的端点每天处理大约1000万个 HTTP 请求。对于这个容量,问题是这些数据包无法即时处理。
在开始我们的冒险之旅时,我们使用了一个自我管理的 Redis 作为消息队列系统。但是,随着数量的增加,我们更愿意依赖托管服务。
该策略是使用 AWS SQS 将这些任务推送到队列中,该队列将由后台的另一个独立系统(处理管道)使用:
摄取节点在 Node.js 中实现。它们被构建为一个非常简单且可扩展性极强的脚本。相反,使用队列的工作服务器是构建在 Laravel 框架之上的系统组件。
我们可以选择任何其他技术来管理消息队列。在公司的这个阶段,SQS 保证了可扩展性,对我们来说没有任何复杂性,因为它是一项完全托管的服务。
其他解决方案也可以为我们节省成本。我们更愿意向我们的客户保证该平台完美运行,并避免引入可能导致意外停机的弱点的风险。
结论
此时,您应该对什么是 AWS SQS、如何使用 AWS SQS 扩展您的应用程序、为什么应该使用 AWS SQS 等有了更好的了解。我希望您从本文中获得了一些有价值的信息。如果是这样,请随时喜欢和分享。
关键词:
精心推荐
- 如何把旧电脑的数据转移到新电脑上?
- 2023年浙江队主场继续落户湖州
- 医疗器械板块1月10日涨1.48%,春立医疗领涨,北向资金增持3.51亿元_天天头条
- 描写草莓搞笑的句子(精选275句)_当前焦点
- 泛亚微透(688386):泛亚微透关于持股5%以上股东减持比例达到1%的提示性公告
- 今热点:广州检方五年来追偿修复生态、治理环境费用3.39亿元
- 小鲨易贷逾期1天会上征信系统吗
- 【光明图刊】温馨服务护航旅客回家路
- 异质结电池HJT板块1月9日涨0.07%,杭萧钢构领涨,主力资金净流出8.7亿元
- e点贷借款逾期拖欠多久上征信 全球快播报
- 海天味业的成本之压:毛利率连年大降,净利润下行态势能否止住?
- 昌平区普通工伤如何计算_天天资讯
- 热点评!Notion 很好,但我已经换到了钉钉文档
- 时讯:【与时代同梦与梦想同行】秦一(小一姐姐):我愿讲述最美的中国故事
-
1、确保小猫至少八周大,洗澡不适合八周以下的猫。在八周之前,母猫将满足小猫的大部分梳理需求。2、先将小猫的身体弄湿,将小猫放入水槽,防
-
调查:脱贫地区乡村儿童家庭规模平均5人,多为“父养母教”
-
个人分析,玉米长期多头趋势尚难寻踪迹,目前行情应以反弹趋势对待,短期操作谨慎追多。第一,据Mysteel农产品12月29日-1月4日数据,全国146家
-
就是这个味道,而且它不止有玫瑰香,还有奶香,这是一种复合型的味道。一串阳光玫瑰的重量,是可以达到600克的,最大的能达到1 8kg,平均果粒
-
文|阑夕时间过得真快,上次这么醒来点亮手机,还是在去年。有人说刚刚结束的不是2022年,而是2020年的第3季,至于2023会是续订的第4季,还是彻
X 关闭
X 关闭
产业
-
不用跑北京 在家门口也能挂上顶...
日前,我省首个神经疾病会诊中心——首都医科大学宣武医院河北医院...
-
“十四五”期间 河北省将优化快...
从省邮政管理局获悉,十四五期间,我省将优化快递空间布局,着力构...
-
张家口市宣化区:光伏发电站赋能...
3月19日拍摄的张家口市宣化区春光乡曹庄子村光伏发电站。张家口市宣...
-
“张同学”商标被多方抢注 涉及...
“张同学”商标被多方抢注,官方曾点名批评恶意抢注“丁真” ...
-
山东济南“防诈奶奶团”花式反诈...
中新网济南12月15日电 (李明芮)“老有所为 无私奉献 志愿服...
-
广州新增1例境外输入关联无症状...
广州卫健委今日通报,2021年12月15日,在对入境转运专班工作人...
-
西安报告初筛阳性病例转为确诊病例
12月15日10:20,经陕西西安市级专家组会诊,西安市报告新冠病毒...
-
广东东莞新增本土确诊病例2例 ...
(抗击新冠肺炎)广东东莞新增本土确诊病例2例 全市全员核酸检测...
-
中缅边境临沧:民警深夜出击捣毁...
中新网临沧12月15日电 (胡波 邱珺珲)记者15日从云南临沧边境...
-
“土家鼓王”彭承金:致力传承土...
中新网恩施12月15日电 题:“土家鼓王”彭承金:致力传承土家...