通知API (.notifications)#

预计阅读时间:5分钟

你将学习的内容#

本指南介绍通知功能的工作原理以及如何在PySyft中启用。

简介#

PySyft 支持以负责任的方式访问敏感数据。这类工作的性质决定了流程通常需要外部审核或异步执行。例如,当数据科学家提交希望针对私有数据运行的代码时,通常需要数据所有者手动审核该代码后才会返回响应。

但是 - 数据所有者如何知道何时提交了代码请求?数据科学家又如何知道何时收到了响应?

这类场景促使PySyft需要具备通知功能。目前我们仅支持电子邮件通知,因此在指南的后续部分中,notification指的是email notification,这些术语可以互换使用。

邮件通知

一个Email Notification(邮件通知)会在事件发生时向数据科学家或数据所有者发出警报。触发邮件通知的事件可以进行开关设置。PySyft目前支持的电子邮件协议是Simple Mail Transfer Protocol(简单邮件传输协议),即SMTP。您可以使用像SendGrid这样的服务来设置并创建用于PySyft的STMP令牌。

工作原理#

设置通知非常简单:

  • 前提条件: 数据所有者在服务器上设置SMTP凭据

  • 数据所有者支持在服务器级别发送通知

  • 服务器的任何用户,无论是数据所有者还是数据科学家,都可以配置客户端来接收电子邮件通知,也可以停用这些通知

需要记住的是,电子邮件通知功能主要设计在低权限端服务器上执行。

会发送哪些通知?#

目前,系统仅发送最重要的通知。这些通知包括:

  • 当新用户注册时(管理员)

  • 当请求被提交时(管理员)

  • 当请求状态变更时(数据科学家)

这使双方能够通过知晓何时有待处理的输入,从而高效地进行异步协作。

设置SMTP凭据#

要设置SMTP凭据,可以在部署时(A)通过单容器或k8s模式中的适当密钥进行配置,也可以在节点部署完成后(B)进行设置。

需要传递的主要参数有:

  • username: 您想为这组凭据设置的任意名称。

  • password: SMTP令牌。您可以使用类似SendGrid的服务生成一个!

  • sender: 发送通知的电子邮件地址

以下你将看到关于如何通过这些测试的详细文档。

A. 部署期间#

单容器#

使用单个容器的部署过程中会用到多个.yaml文件。这些文件在进行docker部署前可以直接更新。您可以在backend-statefulset.yaml中找到它们,如下所示:

# SMTP
- name: SMTP_HOST
    value: {{ .Values.node.smtp.host | quote }}
- name: SMTP_PORT
    value: {{ .Values.node.smtp.port | quote }}
- name: SMTP_USERNAME
    value: {{ .Values.node.smtp.username | quote }}
- name: SMTP_PASSWORD
    {{- if .Values.node.smtp.existingSecret }}
    valueFrom:
    secretKeyRef:
        name: {{ .Values.node.smtp.existingSecret }}
        key: smtpPassword
    {{ else }}
    value: {{ .Values.node.smtp.password | quote }}
    {{ end }}
- name: EMAIL_SENDER
    value: {{ .Values.node.smtp.from | quote}}

为了保护您的SMTP令牌,我们建议您使用Docker secrets

通过Helm部署Kubernetes#

要指定必要的凭据,您可以更新默认的values.yaml值为您自己的配置。如果检查该文件,您会发现以下描述SMTP设置的部分。

# SMTP Settings
smtp:
  # Existing secret for SMTP with key 'smtpPassword'
  existingSecret: null
  host: smtp.sendgrid.net
  port: 587
  from: [email protected]
  username: apikey
  password: password

这些可以通过helm操作进行更新。更多详情,请参阅the deployment in k8s guide

B. 使用Python客户端#

为了演示如何设置和配置电子邮件通知功能,我们现在将启动一个测试服务器,并使用默认凭据登录。

import syft as sy
server = sy.orchestra.launch(name="test_server", port="auto", dev_mode=False, reset=True)

# logging in with default credentials
client = sy.login(email="[email protected]", password="changethis", port=server.port)

为此,我们需要指定三个字段:

  • email_username: 您想为这组凭证设置的任意名称。

  • email_password: SMTP令牌。您可以使用SendGrid等服务生成一个!

  • email_sender: 用于发送通知的电子邮件地址,例如 noreply@specialorg.org

  • email_server: SMTP服务器地址

  • email_port: SMTP服务可访问的端口

请注意,所有内容都以email开头,因为我们正在处理电子邮件通知。我们正在努力支持更多通知格式!

client.settings.enable_notifications(
    email_username="..", 
    email_password="..", 
    email_sender="..", 
    email_server="..", 
    email_port="..")

启用服务器通知#

数据所有者可以检查当前服务器设置如下:

client.notifications.settings()

要更新它们以启用或禁用通知,我们可以按如下方式更新设置:

client.settings.disable_notifications()
client.settings.enable_notifications()

以用户身份激活通知#

要开始接收服务器上可能对您感兴趣的事件通知,您只需执行以下操作:

client.notifications.activate()

要查看通知的当前状态,您可以查看client.account,它会显示您账户的概览:

client.account.notifications_enabled

我们正在努力提供对其他通知系统的支持,但目前尚无法通过短信或Slack启用通知功能。 如果您希望停止接收通知,请执行以下操作:

client.notifications.deactivate()