Azure中的无服务器计算:如何构建申请网站

几天前,我发现自己在请愿网站上的股票收报机上慢慢滚动了百万签名。 很明显,该网站正处于挣扎状态,身份验证电子邮件最多需要24小时才能发送出去,从而导致队列中充满了未经批准的签名,等待写入数据库。 看着报价增加了,我开始想知道如何使用Azure提供的一些更现代的云优先设计选项来构建这样的服务,并将我在本专栏中已经编写的许多工具和服务放在一起。

此类服务的架构相对简单。 您需要一个Web前端来收集签名,一个消息传递框架将其传递到可伸缩的后端,并使用微服务将其写入数据库并验证发送者身份。 然后,您可以使用其他消息传递工具来跟踪签名,并且可以使用分析工具和机器学习来识别无效条目。

[开发人员指南: 无服务器计算:AWS,Google Cloud和Microsoft Azure | 然后学习如何使用Microsoft的Azure功能以及如何使用AWS Lambda进行无服务器计算。 ]

设计网络层

此类服务的一个关键要素是Web内容。 选择正确的Web开发框架很重要。 如果要使用Azure微服务来处理页面生成的事件,则单页Web应用程序(SPA)是一个有用的框架。 Azure的用于处理可伸缩Web内容的工具提供了一个交付内容的平台,使用其内容交付网络来扩展静态内容和页面模板,并通过Azure Front Door的内置应用程序网关来处理负载平衡Web应用程序服务器并提供Web应用程序防火墙。

我将React作为Web框架使用,因为它在SPA中运行良好,并且其响应特性使其非常适合需要跨多个设备工作的应用程序。 它使将表单元素连接到JavaScript变得很容易,让您构造CloudEvents有效负载并将其发送到您的微服务后端。

围绕消息驱动的事件架构构建这样的服务非常有意义。 您需要能够扩展,并且需要能够在瞬息万变的环境中工作。 消息传递(尤其是与消息代理绑定时)可以处理动态变化的基础架构和基于标准的消息格式,例如CloudEvents的核心,它为您提供了一个用于构建和构造消息头和有效负载的框架。

使用无服务器微服务处理数据

像这样的网站建设者面临着一个有趣的问题:如何扩大规模? 显而易见的答案是利用无服务器计算技术并提供最小但高度可扩展的服务。 您可以使用事件网格之类的工具将消息从Web应用程序前端定向到消息处理微服务,而无需在负载增加时启动新的虚拟机以及必须动态修改负载平衡规则,而是可以按需启动Azure Functions实例。

设计这样构建应用程序的微服务相对容易。 您正在将数据写入队列并保留它,直到通过电子邮件验证循环验证了用户。 可以使用两个微服务来交付该过程。 第一个微服务从Web应用程序获取一条消息,然后将其内容写入带有指示临时签名的标志的数据库中。 然后,第二个微服务显示一条消息,要求进行验证,将电子邮件地址和签名令牌传递到电子邮件服务,电子邮件服务和签名令牌将它们插入模板中,然后再传递给签名者。

使用智能数据服务

对于构建现代云应用程序的任何人来说,最困难的决定也许就是选择数据后端。 并不是说没有任何服务可以使用,而是太多了! 您是否应该将数据存储在传统的关系表中,应该将其存储在NoSQL服务中还是要利用图数据库的功能?

当然,对于一个请愿网站,您想在该网站上对结果进行一系列查询以确定欺诈性签名,因此您具有一组特定要求,可用于确定有问题的条目。 您将存储一个名称,一个邮政编码或邮政编码(例如邮政编码),一个时间戳,一个原始地址以及一个请愿标识符。 这应该使您在签名过程中首先检查重复的地址,以及检查地址的明显变体(例如,在Gmail地址中查找。分隔符,该地址不是由Gmail解析,而是由其他大多数邮件传输引擎)。

时间戳和IP地址可以帮助跟踪欺诈,这是在请愿应用程序外部运行的批清理过程的一部分。 可以跟踪来自单个IP地址的明显投票,以及来自已知VPN端点的签名。

通过这样的查询,可以使用诸如Azure的Cosmos DB之类的数据作为数据平台,使用它来将数据存储为图节点,并使用图查询来提取数据。 通过使用分布式存储模型,您可以使用相对宽松的一致性模型来处理实例之间的复制,从而构建弹性后端。 通过使用有限的陈旧性或基于会话的一致性模型,您可以让签名Web应用程序将数据放入Cosmos DB中,然后建立一个页面,要求用户等待确认电子邮件。

用于欺诈检测的确认和机器学习

这样一来,您可以在进行基本欺诈检查并触发适当的电子邮件之前,等待各种实例变得一致。 使用由Cosmos DB中运行JavaScript函数触发的无服务器应用程序,您可以发送失败,重试或验证提交电子邮件。 尽管Azure具有发送SMTP消息的工具,但最好使用第三方服务,例如SendGrid,该服务具有在短时间内发送数百万条消息的规模(并且具有被大多数反垃圾邮件服务列入白名单的优势) 。

发送给用户的确认消息包含加密签名的令牌。 一旦返回到验证微服务并进行了检查,则可以切换数据库条目的签名状态。 另一个内部JavaScript服务对有效条目进行计数,您可以使用SignalR将近乎实时的签名者计数传递给API,该API可以由网页显示或由希望跟踪请愿书的第三方使用。

将所有这些元素放在一起可提供一种可扩展的请愿服务,并且可以处理基本的反欺诈技术。 您可以使用Azure机器学习工具查找异常的签名模式,从而在整个过程中快速添加更复杂的反欺诈工具。 它们可以在签名过程之外运行,因此只有在具有足够的签名以使其可以经济地使用大量计算时才使用它们。

到目前为止,我已经使用现代云开发原理来为可扩展的,相对低成本的服务布置核心架构。 您可以做更多详细的工作来充实事物,建立快速的原型以进行测试,然后再从最低限度可行的产品开始,并在每个后续版本中添加功能。 通过将服务与无服务器计算相结合,您可以根据用户需求的变化快速上下扩展,而不必承担长期的虚拟基础架构成本。

值得定期与架构团队一起进行此类设计练习,因为它使您有机会考虑可能未在应用程序中使用的服务。 这是学习和共享想法的快速简便的方法,并具有额外的好处:一旦考虑过在未开发的应用程序中使用它们,便可以选择在将来的应用程序开发和更新中考虑它们,从而为减少应用技术债务的风险。

From: https://www.infoworld.com/article/3384176/serverless-computing-in-azure-how-to-build-a-petition-site.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值