# 生产环境运行 Typesense

除了高性能和易用性外,Typesense 在设计上还注重降低生产环境的运维开销。

Typesense Cloud (opens new window) 上运行时,只需启用"高可用性"开关,您就能获得一个分布式多节点集群,该集群已做好生产环境准备并可直接使用。

Typesense 是一个单一的自包含二进制文件,没有运行时依赖。因此,在自托管场景下,要在生产环境运行 Typesense 只需 安装 Typesense,然后通过 Docker 或进程管理器(我们的 DEB 和 RPM 包已为您完成此操作)以守护进程方式启动 Typesense 进程,并根据需要配置 高可用性

# 生产环境最佳实践

以下是一些确保您在生产环境中获得最佳 Typesense 体验的建议。

TIP

大多数与服务器基础设施相关的项目不适用于 Typesense Cloud 集群,因为我们会为您管理基础设施。

# 配置指南

  • 确保为您的数据集和流量模式选择了合适的系统配置
  • Typesense 内置了高性能 HTTP 服务器 (opens new window),该服务器被 Fastly (opens new window) 等公司大规模用于边缘服务器。 因此 Typesense 可以直接暴露在面向公网的流量中,无需放置在 Nginx/Apache 或其他后端 API 之后。
  • 在生产环境运行时建议部署高可用集群(可选但强烈推荐)。
  • 出于安全考虑建议配置少量交换空间,但若发现交换空间被使用,将开始影响性能,这是需要升级内存容量的明确信号。
  • 若将 Typesense 集成到移动应用中,强烈建议将 Typesense 主机名和 API 密钥存储在后端,让应用在加载时动态获取远程配置,而非硬编码在应用中。 当需要变更主机名/API密钥时,这种方式可让您无需经过应用商店审核流程即可更新这些值。

# 监控

  • 监控 /health API 端点 以确保服务正常运行。
  • 监控内存使用情况,确保不超过总内存的 85% - 这能保证操作系统有足够内存执行其任务。
  • 监控 /stats.json API 端点 的请求速率和延迟情况。
  • 监控 CPU 使用率,确保平均低于 90%。如果出现峰值超过此值,可能需要升级更高 CPU 配置。
  • 使用 import API 导入数据 批量处理大量数据时,请确保配置了足够高的超时值,因为 Typesense 中所有写入操作都是同步进行的。

# 搜索相关性优化

  • 设置搜索分析
  • 虽然 Typesense 的默认相关性参数在大多数情况下开箱即用,但您也可以根据需要微调搜索相关性参数。
    • 虽然default_sorting_order是可选的,但强烈建议设置该参数,特别是当您的文档中包含能反映文档在数据集中受欢迎程度的字段时。

# 安全防护

  • --api-port 服务器参数 设置为 443 并在生产环境中使用 HTTPS
    • 确保防火墙仅允许通过此端口的入站公网流量。
    • 使用 --ssl-certificate--ssl-certificate-key 参数配置 SSL 证书和密钥。
  • 运行高可用集群时,确保 --peering-address 参数指向内部私有网络的 IP 地址。
  • 通过 expires_at 参数制定 API 密钥的定期过期和轮换策略
  • 如果在单个集合中存储多租户数据,请确保正确配置限定范围搜索 API 密钥,在嵌入过滤器中包含已登录用户的 ID。
    • 限定范围搜索 API 密钥需在后端生成,并传递给前端用于 API 调用。
    • 切勿向用户暴露父级搜索 API 密钥,该密钥拥有对所有记录的无限制访问权限。
  • 在 Typesense Cloud 上,建立团队账户管理访问权限,并配置单点登录

# 模式管理

  • 设置一个集合别名并通过别名从应用程序访问集合和文档。
    • 这在需要更新集合模式时特别有用。您可以创建一个新的带时间戳的集合,重新索引数据,然后切换别名指向新集合。
  • 尽可能使用预定义模式,因为使用自动模式检测时,可能会意外索引那些不用于搜索目的的字段,从而不必要地占用内存(除非您在这些字段上明确设置index: false)。但当字段名是动态时,也可以结合使用正则表达式字段名和自动模式检测。
  • 确保仅用于显示目的的字段(例如:图片URL、链接等)不在模式中指定(或在使用自动模式检测时设置为index: false),以将这些字段设为未索引字段并节省内存。您仍然可以在将文档添加到集合时发送这些未索引字段——它们只会存储在磁盘上,不会占用内存。当文档匹配时,这些未索引字段将从磁盘获取,并填充到搜索API响应中供您用于显示目的。

# 保持更新

# 支持服务

我们致力于让 Typesense 尽可能开箱即用,并提供完整的公开文档。

但如果您需要帮助或有任何疑问,可以通过以下方式寻求额外支持: