می دونستید لینکداین با جاوا-اسکالا کد شده
بخش پیامرسان-رییل تایم با فریم ورک Akka وPlay Framework کد شده
معماری Event-Sourcing و از مدل Akka Actor Model استفاده شده .
نگه داری کانشن ها روی Couchbase انجام میشه .
این بخش برای ارتباط با کلاینت فرانت از تکنولوژی SSE(Server Sent Event)استفاده می کنه . این تکنولوژی در همه مرورگرها (اینترنت اکسپلورر) ساپورت نمیشه . و میشه به جای اون از webSocket یا نوع پیشرفته تر اون یعنی Socket.io استفاده کرد در واقع فرق این دو این هست که SSE یک طرفه هست و کلاینت فقط به سرور گوش میده ولی WebSocketدو طرفه همزمان bidirectional هست . تیم فنی انتخاب این تکنولوژی رو سازگار بودن با مرورگرهای بیشتر عنوان کرده و قوی تر بودن WebSocket رو تایید کردند .
بخش پیام رسان لینکداین از هسته کاملآ جداست و مستقل کار می کنه و برای سرعت و مقیاس پذیری با apache Kafka طراحی نشده . به خاطر همین رسیدن پیامها بین کاربران رو گارانتی نمی کنه .
در واقع هر کاربر می تونه هزاران پیام بصورت متن فیلم ، پست ، لینک و تصویر از میلیون ها نفر دریافت کنه
و چون معماری بصورتی هست که سرور فرانت از بک جدا هست و هرکدام مستقلآ مقیاس پذیر هستند اگر کافکا استفاده می شد به ازای افزودن سرور جدید سرور فرانت باید میلیون ها تاپیک رو سایسکرایب می کرد و نگه داشتن این حجم عظیم از کانکشن ها سرعت و منابع سیستم رو تحت تاثیر می گذاشت.
برای لود تست سیستم روشی رو استفاده کردند که نامش رو لانچ تاریک dark launch گذاشتند . در این روش یک شبیه ساز نوشته شده تا ترافیک شبیه به محیط واقعی با همون الگوی رشد تولید کنه و اون رو روی یک سیستم تک کلاستره بدون رپلیکا تست کردند .این ابزار رو با استفاده از Akka actors نوشته اند .
انگار که میلیون ها نفر از اندروید ، آی او اس و وب به سرور وصل شده اند و درحال استفاده هستند.
مشکل اولی که بروز کرده علارقم توان بک اند در هندل کردن میلیون های کانکشن همزمان (چت یک نفر با میلیون ها نفر بصورت همزمان )
کرنل بیش از 128 کانشن همزمان رو نداشته و این مشکل با دستکاری پارامتر های سیستم عامل در مسیر
/etc/sysctl.conf
حل شد . مشکللاتی مثل تعداد نخ ها و اندازه heap درJVM رو حل کردند .
سایر منابع
https://www.infoq.com/podcasts/linkedin-realtime-messaging-architecture