Skip to content

アーキテクチャ概要 ​

misskey-cf は、Misskey のサーバー部分を Cloudflare Workers 向けに書き直したものです。Web クライアント(Vue)・API・データベースのスキーマは upstream と同じものを使い、それ以外の基盤を Cloudflare のサービスに置き換えています。

upstream との違い(ひと目で) ​

upstreammisskey-cf
実行環境Node.js プロセス 1 種類Worker 5 つ(役割ごとに分割)
データベースPostgreSQLPostgreSQL(同じスキーマ。Hyperdrive 経由)
Redisキャッシュ・タイムライン・通知・pub/sub使わない(Durable Objects・KV・PostgreSQL で置き換え)
ジョブキューBullMQCloudflare Queues
ファイル保存ローカル / S3R2
画像・動画処理sharp / ffmpeg(同じプロセス)Containers(sharp + ffmpeg)
全文検索Meilisearch など(任意)使わない(SQL LIKE)
Web クライアントupstream の Vueupstream の Vue をそのままビルドして配信

Worker の構成 ​

公開されているのは gateway だけです。ほかの Worker は Service binding・Durable Objects・Queues 経由でのみ呼ばれます。

Worker役割持っている Durable Objects
gateway唯一の公開 Worker(misskey-cf.sameharu.dev)。Web クライアントの配信、HTML とページごとのサーバー描画、それ以外は api へ中継なし
api全 API エンドポイント、ストリーミングの認証、ActivityPub の送受信、ドライブ、メール、Web Push、各 Queue の処理、定期処理(Cron)PollTimer、OnceGuard、Reversi、RateLimiter
timeline投稿をフォロワーのタイムラインとストリーミングへ配る(Queue mk-timeline-fanout の処理)TimelineShard、NotificationBox、OpsStats
streamユーザーごとの WebSocket 接続、オンライン状況、ノートの更新通知StreamHub、StreamPresence、NoteWatch
mediaサムネイル・webpublic・blurhash の生成、メディアプロキシ、通知バッジMediaContainer(Container)

バインディング名・Queue・Durable Object の詳細とデプロイ順は Cloudflare bindings を参照してください。

使っている Cloudflare のサービス ​

サービス用途
Workers5 つの Worker
Static Assetsupstream の Web クライアント(gateway)
Durable Objectsタイムライン、通知、WebSocket、オンライン状況、レート制限、タイマーなど(Redis と遅延ジョブの置き換え)
QueuesActivityPub の送受信、タイムライン配信、Webhook、バックグラウンドジョブ(BullMQ の置き換え)
HyperdrivePostgreSQL への接続
R2ドライブのファイル
KVmeta と絵文字一覧のキャッシュ
Containerssharp + ffmpeg
Email Serviceメール送信
Cron Triggers毎時の定期処理