如果我正确地理解了整个概念,那么“无服务器”架构假定不使用自己的服务器或容器,而应该使用一堆aws服务。通常这种架构包括Amazon API Gateway,一堆Lambda函数和用于存储数据和状态的DynamoDB(或替代),因为Lambda无法保持状态。而EC2这样的服务并没有参与所有这些,因为这是一个虚拟服务器,它减少了无服务器架构的所有好处。
这一切看起来都很酷,但我觉得我错过了一些重要的东西,因为现在这似乎不适用于实时应用等情况。
说,我有2个在线用户。其中一个在应用程序中执行操作,该操作会触发数据库中的更改,这反过来应该触发第二个用户应用程序中的更改。
从服务器向客户端发送一些数据或命令的传统方式是websocket连接。但是对于无服务器架构,似乎没有办法建立和维护websocket连接。那么......我在哪里误解了这个概念?或者,如果我理解了所有内容,那么如何实现上述两个用户之间的交互?
答案 0 :(得分:4)
答案 1 :(得分:1)
无服务器不仅仅是Lambda,API网关和DynamoDB的问题,它还要大得多。无服务器的一大优势是它从您的盘子上取下的操作负担。不再修补,没有更多的容量规划,没有更多的配置管理。这些看起来似乎微不足道,但在很多实例中做好这些事情是复杂,昂贵和耗时的。另一个好处是经济学。公共云利用公用事业计费,这意味着无论您是否实际使用公共云,您都需要支付运费。使用AWS,每项服务的大部分计费都是按小时计算的,但Lambda是每100毫秒计费一次。运行一整个月的最便宜的EC2实例大约是10美元/ m(冗余的两倍)。 Lambda定价20美元可以获得数百万次调用,因此对于大多数情况下,无服务器的价格要低得多。
无服务器并不适用于所有内容,但它有其局限性,例如它不适用于运行二进制文件。你不能在Lambda中运行nginx(例如),它只是意味着它支持的编程语言的运行时环境。它还特别适用于基于事件的工作负载,非常适合基于微服务的体系结构。小的独立离散计算部分在完成工作时,它们将事件发送给另一个人做其他事情,如果需要则返回响应。
为了解决您对实时处理的担忧,根据您的代码执行的操作,您的Lambda函数可以在不到100毫秒的时间内完成,最长可达5分钟。有一些策略可以优化它的持续时间,但总的来说,它适用于有利于实时场景的短期工作。
在关于与Web应用程序和数据库交互的2个用户的示例中,可以使用具有一个或两个函数和DynamoDB表的无服务器技术轻松构建。总的往返时间可以低至几毫秒(如果不是秒),它实际上取决于您的代码及其所做的事情。这些都是HTTP调用,因此不需要websockets。想想许多API互相调用,而您的Lambda代码就是协调器。
答案 2 :(得分:0)
您可能想要查看SNS(简单通知服务)。在您的示例中,如果app user 2是SNS主题的订阅者,那么当app user 1进行触发SNS消息的更改时,它将被推送到订阅者(app user 2)。除了SMTP或SMS之外,还可以通过多种支持的协议(亚马逊,Apple,Google,MS,百度)推送该消息。 SNS消息可以由lambda函数触发,也可以在更新后直接从DynamoDB流触发(数据库触发器)。应用程序开发人员可以选择消息协议和格式。该应用程序只需通过其本机频道接收消息。这可能不是毫秒级的“实时”延迟,但除了对延迟最敏感的应用程序之外,它的速度足够快。
我已经在AWS无服务器应用程序上工作了几个月,并且对可用的各种服务感到惊讶。增加的速度和增加的新功能足以让您无法呼吸。