如何防止重复处理 SQS 消息

问题

一般来说在我们的系统中,消息处理必须保证幂等性,以防止消息重复处理。在我们的系统中,下面两种情况可能导致相同消息被重复处理:

  1. 调度器和消息生产者:调度器或消息生产者可能会被多次触发,比如时不时有些任务因为超时而被多次触发。
  2. 队列管理:如果一个 Lambda 实例处理消息超时,另一个实例可能会在 visibility timeout 设置不合适的情况下得到重新处理相同消息的机会。

如果消息被多次处理,我们可能会向客户发送重复的电子邮件和短信,甚至礼品卡都可能重复发送。所以,我们需要一个通用的机制来确保相同消息不会被多次处理。

阅读更多

《从程序员到架构师》笔记

书名有点大,其实书中更偏向于一些架构场景介绍,书中讲解了作者经历过的十几次架构设计,介绍了场景,技术选择以及相关的权衡。书很快就能读完,对我个人来说多少有些收获。

阅读更多

Athena in IntelliJ IDE

目前所在公司使用的是 Serviceless 架构,数据库使用 DynamoDB,每天定时任务会导入数据湖,所以平时会经常使用 Athena 查询来排查问题,尤其是最近在调查数据一致性的问题。Athena 本身可以满足日常需求,只是使用多的时候觉得不如 IDE 方便。

阅读更多

使用 React 开发邮件模板

刚来土澳的时候很不习惯每天检查邮件,大小事都是邮件,在国内很多时候都是手机短信通知或者应用内通知。在澳洲待了几年,也习惯了每天查看下邮箱。现在这家公司绝大多数于用户沟通都是通过邮件,包括关键的用户通知,还有营销推送。我们每天发送大量的营销邮件,公司使用 Orrto 这个平台,这个工具可能很少人听说,举个场景:用户在我们网站上进行了一些操作,填了邮箱信息,就成了一个潜在用户。我们会在 Ortto 中创建一个 Journey,这个潜在用户进入这个 Journey 之后,我们会开始会发送一些邮件,过几天会再次发送一封类似的邮件提醒,当然在此过程中他已经完成了相应订单,我们就要将其从这个 Journey 中移除。总的来说,发送邮件的场景很多,我们的邮件模板梳理也非常多。

阅读更多

机器学习笔记

在读吴军的《智能时代》和《数学之美》时常常被技术的力量给震撼到,尤其是其中现实的例子特别具有说服力,未来的发展或许由人工智能驱动。当然在深度方面,自学肯定不如专科博士生,不过未来人工智能或许就像现在的编程一样成为一种基础工具。今年的计划之一就是学习人工智能,因为离开学习太久,学习理论的东西不如从前。这一篇指南 如何用3个月零基础入门「机器学习」 提供的建议非常受用。目前在看 吴恩达的 《机器学习》视频,已完成监督学习部分,这儿做一个阶段性复习。

阅读更多

对当前前端技术栈的理解

最近被问到对一些对技术的理解,虽说很多时候自己感觉对技术选择有自己的理解,知道背后的原因,但还是不大能说的上来。这儿就总结一下对所经历的一些技术的理解吧。谈到理解,总免不了介绍技术出现的原因,解决的问题,可能的方案以及未来的可能的形态。比如,不少人认为前端玩的一些概念是在后端存在很久的东西,这个现象也确实存在。虽然 web 技术诞生有一定的年头了,不过就前端而言,可能要在 2005 年之后 Ajax 出现之后以及 SPA 成为趋势之后,才算是真正的开始发展。JS 和 CSS 存在的问题也才逐渐的突出起来。

阅读更多

《浪潮之巅》笔记

之前自己对畅销书一直有成见,这本书一直没在自己的读书清单上。最近因为内人的强烈推荐,一口气把这本书读完了。先说说感受:这本书的信息量很大,囊括了信息产业革命之后所有知名技术公司的兴衰。好多年前,听朋友在谈这本书的:回看过去,全球技术的变革就像浪潮一样。当时不以为然:这都能算是一个概念,这和蓝平长二畅销书一个套路嘛。如果当时朋友这么推荐的话:过去几十年信息产业公司巨头的兴起和衰落,其实有着深层次的原因,通过这本书,可以了解未来互联网格局的变化;当时或许就不会错过这本书。虽说现在读这本书没有那种恍然大悟或者相见恨晚的感觉,但也不得不说如果早几年读这本书或许自己会有不一样的选择。再说说这本书不好的一面:过分的强调基因的作用,给人一种宣扬宿命论的感觉;另外作者的主观色彩比较浓厚,毕竟这本书就是他个人的视角(可以想象一下,如果这本书出自一个做研究的学者,对每个公司可能会有非常慎重公平的评价)。

阅读更多

CSAPP 笔记

《深入理解计算机系统》这本书是 CS 的经典书目。翻看之处,思绪总是回到学校,感慨良多,也悔恨当年在学校没有好好学艺,更没有穷根究底的思考。整体来看的话,这本书更像是导论,所讲内容部分属于计算机组成原理,部分是操作系统,还有部分汇编。单从知识点上,这本书讲的并不全面,不过还是有不少收获。

阅读更多

《Clean Architecture》 笔记

看书名不难猜出这是 Bob 大叔的另一本书,无意间翻到这本书的时候瞬间被吸引,因为书中所引出的问题也是自己最近在思考的问题。

1. 架构到底是什么

首要的问题是,我们讨论的架构到底是什么?这个问题的答案可能相当模糊,每个人所给出的回答也不仅相同。书中指出,设计与架构没有区别,架构包含所有底层设计细节。底层细节和高层架构是不可分割的,所谓的底层和高层本身就是一系列决策组成的连续体,并没有清晰的分界线。
软件架构的终极目标是,用最小的人力成本来满足构建和维护该系统的需求。我们可以用满足用户需求的成本来衡量架构的优劣。

阅读更多