菜单

系统架构

相关源文件

本文档全面概述了 Immich 的系统架构,解释了各个组件如何交互以构成一个完整的自托管照片和视频管理解决方案。它涵盖了高层系统设计、组件关系以及应用程序内的数据流。

有关特定组件的详细信息,请参阅

概述

Immich 被设计为一个遵循现代开发实践的微服务架构。该系统由多个独立的组件组成,它们协同工作以提供完整的照片和视频管理解决方案。

来源

核心组件

Immich 由四个主要组件组成

  1. 服务器:核心后端服务,采用 NestJS 构建,负责处理 API 请求、身份验证和资产管理。
  2. Web 界面:一个使用 SvelteKit 构建的响应式单页应用程序。
  3. 移动应用程序:使用 Flutter 为 iOS 和 Android 构建的原生移动应用程序。
  4. 机器学习服务:一个使用 Python/FastAPI 为 ML 任务构建的独立服务。

组件关系

来源

服务器组件

服务器组件是 Immich 的核心,采用渐进式 Node.js 框架 NestJS 构建。它为客户端应用程序提供 API 并处理主要的业务逻辑。

架构

来源

关键组件

服务器实现了几个关键组件

  1. API 控制器:处理 HTTP 请求并将它们路由到相应的服务。
  2. 服务:实现业务逻辑并协调系统不同部分之间的工作。
  3. 作业系统:使用 BullMQ 和 Redis 处理后台任务。
  4. 数据访问:通过 Kysely 和 TypeORM 与 PostgreSQL 数据库进行接口。

作业系统

作业系统是 Immich 的关键组成部分,负责异步处理资源密集型任务。

来源

网页界面

Web 界面采用 SvelteKit 构建,提供了响应式且功能丰富的用户体验。

架构

来源

移动应用程序

移动应用程序采用 Flutter 构建,可在 iOS 和 Android 平台上实现原生性能。

架构

来源

机器学习组件

机器学习组件是一个使用 Python 和 FastAPI 构建的独立服务,提供各种由 ML 驱动的功能。

架构

来源

数据存储

Immich 使用多种存储系统来管理不同类型的数据

来源

数据库 Schema

PostgreSQL 用于持久化数据存储,并通过 pgvecto.rs 扩展支持向量搜索。

数据库实体目的
用户用户账户和身份验证数据
资源照片和视频的元数据
相册包含共享选项的资产集合
人物/面部面部识别数据
外部库定义
标签资产标签和分类
向量嵌入用于语义搜索的 CLIP 嵌入

来源

数据流

下图说明了资产处理期间的数据流

来源

部署架构

Immich 设计为使用 Docker Compose 进行部署,并提供各种环境配置。

生产部署

来源

开发环境

来源

CI/CD 流水线

Immich 使用 GitHub Actions 进行持续集成和部署。

来源

通信机制

Immich 在组件之间使用了几种通信机制

REST API

客户端和服务器之间的主要通信方式是通过 REST API。API 使用 OpenAPI 规范进行文档化。

WebSockets

通过 WebSocket 连接提供实时更新,允许客户端接收有关更改的即时通知。

作业队列

后台处理通过 BullMQ 作业队列进行,该队列使用 Redis 作为消息代理。

来源

结论

Immich 的架构遵循微服务方法,不同组件之间具有明确的关注点分离。这种设计实现了可扩展性、可维护性以及独立演进各个组件的能力。使用 NestJS、SvelteKit 和 Flutter 等现代框架,为构建强大的照片管理应用程序奠定了坚实的基础。

该系统通过其作业处理系统和机器学习功能,旨在高效处理大量照片和视频。基于 Docker 的部署使其易于在各种环境中进行安装和操作。

来源