通知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.orgemail_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()