
AT प्रोटोकॉल संदर्भ कार्यान्वयन का फोर्क प्रदर्शन-अनुकूलित AppView, Rust-आधारित फायरहोज़ इंडेक्सर, Redis कैशिंग, और बड़े पैमाने पर स्व-होस्टेड सामाजिक नेटवर्किंग के लिए सामुदायिक सुविधाओं के साथ।
यह Blacksky द्वारा AT Protocol reference implementation (जो Bluesky Social PBC द्वारा है) का फोर्क है। यह api.blacksky.community पर AppView को संचालित करता है।
हम इसे पारदर्शिता के लिए प्रकाशित कर रहे हैं ताकि अन्य समुदाय इस काम से लाभान्वित हो सकें। यह रिपॉजिटरी योगदान, मुद्दे या PR स्वीकार नहीं कर रही है। यदि आप विहित atproto कार्यान्वयन चाहते हैं, तो bluesky-social/atproto का उपयोग करें।
सभी बदलाव packages/bsky (appview लॉजिक), services/bsky (रनटाइम कॉन्फ़िगरेशन), और एक कस्टम माइग्रेशन में हैं। बाकी सब ऊपरी स्रोत (upstream) से है।
ऊपरी स्रोत के डेटाप्लेन में एक TypeScript फायरहोज़ कंज़्यूमर (subscription.ts) शामिल है जो सीधे इवेंट को इंडेक्स करता है। हमने इसे rsky-wintermute से बदल दिया, जो एक Rust इंडेक्सर है, कई कारणों से:
इस रिपॉजिटरी के डेटाप्लेन और ऐपव्यू अभी भी ज्यों के त्यों चलते हैं। वे PostgreSQL डेटाबेस से पढ़ते हैं, जिसमें wintermute लिखता है। हम सिर्फ बिल्ट-इन फायरहोज़ सब्सक्रिप्शन शुरू नहीं करते।
ये किसी भी व्यक्ति के लिए व्यापक रूप से उपयोगी हैं जो पैमाने पर AppView को स्वयं-होस्ट कर रहा है।
LATERAL JOIN क्वेरी ऑप्टिमाइज़ेशन (packages/bsky/src/data-plane/server/routes/feeds.ts)
getTimeline और getListFeed को PostgreSQL LATERAL JOINs के साथ फिर से लिखा गया ताकि पूर्ण तालिका स्कैन के बजाय प्रति-उपयोगकर्ता इंडेक्स उपयोग को बल दिया जा सके। हजारों खातों का अनुसरण करने वाले उपयोगकर्ताओं के लिए बड़ा सुधार।Redis कैशिंग परत (packages/bsky/src/data-plane/server/cache/)
Timestamp ऑब्जेक्ट Redis के माध्यम से JSON राउंड-ट्रिपिंग के बाद अपनी .toDate() विधि खो देते हैं, जिससे कैश हिट पर अधूरा प्रोफाइल हाइड्रेशन होता है। हम वर्तमान में Redis कैशिंग अक्षम करके चलाते हैं। समाधान यह है कि कैश लिखने पर टाइमस्टैम्प को ISO स्ट्रिंग के रूप में सीरियलाइज़ करें और पढ़ने पर पुनर्निर्माण करें।सर्वर-साइड अधिसूचना प्राथमिकताएँ लागू करना (packages/bsky/src/api/app/bsky/notification/listNotifications.ts)
reasons निर्दिष्ट नहीं करता, तो सर्वर उपयोगकर्ता की सहेजी गई अधिसूचना प्राथमिकताओं को लागू करता है। इसके बिना, प्राथमिकताएँ केवल क्लाइंट-साइड लागू होती हैं और उनका कोई प्रभाव नहीं होता।प्रमाणीकरण सत्यापनकर्ता में पुरानी हस्ताक्षर कुंजी सुधार (packages/bsky/src/auth-verifier.ts)
forceRefresh) पर, डेटाप्लेन के इन-मेमोरी आइडेंटिटी कैश को दरकिनार करता है और DID दस्तावेज़ को सीधे PLC निर्देशिका से हल करता है। खाता माइग्रेशन के बाद प्रमाणीकरण विफलताओं को ठीक करता है जहां हस्ताक्षर कुंजी घूमती है लेकिन कैश पुरानी कुंजी रखता है।JSON स्वच्छता (packages/bsky/src/data-plane/server/routes/records.ts)
\u0000) और नियंत्रण वर्ण हटाता है। ये RFC 8259 के अनुसार मान्य हैं लेकिन Node.js के JSON.parse() द्वारा अस्वीकार कर दिए जाते हैं, जिससे डेटाप्लेन में मूक rowToRecord पार्स विफलताएँ होती हैं जो लापता पोस्ट के रूप में सामने आती हैं।निजी सामुदायिक पोस्ट के लिए बुनियादी ढाँचा जो व्यक्तिगत PDS के बजाय AppView पर रहते हैं। यह Blacksky के काम करने के तरीके के लिए विशिष्ट है, लेकिन अन्य समुदायों के लिए एक संदर्भ के रूप में काम कर सकता है।
community.blacksky.feed.* जिसमें सबमिट, गेट, डिलीट, टाइमलाइन और थ्रेड व्यू के लिए एंडपॉइंट हैंcommunity_post तालिका (माइग्रेशन: 20260202T120000000Z-add-community-post.ts)getPostThreadV2 के साथ एकीकरणBLACKSKY_MEMBERSHIP_DB_URL)Bluesky Relay (bsky.network)
|
v
rsky-wintermute -----> PostgreSQL 17 <----- Palomar
(Rust indexer) | (Go search)
- firehose consumer | |
- backfiller | v
- label indexer | OpenSearch
- direct indexer |
v
bsky-dataplane (gRPC :2585) <--- Redis (optional)
|
v
bsky-appview (HTTP :2584)
|
v
Reverse proxy (Caddy/nginx)
| घटक | स्रोत | उद्देश्य |
|---|---|---|
| rsky-wintermute | blacksky-algorithms/rsky | Rust फायरहोज़ इंडेक्सर: इवेंट का उपभोग करता है, रिपॉजिटरी को बैकफिल करता है, PostgreSQL में रिकॉर्ड इंडेक्स करता है |
| rsky-relay | blacksky-algorithms/rsky | लेबलर सेवाओं से मॉडरेशन लेबल प्राप्त करने के लिए AT प्रोटोकॉल रिले |
| rsky-video | blacksky-algorithms/rsky | वीडियो अपलोड सेवा: Bunny Stream CDN के माध्यम से ट्रांसकोड करता है, ब्लॉब रेफरेंस को उपयोगकर्ता PDS पर अपलोड करता है |
| bsky-dataplane | इस रिपॉजिटरी (services/bsky) | PostgreSQL पर gRPC डेटा परत |
| bsky-appview | इस रिपॉजिटरी (services/bsky) | app.bsky.* XRPC एंडपॉइंट के लिए HTTP API सर्वर |
| Palomar | blacksky-algorithms/indigo | पूर्ण-पाठ खोज: अनुयायी गणना बूस्टिंग के साथ प्रोफाइल और पोस्ट को OpenSearch में इंडेक्स करता है |
| palomar-sync | blacksky-algorithms/rsky | PostgreSQL से OpenSearch में अनुयायी गणना और PageRank स्कोर सिंक करता है |
Wintermute चार समानांतर प्रसंस्करण पथों वाली एक मोनोलिथिक Rust सेवा है:
bsky.network फायरहोज़ से जुड़ता है, इवेंट को Fjall (एम्बेडेड की-वैल्यू स्टोर) कतारों में लिखता हैON CONFLICT के साथ PostgreSQL में लिखता हैrsky रिपॉजिटरी में शामिल अतिरिक्त CLI उपकरण:
queue_backfill -- CSV, PDS खोज, या प्रत्यक्ष DID सूचियों से बैकफिल के लिए DID को कतारबद्ध करेंdirect_index -- कतारों को दरकिनार करते हुए विशिष्ट रिपॉजिटरी लाएं और इंडेक्स करें (व्यक्तिगत खातों को ठीक करने के लिए उपयोगी)label_sync -- छूटे हुए नकारों को पकड़ने के लिए कर्सर 0 से लेबल स्ट्रीम को रीप्ले करेंplc_import -- PLC निर्देशिका से हैंडल/DID मैपिंग का बल्क आयातpalomar-sync -- अनुयायी गणना और PageRank को OpenSearch में सिंक करेंउन उपयोगकर्ताओं के लिए वीडियो अपलोड सेवा जिनका PDS Bluesky के video.bsky.app का समर्थन नहीं करता है। सेवा प्रमाणीकरण JWT के माध्यम से उपयोगकर्ता PDS को प्रमाणित करने के लिए अपने स्वयं के DID (did:web:video.blacksky.community) का उपयोग करता है। प्रवाह: