文本翻译参考体系结构
在同一游戏会话中,玩家使用不同的母语,可能需要接收原始消息及其翻译版本,这很常见。
本文介绍 GitHub 上的此示例中使用的体系结构。 请注意,此参考体系结构中的代码只是一个指南示例,在用于生产环境之前,可能还有需要优化的地方。
体系结构关系图
体系结构服务
- 文本翻译 - 即时将文本翻译成多种语言。
- Azure 流量管理器 -(可选)根据聊天服务器所在位置导致的延迟将玩家连接到最合适的区域。
- 事件中心 - 专为实时接收和处理大量事件(在本例中为聊天字符串)而量身定制的服务,以大幅减少或彻底消除管理开销。
- Azure Function - 可按需运行代码的无服务器计算服务 - 在本用例中,代码将调用不同的认知服务。
体系结构注意事项
您只需创建一个事件中心命名空间,该命名空间将包含分别用于发送和接收消息的 2 个事件中心。
目前,此服务尚不支持所有语言。 请参阅文本翻译 API 的语言和区域支持文档,了解支持的语言和区域。
部署模板
单击下面的按钮,将项目部署到您的 Azure 订阅:
此操作将触发模板部署,即系统会将 azuredeploy.json ARM 模板文件部署到您的 Azure 订阅,从而创建必要的 Azure 资源。 这可能会在您的 Azure 帐户中产生相应费用。
请查看一般指南文档,其中有一部分概述了 Azure 服务的命名规则和限制。
备注
如果您对 ARM 模板的工作原理感兴趣,请参阅此参考体系结构中使用的每个不同服务对应的 Azure 资源管理器模板文档:
有两种类型的 Azure 认知服务订阅。 第一种是单一服务订阅,例如计算机视觉或语音服务。 单一服务订阅仅限所订阅的服务。 第二种类型是多服务订阅。 这样,通过单一订阅就能获得多种 Azure 认知服务。 此选项还将合并帐单。 为了使此参考体系结构尽可能模块化,认知服务均设置为单一服务。
最后,添加以下函数 应用程序设置,以便示例项目可以连接 Azure 服务:
- EVENTHUB_CONNECTION_STRING - 所创建的 Azure 事件中心命名空间的连接字符串
- TRANSLATORTEXT_KEY - 创建的用于访问 Azure 文本翻译认知服务的访问密钥
提示
要在本地运行 Azure Functions,请使用这些相同的应用设置更新 local.settings.json 文件。
分步操作
- 玩家的设备在 Azure 流量管理器确定的特定区域中打开与聊天服务器的持久加密连接。 聊天服务器创建一个进程,负责维护与玩家的连接以及一些基本的元数据。
- 玩家的客户端通过先前创建的安全连接向聊天服务器发送聊天消息。 此玩家在聊天服务器中的进程接收消息并进行解密和解析。
- 运行标准验证,聊天服务器调用 Azure 事件中心服务(以保持消息顺序)。
- Azure 事件中心充当 Azure Function 的输入触发器。
- Azure Function 调用 Azure 文本翻译服务,检查玩家发送的消息并返回结果。
- 设置另一个 Azure 事件中心作为 Azure Function 的输出。
- 聊天服务器从 Azure 事件中心接收结果。
- (可选)聊天服务器将原始消息和来自 Azure 文本翻译服务的翻译版本保存在持久存储(例如 Azure Data Lake Storage)中。
- 如果存储结果,可以选择保存到 Azure Data Lake Analytics 以进行分析。
- 然后,将来自 Azure 文本翻译服务的结果发送到聊天服务器中收信玩家的相关进程。 这些进程对消息作进一步验证,将其序列化,然后通过安全连接将其发送到收信玩家的设备。 最后,消息显示在聊天屏幕中。
Azure 事件中心
请参阅此快速入门,了解以多种编程语言将事件发送到事件中心的简单实现。 此处提供了一些其他示例。
由 Azure 事件中心输出到另一个 Azure 事件中心触发的函数
触发事件中心触发器函数时,会将触发此函数的消息作为字符串传入此函数中。 使用事件中心输出绑定将事件写入事件流。
[return: EventHub("ehigce-output", Connection = "EventHubConnectionAppSetting")]
public static string Run([EventHubTrigger("ehigce-input", Connection = "EventHubConnectionAppSetting")] string chatString, ILogger log)
请查看调用认知服务时出现 401 拒绝访问错误的常见原因和解决方案。
安全注意事项
不要将任何事件中心或认知服务连接字符串硬编码到函数的源中。 但至少应充分利用函数应用设置,或者,若要获取更高的安全性,请改用密钥保管库。 有一个指南介绍如何创建密钥保管库、如何将托管服务与函数标识结合使用,以及如何从函数中读取存储在密钥保管库中的机密。
查看事件中心身份验证和安全模型概述并付诸实践,确保只有聊天服务器可以与事件中心通信。
文本翻译 API 可以使用域名或 IP 筛选在防火墙后进行翻译。 域名筛选是首选方法。 我们不建议在进行 IP 筛选的防火墙后运行 Microsoft Translator,因为此设置将来可能会失效,并且不予提前通知。 有关所有详细信息,请参阅如何使用文本翻译 API 在 IP 防火墙后进行翻译。
缩放
此体系结构中有两处可能会成为瓶颈,您应该知晓并制定应对方案:
- 认知服务具有良好的可伸缩性,但默认受到限制。 如果您计划大规模使用认知服务,请联系 Azure 支持以增加容量。
- 需要扩展接收 Azure 事件中心响应的聊天服务器。 请启动足够多的虚拟机来满足需求。
备选方案
如果您有兴趣使用基于 Apache Spark 的平台收集分析数据,可以考虑利用 Azure Redis 缓存和 Azure Databricks。
其他资源和示例
适用于 Unity 的 Azure 事件中心 SDK:这是一个沙盒项目。 这篇文章中的内容不受支持,因此可能已过期或不处于工作状态。
定价
如果您没有 Azure 订阅,可以创建免费帐户,开始使用 12 个月的免费服务。 除非您超出这些服务的使用限制,否则无需为 Azure 免费帐户中包含的这些免费服务付费。 了解如何通过 Azure 门户或使用情况文件查看服务使用情况。
您需要承担运行这些参考体系结构时所使用的 Azure 服务的费用。 总金额将因使用情况而异。 请参阅参考体系结构中使用的每项服务的定价网页:
您还可以使用 Azure 定价计算器,以配置和估算您计划使用的 Azure 服务的成本。