From Monolith to Microservices بالعربي with Alaa Attya - Tech Podcast بالعربي

About this video

### Final Comprehensive Summary The provided content discusses various aspects of software architecture, focusing on microservices, monolithic systems, and the challenges associated with transitioning between them. Below is a comprehensive summary of the key themes and insights: --- #### **1. Microservices vs. Monolithic Systems** - The discussion revolves around the comparison between **microservices** and **monolithic architectures**, emphasizing that neither is inherently superior. - **Monolithic systems** are simpler to manage in small teams but can become unwieldy as teams grow (e.g., over 300 engineers), leading to issues like codebase complexity, difficulty in making changes, and interdependencies. - **Microservices** offer benefits such as improved scalability, independent deployment, and better performance in specific scenarios (e.g., using a language like Go for a particular service). However, they introduce significant challenges, including: - Increased complexity in coordination between services. - Higher operational costs. - Dependency management and difficulties in achieving true independence. --- #### **2. Decision-Making and Practical Application** - The decision to adopt microservices should be driven by **real project needs** rather than trends or theoretical ideals. - Implementing microservices without a clear problem to solve can lead to unnecessary complexity and inefficiency. - The text stresses the importance of understanding **technical knowledge deeply** and applying it judiciously, avoiding random or unneeded implementations. --- #### **3. Technical Challenges** - Transitioning to microservices involves several technical hurdles: - **Routing traffic**: Managing requests between old and new services during transitions. - **Database migrations**: Handling data consistency and schema changes across services. - **Transaction management**: Ensuring atomicity and consistency in distributed systems. - **Rollbacks**: Addressing failures and reverting changes without disrupting the system. - Examples include splitting an "order" service into smaller components, which may require refactoring related functionalities (e.g., payment processing) to avoid tight coupling. --- #### **4. Team Coordination and Ownership** - Effective adoption of microservices requires **clear domain boundaries** and **team alignment**: - Teams must have a deep understanding of their respective domains to avoid conflicts and inefficiencies. - Ownership ("Ownership") of services ensures accountability and reduces overlap. - Regular reviews and discussions help maintain clarity about roles and responsibilities. - Poorly defined boundaries or misaligned expectations can lead to conflicts, duplicated efforts, and technical debt. --- #### **5. Cost and Complexity** - Microservices can be expensive to implement and maintain due to: - The need for advanced tools (e.g., Kafka for event streaming). - Increased infrastructure and operational costs. - The complexity of managing multiple services and ensuring reliability. - Companies must weigh the **cost-benefit ratio** before adopting microservices, especially if the existing monolithic system meets current needs. --- #### **6. Real-World Scenarios and Lessons Learned** - Practical examples highlight the complexities of implementing microservices: - Some companies delay splitting services due to the high cost and risk of failure. - Teams often struggle with poorly written code or unclear dependencies, leading to inefficiencies. - Aggregating responses from multiple services can introduce performance bottlenecks, emphasizing the need for dedicated aggregation services. - Sharing databases between services is discouraged unless carefully managed, as schema changes can cause unintended side effects. --- #### **7. Leadership and Communication** - Driving change in software architecture requires strong leadership and effective communication: - Leaders must articulate the **business value** of technical decisions, linking them to cost savings, security improvements, or scalability. - Convincing stakeholders and aligning teams with organizational goals is critical for successful implementation. - Promotions and career growth depend on one’s ability to sell ideas, demonstrate impact, and align technical work with business objectives. --- #### **8. Incremental Approaches and Future Directions** - Breaking apart monolithic systems without proper planning risks significant failures ("big bang"). - Incremental approaches are safer and more practical, allowing teams to transition gradually while minimizing disruption. - Future topics will explore strategies for transitioning to microservices, managing team dynamics, and planning for scalability and robustness. --- ### **Overall Conclusion** The document underscores that **microservices are not a universal solution** and should only be adopted when justified by specific project needs and team capabilities. Transitioning to microservices requires careful planning, clear domain boundaries, and strong leadership to navigate the associated technical and organizational challenges. The emphasis is on balancing complexity, cost, and practicality to achieve scalable and maintainable systems. By combining technical insights with real-world examples, the discussion provides a nuanced perspective on modern software architecture, highlighting the importance of thoughtful decision-making and alignment with business goals.


Course: Microservices بالعربي

مرحبًا بكم في دورة تدريبية شاملة ومميزة حول **أنماط الاتصال بين السيرفيسز (Microservices Communication Patterns)**. هذه الدورة مقدمة لكم من قبل أحمد الإمام، خبير تقني يتمتع بخبرة تمتد لأكثر من 8 سنوات في مجال تطوير البرمجيات، وهو حاليًا يعمل لدى شركة **Join** في ألمانيا. في هذه الدورة، سنتناول موضوعًا أساسيًا يُعتبر أحد الركائز الأساسية لفهم واستخدام **المايكرو سيرفيسز** بكفاءة: **الاتصال بين الخدمات**. إذا كنت قد بدأت رحلتك في عالم المايكرو سيرفيسز أو حتى لديك خلفية عنه، فمن المحتمل أنك واجهت تحديات في فهم كيفية تواصل هذه الخدمات مع بعضها البعض. سنناقش بالتفصيل الفرق بين **الاتصال المتزامن (Synchronous Communication)** و**غير المتزامن (Asynchronous Communication)**، وكيف يمكن اختيار الأنماط المناسبة بناءً على متطلبات المشروع. كما سنستعرض الأمثلة العملية والمشكلات الشائعة التي قد تواجهك أثناء تنفيذ هذه الأنماط وكيفية حلها. سواء كنت مطورًا مبتدئًا أو محترفًا، فإن هذه الدورة ستمنحك الأدوات والمعرفة اللازمة لتحسين تصميم التطبيقات الخاصة بك باستخدام أنماط اتصال فعّالة وحديثة. نهدف إلى تقديم محتوى غني ومفيد يساعدك على تحقيق أفضل النتائج في عملك اليومي. --- ### ## ملخص الدورة: تتناول هذه الدورة موضوع **أنماط الاتصال بين السيرفيسز (Microservices Communication Patterns)** بشكل عميق ومهني. يقدمها أحمد الإمام، الذي يمتلك خبرة طويلة في مجال تطوير البرمجيات، ويعمل حاليًا في شركة مرموقة بألمانيا. تركز الدورة على شرح كيفية تواصل خدمات المايكرو سيرفيسز مع بعضها البعض، مع التركيز على نوعين رئيسيين من الاتصال: **المتزامن وغير المتزامن**. يتم استعراض الفوائد والتحديات المرتبطة بكل نمط، بالإضافة إلى مناقشة المشكلات الشائعة التي قد تواجه المطورين وكيفية التغلب عليها. الدورة تستهدف جميع المستويات، من المبتدئين الذين يرغبون في فهم الأساسيات، إلى المحترفين الذين يسعون لتحسين مهاراتهم وتطبيق أفضل الممارسات في مشاريعهم. سيتم تقديم أمثلة عملية ونصائح قابلة للتنفيذ مباشرة. إنضم إلينا في هذه التجربة التعليمية الغنية لتكتسب رؤى جديدة ومهارات قوية تمكنك من تصميم وبناء تطبيقات أكثر كفاءة وفعالية باستخدام أنماط الاتصال الحديثة بين السيرفيسز. --- **نتمنى لكم تجربة تعليمية ممتعة ومفيدة!**

View Full Course