اتیپروتو از نگاه مهندس سیستمهای توزیعشده
خلاصهٔ کاملتر
تو مقالهٔ سایت رسمی atproto اومده که برای فهمیدن این معماری، بهترین راه اینه که از یه بکاند وب معمولی شروع کنیم و قدمبهقدم بزرگش کنیم. اولش یه دیتابیس SQL پشت اپسروره، بعد کش اضافه میشه، بعد شاردینگ و رپلیکا. ولی برای یه شبکهٔ اجتماعی با صدها میلیون کاربر، همون سازگاری قوی (strong consistency) دیتابیس SQL تبدیل به گلوگاه میشه.
راهحل اینه که سازگاری رو شل کنیم و بریم سراغ سازگاری نهایی (eventual consistency) با یه کلاستر NoSQL. اما NoSQL عملاً یه انبار کلید-مقداره و JOIN و aggregation نداره، برای همین باید ویوهای از پیش محاسبهشده ساخت؛ همون چیزی که بهش ویو سرور میگن. برای اینکه این ویوها هیچ بهروزرسانیای رو از دست ندن، یه لاگ رویداد مثل Kafka وسط میذاریم که همهٔ تغییرها رو ثبت و پخش میکنه. نویسنده اسم این نتیجه رو میذاره معماری استریمپروسسینگ — یعنی عملاً دیتابیس رو از تو به بیرون برگردوندیم.
کاری که اتیپروتو میکنه اینه که این ساختار داخلی رو باز میکنه. هر کدوم از این سرویسها — انبار داده، لاگ رویداد و ویو سرور — API عمومی پیدا میکنن و هر کسی میتونه نمونهٔ خودش رو اجرا کنه. نتیجهاش یه بکاند غیرمتمرکزه که به جای یه کلاستر و یه ویو سرور، از کلی سرویس مستقل تشکیل شده که با هم کار میکنن.
برای اینکه این سرویسها همدیگه رو بفهمن، یه مدل دادهٔ مشترک تعریف شده به اسم ریپازیتوری دادهٔ کاربر: هر کاربر یه ریپو داره، هر ریپو چند تا کالکشن، و هر کالکشن یه انبار کلید-مقدار مرتب از سندهای JSON که بهشون رکورد میگن. چون این ریپوها رو هر کسی میتونه میزبانی کنه، یه اسکیم URL جدا براشون تعریف شده و رکوردها هم رمزنگاریشده امضا میشن تا اصالتشون معلوم باشه.
جریان داده هم سادهست: کاربر با OAuth وارد اپ میشه، محل ریپوش رو اعلام میکنه و اجازهٔ خوندن و نوشتن میده. هر نوشتن اول تو ریپو کامیت میشه، بعد به لاگهای رویداد میره و از اونجا به ویو سرورهای شنونده — از جمله ویو خود همون اپ که بهش اپویو میگن. نویسنده میگه شرط اولیهٔ تیم «هیچ قدمی به عقب» بوده: شبکه باید همونقدر روون و سراسری حس بشه که اپهای متمرکز قبلی.
نکات کلیدی:
- اتیپروتو معماری تازهای اختراع نکرده؛ همون معماری استریمپروسسینگ رو برداشته و سرویسهای داخلیش رو عمومی کرده
- سه جزء اصلی: ریپازیتوری دادهٔ کاربر، لاگ رویداد و ویو سرور (یا همون اپویو وقتی با اپسرور یکی میشه)
- هر کاربر یه ریپو داره که توش کالکشنهایی از رکوردهای JSON امضاشده نگهداری میشه و آدرسدهیشون با یه اسکیم URL اختصاصیه
- سازگاری قوی فدا شده تا مقیاسپذیری به دست بیاد؛ خوندنها ممکنه کمی عقب باشن ولی نوشتن گم نمیشه
- تیم بنیانگذار از دل پروژههای IPFS و Dat اومده و مارتین کلپمن مشاور فنی فعالشونه




