📜  Firebase云功能

📅  最后修改于: 2021-01-02 03:50:40             🧑  作者: Mango

Firebase云功能

移动和Web应用程序需要后端代码来执行任务,例如发出通知或处理长时间运行的任务。在过去的十年中,此后端代码在服务器上运行。

最近,Google的Firebase推出了一项名为Cloud Functions的新服务。借助Cloud Functions,Firebase提供了可扩展的解决方案,用于在云中运行后端代码。

Firebase的云功能使我们能够自动执行后端代码,以响应通过HTTPS请求和Firebase功能触发或引起的事件。我们的代码存储在Google的云中,并且在托管环境中运行,无需管理和扩展我们自己的服务器。

在云中运行代码具有多种优势,如下所示:

  • 无需运行和维护我们自己的服务器。
  • 对于后端代码,我们有隔离的代码库。
  • 我们只得到代码实际执行时间的账单。
  • 云的基础架构具有高度可扩展性。

利用Cloud Functions,开发人员可以访问Google Cloud事件和Firebase,以及可扩展的计算能力,以响应这些事件运行代码。预计Firebase应用程序将以独特的方式使用云功能来满足其独特和特定的需求,用例可能属于以下领域:

  • 当发生有趣的事情时通知用户。
  • 执行实时数据库维护和清理。
  • 在云中执行密集任务,而不是在我们的应用程序中执行。
  • 与API和第三方服务集成。

发生有趣的事情时通知用户

Cloud Function用于使用户参与并及时了解有关应用程序的相关信息。例如,考虑一个允许用户跟踪应用程序中彼此活动的应用程序。在这样的应用程序中,由实时数据库触发的函数将写入以存储新的关注者。这些关注者可以创建Firebase Cloud Messaging,以使知道他们已经获得新关注者的适当用户。

\

  • 此函数写入存储跟随者的实时数据库路径。
  • 消息由函数组成,通过FCM发送。
  • 通知消息通过FCM发送到用户的设备。

执行实时数据库维护和清理

通过使用Cloud Functions数据库事件处理,我们可以保持系统清洁和最新,并根据用户行为修改实时数据库。例如,在基于实时数据库的聊天室应用程序中,我们可以跟踪书写事件并清除用户消息中不适当或亵渎的文字。

  • 该函数的数据库事件处理程序侦听特定路径上的写事件,并检索包含任何聊天消息文本的事件数据。
  • 为了检测并清除任何不适当的语言,该函数处理文本。
  • 该函数在数据库的背面写入更新后的文本。

在云中而不是我们的应用程序中执行密集的任务

用户可以利用Cloud Functions来执行Google Cloud资源密集型任务(繁重的CPU或网络),实际上这不可能在用户的设备上运行。

例如,我们编写了一个函数来侦听将图像上传到存储设备,运行该函数,将图像下载到实例,然后将其上传并修改回存储设备。我们所做的修改可能包括裁剪,调整图像大小等。为了使这项工作更容易,我们将ImageMagick命令行工具与Cloud Functions一起使用。

  • 将图像文件上传到云存储后,将触发一个函数。
  • 该函数创建图像的缩略图版本并下载图像。
  • 缩略图位置通过写入数据库,以便客户端应用程序可以找到它或使用它。
  • 该函数将该缩略图上传回新位置的存储中。
  • 该应用程序下载缩略图链接。

与第三方服务和API集成

云端功能可以通过调用和公开Web API来帮助我们的应用与其他服务很好地配合使用。例如,一个应用程序用于协作开发,可以将GitHub发送到工作组聊天室。

  • 用户将提交推送到GitHub存储库。
  • HTTPS函数通过GitHub webhook API触发。
  • 该函数通知提交给团队松弛通道

它是如何工作的?

编写和部署函数,Google的服务器将立即开始管理函数。我们可以使用HTTP请求直接触发该函数,或者在使用后台函数的情况下。触发函数,Google的服务器将监听事件并执行相应的函数。

当负载增加或减少时,Google会通过迅速扩展运行我们的函数所需的虚拟服务器实例的数量来做出响应。每个函数在其自己的环境中以自己的配置分别运行。

后台函数的生命周期

开发人员为新函数编写代码,定义该函数应在何种条件下执行,并选择事件提供程序(例如,实时数据库)。

开发人员将部署该功能,该函数将通过firebase连接到选定的事件提供程序。

当事件提供程序生成符合函数条件的事件时,将调用该代码。

如果该函数忙于处理许多事件,则Google会创建更多实例来快速处理工作;如果函数空闲,则清理实例。

当开发人员通过部署更新的代码来更新函数时,旧版本的所有实例将被清除并通过新实例进行替换。

删除事件提供程序和函数之间的连接,并在开发人员删除函数时清理所有实例。