# 生产环境运行 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 还提供完善的认证机制,可为特定用户配置基于角色的数据子集访问权限。
- 如需启用 CORS,请使用
--enable-cors
服务器参数(在 Typesense Cloud (opens new window) 中我们会为您管理此项配置)。
- 在生产环境运行时建议部署高可用集群(可选但强烈推荐)。
- 确保 API 客户端配置为使用集群中的所有节点。
- 如果在 Typesense Cloud (opens new window) 中使用搜索分发网络 (SDN) 选项,请确保正确配置客户端以使用 SDN 端点,并设置备用独立主机名。
- 出于安全考虑建议配置少量交换空间,但若发现交换空间被使用,将开始影响性能,这是需要升级内存容量的明确信号。
- 若将 Typesense 集成到移动应用中,强烈建议将 Typesense 主机名和 API 密钥存储在后端,让应用在加载时动态获取远程配置,而非硬编码在应用中。 当需要变更主机名/API密钥时,这种方式可让您无需经过应用商店审核流程即可更新这些值。
# 监控
- 监控
/health
API 端点 以确保服务正常运行。 - 监控内存使用情况,确保不超过总内存的 85% - 这能保证操作系统有足够内存执行其任务。
- 您可以通过
/metrics.json
端点 或 Typesense Cloud 仪表板获取内存使用指标。
- 您可以通过
- 监控
/stats.json
API 端点 的请求速率和延迟情况。 - 监控 CPU 使用率,确保平均低于 90%。如果出现峰值超过此值,可能需要升级更高 CPU 配置。
- 您可以通过
/metrics.json
端点 或 Typesense Cloud 仪表板获取 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 新版本发布通知,请在 Typesense GitHub 仓库 (opens new window) 点击 "Watch" → "Custom" → "Releases"。
- 按照这些 更新指南 升级到最新版本。
- 我们也会在 Twitter @typesense (opens new window) 和 Slack 社区 (opens new window) 发布更新。
# 支持服务
我们致力于让 Typesense 尽可能开箱即用,并提供完整的公开文档。
但如果您需要帮助或有任何疑问,可以通过以下方式寻求额外支持:
- 阅读 常见问题解答 或在 指南 左侧导航栏浏览相关文章 - 这些文章是根据众多用户的反馈整理的。
- 使用 GitHub 原生搜索功能在我们的 GitHub 问题追踪器 (opens new window) 中搜索历史讨论。
- 浏览并搜索 Slack 社区的 历史讨论 (opens new window)。
- 通过 GitHub issue (opens new window) 提交任何问题或错误报告。
- 加入我们的公开 Slack 社区 (opens new window) 讨论一般问题和/或技术问题。
- 通过 在 GitHub 赞助 Typesense (opens new window) 并选择适当的一次性赞助等级,然后发送邮件至 contact@typesense.org 预约与核心团队成员的会议。
- 我们还提供优先付费支持服务,包括 Typesense Cloud 上的私有 Slack、邮件和电话支持,并保证 SLA。了解更多 详情 (opens new window)。