روش ساخت یک چت سرور بهینه چیست؟

سلام دوستان، من می خوام یک برنامه چت توزیع شده با golang و erlang بنویسم(گولنگ برای کار با دیتابیس و بقیه میکروسرویس ها و erlang برای بخش وبسوکت و ارتباط این دو سرویس با grpc انجام میشه) ، اما در طراحی سیستم مشکل دارم، سناریو: فرض کنید کاربر 1 به سرور 1 وصل بشه و کاربر 2 به سرور 3 و کاربر 1 بخواد به کاربر 2 پیام ارسال کنه. حالا لازمه بدونم کاربر 2 به کدوم سرور متصله تا بتونم پیام را از طریق یک مسیج بروکر مثل RabbitMQ به سروری که کاربر 2 به اون متصله ارسال کنم تا از اون سرور و از طریق وب سوکت برای کاربر ارسال بشه.
حالا به نظرم سه راه حل وجود داره که دوتاش اطمینان دارم که بهینه نیست و در مورد سومی شک دارم که بهینه هستش یا نه :
۱-برودکست پیام به کل سرور ها و هر سرور چک کنه اگه کاربر به اون متصل بود پیام رو بده به کاربر (غیربهینه و سرعت پایین).
۲-ساب اسکرایب هر کاربر از سروری که بهش متصله به یک کانال مسیج بروکر با شناسه کاربر به عنوان چنل نیم و پابلیش پیام در اون کانال مسیج بروکر (غیربهینه و پرهزینه ولی پرسرعت).
۳- زمانی که کاربر به یک سرور متصل میشه شناسه کاربر رو به عنوان کلید و ایپی سرور رو به عنوان value توی ردیس نگه دارم، حالا زمانی که میخوام به یک کاربر خاص پیام بدم میدونم به کدوم سرور متصله و پیام رو دقیقا به همون سرور ارسال میکنم(روشه بهینه تر)
حالا نظر شما چیه؟ راه حل سوم مناسبه یا راه حل بهتری هست؟ ممنون میشم راهنمایی کنید

1 پسندیده

این لینک رو بررسی بفرمایید:

ریپو:

2 پسندیده

ماتریکس(matrix.org) رو ببین چیز جالبیه و همینطور jami

دوستان از پاسختون متشکرم، به دلایلی قصد استفاده از پروتکل های اماده ندارم و میخوام پروتکل اختصاص خودمو بنویسم

وقتی می خواین با ارلنگ بنویسید بهترین ابزار دسترس اجبردی هست که واتس اپ هم استفاده می کنه قرار نیست استفاده کنید ولی خوندن کد هاش بهتون کمک می کنه راه رو پیدا کنید