什么是无服务器?
随着关于无服务器的所有嗡嗡声,退后一步并确保我们在谈论同一件事是个好主意。无服务器是一个总称。从本质上讲,它是一种计算模型,您无需考虑底层基础架构:您无需配置资源,无需管理扩展,也无需担心高可用性。所有这一切都是自动发生的。
使用无服务器,您只需为处理请求时使用的资源付费。当需求在高流量期间增加时,可用资源会相应增加。当流量下降时,您不再为这些资源付费。或者,预先配置的基于云的服务可以让您的账单闲置并侦听请求。您仍然会遇到无服务器计算的高额费用,但这只是因为您的使用率出乎意料地高。无服务器对于具有可变或稀疏工作负载的应用程序有很多好处。以一家允许在世界杯期间进行现场投注的博彩公司为例。在比赛期间,投注可能会随时出现,但您可以假设当一支球队得分时,新投注的数量会激增。不幸的是,您无法预测何时会进球。使用无服务器,投注应用程序背后的基础设施将立即自动扩展以支持流量。在没有自动扩展的情况下,您需要手动监控资源消耗以确定何时需要扩展——假设您有可用资源来这样做。
无服务器数据库本质上以相同的方式工作。当您向他们发送数据时,数据库会自动扩展以处理增加的连接和存储需求。您为读/写流量和数据占用的存储空间付费。就是这样。
传统 RDBMS 和无服务器计算的挑战
当您将无服务器计算平台与传统关系数据库 (RDBMS)混合使用时,您可能会遇到一些问题。最明显的(尽管不仅限于关系数据库)是围绕供应基础设施资源。虽然您通过使用无服务器计算节省了时间,但您仍然需要担心数据库的基础设施。即使数据库托管在托管平台上,您仍然需要配置这些资源——“托管”部分是指托管它的基础设施,不一定是可用资源。随着新数据的存储,数据库会随着时间的推移而增长,因此除了计算之外,您的存储资源也需要能够随之增长。
另一个常见的挑战是连接过多会使数据库不堪重负的风险。在标准的数据库交互中,服务或应用程序打开与数据库的连接,维护它以读取和写入数据,然后在完成时销毁连接。无服务器功能可能会为每个请求启动一个新连接,创建干连接:不发送或接收数据的打开连接,但会增加打开连接总数并可能阻止新连接。选择无服务器数据库可以完全消除这一挑战,并且可以根据您的应用程序需求简单地扩展(向上或向下),而无需您做任何工作。
您可以合并连接以提高性能并避免运行干连接,但如果多个连接正在访问相同的数据,您仍然面临读/写冲突的风险。为无服务器构建的数据库通常内置池或某种形式的负载均衡器,以帮助缓解此问题。