نکات کلیدی
1. میکروسرویسها: خدمات کوچک و مستقل که با هم کار میکنند
میکروسرویسها خدمات کوچک و مستقلی هستند که با هم کار میکنند.
پایه میکروسرویسها. معماری میکروسرویسها بر اساس اصل توسعه نرمافزار به عنوان مجموعهای از خدمات کوچک و مستقل ساخته شده است. هر خدمت بر انجام یک کار به خوبی تمرکز دارد، در فرآیند خود اجرا میشود و از طریق مکانیزمهای سبک مانند APIهای HTTP/REST ارتباط برقرار میکند. این رویکرد در مقایسه با معماریهای یکپارچه، انعطافپذیری، مقیاسپذیری و نگهداری بیشتری را فراهم میکند.
مزایا و چالشها. مزایای کلیدی میکروسرویسها شامل موارد زیر است:
- بهبود مدولاریت
- مقیاسپذیری آسانتر اجزای فردی
- تنوع فناوری
- بهبود جداسازی خطا
- چرخههای استقرار سریعتر
با این حال، میکروسرویسها چالشهایی نیز به همراه دارند مانند:
- افزایش پیچیدگی عملیاتی
- نگرانیهای سیستم توزیعشده (مانند تأخیر شبکه، تحمل خطا)
- سازگاری دادهها در خدمات
2. معماری تکاملی: تطبیق با نیازهای در حال تغییر
نقش معمار این است که به تصویر بزرگتر نگاه کند و این تعادل را درک کند.
پذیرش تغییر. معماری تکاملی بر نیاز سیستمها به تطبیق با نیازهای در حال تغییر در طول زمان تأکید دارد. این رویکرد به این واقعیت اذعان دارد که پیشبینی تمام نیازهای آینده غیرممکن است، بنابراین به جای آن بر ایجاد یک پایه انعطافپذیر که میتواند تکامل یابد تمرکز میکند.
اصول کلیدی:
- تغییر تدریجی: بهروزرسانیهای کوچک و مکرر به جای تغییرات بزرگ و نادر
- تغییر هدایتشده: استفاده از اصول و شیوهها برای هدایت تصمیمات معماری
- معماریهای متعدد: شناخت اینکه بخشهای مختلف سیستم ممکن است با نرخهای مختلف تکامل یابند
معماران در این مدل بیشتر به عنوان برنامهریزان شهری عمل میکنند، دستورالعملها و محدودیتها را تعیین میکنند، به جای اینکه هر جزئیات را دیکته کنند. این به تیمها اجازه میدهد تصمیمات محلی بگیرند در حالی که انسجام کلی سیستم را تضمین میکنند.
3. مدلسازی خدمات: تعریف مرزها و زمینهها
ما مرزهای خدمات خود را بر اساس مرزهای کسبوکار متمرکز میکنیم، به طوری که مشخص باشد کد برای یک قطعه خاص از عملکرد کجا قرار دارد.
طراحی مبتنی بر دامنه. مدلسازی خدمات به طور مؤثر نیاز به درک عمیق از دامنه کسبوکار دارد. طراحی مبتنی بر دامنه (DDD) مفاهیم ارزشمندی برای تعریف مرزهای خدمات ارائه میدهد:
- زمینههای محدود: مناطق دامنه با مرزهای واضح
- زبان فراگیر: زبانی مشترک که توسط توسعهدهندگان و کارشناسان دامنه به اشتراک گذاشته میشود
- تجمعات: خوشههایی از اشیاء دامنه که به عنوان یک واحد در نظر گرفته میشوند
شناسایی مرزهای خدمات:
- همراستا با قابلیتهای کسبوکار
- محصور کردن دادهها و رفتار
- به حداقل رساندن وابستگیها بین خدمات
- در نظر گرفتن ساختار تیم و الگوهای ارتباطی
مرزهای به خوبی تعریفشده منجر به خدمات منسجمتر و کاهش وابستگی بین آنها میشود، که توسعه و استقرار مستقل را تسهیل میکند.
4. استراتژیهای یکپارچهسازی: انتخاب رویکرد مناسب برای ارتباط
در آنچه انجام میدهید محافظهکار باشید، در آنچه از دیگران میپذیرید لیبرال باشید.
اهمیت یکپارچهسازی. یکپارچهسازی مؤثر برای کارکرد یکپارچه میکروسرویسها بسیار مهم است. انتخاب فناوری یکپارچهسازی به طور قابل توجهی بر انعطافپذیری سیستم، عملکرد و نگهداری تأثیر میگذارد.
الگوهای کلیدی یکپارچهسازی:
- ارتباط همزمان: REST، gRPC
- ارتباط غیرهمزمان: صفهای پیام، جریان رویداد
- دروازههای API: برای مسیریابی و ترکیب درخواستها
- مش خدمات: برای مدیریت ارتباط سرویس به سرویس
بهترین شیوهها:
- استفاده از پروتکلهای مستقل از فناوری (مانند HTTP)
- پیادهسازی خوانندگان مقاوم برای مدیریت تغییرات به طور مؤثر
- طراحی برای شکست با قطعکنندههای مدار و دیوارههای حجمی
- در نظر گرفتن معماریهای مبتنی بر رویداد برای کاهش وابستگی
استراتژی یکپارچهسازی مناسب به مورد استفاده خاص شما، نیازهای عملکرد و تخصص تیم بستگی دارد.
5. تقسیم یکپارچه: انتقال به میکروسرویسها
به یکپارچه ما به عنوان یک بلوک مرمر فکر کنید. میتوانیم کل آن را منفجر کنیم، اما این به ندرت به خوبی پایان مییابد. منطقیتر است که به تدریج آن را تراش دهیم.
رویکرد تدریجی. انتقال از معماری یکپارچه به میکروسرویسها بهتر است به تدریج انجام شود. این به تیمها اجازه میدهد یاد بگیرند و تطبیق یابند در حالی که خطر را به حداقل میرسانند.
مراحل تقسیم یکپارچه:
- شناسایی درزها در کد موجود
- استخراج زمینههای محدود به ماژولهای جداگانه
- بازسازی ساختارهای داده و پایگاههای داده مشترک
- ایجاد APIها برای ارتباط بین ماژولها
- استخراج ماژولها به خدمات جداگانه
- پیادهسازی ویژگیهای جدید به عنوان میکروسرویسها
چالشهایی که باید در نظر گرفت:
- وابستگیهای داده بین خدمات
- یکپارچگی تراکنشها در مرزهای خدمات
- تأثیر عملکرد ارتباط شبکه
- پیچیدگی عملیاتی مدیریت خدمات متعدد
با سادهترین و کمخطرترین استخراجها شروع کنید تا قبل از پرداختن به بخشهای پیچیدهتر سیستم، اعتماد به نفس و تجربه کسب کنید.
6. تکنیکهای استقرار: اطمینان از قابلیت اطمینان و مقیاسپذیری
اگر انجام کاری درست اما دشوار است، باید تلاش کنیم تا کارها را آسانتر کنیم.
استقرار خودکار. استقرار قابل اطمینان و مقیاسپذیر برای موفقیت میکروسرویسها حیاتی است. شیوههای یکپارچهسازی و تحویل مداوم (CI/CD) برای مدیریت پیچیدگی استقرار افزایشیافته ضروری هستند.
تکنیکهای کلیدی استقرار:
- زیرساخت به عنوان کد (IaC)
- کانتینرسازی (مانند Docker)
- پلتفرمهای ارکستراسیون (مانند Kubernetes)
- استقرار آبی-سبز
- انتشار کاناری
ملاحظات استقرار:
- کشف خدمات و مدیریت پیکربندی
- نظارت و ثبت
- امنیت و کنترل دسترسی
- مهاجرت پایگاه داده و سازگاری دادهها
در ابزارها و خودکارسازی سرمایهگذاری کنید تا استقرارها را آسانتر، سریعتر و قابل اطمینانتر کنید. این به تیمها اجازه میدهد با اطمینان به طور مکرر استقرار دهند و از مزایای کامل معماری میکروسرویسها بهرهمند شوند.
7. آزمایش میکروسرویسها: حفظ کیفیت در یک سیستم توزیعشده
هرچه قطعات متحرک بیشتر باشد، آزمایشهای ما شکنندهتر و کمتر قطعی میشوند.
استراتژی جامع آزمایش. آزمایش میکروسرویسها نیاز به رویکردی چندلایه دارد تا هم کیفیت خدمات فردی و هم رفتار کلی سیستم را تضمین کند.
هرم آزمایش برای میکروسرویسها:
- آزمایشهای واحد: آزمایشهای سریع و متمرکز برای اجزای فردی
- آزمایشهای یکپارچهسازی: تأیید تعاملات بین خدمات
- آزمایشهای قرارداد: اطمینان از اینکه خدمات با رابطهای توافقشده مطابقت دارند
- آزمایشهای انتها به انتها: اعتبارسنجی رفتار کل سیستم
چالشهای آزمایش:
- افزایش پیچیدگی به دلیل ماهیت توزیعشده
- مدیریت دادههای آزمایش در خدمات
- شبیهسازی محیطهای مشابه تولید
- مدیریت تعاملات غیرهمزمان
بر حلقههای بازخورد سریع با آزمایشهای واحد و یکپارچهسازی تأکید کنید، در حالی که از تعداد کمتری از آزمایشهای انتها به انتها به دقت انتخابشده برای اعتبارسنجی مسیرهای حیاتی استفاده کنید. استفاده از قراردادهای مبتنی بر مصرفکننده را برای مدیریت وابستگیهای خدمات به طور مؤثر در نظر بگیرید.
8. نظارت و امنیت: حفظ سلامت و حفاظت از میکروسرویسها
ثبت خوب، و بهویژه توانایی تجمیع لاگها از سیستمهای متعدد، درباره پیشگیری نیست، بلکه میتواند به شناسایی و بازیابی از اتفاقات بد کمک کند.
رویکرد جامع. نظارت و امنیت مؤثر برای حفظ یک اکوسیستم میکروسرویس سالم حیاتی هستند. این جنبهها در سیستمهای توزیعشده چالشبرانگیزتر و مهمتر میشوند.
بهترین شیوههای نظارت:
- ثبت مرکزی و تجمیع لاگ
- ردیابی توزیعشده (مانند استفاده از شناسههای همبستگی)
- هشداردهی و داشبوردهای بلادرنگ
- نظارت بر عملکرد برنامه (APM)
- نظارت مصنوعی برای مسیرهای حیاتی
ملاحظات امنیتی:
- احراز هویت و مجوز سرویس به سرویس
- دروازههای API برای امنیت لبه
- مدیریت اسرار
- تقسیمبندی شبکه
- ممیزیهای امنیتی منظم و آزمایش نفوذ
یک استراتژی دفاع در عمق را پیادهسازی کنید، هم محیط و هم خدمات فردی را ایمن کنید. از خودکارسازی برای اطمینان از اعمال مداوم سیاستهای امنیتی در تمام خدمات استفاده کنید.
9. قانون کانوی: همراستایی سازمان و طراحی سیستم
قانون کانوی خطرات تلاش برای اعمال طراحی سیستمی که با سازمان همخوانی ندارد را برجسته میکند.
تأثیر سازمانی. قانون کانوی بیان میکند که طراحی سیستم بازتابی از ساختارهای ارتباطی درون یک سازمان است. این اصل پیامدهای قابل توجهی برای معماری میکروسرویسها دارد.
همراستایی تیمها و خدمات:
- سازماندهی تیمها بر اساس قابلیتهای کسبوکار
- توانمندسازی تیمها با مالکیت انتها به انتهای خدمات
- به حداقل رساندن وابستگیهای بین تیمی
- پرورش فرهنگ همکاری و مسئولیت مشترک
ملاحظات:
- اندازه و ترکیب تیم
- الگوها و ابزارهای ارتباطی
- فرآیندهای تصمیمگیری
- توسعه مهارت و اشتراک دانش
تشخیص دهید که ساختار سازمانی و معماری سیستم به هم پیوستهاند. هر دو را به طور همزمان تکامل دهید تا محیطی مناسب برای توسعه و بهرهبرداری موفق میکروسرویسها ایجاد کنید.
10. مقیاسگذاری میکروسرویسها: مدیریت رشد و شکست
در مقیاس، حتی اگر بهترین تجهیزات و گرانترین سختافزار را بخرید، نمیتوانید از این واقعیت که چیزها میتوانند و خواهند شکست جلوگیری کنید.
طراحی برای مقیاس و مقاومت. معماریهای میکروسرویسها باید به گونهای طراحی شوند که هم رشد در تقاضا و هم شکستهای اجتنابناپذیر را به خوبی مدیریت کنند.
استراتژیهای مقیاسگذاری:
- مقیاسگذاری افقی (افزودن نمونههای بیشتر)
- مقیاسگذاری عمودی (افزایش منابع به ازای هر نمونه)
- کش (در حافظه، توزیعشده)
- شاردینگ و تکرار پایگاه داده
- پردازش غیرهمزمان و معماریهای مبتنی بر رویداد
الگوهای مقاومت:
- قطعکنندههای مدار برای جلوگیری از شکستهای زنجیرهای
- دیوارههای حجمی برای جداسازی خطا
- زمانبندی و تلاش مجدد با بازگشت نمایی
- کاهش تدریجی عملکرد
ملاحظات قضیه CAP:
- سازگاری
- دسترسی
- تحمل تقسیم
درک کنید که در مقیاسگذاری سیستمهای توزیعشده، نیاز به مصالحه وجود دارد. بر اساس نیازها و محدودیتهای خاص خود اولویتبندی کنید. شیوههای مشاهدهپذیری و مهندسی آشوب را برای بهبود مداوم مقاومت سیستم پیادهسازی کنید.
آخرین بهروزرسانی::
FAQ
What's Building Microservices by Sam Newman about?
- Microservices Architecture: The book explores microservices, which are small, autonomous services that collaborate to form a system. It highlights how this architecture can enhance software delivery speed and flexibility.
- Business Domain Focus: Microservices are modeled around business domains, aligning software design with business needs and avoiding issues of monolithic architectures.
- Practical Guidance: Sam Newman provides real-world examples from companies like Netflix and Amazon, offering a comprehensive guide for adopting or understanding microservices.
Why should I read Building Microservices by Sam Newman?
- Comprehensive Resource: It covers design, development, deployment, testing, and maintenance of microservices, making it ideal for those transitioning from monolithic systems.
- Real-World Examples: The book includes insights from organizations that have successfully implemented microservices, providing practical perspectives and lessons learned.
- Continuous Learning: It encourages embracing continuous learning to keep up with the fast-evolving nature of microservices technology and practices.
What are the key takeaways of Building Microservices by Sam Newman?
- Microservices Benefits: The book outlines benefits like improved scalability, resilience, and quick adoption of new technologies due to service autonomy.
- Loose Coupling and High Cohesion: Emphasizes designing services to be loosely coupled and highly cohesive, facilitating easier maintenance and updates.
- Integration Strategies: Discusses synchronous and asynchronous communication strategies, crucial for maintaining service autonomy and effective collaboration.
What is the definition of microservices according to Building Microservices by Sam Newman?
- Small, Autonomous Services: Defined as "small, autonomous services that work together," highlighting their independence and functionality without reliance on others.
- Business Functionality Focus: Each microservice handles a specific business capability, aligning with organizational goals and prioritizing work effectively.
- Decoupled Communication: Services communicate through well-defined APIs, maintaining loose coupling and enabling independent development and deployment.
How does Building Microservices by Sam Newman suggest modeling services?
- Bounded Contexts: Introduces bounded contexts from Domain-Driven Design to define service boundaries, with each context representing a specific responsibility.
- Loose Coupling and High Cohesion: Stresses that related functionality should reside within the same service, while unrelated functionality should be separated.
- Iterative Approach: Recommends refining service boundaries over time to accommodate changes in business requirements and technology.
What are the integration strategies discussed in Building Microservices by Sam Newman?
- Synchronous vs. Asynchronous: Contrasts synchronous communication, where a service waits for a response, with asynchronous communication, where services operate independently.
- Event-Driven Architecture: Advocates for event-driven architectures, where services emit events to signal state changes, promoting loose coupling.
- REST and RPC: Discusses RESTful APIs and Remote Procedure Calls for service communication, emphasizing technology-agnostic APIs for flexibility.
What are the challenges of deploying microservices as outlined in Building Microservices by Sam Newman?
- Increased Complexity: Warns of the complexity due to interdependencies between services, which can lead to deployment challenges without proper management.
- Continuous Integration and Delivery: Emphasizes robust CI/CD practices to manage microservices effectively, ensuring quick and reliable deployments.
- Monitoring and Management: Suggests comprehensive monitoring solutions to track the health and performance of each service independently.
How does Building Microservices by Sam Newman address testing in microservices?
- Types of Tests: Categorizes tests into technology-facing and business-facing, including unit, integration, and end-to-end tests for service reliability.
- Consumer-Driven Contracts: Introduces consumer-driven contracts to validate service interactions, ensuring changes in one service don't break dependent services.
- Automated Testing: Advocates for automated testing to maintain quality and speed in deployment, allowing confident release of changes.
What is the significance of Conway’s Law in Building Microservices by Sam Newman?
- Organizational Structure and Architecture: Discusses Conway’s Law, which states that system designs reflect the communication structures of organizations.
- Team Autonomy: Emphasizes organizing microservices around autonomous teams that own specific services, fostering accountability and ownership.
- Impact on Design: Highlights the importance of aligning team structures with service boundaries for effective collaboration and faster feature delivery.
What are the best quotes from Building Microservices by Sam Newman and what do they mean?
- Freedom to React: "Microservices give us significantly more freedom to react and make different decisions," highlighting agility compared to monolithic architectures.
- Service Autonomy: "The golden rule: can you make a change to a service and deploy it by itself without changing anything else?" emphasizes designing independent services.
- Postel's Law: "Be conservative in what you do, be liberal in what you accept from others," underscores flexibility in service interactions while maintaining strict internal standards.
What are some architectural safety measures discussed in Building Microservices by Sam Newman?
- Circuit Breakers: Prevent cascading failures by stopping further calls to a failing service, allowing it to recover without being overwhelmed.
- Bulkheads: Isolate different parts of a system to prevent a failure in one area from affecting others, enhancing resilience and stability.
- Timeouts: Setting appropriate timeouts for service calls to avoid hanging requests, ensuring services can fail fast and recover effectively.
How does Building Microservices by Sam Newman suggest handling service discovery?
- Dynamic Service Registries: Discusses using tools like Consul and Eureka for managing service discovery, allowing easy registration and discovery of services.
- DNS as a Solution: Mentions DNS for service discovery, though it may not suit highly dynamic environments, suggesting load balancers to mitigate limitations.
- Human-Friendly Interfaces: Emphasizes creating user-friendly interfaces for service discovery, aiding developers in finding and understanding available services.
نقد و بررسی
کتاب ساخت میکروسرویسها نقدهای متفاوتی دریافت کرده است، بسیاری از خوانندگان از دیدگاه جامع آن دربارهی مفاهیم میکروسرویسها و توصیههای عملی آن تمجید میکنند. خوانندگان از رویکرد محتاطانهی نویسنده و مثالهای واقعی او قدردانی میکنند. منتقدان به کمبود عمق کتاب در برخی موضوعات و احتمال اغراق در مزایای میکروسرویسها اشاره میکنند. بسیاری این کتاب را برای مبتدیان ارزشمند میدانند اما برای معماران با تجربه کمتر مفید است. کتاب به جنبههای مختلف میکروسرویسها از جمله طراحی، استقرار، آزمایش و مقیاسپذیری میپردازد. برخی از خوانندگان خواستار جزئیات پیادهسازی بیشتری بودند، در حالی که دیگران دیدگاه کلی آن دربارهی معماری نرمافزار را ارزشمند میدانستند.
Similar Books









