في اول شغل ليا في شركة كنت بعمل realtime voice rooms app وكنت انا مسئول عن الrealtime وكنت شغال بnodejs والprimary database كانت MySQL بس الproject manager كان عايز احسن performance فقال نستخدم redis كdatabase للroom details حاجات زي مين في الroom ومين ماسك mics وحاجات كدة 🧵 /1
بس انا استغربت ساعتها لان redis عبارة عن memory store فالتكلفة هتبقي عالية لان الRAM غالية فقولت الكلام ده رد برد غير متوقع "عادي نشتري RAM". انا دايما اعرف ان الRAM غالية بس لما يكون عندنا عميل خليجي مفيش حاجة غالية :) /2
اكتشفت بعدين ان في ناس بتستخدم redis كdatastore كتير عادي مش بس للcaching ده غير ان الdata اللي محتاج اخزنها كانت قليلة: دي شوية room details ونقدر نعمل persistence بالappend-only file والsnapshots بسهولة /3
في المشروع ده انا اصلا كنت بستخدم redis pub/sub عشان الrealtime servers يتواصلوا فلو مثلا في مستخدمين في روم معينة في سرفر معين وفي مستخدمين في نفس الروم بس فى سيرفر تاني فلو حد بعت رسالة لاول سيرفر فاول سيرفر هيبعت للمستخدمين بتوعه وهيبعت لبقيت السيرفرات عن طريق redis ويقولهم /4
في مشاريع تانية استخدمت redis لحاجات تانية:
- Session store
وده للauth بتاع الusers فكنت بخزن الsessions في redis عشان اقدر اخلي الserver يكون stateless واقدر اعمل horizontal scaling.
كان ممكن استخدم DB عادية بس هنا كل request هحتاج اجيب الsession فبقلل الlatency علي الاخر /6
- Session store
وده للauth بتاع الusers فكنت بخزن الsessions في redis عشان اقدر اخلي الserver يكون stateless واقدر اعمل horizontal scaling.
كان ممكن استخدم DB عادية بس هنا كل request هحتاج اجيب الsession فبقلل الlatency علي الاخر /6
تاني حاجة
- Rate limiter tokens store
وهنا كنت بستخدم الtoken-bucket algorithm ودي من خواروميات الrate limiting واللي هو بيمنع الDOS Attacks وده نوع من الهجوم بيبعت requests كتير عشان يزود الload علي الservers ويوقعهم او يخليني ادفع فلوس كتير تكاليف الbandwidth والسيرفرات /7
- Rate limiter tokens store
وهنا كنت بستخدم الtoken-bucket algorithm ودي من خواروميات الrate limiting واللي هو بيمنع الDOS Attacks وده نوع من الهجوم بيبعت requests كتير عشان يزود الload علي الservers ويوقعهم او يخليني ادفع فلوس كتير تكاليف الbandwidth والسيرفرات /7
بس دلوقتي اقدر امنع الموضوع ده باني اخلي كل IP او مستخدم ميقدرش يبعت اكتر من 30 requests/min او طبعا علي حسب انت عايز ايه. طب ليه redis نفس الكلام اللي فوق عشان دي query في كل request فبقلل الlatency واستهلاك الresources وبعمل key lookups مش محتاج اي queries معقدة /8
برضه ناوي استخدم redis في نفس الmicroservice دي عشان اخزن فيها idempotent keys عشان اعمل idempotent consumers لqueue بتاخد من producer بيعمل transactional outbox عشان الfeed service تpopulate الfeeds للusers فقولي رأيك هل يستحق عشان مخليش user يشوف نفس البوست اكتر من مرة /10
طب ايه تاني ممكن تعمله بredis؟
بتقدملك modules وstack تقدر تستخدمها في حاجات كتير:
- RediSearch for full-text search
- RedisJSON for JSON fields
- RedisGraph as a graph database
- RedisTmeSeries
- Geo-distributed search
- Redis streams as an in-memory Kafka with less features
/11
بتقدملك modules وstack تقدر تستخدمها في حاجات كتير:
- RediSearch for full-text search
- RedisJSON for JSON fields
- RedisGraph as a graph database
- RedisTmeSeries
- Geo-distributed search
- Redis streams as an in-memory Kafka with less features
/11
جاري تحميل الاقتراحات...