Forwarded from mobile_programming
این همه connection مدیریتش سخت نمی شود؟
تلگرام از تکنیک multi-datacenter استفاده می کند. مثلا اغلب کاربران ایرانی در dc شماره ۴ هستند و بدین ترتیب می توان متناسب با افزایش scale مدیریت لازم را اعمال کند. مثلا فرض کنید شما به dc شماره ۲ درخواست connection ارسال می کنید. درخواست شما با جابه جایی کد diffie-hellman امن میشود و پذیرفته می شود ولی به محض اینکه اولین api را فراخوانی می کنید به شما پیغام migrate to 4 را می دهند. client با دریافت این خطا connection را می بندد و سپس در preference می نوسد که زین پس باید به dc شماره ۴ متصل شود. به عبارت ساده تر در زمان طراحی پیش بینی شده است که کاربران به یک dc جدید migrate کنند.
این تکنیک با تکنیک federation در ایمیل سرورها و یا پروتکل ejabber متفاوت است.
یک نکته جالب بخشی از فرایند تصمیم گیری برای اتصال به dc به کلاینت منتقل شده و بار از روی دوش سرور برداشته شده است. این کار معمولا پیاده سازی clientها را سخت تر می کند ولی به بهبود کارایی در سمت سرور از طریق کاهش حجم کارها کمک می کند.
به عنوان یک تجربه تا انجا که می شود و مخاطره امنیتی ایجاد نمی کند کارها را بین کلاینت ها توزیع کنید :)
پیاده سازی session سمت سرور آن واقعا سخت و جذاب است 😂 شما باید لیستی از connectionهای کاربر را در session کاربر نگاه دارید البته اگر در طراحی بخواهید همواره کاربر را به یک session سرور هدایت کنید (از طریق الگوریتمهای consistent hashing)
#telegram #yum_15
تلگرام از تکنیک multi-datacenter استفاده می کند. مثلا اغلب کاربران ایرانی در dc شماره ۴ هستند و بدین ترتیب می توان متناسب با افزایش scale مدیریت لازم را اعمال کند. مثلا فرض کنید شما به dc شماره ۲ درخواست connection ارسال می کنید. درخواست شما با جابه جایی کد diffie-hellman امن میشود و پذیرفته می شود ولی به محض اینکه اولین api را فراخوانی می کنید به شما پیغام migrate to 4 را می دهند. client با دریافت این خطا connection را می بندد و سپس در preference می نوسد که زین پس باید به dc شماره ۴ متصل شود. به عبارت ساده تر در زمان طراحی پیش بینی شده است که کاربران به یک dc جدید migrate کنند.
این تکنیک با تکنیک federation در ایمیل سرورها و یا پروتکل ejabber متفاوت است.
یک نکته جالب بخشی از فرایند تصمیم گیری برای اتصال به dc به کلاینت منتقل شده و بار از روی دوش سرور برداشته شده است. این کار معمولا پیاده سازی clientها را سخت تر می کند ولی به بهبود کارایی در سمت سرور از طریق کاهش حجم کارها کمک می کند.
به عنوان یک تجربه تا انجا که می شود و مخاطره امنیتی ایجاد نمی کند کارها را بین کلاینت ها توزیع کنید :)
پیاده سازی session سمت سرور آن واقعا سخت و جذاب است 😂 شما باید لیستی از connectionهای کاربر را در session کاربر نگاه دارید البته اگر در طراحی بخواهید همواره کاربر را به یک session سرور هدایت کنید (از طریق الگوریتمهای consistent hashing)
#telegram #yum_15