Firebase数据库下载使用情况中是否包含HTTPS握手数据?

时间:2017-06-27 21:31:30

标签: android firebase firebase-realtime-database google-cloud-functions

我一直在为一个应用程序进行原型设计,该应用程序报告不常见的设备生成事件(例如地理围栏转换)和用户对云功能的请求。似乎数据库触发器是一种安全,简单且低成本的方法来调用云功能。应用程序将事件/请求参数打包到一个小对象(<500字节)中,并将对象写入Firebase数据库,从而触发所需的云功能。这很有效,并提供了预期的好处。

当我扩展测试并查看Firebase控制台的数据库使用情况面板时,我发现下载数据的大小远远高于我的预期。我的客户端代码没有监听器;它只写数据。我检查了云函数只读取了预期的小对象,代码中的单个查询是针对在安全规则中指定了索引的数据。

然后我开始查看Android Device Monitor为特定客户端事件提供的网络统计信息。数据显示,当数据库连接不存在并且需要建立以写入服务器时,将接收大约4500字节的数据。我对HTTPS知之甚少,我认为这是与数据库连接相关的Firebase开销,并考虑了其他选项。

接下来,我尝试使用自己的OkHttpClient连接编写触发器对象到REST API。当我看到为写入500字节对象而收到相同的4000多个字节时,我意识到接收到的数据必须是证书和密钥的HTTPS握手,并且很可能是不可避免的。

我的问题是:

  1. 当建立与Firebase数据库服务器的连接主要是为HTTPS连接交换安全数据时,客户端是否收到4000多字节?
  2. 这些字节是否被视为“已下载数据”,因此包含在Firebase控制台和结算计算中显示的使用总量中?
  3. 如果云计算功能使用admin.database()访问Firebase数据库,那么该SDK是否使用REST API实现?在这种情况下,问题#2中的问题是否也适用于那里?
  4. 正如我在帖子开头所指出的那样,我正在处理的事件/用户请求很少发生。几乎总是这样的情况:当需要编写数据来报告事件时,数据库连接将不存在并且需要建立。如果对问题#2的回答是肯定的,则认为小于500字节的操作的成本实际上将是4000+字节。对于这个用例,将事件报告给云函数的成本最低的方法似乎是使用HTTP triggers,而不是数据库触发器。

    更新

    如果我更彻底地搜索了文档,我就不需要发布这个问题了。它全部包含在Database Billing and Profiler documentation

      
        
    • 协议开销:建立和维护会话需要服务器和客户端之间的一些额外流量。取决于   底层协议,此流量可能包括:Firebase Realtime   数据库的实时协议开销,WebSocket开销和HTTP   标头开销。每次建立连接时,这个开销,   结合任何SSL加密开销,有助于   连接成本。虽然这通常不是很多   带宽,如果您的有效载荷微小或您制造,它可能是巨大的   频繁,短暂的联系。

    •   
    • SSL加密开销:安全连接所需的SSL加密开销会产生相关成本。平均来说,这个   初始握手的成本约为3.5KB   每个传出消息上的TLS记录头大约40B。对于   大多数应用程序,这只是您账单的一小部分。但是,这个   如果您的具体案例需要很多,可能会成为很大比例   SSL握手例如,不支持TLS会话的设备   票证可能需要大量的SSL连接握手。

    •   

1 个答案:

答案 0 :(得分:0)

您的问题中有很多项目细节,Stack Overflow可能不是最佳答案。我将在下面提供一些简单的答案,但建议您reach out to Firebase support提供有关故障排除的个性化帮助。

HTTPS握手带宽是可计费流量,应显示在Firebase控制台的数据库使用情况面板中。我不知道开销是多少。

Admin SDK for Node使用套接字连接到Firebase数据库。它不使用REST API。协商HTTPS / WebSocket连接时的带宽也是可计费流量。

在创建新容器时,会发生从云功能到数据库的此连接的构建。这可以在项目的第一次部署之后,在一段时间不活动之后,或者由于高活动而需要扩展云功能。