[{"data":1,"prerenderedAt":6121},["ShallowReactive",2],{"navigation":3,"/microservices-with-django/what-is-a-microservice":1016,"/microservices-with-django/what-is-a-microservice-surround":6116},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":881,"body":1018,"description":1028,"extension":6111,"links":6112,"meta":6113,"navigation":1294,"path":882,"seo":6114,"stem":883,"__hash__":6115},"docs/27.microservices-with-django/02.what-is-a-microservice.md",{"type":1019,"value":1020,"toc":6067},"minimark",[1021,1025,1029,1034,1042,1047,1081,1085,1089,1092,1206,1211,1228,1232,1235,1243,1247,1251,1254,1432,1436,1439,1806,1810,1813,2120,2124,2128,2131,2310,2314,2317,2496,2500,2503,2561,2565,2568,3141,3145,3149,3152,3637,3641,3644,3960,3964,3967,4272,4276,4280,4283,4391,4395,4398,4654,4658,4661,4953,4957,4961,4964,5074,5078,5081,5270,5274,5277,5431,5435,5439,5442,5645,5649,5652,5987,5991,5995,6012,6016,6033,6037,6040,6043,6060,6063],[1022,1023,881],"h1",{"id":1024},"what-is-a-microservice",[1026,1027,1028],"p",{},"Microservices architecture has revolutionized how we build and deploy modern applications. In this section, we'll explore what microservices are, how they compare to monolithic applications, and why they've become so popular in today's development landscape.",[1030,1031,1033],"h2",{"id":1032},"understanding-microservices","Understanding Microservices",[1026,1035,1036,1037,1041],{},"A ",[1038,1039,1040],"strong",{},"microservice"," is a small, independent service that runs in its own process and communicates via well-defined APIs. Each microservice is responsible for a specific business capability and can be developed, deployed, and scaled independently.",[1043,1044,1046],"h3",{"id":1045},"key-characteristics","Key Characteristics",[1048,1049,1050,1057,1063,1069,1075],"ul",{},[1051,1052,1053,1056],"li",{},[1038,1054,1055],{},"Single Responsibility",": Each service focuses on one business capability",[1051,1058,1059,1062],{},[1038,1060,1061],{},"Independence",": Services can be developed and deployed separately",[1051,1064,1065,1068],{},[1038,1066,1067],{},"Decentralized",": No central coordination required",[1051,1070,1071,1074],{},[1038,1072,1073],{},"Technology Agnostic",": Different services can use different technologies",[1051,1076,1077,1080],{},[1038,1078,1079],{},"Fault Isolation",": Failure in one service doesn't bring down the entire system",[1030,1082,1084],{"id":1083},"monolithic-vs-microservices-architecture","Monolithic vs Microservices Architecture",[1043,1086,1088],{"id":1087},"monolithic-architecture","Monolithic Architecture",[1026,1090,1091],{},"In a monolithic architecture, all components of an application are interconnected and interdependent:",[1093,1094,1099],"pre",{"className":1095,"code":1096,"language":1097,"meta":1098,"style":1098},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Traditional Django monolithic structure\nmyproject/\n├── myproject/\n│   ├── settings.py\n│   ├── urls.py\n│   └── wsgi.py\n├── users/\n├── products/\n├── orders/\n├── payments/\n└── manage.py\n","python","",[1100,1101,1102,1111,1122,1130,1144,1154,1164,1172,1180,1188,1196],"code",{"__ignoreMap":1098},[1103,1104,1107],"span",{"class":1105,"line":1106},"line",1,[1103,1108,1110],{"class":1109},"s9Tkl","# Traditional Django monolithic structure\n",[1103,1112,1114,1118],{"class":1105,"line":1113},2,[1103,1115,1117],{"class":1116},"sftqT","myproject",[1103,1119,1121],{"class":1120},"sVsLi","/\n",[1103,1123,1125,1128],{"class":1105,"line":1124},3,[1103,1126,1127],{"class":1116},"├── myproject",[1103,1129,1121],{"class":1120},[1103,1131,1133,1136,1140],{"class":1105,"line":1132},4,[1103,1134,1135],{"class":1116},"│   ├── settings",[1103,1137,1139],{"class":1138},"soVBu",".",[1103,1141,1143],{"class":1142},"sBPpx","py\n",[1103,1145,1147,1150,1152],{"class":1105,"line":1146},5,[1103,1148,1149],{"class":1116},"│   ├── urls",[1103,1151,1139],{"class":1138},[1103,1153,1143],{"class":1142},[1103,1155,1157,1160,1162],{"class":1105,"line":1156},6,[1103,1158,1159],{"class":1116},"│   └── wsgi",[1103,1161,1139],{"class":1138},[1103,1163,1143],{"class":1142},[1103,1165,1167,1170],{"class":1105,"line":1166},7,[1103,1168,1169],{"class":1116},"├── users",[1103,1171,1121],{"class":1120},[1103,1173,1175,1178],{"class":1105,"line":1174},8,[1103,1176,1177],{"class":1116},"├── products",[1103,1179,1121],{"class":1120},[1103,1181,1183,1186],{"class":1105,"line":1182},9,[1103,1184,1185],{"class":1116},"├── orders",[1103,1187,1121],{"class":1120},[1103,1189,1191,1194],{"class":1105,"line":1190},10,[1103,1192,1193],{"class":1116},"├── payments",[1103,1195,1121],{"class":1120},[1103,1197,1199,1202,1204],{"class":1105,"line":1198},11,[1103,1200,1201],{"class":1116},"└── manage",[1103,1203,1139],{"class":1138},[1103,1205,1143],{"class":1142},[1026,1207,1208],{},[1038,1209,1210],{},"Characteristics of Monoliths:",[1048,1212,1213,1216,1219,1222,1225],{},[1051,1214,1215],{},"Single deployable unit",[1051,1217,1218],{},"Shared database",[1051,1220,1221],{},"Tight coupling between components",[1051,1223,1224],{},"Single technology stack",[1051,1226,1227],{},"Centralized business logic",[1043,1229,1231],{"id":1230},"microservices-architecture","Microservices Architecture",[1026,1233,1234],{},"In microservices architecture, the application is decomposed into multiple independent services:",[1093,1236,1241],{"className":1237,"code":1239,"language":1240},[1238],"language-text","User Service     Product Service    Order Service    Payment Service\n     |                  |                |                |\n     └─────────────── API Gateway ──────────────────────┘\n                          |\n                    Load Balancer\n                          |\n                    Client Application\n","text",[1100,1242,1239],{"__ignoreMap":1098},[1030,1244,1246],{"id":1245},"components-of-microservices-architecture","Components of Microservices Architecture",[1043,1248,1250],{"id":1249},"_1-api-gateway","1. API Gateway",[1026,1252,1253],{},"The API Gateway acts as a single entry point for all client requests:",[1093,1255,1257],{"className":1095,"code":1256,"language":1097,"meta":1098,"style":1098},"# Example API Gateway configuration\nfrom django.urls import path, include\n\nurlpatterns = [\n    path('api/users/', include('user_service.urls')),\n    path('api/products/', include('product_service.urls')),\n    path('api/orders/', include('order_service.urls')),\n    path('api/payments/', include('payment_service.urls')),\n]\n",[1100,1258,1259,1264,1290,1296,1307,1343,1371,1399,1427],{"__ignoreMap":1098},[1103,1260,1261],{"class":1105,"line":1106},[1103,1262,1263],{"class":1109},"# Example API Gateway configuration\n",[1103,1265,1266,1270,1273,1275,1278,1281,1284,1287],{"class":1105,"line":1113},[1103,1267,1269],{"class":1268},"siDh9","from",[1103,1271,1272],{"class":1116}," django",[1103,1274,1139],{"class":1138},[1103,1276,1277],{"class":1116},"urls ",[1103,1279,1280],{"class":1268},"import",[1103,1282,1283],{"class":1116}," path",[1103,1285,1286],{"class":1138},",",[1103,1288,1289],{"class":1116}," include\n",[1103,1291,1292],{"class":1105,"line":1124},[1103,1293,1295],{"emptyLinePlaceholder":1294},true,"\n",[1103,1297,1298,1301,1304],{"class":1105,"line":1132},[1103,1299,1300],{"class":1116},"urlpatterns ",[1103,1302,1303],{"class":1138},"=",[1103,1305,1306],{"class":1138}," [\n",[1103,1308,1309,1313,1316,1320,1324,1326,1328,1331,1333,1335,1338,1340],{"class":1105,"line":1146},[1103,1310,1312],{"class":1311},"siWMO","    path",[1103,1314,1315],{"class":1138},"(",[1103,1317,1319],{"class":1318},"sbYkP","'",[1103,1321,1323],{"class":1322},"sTbE_","api/users/",[1103,1325,1319],{"class":1318},[1103,1327,1286],{"class":1138},[1103,1329,1330],{"class":1311}," include",[1103,1332,1315],{"class":1138},[1103,1334,1319],{"class":1318},[1103,1336,1337],{"class":1322},"user_service.urls",[1103,1339,1319],{"class":1318},[1103,1341,1342],{"class":1138},")),\n",[1103,1344,1345,1347,1349,1351,1354,1356,1358,1360,1362,1364,1367,1369],{"class":1105,"line":1156},[1103,1346,1312],{"class":1311},[1103,1348,1315],{"class":1138},[1103,1350,1319],{"class":1318},[1103,1352,1353],{"class":1322},"api/products/",[1103,1355,1319],{"class":1318},[1103,1357,1286],{"class":1138},[1103,1359,1330],{"class":1311},[1103,1361,1315],{"class":1138},[1103,1363,1319],{"class":1318},[1103,1365,1366],{"class":1322},"product_service.urls",[1103,1368,1319],{"class":1318},[1103,1370,1342],{"class":1138},[1103,1372,1373,1375,1377,1379,1382,1384,1386,1388,1390,1392,1395,1397],{"class":1105,"line":1166},[1103,1374,1312],{"class":1311},[1103,1376,1315],{"class":1138},[1103,1378,1319],{"class":1318},[1103,1380,1381],{"class":1322},"api/orders/",[1103,1383,1319],{"class":1318},[1103,1385,1286],{"class":1138},[1103,1387,1330],{"class":1311},[1103,1389,1315],{"class":1138},[1103,1391,1319],{"class":1318},[1103,1393,1394],{"class":1322},"order_service.urls",[1103,1396,1319],{"class":1318},[1103,1398,1342],{"class":1138},[1103,1400,1401,1403,1405,1407,1410,1412,1414,1416,1418,1420,1423,1425],{"class":1105,"line":1174},[1103,1402,1312],{"class":1311},[1103,1404,1315],{"class":1138},[1103,1406,1319],{"class":1318},[1103,1408,1409],{"class":1322},"api/payments/",[1103,1411,1319],{"class":1318},[1103,1413,1286],{"class":1138},[1103,1415,1330],{"class":1311},[1103,1417,1315],{"class":1138},[1103,1419,1319],{"class":1318},[1103,1421,1422],{"class":1322},"payment_service.urls",[1103,1424,1319],{"class":1318},[1103,1426,1342],{"class":1138},[1103,1428,1429],{"class":1105,"line":1182},[1103,1430,1431],{"class":1138},"]\n",[1043,1433,1435],{"id":1434},"_2-service-registry","2. Service Registry",[1026,1437,1438],{},"Services register themselves and discover other services:",[1093,1440,1442],{"className":1095,"code":1441,"language":1097,"meta":1098,"style":1098},"# Service registration example\nimport requests\nimport json\n\nclass ServiceRegistry:\n    def __init__(self, registry_url):\n        self.registry_url = registry_url\n    \n    def register_service(self, service_name, service_url, health_check_url):\n        payload = {\n            'name': service_name,\n            'url': service_url,\n            'health_check': health_check_url\n        }\n        response = requests.post(f\"{self.registry_url}/register\", json=payload)\n        return response.status_code == 200\n    \n    def discover_service(self, service_name):\n        response = requests.get(f\"{self.registry_url}/services/{service_name}\")\n        if response.status_code == 200:\n            return response.json()\n        return None\n",[1100,1443,1444,1449,1456,1463,1467,1480,1504,1521,1526,1555,1565,1583,1599,1614,1620,1674,1695,1700,1718,1762,1781,1797],{"__ignoreMap":1098},[1103,1445,1446],{"class":1105,"line":1106},[1103,1447,1448],{"class":1109},"# Service registration example\n",[1103,1450,1451,1453],{"class":1105,"line":1113},[1103,1452,1280],{"class":1268},[1103,1454,1455],{"class":1116}," requests\n",[1103,1457,1458,1460],{"class":1105,"line":1124},[1103,1459,1280],{"class":1268},[1103,1461,1462],{"class":1116}," json\n",[1103,1464,1465],{"class":1105,"line":1132},[1103,1466,1295],{"emptyLinePlaceholder":1294},[1103,1468,1469,1473,1477],{"class":1105,"line":1146},[1103,1470,1472],{"class":1471},"s5Kfy","class",[1103,1474,1476],{"class":1475},"sD-vU"," ServiceRegistry",[1103,1478,1479],{"class":1138},":\n",[1103,1481,1482,1485,1489,1491,1495,1497,1501],{"class":1105,"line":1156},[1103,1483,1484],{"class":1471},"    def",[1103,1486,1488],{"class":1487},"sJdAF"," __init__",[1103,1490,1315],{"class":1138},[1103,1492,1494],{"class":1493},"sRjD_","self",[1103,1496,1286],{"class":1138},[1103,1498,1500],{"class":1499},"sCyAa"," registry_url",[1103,1502,1503],{"class":1138},"):\n",[1103,1505,1506,1510,1512,1515,1518],{"class":1105,"line":1166},[1103,1507,1509],{"class":1508},"se3Ec","        self",[1103,1511,1139],{"class":1138},[1103,1513,1514],{"class":1142},"registry_url",[1103,1516,1517],{"class":1138}," =",[1103,1519,1520],{"class":1116}," registry_url\n",[1103,1522,1523],{"class":1105,"line":1174},[1103,1524,1525],{"class":1116},"    \n",[1103,1527,1528,1530,1534,1536,1538,1540,1543,1545,1548,1550,1553],{"class":1105,"line":1182},[1103,1529,1484],{"class":1471},[1103,1531,1533],{"class":1532},"sljsM"," register_service",[1103,1535,1315],{"class":1138},[1103,1537,1494],{"class":1493},[1103,1539,1286],{"class":1138},[1103,1541,1542],{"class":1499}," service_name",[1103,1544,1286],{"class":1138},[1103,1546,1547],{"class":1499}," service_url",[1103,1549,1286],{"class":1138},[1103,1551,1552],{"class":1499}," health_check_url",[1103,1554,1503],{"class":1138},[1103,1556,1557,1560,1562],{"class":1105,"line":1190},[1103,1558,1559],{"class":1116},"        payload ",[1103,1561,1303],{"class":1138},[1103,1563,1564],{"class":1138}," {\n",[1103,1566,1567,1570,1573,1575,1578,1580],{"class":1105,"line":1198},[1103,1568,1569],{"class":1318},"            '",[1103,1571,1572],{"class":1322},"name",[1103,1574,1319],{"class":1318},[1103,1576,1577],{"class":1138},":",[1103,1579,1542],{"class":1116},[1103,1581,1582],{"class":1138},",\n",[1103,1584,1586,1588,1591,1593,1595,1597],{"class":1105,"line":1585},12,[1103,1587,1569],{"class":1318},[1103,1589,1590],{"class":1322},"url",[1103,1592,1319],{"class":1318},[1103,1594,1577],{"class":1138},[1103,1596,1547],{"class":1116},[1103,1598,1582],{"class":1138},[1103,1600,1602,1604,1607,1609,1611],{"class":1105,"line":1601},13,[1103,1603,1569],{"class":1318},[1103,1605,1606],{"class":1322},"health_check",[1103,1608,1319],{"class":1318},[1103,1610,1577],{"class":1138},[1103,1612,1613],{"class":1116}," health_check_url\n",[1103,1615,1617],{"class":1105,"line":1616},14,[1103,1618,1619],{"class":1138},"        }\n",[1103,1621,1623,1626,1628,1631,1633,1636,1638,1641,1644,1648,1650,1652,1654,1657,1660,1662,1666,1668,1671],{"class":1105,"line":1622},15,[1103,1624,1625],{"class":1116},"        response ",[1103,1627,1303],{"class":1138},[1103,1629,1630],{"class":1116}," requests",[1103,1632,1139],{"class":1138},[1103,1634,1635],{"class":1311},"post",[1103,1637,1315],{"class":1138},[1103,1639,1640],{"class":1471},"f",[1103,1642,1643],{"class":1322},"\"",[1103,1645,1647],{"class":1646},"s3h35","{",[1103,1649,1494],{"class":1508},[1103,1651,1139],{"class":1138},[1103,1653,1514],{"class":1142},[1103,1655,1656],{"class":1646},"}",[1103,1658,1659],{"class":1322},"/register\"",[1103,1661,1286],{"class":1138},[1103,1663,1665],{"class":1664},"sqOPj"," json",[1103,1667,1303],{"class":1138},[1103,1669,1670],{"class":1311},"payload",[1103,1672,1673],{"class":1138},")\n",[1103,1675,1677,1680,1683,1685,1688,1691],{"class":1105,"line":1676},16,[1103,1678,1679],{"class":1268},"        return",[1103,1681,1682],{"class":1116}," response",[1103,1684,1139],{"class":1138},[1103,1686,1687],{"class":1142},"status_code",[1103,1689,1690],{"class":1120}," ==",[1103,1692,1694],{"class":1693},"s7CZa"," 200\n",[1103,1696,1698],{"class":1105,"line":1697},17,[1103,1699,1525],{"class":1116},[1103,1701,1703,1705,1708,1710,1712,1714,1716],{"class":1105,"line":1702},18,[1103,1704,1484],{"class":1471},[1103,1706,1707],{"class":1532}," discover_service",[1103,1709,1315],{"class":1138},[1103,1711,1494],{"class":1493},[1103,1713,1286],{"class":1138},[1103,1715,1542],{"class":1499},[1103,1717,1503],{"class":1138},[1103,1719,1721,1723,1725,1727,1729,1732,1734,1736,1738,1740,1742,1744,1746,1748,1751,1753,1756,1758,1760],{"class":1105,"line":1720},19,[1103,1722,1625],{"class":1116},[1103,1724,1303],{"class":1138},[1103,1726,1630],{"class":1116},[1103,1728,1139],{"class":1138},[1103,1730,1731],{"class":1311},"get",[1103,1733,1315],{"class":1138},[1103,1735,1640],{"class":1471},[1103,1737,1643],{"class":1322},[1103,1739,1647],{"class":1646},[1103,1741,1494],{"class":1508},[1103,1743,1139],{"class":1138},[1103,1745,1514],{"class":1142},[1103,1747,1656],{"class":1646},[1103,1749,1750],{"class":1322},"/services/",[1103,1752,1647],{"class":1646},[1103,1754,1755],{"class":1311},"service_name",[1103,1757,1656],{"class":1646},[1103,1759,1643],{"class":1322},[1103,1761,1673],{"class":1138},[1103,1763,1765,1768,1770,1772,1774,1776,1779],{"class":1105,"line":1764},20,[1103,1766,1767],{"class":1268},"        if",[1103,1769,1682],{"class":1116},[1103,1771,1139],{"class":1138},[1103,1773,1687],{"class":1142},[1103,1775,1690],{"class":1120},[1103,1777,1778],{"class":1693}," 200",[1103,1780,1479],{"class":1138},[1103,1782,1784,1787,1789,1791,1794],{"class":1105,"line":1783},21,[1103,1785,1786],{"class":1268},"            return",[1103,1788,1682],{"class":1116},[1103,1790,1139],{"class":1138},[1103,1792,1793],{"class":1311},"json",[1103,1795,1796],{"class":1138},"()\n",[1103,1798,1800,1802],{"class":1105,"line":1799},22,[1103,1801,1679],{"class":1268},[1103,1803,1805],{"class":1804},"s8XtY"," None\n",[1043,1807,1809],{"id":1808},"_3-load-balancer","3. Load Balancer",[1026,1811,1812],{},"Distributes incoming requests across multiple service instances:",[1093,1814,1816],{"className":1095,"code":1815,"language":1097,"meta":1098,"style":1098},"# Simple load balancer implementation\nimport random\nfrom typing import List\n\nclass LoadBalancer:\n    def __init__(self, service_instances: List[str]):\n        self.service_instances = service_instances\n    \n    def get_instance(self) -> str:\n        \"\"\"Round-robin load balancing\"\"\"\n        return random.choice(self.service_instances)\n    \n    def health_check(self):\n        \"\"\"Remove unhealthy instances\"\"\"\n        healthy_instances = []\n        for instance in self.service_instances:\n            try:\n                response = requests.get(f\"{instance}/health\")\n                if response.status_code == 200:\n                    healthy_instances.append(instance)\n            except requests.RequestException:\n                continue\n        self.service_instances = healthy_instances\n",[1100,1817,1818,1823,1830,1842,1846,1855,1885,1899,1903,1925,1938,1960,1964,1977,1986,1996,2016,2023,2054,2071,2087,2101,2106],{"__ignoreMap":1098},[1103,1819,1820],{"class":1105,"line":1106},[1103,1821,1822],{"class":1109},"# Simple load balancer implementation\n",[1103,1824,1825,1827],{"class":1105,"line":1113},[1103,1826,1280],{"class":1268},[1103,1828,1829],{"class":1116}," random\n",[1103,1831,1832,1834,1837,1839],{"class":1105,"line":1124},[1103,1833,1269],{"class":1268},[1103,1835,1836],{"class":1116}," typing ",[1103,1838,1280],{"class":1268},[1103,1840,1841],{"class":1116}," List\n",[1103,1843,1844],{"class":1105,"line":1132},[1103,1845,1295],{"emptyLinePlaceholder":1294},[1103,1847,1848,1850,1853],{"class":1105,"line":1146},[1103,1849,1472],{"class":1471},[1103,1851,1852],{"class":1475}," LoadBalancer",[1103,1854,1479],{"class":1138},[1103,1856,1857,1859,1861,1863,1865,1867,1870,1872,1875,1878,1882],{"class":1105,"line":1156},[1103,1858,1484],{"class":1471},[1103,1860,1488],{"class":1487},[1103,1862,1315],{"class":1138},[1103,1864,1494],{"class":1493},[1103,1866,1286],{"class":1138},[1103,1868,1869],{"class":1499}," service_instances",[1103,1871,1577],{"class":1138},[1103,1873,1874],{"class":1116}," List",[1103,1876,1877],{"class":1138},"[",[1103,1879,1881],{"class":1880},"sa2tF","str",[1103,1883,1884],{"class":1138},"]):\n",[1103,1886,1887,1889,1891,1894,1896],{"class":1105,"line":1166},[1103,1888,1509],{"class":1508},[1103,1890,1139],{"class":1138},[1103,1892,1893],{"class":1142},"service_instances",[1103,1895,1517],{"class":1138},[1103,1897,1898],{"class":1116}," service_instances\n",[1103,1900,1901],{"class":1105,"line":1174},[1103,1902,1525],{"class":1116},[1103,1904,1905,1907,1910,1912,1914,1917,1920,1923],{"class":1105,"line":1182},[1103,1906,1484],{"class":1471},[1103,1908,1909],{"class":1532}," get_instance",[1103,1911,1315],{"class":1138},[1103,1913,1494],{"class":1493},[1103,1915,1916],{"class":1138},")",[1103,1918,1919],{"class":1138}," ->",[1103,1921,1922],{"class":1880}," str",[1103,1924,1479],{"class":1138},[1103,1926,1927,1931,1935],{"class":1105,"line":1190},[1103,1928,1930],{"class":1929},"sm7ve","        \"\"\"",[1103,1932,1934],{"class":1933},"sVyVU","Round-robin load balancing",[1103,1936,1937],{"class":1929},"\"\"\"\n",[1103,1939,1940,1942,1945,1947,1950,1952,1954,1956,1958],{"class":1105,"line":1198},[1103,1941,1679],{"class":1268},[1103,1943,1944],{"class":1116}," random",[1103,1946,1139],{"class":1138},[1103,1948,1949],{"class":1311},"choice",[1103,1951,1315],{"class":1138},[1103,1953,1494],{"class":1508},[1103,1955,1139],{"class":1138},[1103,1957,1893],{"class":1142},[1103,1959,1673],{"class":1138},[1103,1961,1962],{"class":1105,"line":1585},[1103,1963,1525],{"class":1116},[1103,1965,1966,1968,1971,1973,1975],{"class":1105,"line":1601},[1103,1967,1484],{"class":1471},[1103,1969,1970],{"class":1532}," health_check",[1103,1972,1315],{"class":1138},[1103,1974,1494],{"class":1493},[1103,1976,1503],{"class":1138},[1103,1978,1979,1981,1984],{"class":1105,"line":1616},[1103,1980,1930],{"class":1929},[1103,1982,1983],{"class":1933},"Remove unhealthy instances",[1103,1985,1937],{"class":1929},[1103,1987,1988,1991,1993],{"class":1105,"line":1622},[1103,1989,1990],{"class":1116},"        healthy_instances ",[1103,1992,1303],{"class":1138},[1103,1994,1995],{"class":1138}," []\n",[1103,1997,1998,2001,2004,2007,2010,2012,2014],{"class":1105,"line":1676},[1103,1999,2000],{"class":1268},"        for",[1103,2002,2003],{"class":1116}," instance ",[1103,2005,2006],{"class":1268},"in",[1103,2008,2009],{"class":1508}," self",[1103,2011,1139],{"class":1138},[1103,2013,1893],{"class":1142},[1103,2015,1479],{"class":1138},[1103,2017,2018,2021],{"class":1105,"line":1697},[1103,2019,2020],{"class":1268},"            try",[1103,2022,1479],{"class":1138},[1103,2024,2025,2028,2030,2032,2034,2036,2038,2040,2042,2044,2047,2049,2052],{"class":1105,"line":1702},[1103,2026,2027],{"class":1116},"                response ",[1103,2029,1303],{"class":1138},[1103,2031,1630],{"class":1116},[1103,2033,1139],{"class":1138},[1103,2035,1731],{"class":1311},[1103,2037,1315],{"class":1138},[1103,2039,1640],{"class":1471},[1103,2041,1643],{"class":1322},[1103,2043,1647],{"class":1646},[1103,2045,2046],{"class":1311},"instance",[1103,2048,1656],{"class":1646},[1103,2050,2051],{"class":1322},"/health\"",[1103,2053,1673],{"class":1138},[1103,2055,2056,2059,2061,2063,2065,2067,2069],{"class":1105,"line":1720},[1103,2057,2058],{"class":1268},"                if",[1103,2060,1682],{"class":1116},[1103,2062,1139],{"class":1138},[1103,2064,1687],{"class":1142},[1103,2066,1690],{"class":1120},[1103,2068,1778],{"class":1693},[1103,2070,1479],{"class":1138},[1103,2072,2073,2076,2078,2081,2083,2085],{"class":1105,"line":1764},[1103,2074,2075],{"class":1116},"                    healthy_instances",[1103,2077,1139],{"class":1138},[1103,2079,2080],{"class":1311},"append",[1103,2082,1315],{"class":1138},[1103,2084,2046],{"class":1311},[1103,2086,1673],{"class":1138},[1103,2088,2089,2092,2094,2096,2099],{"class":1105,"line":1783},[1103,2090,2091],{"class":1268},"            except",[1103,2093,1630],{"class":1116},[1103,2095,1139],{"class":1138},[1103,2097,2098],{"class":1142},"RequestException",[1103,2100,1479],{"class":1138},[1103,2102,2103],{"class":1105,"line":1799},[1103,2104,2105],{"class":1268},"                continue\n",[1103,2107,2109,2111,2113,2115,2117],{"class":1105,"line":2108},23,[1103,2110,1509],{"class":1508},[1103,2112,1139],{"class":1138},[1103,2114,1893],{"class":1142},[1103,2116,1517],{"class":1138},[1103,2118,2119],{"class":1116}," healthy_instances\n",[1030,2121,2123],{"id":2122},"benefits-of-microservices","Benefits of Microservices",[1043,2125,2127],{"id":2126},"_1-scalability","1. Scalability",[1026,2129,2130],{},"Scale individual services based on demand:",[1093,2132,2134],{"className":1095,"code":2133,"language":1097,"meta":1098,"style":1098},"# Example: Scaling product service independently\n# docker-compose.yml\nversion: '3.8'\nservices:\n  product-service:\n    image: product-service:latest\n    deploy:\n      replicas: 5  # Scale to 5 instances\n    ports:\n      - \"8001-8005:8000\"\n  \n  user-service:\n    image: user-service:latest\n    deploy:\n      replicas: 2  # Only 2 instances needed\n    ports:\n      - \"8006-8007:8000\"\n",[1100,2135,2136,2141,2146,2162,2169,2182,2201,2208,2221,2228,2242,2247,2258,2275,2281,2293,2299],{"__ignoreMap":1098},[1103,2137,2138],{"class":1105,"line":1106},[1103,2139,2140],{"class":1109},"# Example: Scaling product service independently\n",[1103,2142,2143],{"class":1105,"line":1113},[1103,2144,2145],{"class":1109},"# docker-compose.yml\n",[1103,2147,2148,2151,2153,2156,2159],{"class":1105,"line":1124},[1103,2149,2150],{"class":1116},"version",[1103,2152,1577],{"class":1138},[1103,2154,2155],{"class":1318}," '",[1103,2157,2158],{"class":1322},"3.8",[1103,2160,2161],{"class":1318},"'\n",[1103,2163,2164,2167],{"class":1105,"line":1132},[1103,2165,2166],{"class":1116},"services",[1103,2168,1479],{"class":1138},[1103,2170,2171,2174,2177,2180],{"class":1105,"line":1146},[1103,2172,2173],{"class":1116},"  product",[1103,2175,2176],{"class":1120},"-",[1103,2178,2179],{"class":1116},"service",[1103,2181,1479],{"class":1138},[1103,2183,2184,2187,2189,2192,2194,2196,2198],{"class":1105,"line":1156},[1103,2185,2186],{"class":1116},"    image",[1103,2188,1577],{"class":1138},[1103,2190,2191],{"class":1116}," product",[1103,2193,2176],{"class":1120},[1103,2195,2179],{"class":1116},[1103,2197,1577],{"class":1138},[1103,2199,2200],{"class":1116},"latest\n",[1103,2202,2203,2206],{"class":1105,"line":1166},[1103,2204,2205],{"class":1116},"    deploy",[1103,2207,1479],{"class":1138},[1103,2209,2210,2213,2215,2218],{"class":1105,"line":1174},[1103,2211,2212],{"class":1116},"      replicas",[1103,2214,1577],{"class":1138},[1103,2216,2217],{"class":1693}," 5",[1103,2219,2220],{"class":1109},"  # Scale to 5 instances\n",[1103,2222,2223,2226],{"class":1105,"line":1182},[1103,2224,2225],{"class":1116},"    ports",[1103,2227,1479],{"class":1138},[1103,2229,2230,2233,2236,2239],{"class":1105,"line":1190},[1103,2231,2232],{"class":1120},"      -",[1103,2234,2235],{"class":1318}," \"",[1103,2237,2238],{"class":1322},"8001-8005:8000",[1103,2240,2241],{"class":1318},"\"\n",[1103,2243,2244],{"class":1105,"line":1198},[1103,2245,2246],{"class":1116},"  \n",[1103,2248,2249,2252,2254,2256],{"class":1105,"line":1585},[1103,2250,2251],{"class":1116},"  user",[1103,2253,2176],{"class":1120},[1103,2255,2179],{"class":1116},[1103,2257,1479],{"class":1138},[1103,2259,2260,2262,2264,2267,2269,2271,2273],{"class":1105,"line":1601},[1103,2261,2186],{"class":1116},[1103,2263,1577],{"class":1138},[1103,2265,2266],{"class":1116}," user",[1103,2268,2176],{"class":1120},[1103,2270,2179],{"class":1116},[1103,2272,1577],{"class":1138},[1103,2274,2200],{"class":1116},[1103,2276,2277,2279],{"class":1105,"line":1616},[1103,2278,2205],{"class":1116},[1103,2280,1479],{"class":1138},[1103,2282,2283,2285,2287,2290],{"class":1105,"line":1622},[1103,2284,2212],{"class":1116},[1103,2286,1577],{"class":1138},[1103,2288,2289],{"class":1693}," 2",[1103,2291,2292],{"class":1109},"  # Only 2 instances needed\n",[1103,2294,2295,2297],{"class":1105,"line":1676},[1103,2296,2225],{"class":1116},[1103,2298,1479],{"class":1138},[1103,2300,2301,2303,2305,2308],{"class":1105,"line":1697},[1103,2302,2232],{"class":1120},[1103,2304,2235],{"class":1318},[1103,2306,2307],{"class":1322},"8006-8007:8000",[1103,2309,2241],{"class":1318},[1043,2311,2313],{"id":2312},"_2-technology-diversity","2. Technology Diversity",[1026,2315,2316],{},"Use the best tool for each job:",[1093,2318,2320],{"className":1095,"code":2319,"language":1097,"meta":1098,"style":1098},"# User Service - Django with PostgreSQL\n# settings.py\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'users_db',\n    }\n}\n\n# Product Service - FastAPI with MongoDB\nfrom fastapi import FastAPI\nfrom motor.motor_asyncio import AsyncIOMotorClient\n\napp = FastAPI()\nclient = AsyncIOMotorClient(\"mongodb://localhost:27017\")\ndb = client.products_db\n",[1100,2321,2322,2327,2332,2341,2355,2376,2396,2401,2406,2410,2415,2427,2444,2448,2460,2481],{"__ignoreMap":1098},[1103,2323,2324],{"class":1105,"line":1106},[1103,2325,2326],{"class":1109},"# User Service - Django with PostgreSQL\n",[1103,2328,2329],{"class":1105,"line":1113},[1103,2330,2331],{"class":1109},"# settings.py\n",[1103,2333,2334,2337,2339],{"class":1105,"line":1124},[1103,2335,2336],{"class":1508},"DATABASES",[1103,2338,1517],{"class":1138},[1103,2340,1564],{"class":1138},[1103,2342,2343,2346,2349,2351,2353],{"class":1105,"line":1132},[1103,2344,2345],{"class":1318},"    '",[1103,2347,2348],{"class":1322},"default",[1103,2350,1319],{"class":1318},[1103,2352,1577],{"class":1138},[1103,2354,1564],{"class":1138},[1103,2356,2357,2360,2363,2365,2367,2369,2372,2374],{"class":1105,"line":1146},[1103,2358,2359],{"class":1318},"        '",[1103,2361,2362],{"class":1322},"ENGINE",[1103,2364,1319],{"class":1318},[1103,2366,1577],{"class":1138},[1103,2368,2155],{"class":1318},[1103,2370,2371],{"class":1322},"django.db.backends.postgresql",[1103,2373,1319],{"class":1318},[1103,2375,1582],{"class":1138},[1103,2377,2378,2380,2383,2385,2387,2389,2392,2394],{"class":1105,"line":1156},[1103,2379,2359],{"class":1318},[1103,2381,2382],{"class":1322},"NAME",[1103,2384,1319],{"class":1318},[1103,2386,1577],{"class":1138},[1103,2388,2155],{"class":1318},[1103,2390,2391],{"class":1322},"users_db",[1103,2393,1319],{"class":1318},[1103,2395,1582],{"class":1138},[1103,2397,2398],{"class":1105,"line":1166},[1103,2399,2400],{"class":1138},"    }\n",[1103,2402,2403],{"class":1105,"line":1174},[1103,2404,2405],{"class":1138},"}\n",[1103,2407,2408],{"class":1105,"line":1182},[1103,2409,1295],{"emptyLinePlaceholder":1294},[1103,2411,2412],{"class":1105,"line":1190},[1103,2413,2414],{"class":1109},"# Product Service - FastAPI with MongoDB\n",[1103,2416,2417,2419,2422,2424],{"class":1105,"line":1198},[1103,2418,1269],{"class":1268},[1103,2420,2421],{"class":1116}," fastapi ",[1103,2423,1280],{"class":1268},[1103,2425,2426],{"class":1116}," FastAPI\n",[1103,2428,2429,2431,2434,2436,2439,2441],{"class":1105,"line":1585},[1103,2430,1269],{"class":1268},[1103,2432,2433],{"class":1116}," motor",[1103,2435,1139],{"class":1138},[1103,2437,2438],{"class":1116},"motor_asyncio ",[1103,2440,1280],{"class":1268},[1103,2442,2443],{"class":1116}," AsyncIOMotorClient\n",[1103,2445,2446],{"class":1105,"line":1601},[1103,2447,1295],{"emptyLinePlaceholder":1294},[1103,2449,2450,2453,2455,2458],{"class":1105,"line":1616},[1103,2451,2452],{"class":1116},"app ",[1103,2454,1303],{"class":1138},[1103,2456,2457],{"class":1311}," FastAPI",[1103,2459,1796],{"class":1138},[1103,2461,2462,2465,2467,2470,2472,2474,2477,2479],{"class":1105,"line":1622},[1103,2463,2464],{"class":1116},"client ",[1103,2466,1303],{"class":1138},[1103,2468,2469],{"class":1311}," AsyncIOMotorClient",[1103,2471,1315],{"class":1138},[1103,2473,1643],{"class":1318},[1103,2475,2476],{"class":1322},"mongodb://localhost:27017",[1103,2478,1643],{"class":1318},[1103,2480,1673],{"class":1138},[1103,2482,2483,2486,2488,2491,2493],{"class":1105,"line":1676},[1103,2484,2485],{"class":1116},"db ",[1103,2487,1303],{"class":1138},[1103,2489,2490],{"class":1116}," client",[1103,2492,1139],{"class":1138},[1103,2494,2495],{"class":1142},"products_db\n",[1043,2497,2499],{"id":2498},"_3-independent-deployment","3. Independent Deployment",[1026,2501,2502],{},"Deploy services without affecting others:",[1093,2504,2508],{"className":2505,"code":2506,"language":2507,"meta":1098,"style":1098},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Deploy only the updated service\ndocker build -t user-service:v2.1 ./user-service\ndocker push user-service:v2.1\nkubectl set image deployment/user-service user-service=user-service:v2.1\n","bash",[1100,2509,2510,2515,2534,2544],{"__ignoreMap":1098},[1103,2511,2512],{"class":1105,"line":1106},[1103,2513,2514],{"class":1109},"# Deploy only the updated service\n",[1103,2516,2517,2521,2524,2528,2531],{"class":1105,"line":1113},[1103,2518,2520],{"class":2519},"sYn-s","docker",[1103,2522,2523],{"class":1322}," build",[1103,2525,2527],{"class":2526},"sz9Cv"," -t",[1103,2529,2530],{"class":1322}," user-service:v2.1",[1103,2532,2533],{"class":1322}," ./user-service\n",[1103,2535,2536,2538,2541],{"class":1105,"line":1124},[1103,2537,2520],{"class":2519},[1103,2539,2540],{"class":1322}," push",[1103,2542,2543],{"class":1322}," user-service:v2.1\n",[1103,2545,2546,2549,2552,2555,2558],{"class":1105,"line":1132},[1103,2547,2548],{"class":2519},"kubectl",[1103,2550,2551],{"class":1322}," set",[1103,2553,2554],{"class":1322}," image",[1103,2556,2557],{"class":1322}," deployment/user-service",[1103,2559,2560],{"class":1322}," user-service=user-service:v2.1\n",[1043,2562,2564],{"id":2563},"_4-fault-isolation","4. Fault Isolation",[1026,2566,2567],{},"Service failures don't cascade:",[1093,2569,2571],{"className":1095,"code":2570,"language":1097,"meta":1098,"style":1098},"# Circuit breaker pattern\nimport time\nfrom enum import Enum\n\nclass CircuitState(Enum):\n    CLOSED = 1\n    OPEN = 2\n    HALF_OPEN = 3\n\nclass CircuitBreaker:\n    def __init__(self, failure_threshold=5, timeout=60):\n        self.failure_threshold = failure_threshold\n        self.timeout = timeout\n        self.failure_count = 0\n        self.last_failure_time = None\n        self.state = CircuitState.CLOSED\n    \n    def call(self, func, *args, **kwargs):\n        if self.state == CircuitState.OPEN:\n            if time.time() - self.last_failure_time > self.timeout:\n                self.state = CircuitState.HALF_OPEN\n            else:\n                raise Exception(\"Circuit breaker is OPEN\")\n        \n        try:\n            result = func(*args, **kwargs)\n            self.reset()\n            return result\n        except Exception as e:\n            self.record_failure()\n            raise e\n    \n    def record_failure(self):\n        self.failure_count += 1\n        self.last_failure_time = time.time()\n        if self.failure_count >= self.failure_threshold:\n            self.state = CircuitState.OPEN\n    \n    def reset(self):\n        self.failure_count = 0\n        self.state = CircuitState.CLOSED\n",[1100,2572,2573,2578,2585,2597,2601,2615,2625,2635,2645,2649,2658,2690,2704,2718,2732,2745,2764,2768,2802,2823,2859,2877,2884,2903,2909,2917,2942,2955,2963,2979,2991,3000,3005,3019,3033,3052,3074,3092,3097,3111,3124],{"__ignoreMap":1098},[1103,2574,2575],{"class":1105,"line":1106},[1103,2576,2577],{"class":1109},"# Circuit breaker pattern\n",[1103,2579,2580,2582],{"class":1105,"line":1113},[1103,2581,1280],{"class":1268},[1103,2583,2584],{"class":1116}," time\n",[1103,2586,2587,2589,2592,2594],{"class":1105,"line":1124},[1103,2588,1269],{"class":1268},[1103,2590,2591],{"class":1116}," enum ",[1103,2593,1280],{"class":1268},[1103,2595,2596],{"class":1116}," Enum\n",[1103,2598,2599],{"class":1105,"line":1132},[1103,2600,1295],{"emptyLinePlaceholder":1294},[1103,2602,2603,2605,2608,2610,2613],{"class":1105,"line":1146},[1103,2604,1472],{"class":1471},[1103,2606,2607],{"class":1475}," CircuitState",[1103,2609,1315],{"class":1138},[1103,2611,2612],{"class":2519},"Enum",[1103,2614,1503],{"class":1138},[1103,2616,2617,2620,2622],{"class":1105,"line":1156},[1103,2618,2619],{"class":1508},"    CLOSED",[1103,2621,1517],{"class":1138},[1103,2623,2624],{"class":1693}," 1\n",[1103,2626,2627,2630,2632],{"class":1105,"line":1166},[1103,2628,2629],{"class":1508},"    OPEN",[1103,2631,1517],{"class":1138},[1103,2633,2634],{"class":1693}," 2\n",[1103,2636,2637,2640,2642],{"class":1105,"line":1174},[1103,2638,2639],{"class":1508},"    HALF_OPEN",[1103,2641,1517],{"class":1138},[1103,2643,2644],{"class":1693}," 3\n",[1103,2646,2647],{"class":1105,"line":1182},[1103,2648,1295],{"emptyLinePlaceholder":1294},[1103,2650,2651,2653,2656],{"class":1105,"line":1190},[1103,2652,1472],{"class":1471},[1103,2654,2655],{"class":1475}," CircuitBreaker",[1103,2657,1479],{"class":1138},[1103,2659,2660,2662,2664,2666,2668,2670,2673,2675,2678,2680,2683,2685,2688],{"class":1105,"line":1198},[1103,2661,1484],{"class":1471},[1103,2663,1488],{"class":1487},[1103,2665,1315],{"class":1138},[1103,2667,1494],{"class":1493},[1103,2669,1286],{"class":1138},[1103,2671,2672],{"class":1499}," failure_threshold",[1103,2674,1303],{"class":1120},[1103,2676,2677],{"class":1693},"5",[1103,2679,1286],{"class":1138},[1103,2681,2682],{"class":1499}," timeout",[1103,2684,1303],{"class":1120},[1103,2686,2687],{"class":1693},"60",[1103,2689,1503],{"class":1138},[1103,2691,2692,2694,2696,2699,2701],{"class":1105,"line":1585},[1103,2693,1509],{"class":1508},[1103,2695,1139],{"class":1138},[1103,2697,2698],{"class":1142},"failure_threshold",[1103,2700,1517],{"class":1138},[1103,2702,2703],{"class":1116}," failure_threshold\n",[1103,2705,2706,2708,2710,2713,2715],{"class":1105,"line":1601},[1103,2707,1509],{"class":1508},[1103,2709,1139],{"class":1138},[1103,2711,2712],{"class":1142},"timeout",[1103,2714,1517],{"class":1138},[1103,2716,2717],{"class":1116}," timeout\n",[1103,2719,2720,2722,2724,2727,2729],{"class":1105,"line":1616},[1103,2721,1509],{"class":1508},[1103,2723,1139],{"class":1138},[1103,2725,2726],{"class":1142},"failure_count",[1103,2728,1517],{"class":1138},[1103,2730,2731],{"class":1693}," 0\n",[1103,2733,2734,2736,2738,2741,2743],{"class":1105,"line":1622},[1103,2735,1509],{"class":1508},[1103,2737,1139],{"class":1138},[1103,2739,2740],{"class":1142},"last_failure_time",[1103,2742,1517],{"class":1138},[1103,2744,1805],{"class":1804},[1103,2746,2747,2749,2751,2754,2756,2758,2760],{"class":1105,"line":1676},[1103,2748,1509],{"class":1508},[1103,2750,1139],{"class":1138},[1103,2752,2753],{"class":1142},"state",[1103,2755,1517],{"class":1138},[1103,2757,2607],{"class":1116},[1103,2759,1139],{"class":1138},[1103,2761,2763],{"class":2762},"sFGJz","CLOSED\n",[1103,2765,2766],{"class":1105,"line":1697},[1103,2767,1525],{"class":1116},[1103,2769,2770,2772,2775,2777,2779,2781,2784,2786,2789,2792,2794,2797,2800],{"class":1105,"line":1702},[1103,2771,1484],{"class":1471},[1103,2773,2774],{"class":1532}," call",[1103,2776,1315],{"class":1138},[1103,2778,1494],{"class":1493},[1103,2780,1286],{"class":1138},[1103,2782,2783],{"class":1499}," func",[1103,2785,1286],{"class":1138},[1103,2787,2788],{"class":1120}," *",[1103,2790,2791],{"class":1499},"args",[1103,2793,1286],{"class":1138},[1103,2795,2796],{"class":1120}," **",[1103,2798,2799],{"class":1499},"kwargs",[1103,2801,1503],{"class":1138},[1103,2803,2804,2806,2808,2810,2812,2814,2816,2818,2821],{"class":1105,"line":1720},[1103,2805,1767],{"class":1268},[1103,2807,2009],{"class":1508},[1103,2809,1139],{"class":1138},[1103,2811,2753],{"class":1142},[1103,2813,1690],{"class":1120},[1103,2815,2607],{"class":1116},[1103,2817,1139],{"class":1138},[1103,2819,2820],{"class":2762},"OPEN",[1103,2822,1479],{"class":1138},[1103,2824,2825,2828,2831,2833,2836,2839,2842,2844,2846,2848,2851,2853,2855,2857],{"class":1105,"line":1764},[1103,2826,2827],{"class":1268},"            if",[1103,2829,2830],{"class":1116}," time",[1103,2832,1139],{"class":1138},[1103,2834,2835],{"class":1311},"time",[1103,2837,2838],{"class":1138},"()",[1103,2840,2841],{"class":1120}," -",[1103,2843,2009],{"class":1508},[1103,2845,1139],{"class":1138},[1103,2847,2740],{"class":1142},[1103,2849,2850],{"class":1120}," >",[1103,2852,2009],{"class":1508},[1103,2854,1139],{"class":1138},[1103,2856,2712],{"class":1142},[1103,2858,1479],{"class":1138},[1103,2860,2861,2864,2866,2868,2870,2872,2874],{"class":1105,"line":1783},[1103,2862,2863],{"class":1508},"                self",[1103,2865,1139],{"class":1138},[1103,2867,2753],{"class":1142},[1103,2869,1517],{"class":1138},[1103,2871,2607],{"class":1116},[1103,2873,1139],{"class":1138},[1103,2875,2876],{"class":2762},"HALF_OPEN\n",[1103,2878,2879,2882],{"class":1105,"line":1799},[1103,2880,2881],{"class":1268},"            else",[1103,2883,1479],{"class":1138},[1103,2885,2886,2889,2892,2894,2896,2899,2901],{"class":1105,"line":2108},[1103,2887,2888],{"class":1268},"                raise",[1103,2890,2891],{"class":1880}," Exception",[1103,2893,1315],{"class":1138},[1103,2895,1643],{"class":1318},[1103,2897,2898],{"class":1322},"Circuit breaker is OPEN",[1103,2900,1643],{"class":1318},[1103,2902,1673],{"class":1138},[1103,2904,2906],{"class":1105,"line":2905},24,[1103,2907,2908],{"class":1116},"        \n",[1103,2910,2912,2915],{"class":1105,"line":2911},25,[1103,2913,2914],{"class":1268},"        try",[1103,2916,1479],{"class":1138},[1103,2918,2920,2923,2925,2927,2929,2932,2934,2936,2938,2940],{"class":1105,"line":2919},26,[1103,2921,2922],{"class":1116},"            result ",[1103,2924,1303],{"class":1138},[1103,2926,2783],{"class":1311},[1103,2928,1315],{"class":1138},[1103,2930,2931],{"class":1120},"*",[1103,2933,2791],{"class":1311},[1103,2935,1286],{"class":1138},[1103,2937,2796],{"class":1120},[1103,2939,2799],{"class":1311},[1103,2941,1673],{"class":1138},[1103,2943,2945,2948,2950,2953],{"class":1105,"line":2944},27,[1103,2946,2947],{"class":1508},"            self",[1103,2949,1139],{"class":1138},[1103,2951,2952],{"class":1311},"reset",[1103,2954,1796],{"class":1138},[1103,2956,2958,2960],{"class":1105,"line":2957},28,[1103,2959,1786],{"class":1268},[1103,2961,2962],{"class":1116}," result\n",[1103,2964,2966,2969,2971,2974,2977],{"class":1105,"line":2965},29,[1103,2967,2968],{"class":1268},"        except",[1103,2970,2891],{"class":1880},[1103,2972,2973],{"class":1268}," as",[1103,2975,2976],{"class":1116}," e",[1103,2978,1479],{"class":1138},[1103,2980,2982,2984,2986,2989],{"class":1105,"line":2981},30,[1103,2983,2947],{"class":1508},[1103,2985,1139],{"class":1138},[1103,2987,2988],{"class":1311},"record_failure",[1103,2990,1796],{"class":1138},[1103,2992,2994,2997],{"class":1105,"line":2993},31,[1103,2995,2996],{"class":1268},"            raise",[1103,2998,2999],{"class":1116}," e\n",[1103,3001,3003],{"class":1105,"line":3002},32,[1103,3004,1525],{"class":1116},[1103,3006,3008,3010,3013,3015,3017],{"class":1105,"line":3007},33,[1103,3009,1484],{"class":1471},[1103,3011,3012],{"class":1532}," record_failure",[1103,3014,1315],{"class":1138},[1103,3016,1494],{"class":1493},[1103,3018,1503],{"class":1138},[1103,3020,3022,3024,3026,3028,3031],{"class":1105,"line":3021},34,[1103,3023,1509],{"class":1508},[1103,3025,1139],{"class":1138},[1103,3027,2726],{"class":1142},[1103,3029,3030],{"class":1138}," +=",[1103,3032,2624],{"class":1693},[1103,3034,3036,3038,3040,3042,3044,3046,3048,3050],{"class":1105,"line":3035},35,[1103,3037,1509],{"class":1508},[1103,3039,1139],{"class":1138},[1103,3041,2740],{"class":1142},[1103,3043,1517],{"class":1138},[1103,3045,2830],{"class":1116},[1103,3047,1139],{"class":1138},[1103,3049,2835],{"class":1311},[1103,3051,1796],{"class":1138},[1103,3053,3055,3057,3059,3061,3063,3066,3068,3070,3072],{"class":1105,"line":3054},36,[1103,3056,1767],{"class":1268},[1103,3058,2009],{"class":1508},[1103,3060,1139],{"class":1138},[1103,3062,2726],{"class":1142},[1103,3064,3065],{"class":1120}," >=",[1103,3067,2009],{"class":1508},[1103,3069,1139],{"class":1138},[1103,3071,2698],{"class":1142},[1103,3073,1479],{"class":1138},[1103,3075,3077,3079,3081,3083,3085,3087,3089],{"class":1105,"line":3076},37,[1103,3078,2947],{"class":1508},[1103,3080,1139],{"class":1138},[1103,3082,2753],{"class":1142},[1103,3084,1517],{"class":1138},[1103,3086,2607],{"class":1116},[1103,3088,1139],{"class":1138},[1103,3090,3091],{"class":2762},"OPEN\n",[1103,3093,3095],{"class":1105,"line":3094},38,[1103,3096,1525],{"class":1116},[1103,3098,3100,3102,3105,3107,3109],{"class":1105,"line":3099},39,[1103,3101,1484],{"class":1471},[1103,3103,3104],{"class":1532}," reset",[1103,3106,1315],{"class":1138},[1103,3108,1494],{"class":1493},[1103,3110,1503],{"class":1138},[1103,3112,3114,3116,3118,3120,3122],{"class":1105,"line":3113},40,[1103,3115,1509],{"class":1508},[1103,3117,1139],{"class":1138},[1103,3119,2726],{"class":1142},[1103,3121,1517],{"class":1138},[1103,3123,2731],{"class":1693},[1103,3125,3127,3129,3131,3133,3135,3137,3139],{"class":1105,"line":3126},41,[1103,3128,1509],{"class":1508},[1103,3130,1139],{"class":1138},[1103,3132,2753],{"class":1142},[1103,3134,1517],{"class":1138},[1103,3136,2607],{"class":1116},[1103,3138,1139],{"class":1138},[1103,3140,2763],{"class":2762},[1030,3142,3144],{"id":3143},"drawbacks-of-microservices","Drawbacks of Microservices",[1043,3146,3148],{"id":3147},"_1-complexity","1. Complexity",[1026,3150,3151],{},"Managing distributed systems is inherently complex:",[1093,3153,3155],{"className":1095,"code":3154,"language":1097,"meta":1098,"style":1098},"# Example: Distributed transaction complexity\nfrom django.db import transaction\nimport requests\n\ndef create_order_with_payment(order_data, payment_data):\n    \"\"\"Complex distributed transaction\"\"\"\n    order_id = None\n    payment_id = None\n    \n    try:\n        # Step 1: Create order\n        with transaction.atomic():\n            order_response = requests.post('/api/orders/', json=order_data)\n            order_response.raise_for_status()\n            order_id = order_response.json()['id']\n        \n        # Step 2: Process payment\n        payment_data['order_id'] = order_id\n        payment_response = requests.post('/api/payments/', json=payment_data)\n        payment_response.raise_for_status()\n        payment_id = payment_response.json()['id']\n        \n        # Step 3: Update order status\n        requests.patch(f'/api/orders/{order_id}/', \n                      json={'status': 'confirmed'})\n        \n        return {'order_id': order_id, 'payment_id': payment_id}\n        \n    except Exception as e:\n        # Rollback logic needed\n        if order_id:\n            requests.delete(f'/api/orders/{order_id}/')\n        if payment_id:\n            requests.delete(f'/api/payments/{payment_id}/')\n        raise e\n",[1100,3156,3157,3162,3177,3183,3187,3207,3217,3226,3235,3239,3246,3251,3267,3299,3311,3337,3341,3346,3368,3401,3412,3436,3440,3445,3476,3503,3507,3541,3545,3558,3563,3571,3597,3605,3630],{"__ignoreMap":1098},[1103,3158,3159],{"class":1105,"line":1106},[1103,3160,3161],{"class":1109},"# Example: Distributed transaction complexity\n",[1103,3163,3164,3166,3168,3170,3172,3174],{"class":1105,"line":1113},[1103,3165,1269],{"class":1268},[1103,3167,1272],{"class":1116},[1103,3169,1139],{"class":1138},[1103,3171,2485],{"class":1116},[1103,3173,1280],{"class":1268},[1103,3175,3176],{"class":1116}," transaction\n",[1103,3178,3179,3181],{"class":1105,"line":1124},[1103,3180,1280],{"class":1268},[1103,3182,1455],{"class":1116},[1103,3184,3185],{"class":1105,"line":1132},[1103,3186,1295],{"emptyLinePlaceholder":1294},[1103,3188,3189,3192,3195,3197,3200,3202,3205],{"class":1105,"line":1146},[1103,3190,3191],{"class":1471},"def",[1103,3193,3194],{"class":1532}," create_order_with_payment",[1103,3196,1315],{"class":1138},[1103,3198,3199],{"class":1499},"order_data",[1103,3201,1286],{"class":1138},[1103,3203,3204],{"class":1499}," payment_data",[1103,3206,1503],{"class":1138},[1103,3208,3209,3212,3215],{"class":1105,"line":1156},[1103,3210,3211],{"class":1929},"    \"\"\"",[1103,3213,3214],{"class":1933},"Complex distributed transaction",[1103,3216,1937],{"class":1929},[1103,3218,3219,3222,3224],{"class":1105,"line":1166},[1103,3220,3221],{"class":1116},"    order_id ",[1103,3223,1303],{"class":1138},[1103,3225,1805],{"class":1804},[1103,3227,3228,3231,3233],{"class":1105,"line":1174},[1103,3229,3230],{"class":1116},"    payment_id ",[1103,3232,1303],{"class":1138},[1103,3234,1805],{"class":1804},[1103,3236,3237],{"class":1105,"line":1182},[1103,3238,1525],{"class":1116},[1103,3240,3241,3244],{"class":1105,"line":1190},[1103,3242,3243],{"class":1268},"    try",[1103,3245,1479],{"class":1138},[1103,3247,3248],{"class":1105,"line":1198},[1103,3249,3250],{"class":1109},"        # Step 1: Create order\n",[1103,3252,3253,3256,3259,3261,3264],{"class":1105,"line":1585},[1103,3254,3255],{"class":1268},"        with",[1103,3257,3258],{"class":1116}," transaction",[1103,3260,1139],{"class":1138},[1103,3262,3263],{"class":1311},"atomic",[1103,3265,3266],{"class":1138},"():\n",[1103,3268,3269,3272,3274,3276,3278,3280,3282,3284,3287,3289,3291,3293,3295,3297],{"class":1105,"line":1601},[1103,3270,3271],{"class":1116},"            order_response ",[1103,3273,1303],{"class":1138},[1103,3275,1630],{"class":1116},[1103,3277,1139],{"class":1138},[1103,3279,1635],{"class":1311},[1103,3281,1315],{"class":1138},[1103,3283,1319],{"class":1318},[1103,3285,3286],{"class":1322},"/api/orders/",[1103,3288,1319],{"class":1318},[1103,3290,1286],{"class":1138},[1103,3292,1665],{"class":1664},[1103,3294,1303],{"class":1138},[1103,3296,3199],{"class":1311},[1103,3298,1673],{"class":1138},[1103,3300,3301,3304,3306,3309],{"class":1105,"line":1616},[1103,3302,3303],{"class":1116},"            order_response",[1103,3305,1139],{"class":1138},[1103,3307,3308],{"class":1311},"raise_for_status",[1103,3310,1796],{"class":1138},[1103,3312,3313,3316,3318,3321,3323,3325,3328,3330,3333,3335],{"class":1105,"line":1622},[1103,3314,3315],{"class":1116},"            order_id ",[1103,3317,1303],{"class":1138},[1103,3319,3320],{"class":1116}," order_response",[1103,3322,1139],{"class":1138},[1103,3324,1793],{"class":1311},[1103,3326,3327],{"class":1138},"()[",[1103,3329,1319],{"class":1318},[1103,3331,3332],{"class":1322},"id",[1103,3334,1319],{"class":1318},[1103,3336,1431],{"class":1138},[1103,3338,3339],{"class":1105,"line":1676},[1103,3340,2908],{"class":1116},[1103,3342,3343],{"class":1105,"line":1697},[1103,3344,3345],{"class":1109},"        # Step 2: Process payment\n",[1103,3347,3348,3351,3353,3355,3358,3360,3363,3365],{"class":1105,"line":1702},[1103,3349,3350],{"class":1116},"        payment_data",[1103,3352,1877],{"class":1138},[1103,3354,1319],{"class":1318},[1103,3356,3357],{"class":1322},"order_id",[1103,3359,1319],{"class":1318},[1103,3361,3362],{"class":1138},"]",[1103,3364,1517],{"class":1138},[1103,3366,3367],{"class":1116}," order_id\n",[1103,3369,3370,3373,3375,3377,3379,3381,3383,3385,3388,3390,3392,3394,3396,3399],{"class":1105,"line":1720},[1103,3371,3372],{"class":1116},"        payment_response ",[1103,3374,1303],{"class":1138},[1103,3376,1630],{"class":1116},[1103,3378,1139],{"class":1138},[1103,3380,1635],{"class":1311},[1103,3382,1315],{"class":1138},[1103,3384,1319],{"class":1318},[1103,3386,3387],{"class":1322},"/api/payments/",[1103,3389,1319],{"class":1318},[1103,3391,1286],{"class":1138},[1103,3393,1665],{"class":1664},[1103,3395,1303],{"class":1138},[1103,3397,3398],{"class":1311},"payment_data",[1103,3400,1673],{"class":1138},[1103,3402,3403,3406,3408,3410],{"class":1105,"line":1764},[1103,3404,3405],{"class":1116},"        payment_response",[1103,3407,1139],{"class":1138},[1103,3409,3308],{"class":1311},[1103,3411,1796],{"class":1138},[1103,3413,3414,3417,3419,3422,3424,3426,3428,3430,3432,3434],{"class":1105,"line":1783},[1103,3415,3416],{"class":1116},"        payment_id ",[1103,3418,1303],{"class":1138},[1103,3420,3421],{"class":1116}," payment_response",[1103,3423,1139],{"class":1138},[1103,3425,1793],{"class":1311},[1103,3427,3327],{"class":1138},[1103,3429,1319],{"class":1318},[1103,3431,3332],{"class":1322},[1103,3433,1319],{"class":1318},[1103,3435,1431],{"class":1138},[1103,3437,3438],{"class":1105,"line":1799},[1103,3439,2908],{"class":1116},[1103,3441,3442],{"class":1105,"line":2108},[1103,3443,3444],{"class":1109},"        # Step 3: Update order status\n",[1103,3446,3447,3450,3452,3455,3457,3459,3462,3464,3466,3468,3471,3473],{"class":1105,"line":2905},[1103,3448,3449],{"class":1116},"        requests",[1103,3451,1139],{"class":1138},[1103,3453,3454],{"class":1311},"patch",[1103,3456,1315],{"class":1138},[1103,3458,1640],{"class":1471},[1103,3460,3461],{"class":1322},"'/api/orders/",[1103,3463,1647],{"class":1646},[1103,3465,3357],{"class":1311},[1103,3467,1656],{"class":1646},[1103,3469,3470],{"class":1322},"/'",[1103,3472,1286],{"class":1138},[1103,3474,3475],{"class":1311}," \n",[1103,3477,3478,3481,3484,3486,3489,3491,3493,3495,3498,3500],{"class":1105,"line":2911},[1103,3479,3480],{"class":1664},"                      json",[1103,3482,3483],{"class":1138},"={",[1103,3485,1319],{"class":1318},[1103,3487,3488],{"class":1322},"status",[1103,3490,1319],{"class":1318},[1103,3492,1577],{"class":1138},[1103,3494,2155],{"class":1318},[1103,3496,3497],{"class":1322},"confirmed",[1103,3499,1319],{"class":1318},[1103,3501,3502],{"class":1138},"})\n",[1103,3504,3505],{"class":1105,"line":2919},[1103,3506,2908],{"class":1116},[1103,3508,3509,3511,3514,3516,3518,3520,3522,3525,3527,3529,3532,3534,3536,3539],{"class":1105,"line":2944},[1103,3510,1679],{"class":1268},[1103,3512,3513],{"class":1138}," {",[1103,3515,1319],{"class":1318},[1103,3517,3357],{"class":1322},[1103,3519,1319],{"class":1318},[1103,3521,1577],{"class":1138},[1103,3523,3524],{"class":1116}," order_id",[1103,3526,1286],{"class":1138},[1103,3528,2155],{"class":1318},[1103,3530,3531],{"class":1322},"payment_id",[1103,3533,1319],{"class":1318},[1103,3535,1577],{"class":1138},[1103,3537,3538],{"class":1116}," payment_id",[1103,3540,2405],{"class":1138},[1103,3542,3543],{"class":1105,"line":2957},[1103,3544,2908],{"class":1116},[1103,3546,3547,3550,3552,3554,3556],{"class":1105,"line":2965},[1103,3548,3549],{"class":1268},"    except",[1103,3551,2891],{"class":1880},[1103,3553,2973],{"class":1268},[1103,3555,2976],{"class":1116},[1103,3557,1479],{"class":1138},[1103,3559,3560],{"class":1105,"line":2981},[1103,3561,3562],{"class":1109},"        # Rollback logic needed\n",[1103,3564,3565,3567,3569],{"class":1105,"line":2993},[1103,3566,1767],{"class":1268},[1103,3568,3524],{"class":1116},[1103,3570,1479],{"class":1138},[1103,3572,3573,3576,3578,3581,3583,3585,3587,3589,3591,3593,3595],{"class":1105,"line":3002},[1103,3574,3575],{"class":1116},"            requests",[1103,3577,1139],{"class":1138},[1103,3579,3580],{"class":1311},"delete",[1103,3582,1315],{"class":1138},[1103,3584,1640],{"class":1471},[1103,3586,3461],{"class":1322},[1103,3588,1647],{"class":1646},[1103,3590,3357],{"class":1311},[1103,3592,1656],{"class":1646},[1103,3594,3470],{"class":1322},[1103,3596,1673],{"class":1138},[1103,3598,3599,3601,3603],{"class":1105,"line":3007},[1103,3600,1767],{"class":1268},[1103,3602,3538],{"class":1116},[1103,3604,1479],{"class":1138},[1103,3606,3607,3609,3611,3613,3615,3617,3620,3622,3624,3626,3628],{"class":1105,"line":3021},[1103,3608,3575],{"class":1116},[1103,3610,1139],{"class":1138},[1103,3612,3580],{"class":1311},[1103,3614,1315],{"class":1138},[1103,3616,1640],{"class":1471},[1103,3618,3619],{"class":1322},"'/api/payments/",[1103,3621,1647],{"class":1646},[1103,3623,3531],{"class":1311},[1103,3625,1656],{"class":1646},[1103,3627,3470],{"class":1322},[1103,3629,1673],{"class":1138},[1103,3631,3632,3635],{"class":1105,"line":3035},[1103,3633,3634],{"class":1268},"        raise",[1103,3636,2999],{"class":1116},[1043,3638,3640],{"id":3639},"_2-network-latency","2. Network Latency",[1026,3642,3643],{},"Inter-service communication adds overhead:",[1093,3645,3647],{"className":1095,"code":3646,"language":1097,"meta":1098,"style":1098},"# Monitoring network latency\nimport time\nimport requests\nfrom django.core.cache import cache\n\ndef get_user_with_caching(user_id):\n    \"\"\"Reduce network calls with caching\"\"\"\n    cache_key = f\"user_{user_id}\"\n    user_data = cache.get(cache_key)\n    \n    if user_data is None:\n        start_time = time.time()\n        response = requests.get(f'/api/users/{user_id}/')\n        end_time = time.time()\n        \n        # Log network latency\n        latency = (end_time - start_time) * 1000\n        print(f\"User service call took {latency:.2f}ms\")\n        \n        user_data = response.json()\n        cache.set(cache_key, user_data, timeout=300)  # Cache for 5 minutes\n    \n    return user_data\n",[1100,3648,3649,3654,3660,3666,3687,3691,3705,3714,3735,3756,3760,3776,3791,3820,3835,3839,3844,3869,3896,3900,3915,3948,3952],{"__ignoreMap":1098},[1103,3650,3651],{"class":1105,"line":1106},[1103,3652,3653],{"class":1109},"# Monitoring network latency\n",[1103,3655,3656,3658],{"class":1105,"line":1113},[1103,3657,1280],{"class":1268},[1103,3659,2584],{"class":1116},[1103,3661,3662,3664],{"class":1105,"line":1124},[1103,3663,1280],{"class":1268},[1103,3665,1455],{"class":1116},[1103,3667,3668,3670,3672,3674,3677,3679,3682,3684],{"class":1105,"line":1132},[1103,3669,1269],{"class":1268},[1103,3671,1272],{"class":1116},[1103,3673,1139],{"class":1138},[1103,3675,3676],{"class":1116},"core",[1103,3678,1139],{"class":1138},[1103,3680,3681],{"class":1116},"cache ",[1103,3683,1280],{"class":1268},[1103,3685,3686],{"class":1116}," cache\n",[1103,3688,3689],{"class":1105,"line":1146},[1103,3690,1295],{"emptyLinePlaceholder":1294},[1103,3692,3693,3695,3698,3700,3703],{"class":1105,"line":1156},[1103,3694,3191],{"class":1471},[1103,3696,3697],{"class":1532}," get_user_with_caching",[1103,3699,1315],{"class":1138},[1103,3701,3702],{"class":1499},"user_id",[1103,3704,1503],{"class":1138},[1103,3706,3707,3709,3712],{"class":1105,"line":1166},[1103,3708,3211],{"class":1929},[1103,3710,3711],{"class":1933},"Reduce network calls with caching",[1103,3713,1937],{"class":1929},[1103,3715,3716,3719,3721,3724,3727,3729,3731,3733],{"class":1105,"line":1174},[1103,3717,3718],{"class":1116},"    cache_key ",[1103,3720,1303],{"class":1138},[1103,3722,3723],{"class":1471}," f",[1103,3725,3726],{"class":1322},"\"user_",[1103,3728,1647],{"class":1646},[1103,3730,3702],{"class":1116},[1103,3732,1656],{"class":1646},[1103,3734,2241],{"class":1322},[1103,3736,3737,3740,3742,3745,3747,3749,3751,3754],{"class":1105,"line":1182},[1103,3738,3739],{"class":1116},"    user_data ",[1103,3741,1303],{"class":1138},[1103,3743,3744],{"class":1116}," cache",[1103,3746,1139],{"class":1138},[1103,3748,1731],{"class":1311},[1103,3750,1315],{"class":1138},[1103,3752,3753],{"class":1311},"cache_key",[1103,3755,1673],{"class":1138},[1103,3757,3758],{"class":1105,"line":1190},[1103,3759,1525],{"class":1116},[1103,3761,3762,3765,3768,3771,3774],{"class":1105,"line":1198},[1103,3763,3764],{"class":1268},"    if",[1103,3766,3767],{"class":1116}," user_data ",[1103,3769,3770],{"class":1120},"is",[1103,3772,3773],{"class":1804}," None",[1103,3775,1479],{"class":1138},[1103,3777,3778,3781,3783,3785,3787,3789],{"class":1105,"line":1585},[1103,3779,3780],{"class":1116},"        start_time ",[1103,3782,1303],{"class":1138},[1103,3784,2830],{"class":1116},[1103,3786,1139],{"class":1138},[1103,3788,2835],{"class":1311},[1103,3790,1796],{"class":1138},[1103,3792,3793,3795,3797,3799,3801,3803,3805,3807,3810,3812,3814,3816,3818],{"class":1105,"line":1601},[1103,3794,1625],{"class":1116},[1103,3796,1303],{"class":1138},[1103,3798,1630],{"class":1116},[1103,3800,1139],{"class":1138},[1103,3802,1731],{"class":1311},[1103,3804,1315],{"class":1138},[1103,3806,1640],{"class":1471},[1103,3808,3809],{"class":1322},"'/api/users/",[1103,3811,1647],{"class":1646},[1103,3813,3702],{"class":1311},[1103,3815,1656],{"class":1646},[1103,3817,3470],{"class":1322},[1103,3819,1673],{"class":1138},[1103,3821,3822,3825,3827,3829,3831,3833],{"class":1105,"line":1616},[1103,3823,3824],{"class":1116},"        end_time ",[1103,3826,1303],{"class":1138},[1103,3828,2830],{"class":1116},[1103,3830,1139],{"class":1138},[1103,3832,2835],{"class":1311},[1103,3834,1796],{"class":1138},[1103,3836,3837],{"class":1105,"line":1622},[1103,3838,2908],{"class":1116},[1103,3840,3841],{"class":1105,"line":1676},[1103,3842,3843],{"class":1109},"        # Log network latency\n",[1103,3845,3846,3849,3851,3854,3857,3859,3862,3864,3866],{"class":1105,"line":1697},[1103,3847,3848],{"class":1116},"        latency ",[1103,3850,1303],{"class":1138},[1103,3852,3853],{"class":1138}," (",[1103,3855,3856],{"class":1116},"end_time ",[1103,3858,2176],{"class":1120},[1103,3860,3861],{"class":1116}," start_time",[1103,3863,1916],{"class":1138},[1103,3865,2788],{"class":1120},[1103,3867,3868],{"class":1693}," 1000\n",[1103,3870,3871,3874,3876,3878,3881,3883,3886,3889,3891,3894],{"class":1105,"line":1702},[1103,3872,3873],{"class":1487},"        print",[1103,3875,1315],{"class":1138},[1103,3877,1640],{"class":1471},[1103,3879,3880],{"class":1322},"\"User service call took ",[1103,3882,1647],{"class":1646},[1103,3884,3885],{"class":1311},"latency",[1103,3887,3888],{"class":1471},":.2f",[1103,3890,1656],{"class":1646},[1103,3892,3893],{"class":1322},"ms\"",[1103,3895,1673],{"class":1138},[1103,3897,3898],{"class":1105,"line":1720},[1103,3899,2908],{"class":1116},[1103,3901,3902,3905,3907,3909,3911,3913],{"class":1105,"line":1764},[1103,3903,3904],{"class":1116},"        user_data ",[1103,3906,1303],{"class":1138},[1103,3908,1682],{"class":1116},[1103,3910,1139],{"class":1138},[1103,3912,1793],{"class":1311},[1103,3914,1796],{"class":1138},[1103,3916,3917,3920,3922,3925,3927,3929,3931,3934,3936,3938,3940,3943,3945],{"class":1105,"line":1783},[1103,3918,3919],{"class":1116},"        cache",[1103,3921,1139],{"class":1138},[1103,3923,3924],{"class":1311},"set",[1103,3926,1315],{"class":1138},[1103,3928,3753],{"class":1311},[1103,3930,1286],{"class":1138},[1103,3932,3933],{"class":1311}," user_data",[1103,3935,1286],{"class":1138},[1103,3937,2682],{"class":1664},[1103,3939,1303],{"class":1138},[1103,3941,3942],{"class":1693},"300",[1103,3944,1916],{"class":1138},[1103,3946,3947],{"class":1109},"  # Cache for 5 minutes\n",[1103,3949,3950],{"class":1105,"line":1799},[1103,3951,1525],{"class":1116},[1103,3953,3954,3957],{"class":1105,"line":2108},[1103,3955,3956],{"class":1268},"    return",[1103,3958,3959],{"class":1116}," user_data\n",[1043,3961,3963],{"id":3962},"_3-data-consistency","3. Data Consistency",[1026,3965,3966],{},"Maintaining consistency across services is challenging:",[1093,3968,3970],{"className":1095,"code":3969,"language":1097,"meta":1098,"style":1098},"# Eventual consistency pattern\nfrom django.db import models\nimport uuid\n\nclass OutboxEvent(models.Model):\n    id = models.UUIDField(primary_key=True, default=uuid.uuid4)\n    aggregate_id = models.CharField(max_length=100)\n    event_type = models.CharField(max_length=100)\n    event_data = models.JSONField()\n    created_at = models.DateTimeField(auto_now_add=True)\n    processed = models.BooleanField(default=False)\n\ndef publish_event(aggregate_id, event_type, event_data):\n    \"\"\"Publish event for eventual consistency\"\"\"\n    OutboxEvent.objects.create(\n        aggregate_id=aggregate_id,\n        event_type=event_type,\n        event_data=event_data\n    )\n",[1100,3971,3972,3977,3992,3999,4003,4022,4064,4090,4113,4129,4154,4179,4183,4207,4216,4234,4245,4257,4267],{"__ignoreMap":1098},[1103,3973,3974],{"class":1105,"line":1106},[1103,3975,3976],{"class":1109},"# Eventual consistency pattern\n",[1103,3978,3979,3981,3983,3985,3987,3989],{"class":1105,"line":1113},[1103,3980,1269],{"class":1268},[1103,3982,1272],{"class":1116},[1103,3984,1139],{"class":1138},[1103,3986,2485],{"class":1116},[1103,3988,1280],{"class":1268},[1103,3990,3991],{"class":1116}," models\n",[1103,3993,3994,3996],{"class":1105,"line":1124},[1103,3995,1280],{"class":1268},[1103,3997,3998],{"class":1116}," uuid\n",[1103,4000,4001],{"class":1105,"line":1132},[1103,4002,1295],{"emptyLinePlaceholder":1294},[1103,4004,4005,4007,4010,4012,4015,4017,4020],{"class":1105,"line":1146},[1103,4006,1472],{"class":1471},[1103,4008,4009],{"class":1475}," OutboxEvent",[1103,4011,1315],{"class":1138},[1103,4013,4014],{"class":2519},"models",[1103,4016,1139],{"class":1138},[1103,4018,4019],{"class":2519},"Model",[1103,4021,1503],{"class":1138},[1103,4023,4024,4027,4029,4032,4034,4037,4039,4042,4044,4047,4049,4052,4054,4057,4059,4062],{"class":1105,"line":1156},[1103,4025,4026],{"class":1487},"    id",[1103,4028,1517],{"class":1138},[1103,4030,4031],{"class":1116}," models",[1103,4033,1139],{"class":1138},[1103,4035,4036],{"class":1311},"UUIDField",[1103,4038,1315],{"class":1138},[1103,4040,4041],{"class":1664},"primary_key",[1103,4043,1303],{"class":1138},[1103,4045,4046],{"class":1804},"True",[1103,4048,1286],{"class":1138},[1103,4050,4051],{"class":1664}," default",[1103,4053,1303],{"class":1138},[1103,4055,4056],{"class":1311},"uuid",[1103,4058,1139],{"class":1138},[1103,4060,4061],{"class":1142},"uuid4",[1103,4063,1673],{"class":1138},[1103,4065,4066,4069,4071,4073,4075,4078,4080,4083,4085,4088],{"class":1105,"line":1166},[1103,4067,4068],{"class":1116},"    aggregate_id ",[1103,4070,1303],{"class":1138},[1103,4072,4031],{"class":1116},[1103,4074,1139],{"class":1138},[1103,4076,4077],{"class":1311},"CharField",[1103,4079,1315],{"class":1138},[1103,4081,4082],{"class":1664},"max_length",[1103,4084,1303],{"class":1138},[1103,4086,4087],{"class":1693},"100",[1103,4089,1673],{"class":1138},[1103,4091,4092,4095,4097,4099,4101,4103,4105,4107,4109,4111],{"class":1105,"line":1174},[1103,4093,4094],{"class":1116},"    event_type ",[1103,4096,1303],{"class":1138},[1103,4098,4031],{"class":1116},[1103,4100,1139],{"class":1138},[1103,4102,4077],{"class":1311},[1103,4104,1315],{"class":1138},[1103,4106,4082],{"class":1664},[1103,4108,1303],{"class":1138},[1103,4110,4087],{"class":1693},[1103,4112,1673],{"class":1138},[1103,4114,4115,4118,4120,4122,4124,4127],{"class":1105,"line":1182},[1103,4116,4117],{"class":1116},"    event_data ",[1103,4119,1303],{"class":1138},[1103,4121,4031],{"class":1116},[1103,4123,1139],{"class":1138},[1103,4125,4126],{"class":1311},"JSONField",[1103,4128,1796],{"class":1138},[1103,4130,4131,4134,4136,4138,4140,4143,4145,4148,4150,4152],{"class":1105,"line":1190},[1103,4132,4133],{"class":1116},"    created_at ",[1103,4135,1303],{"class":1138},[1103,4137,4031],{"class":1116},[1103,4139,1139],{"class":1138},[1103,4141,4142],{"class":1311},"DateTimeField",[1103,4144,1315],{"class":1138},[1103,4146,4147],{"class":1664},"auto_now_add",[1103,4149,1303],{"class":1138},[1103,4151,4046],{"class":1804},[1103,4153,1673],{"class":1138},[1103,4155,4156,4159,4161,4163,4165,4168,4170,4172,4174,4177],{"class":1105,"line":1198},[1103,4157,4158],{"class":1116},"    processed ",[1103,4160,1303],{"class":1138},[1103,4162,4031],{"class":1116},[1103,4164,1139],{"class":1138},[1103,4166,4167],{"class":1311},"BooleanField",[1103,4169,1315],{"class":1138},[1103,4171,2348],{"class":1664},[1103,4173,1303],{"class":1138},[1103,4175,4176],{"class":1804},"False",[1103,4178,1673],{"class":1138},[1103,4180,4181],{"class":1105,"line":1585},[1103,4182,1295],{"emptyLinePlaceholder":1294},[1103,4184,4185,4187,4190,4192,4195,4197,4200,4202,4205],{"class":1105,"line":1601},[1103,4186,3191],{"class":1471},[1103,4188,4189],{"class":1532}," publish_event",[1103,4191,1315],{"class":1138},[1103,4193,4194],{"class":1499},"aggregate_id",[1103,4196,1286],{"class":1138},[1103,4198,4199],{"class":1499}," event_type",[1103,4201,1286],{"class":1138},[1103,4203,4204],{"class":1499}," event_data",[1103,4206,1503],{"class":1138},[1103,4208,4209,4211,4214],{"class":1105,"line":1616},[1103,4210,3211],{"class":1929},[1103,4212,4213],{"class":1933},"Publish event for eventual consistency",[1103,4215,1937],{"class":1929},[1103,4217,4218,4221,4223,4226,4228,4231],{"class":1105,"line":1622},[1103,4219,4220],{"class":1116},"    OutboxEvent",[1103,4222,1139],{"class":1138},[1103,4224,4225],{"class":1142},"objects",[1103,4227,1139],{"class":1138},[1103,4229,4230],{"class":1311},"create",[1103,4232,4233],{"class":1138},"(\n",[1103,4235,4236,4239,4241,4243],{"class":1105,"line":1676},[1103,4237,4238],{"class":1664},"        aggregate_id",[1103,4240,1303],{"class":1138},[1103,4242,4194],{"class":1311},[1103,4244,1582],{"class":1138},[1103,4246,4247,4250,4252,4255],{"class":1105,"line":1697},[1103,4248,4249],{"class":1664},"        event_type",[1103,4251,1303],{"class":1138},[1103,4253,4254],{"class":1311},"event_type",[1103,4256,1582],{"class":1138},[1103,4258,4259,4262,4264],{"class":1105,"line":1702},[1103,4260,4261],{"class":1664},"        event_data",[1103,4263,1303],{"class":1138},[1103,4265,4266],{"class":1311},"event_data\n",[1103,4268,4269],{"class":1105,"line":1720},[1103,4270,4271],{"class":1138},"    )\n",[1030,4273,4275],{"id":4274},"types-of-microservices","Types of Microservices",[1043,4277,4279],{"id":4278},"_1-business-microservices","1. Business Microservices",[1026,4281,4282],{},"Focus on specific business capabilities:",[1093,4284,4286],{"className":1095,"code":4285,"language":1097,"meta":1098,"style":1098},"# User Management Service\nclass UserService:\n    def create_user(self, user_data):\n        # User creation logic\n        pass\n    \n    def authenticate_user(self, credentials):\n        # Authentication logic\n        pass\n    \n    def get_user_profile(self, user_id):\n        # Profile retrieval logic\n        pass\n",[1100,4287,4288,4293,4302,4319,4324,4329,4333,4351,4356,4360,4364,4382,4387],{"__ignoreMap":1098},[1103,4289,4290],{"class":1105,"line":1106},[1103,4291,4292],{"class":1109},"# User Management Service\n",[1103,4294,4295,4297,4300],{"class":1105,"line":1113},[1103,4296,1472],{"class":1471},[1103,4298,4299],{"class":1475}," UserService",[1103,4301,1479],{"class":1138},[1103,4303,4304,4306,4309,4311,4313,4315,4317],{"class":1105,"line":1124},[1103,4305,1484],{"class":1471},[1103,4307,4308],{"class":1532}," create_user",[1103,4310,1315],{"class":1138},[1103,4312,1494],{"class":1493},[1103,4314,1286],{"class":1138},[1103,4316,3933],{"class":1499},[1103,4318,1503],{"class":1138},[1103,4320,4321],{"class":1105,"line":1132},[1103,4322,4323],{"class":1109},"        # User creation logic\n",[1103,4325,4326],{"class":1105,"line":1146},[1103,4327,4328],{"class":1268},"        pass\n",[1103,4330,4331],{"class":1105,"line":1156},[1103,4332,1525],{"class":1116},[1103,4334,4335,4337,4340,4342,4344,4346,4349],{"class":1105,"line":1166},[1103,4336,1484],{"class":1471},[1103,4338,4339],{"class":1532}," authenticate_user",[1103,4341,1315],{"class":1138},[1103,4343,1494],{"class":1493},[1103,4345,1286],{"class":1138},[1103,4347,4348],{"class":1499}," credentials",[1103,4350,1503],{"class":1138},[1103,4352,4353],{"class":1105,"line":1174},[1103,4354,4355],{"class":1109},"        # Authentication logic\n",[1103,4357,4358],{"class":1105,"line":1182},[1103,4359,4328],{"class":1268},[1103,4361,4362],{"class":1105,"line":1190},[1103,4363,1525],{"class":1116},[1103,4365,4366,4368,4371,4373,4375,4377,4380],{"class":1105,"line":1198},[1103,4367,1484],{"class":1471},[1103,4369,4370],{"class":1532}," get_user_profile",[1103,4372,1315],{"class":1138},[1103,4374,1494],{"class":1493},[1103,4376,1286],{"class":1138},[1103,4378,4379],{"class":1499}," user_id",[1103,4381,1503],{"class":1138},[1103,4383,4384],{"class":1105,"line":1585},[1103,4385,4386],{"class":1109},"        # Profile retrieval logic\n",[1103,4388,4389],{"class":1105,"line":1601},[1103,4390,4328],{"class":1268},[1043,4392,4394],{"id":4393},"_2-data-microservices","2. Data Microservices",[1026,4396,4397],{},"Manage specific data domains:",[1093,4399,4401],{"className":1095,"code":4400,"language":1097,"meta":1098,"style":1098},"# Product Catalog Service\nfrom django.db import models\n\nclass Product(models.Model):\n    name = models.CharField(max_length=200)\n    description = models.TextField()\n    price = models.DecimalField(max_digits=10, decimal_places=2)\n    category = models.ForeignKey('Category', on_delete=models.CASCADE)\n    \nclass Category(models.Model):\n    name = models.CharField(max_length=100)\n    parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE)\n",[1100,4402,4403,4408,4422,4426,4443,4467,4483,4519,4558,4562,4579,4601],{"__ignoreMap":1098},[1103,4404,4405],{"class":1105,"line":1106},[1103,4406,4407],{"class":1109},"# Product Catalog Service\n",[1103,4409,4410,4412,4414,4416,4418,4420],{"class":1105,"line":1113},[1103,4411,1269],{"class":1268},[1103,4413,1272],{"class":1116},[1103,4415,1139],{"class":1138},[1103,4417,2485],{"class":1116},[1103,4419,1280],{"class":1268},[1103,4421,3991],{"class":1116},[1103,4423,4424],{"class":1105,"line":1124},[1103,4425,1295],{"emptyLinePlaceholder":1294},[1103,4427,4428,4430,4433,4435,4437,4439,4441],{"class":1105,"line":1132},[1103,4429,1472],{"class":1471},[1103,4431,4432],{"class":1475}," Product",[1103,4434,1315],{"class":1138},[1103,4436,4014],{"class":2519},[1103,4438,1139],{"class":1138},[1103,4440,4019],{"class":2519},[1103,4442,1503],{"class":1138},[1103,4444,4445,4448,4450,4452,4454,4456,4458,4460,4462,4465],{"class":1105,"line":1146},[1103,4446,4447],{"class":1116},"    name ",[1103,4449,1303],{"class":1138},[1103,4451,4031],{"class":1116},[1103,4453,1139],{"class":1138},[1103,4455,4077],{"class":1311},[1103,4457,1315],{"class":1138},[1103,4459,4082],{"class":1664},[1103,4461,1303],{"class":1138},[1103,4463,4464],{"class":1693},"200",[1103,4466,1673],{"class":1138},[1103,4468,4469,4472,4474,4476,4478,4481],{"class":1105,"line":1156},[1103,4470,4471],{"class":1116},"    description ",[1103,4473,1303],{"class":1138},[1103,4475,4031],{"class":1116},[1103,4477,1139],{"class":1138},[1103,4479,4480],{"class":1311},"TextField",[1103,4482,1796],{"class":1138},[1103,4484,4485,4488,4490,4492,4494,4497,4499,4502,4504,4507,4509,4512,4514,4517],{"class":1105,"line":1166},[1103,4486,4487],{"class":1116},"    price ",[1103,4489,1303],{"class":1138},[1103,4491,4031],{"class":1116},[1103,4493,1139],{"class":1138},[1103,4495,4496],{"class":1311},"DecimalField",[1103,4498,1315],{"class":1138},[1103,4500,4501],{"class":1664},"max_digits",[1103,4503,1303],{"class":1138},[1103,4505,4506],{"class":1693},"10",[1103,4508,1286],{"class":1138},[1103,4510,4511],{"class":1664}," decimal_places",[1103,4513,1303],{"class":1138},[1103,4515,4516],{"class":1693},"2",[1103,4518,1673],{"class":1138},[1103,4520,4521,4524,4526,4528,4530,4533,4535,4537,4540,4542,4544,4547,4549,4551,4553,4556],{"class":1105,"line":1174},[1103,4522,4523],{"class":1116},"    category ",[1103,4525,1303],{"class":1138},[1103,4527,4031],{"class":1116},[1103,4529,1139],{"class":1138},[1103,4531,4532],{"class":1311},"ForeignKey",[1103,4534,1315],{"class":1138},[1103,4536,1319],{"class":1318},[1103,4538,4539],{"class":1322},"Category",[1103,4541,1319],{"class":1318},[1103,4543,1286],{"class":1138},[1103,4545,4546],{"class":1664}," on_delete",[1103,4548,1303],{"class":1138},[1103,4550,4014],{"class":1311},[1103,4552,1139],{"class":1138},[1103,4554,4555],{"class":2762},"CASCADE",[1103,4557,1673],{"class":1138},[1103,4559,4560],{"class":1105,"line":1182},[1103,4561,1525],{"class":1116},[1103,4563,4564,4566,4569,4571,4573,4575,4577],{"class":1105,"line":1190},[1103,4565,1472],{"class":1471},[1103,4567,4568],{"class":1475}," Category",[1103,4570,1315],{"class":1138},[1103,4572,4014],{"class":2519},[1103,4574,1139],{"class":1138},[1103,4576,4019],{"class":2519},[1103,4578,1503],{"class":1138},[1103,4580,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599],{"class":1105,"line":1198},[1103,4582,4447],{"class":1116},[1103,4584,1303],{"class":1138},[1103,4586,4031],{"class":1116},[1103,4588,1139],{"class":1138},[1103,4590,4077],{"class":1311},[1103,4592,1315],{"class":1138},[1103,4594,4082],{"class":1664},[1103,4596,1303],{"class":1138},[1103,4598,4087],{"class":1693},[1103,4600,1673],{"class":1138},[1103,4602,4603,4606,4608,4610,4612,4614,4616,4618,4620,4622,4624,4627,4629,4631,4633,4636,4638,4640,4642,4644,4646,4648,4650,4652],{"class":1105,"line":1585},[1103,4604,4605],{"class":1116},"    parent ",[1103,4607,1303],{"class":1138},[1103,4609,4031],{"class":1116},[1103,4611,1139],{"class":1138},[1103,4613,4532],{"class":1311},[1103,4615,1315],{"class":1138},[1103,4617,1319],{"class":1318},[1103,4619,1494],{"class":1322},[1103,4621,1319],{"class":1318},[1103,4623,1286],{"class":1138},[1103,4625,4626],{"class":1664}," null",[1103,4628,1303],{"class":1138},[1103,4630,4046],{"class":1804},[1103,4632,1286],{"class":1138},[1103,4634,4635],{"class":1664}," blank",[1103,4637,1303],{"class":1138},[1103,4639,4046],{"class":1804},[1103,4641,1286],{"class":1138},[1103,4643,4546],{"class":1664},[1103,4645,1303],{"class":1138},[1103,4647,4014],{"class":1311},[1103,4649,1139],{"class":1138},[1103,4651,4555],{"class":2762},[1103,4653,1673],{"class":1138},[1043,4655,4657],{"id":4656},"_3-integration-microservices","3. Integration Microservices",[1026,4659,4660],{},"Handle external system integration:",[1093,4662,4664],{"className":1095,"code":4663,"language":1097,"meta":1098,"style":1098},"# Payment Gateway Service\nimport stripe\nfrom django.conf import settings\n\nclass PaymentGatewayService:\n    def __init__(self):\n        stripe.api_key = settings.STRIPE_SECRET_KEY\n    \n    def process_payment(self, amount, currency, payment_method):\n        try:\n            intent = stripe.PaymentIntent.create(\n                amount=amount,\n                currency=currency,\n                payment_method=payment_method,\n                confirm=True\n            )\n            return {'status': 'success', 'transaction_id': intent.id}\n        except stripe.error.StripeError as e:\n            return {'status': 'error', 'message': str(e)}\n",[1100,4665,4666,4671,4678,4694,4698,4707,4719,4739,4743,4771,4777,4798,4810,4822,4834,4844,4849,4890,4912],{"__ignoreMap":1098},[1103,4667,4668],{"class":1105,"line":1106},[1103,4669,4670],{"class":1109},"# Payment Gateway Service\n",[1103,4672,4673,4675],{"class":1105,"line":1113},[1103,4674,1280],{"class":1268},[1103,4676,4677],{"class":1116}," stripe\n",[1103,4679,4680,4682,4684,4686,4689,4691],{"class":1105,"line":1124},[1103,4681,1269],{"class":1268},[1103,4683,1272],{"class":1116},[1103,4685,1139],{"class":1138},[1103,4687,4688],{"class":1116},"conf ",[1103,4690,1280],{"class":1268},[1103,4692,4693],{"class":1116}," settings\n",[1103,4695,4696],{"class":1105,"line":1132},[1103,4697,1295],{"emptyLinePlaceholder":1294},[1103,4699,4700,4702,4705],{"class":1105,"line":1146},[1103,4701,1472],{"class":1471},[1103,4703,4704],{"class":1475}," PaymentGatewayService",[1103,4706,1479],{"class":1138},[1103,4708,4709,4711,4713,4715,4717],{"class":1105,"line":1156},[1103,4710,1484],{"class":1471},[1103,4712,1488],{"class":1487},[1103,4714,1315],{"class":1138},[1103,4716,1494],{"class":1493},[1103,4718,1503],{"class":1138},[1103,4720,4721,4724,4726,4729,4731,4734,4736],{"class":1105,"line":1166},[1103,4722,4723],{"class":1116},"        stripe",[1103,4725,1139],{"class":1138},[1103,4727,4728],{"class":1142},"api_key",[1103,4730,1517],{"class":1138},[1103,4732,4733],{"class":1116}," settings",[1103,4735,1139],{"class":1138},[1103,4737,4738],{"class":2762},"STRIPE_SECRET_KEY\n",[1103,4740,4741],{"class":1105,"line":1174},[1103,4742,1525],{"class":1116},[1103,4744,4745,4747,4750,4752,4754,4756,4759,4761,4764,4766,4769],{"class":1105,"line":1182},[1103,4746,1484],{"class":1471},[1103,4748,4749],{"class":1532}," process_payment",[1103,4751,1315],{"class":1138},[1103,4753,1494],{"class":1493},[1103,4755,1286],{"class":1138},[1103,4757,4758],{"class":1499}," amount",[1103,4760,1286],{"class":1138},[1103,4762,4763],{"class":1499}," currency",[1103,4765,1286],{"class":1138},[1103,4767,4768],{"class":1499}," payment_method",[1103,4770,1503],{"class":1138},[1103,4772,4773,4775],{"class":1105,"line":1190},[1103,4774,2914],{"class":1268},[1103,4776,1479],{"class":1138},[1103,4778,4779,4782,4784,4787,4789,4792,4794,4796],{"class":1105,"line":1198},[1103,4780,4781],{"class":1116},"            intent ",[1103,4783,1303],{"class":1138},[1103,4785,4786],{"class":1116}," stripe",[1103,4788,1139],{"class":1138},[1103,4790,4791],{"class":1142},"PaymentIntent",[1103,4793,1139],{"class":1138},[1103,4795,4230],{"class":1311},[1103,4797,4233],{"class":1138},[1103,4799,4800,4803,4805,4808],{"class":1105,"line":1585},[1103,4801,4802],{"class":1664},"                amount",[1103,4804,1303],{"class":1138},[1103,4806,4807],{"class":1311},"amount",[1103,4809,1582],{"class":1138},[1103,4811,4812,4815,4817,4820],{"class":1105,"line":1601},[1103,4813,4814],{"class":1664},"                currency",[1103,4816,1303],{"class":1138},[1103,4818,4819],{"class":1311},"currency",[1103,4821,1582],{"class":1138},[1103,4823,4824,4827,4829,4832],{"class":1105,"line":1616},[1103,4825,4826],{"class":1664},"                payment_method",[1103,4828,1303],{"class":1138},[1103,4830,4831],{"class":1311},"payment_method",[1103,4833,1582],{"class":1138},[1103,4835,4836,4839,4841],{"class":1105,"line":1622},[1103,4837,4838],{"class":1664},"                confirm",[1103,4840,1303],{"class":1138},[1103,4842,4843],{"class":1804},"True\n",[1103,4845,4846],{"class":1105,"line":1676},[1103,4847,4848],{"class":1138},"            )\n",[1103,4850,4851,4853,4855,4857,4859,4861,4863,4865,4868,4870,4872,4874,4877,4879,4881,4884,4886,4888],{"class":1105,"line":1697},[1103,4852,1786],{"class":1268},[1103,4854,3513],{"class":1138},[1103,4856,1319],{"class":1318},[1103,4858,3488],{"class":1322},[1103,4860,1319],{"class":1318},[1103,4862,1577],{"class":1138},[1103,4864,2155],{"class":1318},[1103,4866,4867],{"class":1322},"success",[1103,4869,1319],{"class":1318},[1103,4871,1286],{"class":1138},[1103,4873,2155],{"class":1318},[1103,4875,4876],{"class":1322},"transaction_id",[1103,4878,1319],{"class":1318},[1103,4880,1577],{"class":1138},[1103,4882,4883],{"class":1116}," intent",[1103,4885,1139],{"class":1138},[1103,4887,3332],{"class":1142},[1103,4889,2405],{"class":1138},[1103,4891,4892,4894,4896,4898,4901,4903,4906,4908,4910],{"class":1105,"line":1702},[1103,4893,2968],{"class":1268},[1103,4895,4786],{"class":1116},[1103,4897,1139],{"class":1138},[1103,4899,4900],{"class":1142},"error",[1103,4902,1139],{"class":1138},[1103,4904,4905],{"class":1142},"StripeError",[1103,4907,2973],{"class":1268},[1103,4909,2976],{"class":1116},[1103,4911,1479],{"class":1138},[1103,4913,4914,4916,4918,4920,4922,4924,4926,4928,4930,4932,4934,4936,4939,4941,4943,4945,4947,4950],{"class":1105,"line":1720},[1103,4915,1786],{"class":1268},[1103,4917,3513],{"class":1138},[1103,4919,1319],{"class":1318},[1103,4921,3488],{"class":1322},[1103,4923,1319],{"class":1318},[1103,4925,1577],{"class":1138},[1103,4927,2155],{"class":1318},[1103,4929,4900],{"class":1322},[1103,4931,1319],{"class":1318},[1103,4933,1286],{"class":1138},[1103,4935,2155],{"class":1318},[1103,4937,4938],{"class":1322},"message",[1103,4940,1319],{"class":1318},[1103,4942,1577],{"class":1138},[1103,4944,1922],{"class":1880},[1103,4946,1315],{"class":1138},[1103,4948,4949],{"class":1311},"e",[1103,4951,4952],{"class":1138},")}\n",[1030,4954,4956],{"id":4955},"designing-microservices","Designing Microservices",[1043,4958,4960],{"id":4959},"_1-domain-driven-design-ddd","1. Domain-Driven Design (DDD)",[1026,4962,4963],{},"Identify bounded contexts:",[1093,4965,4967],{"className":1095,"code":4966,"language":1097,"meta":1098,"style":1098},"# E-commerce bounded contexts\n\"\"\"\nUser Management Context:\n- User registration\n- Authentication\n- Profile management\n\nProduct Catalog Context:\n- Product information\n- Categories\n- Inventory\n\nOrder Management Context:\n- Order creation\n- Order tracking\n- Order history\n\nPayment Context:\n- Payment processing\n- Refunds\n- Payment methods\n\"\"\"\n",[1100,4968,4969,4974,4978,4983,4988,4993,4998,5002,5007,5012,5017,5022,5026,5031,5036,5041,5046,5050,5055,5060,5065,5070],{"__ignoreMap":1098},[1103,4970,4971],{"class":1105,"line":1106},[1103,4972,4973],{"class":1109},"# E-commerce bounded contexts\n",[1103,4975,4976],{"class":1105,"line":1113},[1103,4977,1937],{"class":1929},[1103,4979,4980],{"class":1105,"line":1124},[1103,4981,4982],{"class":1933},"User Management Context:\n",[1103,4984,4985],{"class":1105,"line":1132},[1103,4986,4987],{"class":1933},"- User registration\n",[1103,4989,4990],{"class":1105,"line":1146},[1103,4991,4992],{"class":1933},"- Authentication\n",[1103,4994,4995],{"class":1105,"line":1156},[1103,4996,4997],{"class":1933},"- Profile management\n",[1103,4999,5000],{"class":1105,"line":1166},[1103,5001,1295],{"emptyLinePlaceholder":1294},[1103,5003,5004],{"class":1105,"line":1174},[1103,5005,5006],{"class":1933},"Product Catalog Context:\n",[1103,5008,5009],{"class":1105,"line":1182},[1103,5010,5011],{"class":1933},"- Product information\n",[1103,5013,5014],{"class":1105,"line":1190},[1103,5015,5016],{"class":1933},"- Categories\n",[1103,5018,5019],{"class":1105,"line":1198},[1103,5020,5021],{"class":1933},"- Inventory\n",[1103,5023,5024],{"class":1105,"line":1585},[1103,5025,1295],{"emptyLinePlaceholder":1294},[1103,5027,5028],{"class":1105,"line":1601},[1103,5029,5030],{"class":1933},"Order Management Context:\n",[1103,5032,5033],{"class":1105,"line":1616},[1103,5034,5035],{"class":1933},"- Order creation\n",[1103,5037,5038],{"class":1105,"line":1622},[1103,5039,5040],{"class":1933},"- Order tracking\n",[1103,5042,5043],{"class":1105,"line":1676},[1103,5044,5045],{"class":1933},"- Order history\n",[1103,5047,5048],{"class":1105,"line":1697},[1103,5049,1295],{"emptyLinePlaceholder":1294},[1103,5051,5052],{"class":1105,"line":1702},[1103,5053,5054],{"class":1933},"Payment Context:\n",[1103,5056,5057],{"class":1105,"line":1720},[1103,5058,5059],{"class":1933},"- Payment processing\n",[1103,5061,5062],{"class":1105,"line":1764},[1103,5063,5064],{"class":1933},"- Refunds\n",[1103,5066,5067],{"class":1105,"line":1783},[1103,5068,5069],{"class":1933},"- Payment methods\n",[1103,5071,5072],{"class":1105,"line":1799},[1103,5073,1937],{"class":1929},[1043,5075,5077],{"id":5076},"_2-service-boundaries","2. Service Boundaries",[1026,5079,5080],{},"Define clear service boundaries:",[1093,5082,5084],{"className":1095,"code":5083,"language":1097,"meta":1098,"style":1098},"# Clear service boundaries\nclass UserService:\n    \"\"\"Handles all user-related operations\"\"\"\n    def register_user(self, user_data): pass\n    def authenticate_user(self, credentials): pass\n    def update_profile(self, user_id, profile_data): pass\n\nclass OrderService:\n    \"\"\"Handles all order-related operations\"\"\"\n    def create_order(self, order_data): pass\n    def get_order_status(self, order_id): pass\n    def cancel_order(self, order_id): pass\n\n# Avoid cross-service dependencies\n# BAD: OrderService directly accessing User database\n# GOOD: OrderService calling UserService API\n",[1100,5085,5086,5091,5099,5108,5129,5147,5171,5175,5184,5193,5213,5232,5251,5255,5260,5265],{"__ignoreMap":1098},[1103,5087,5088],{"class":1105,"line":1106},[1103,5089,5090],{"class":1109},"# Clear service boundaries\n",[1103,5092,5093,5095,5097],{"class":1105,"line":1113},[1103,5094,1472],{"class":1471},[1103,5096,4299],{"class":1475},[1103,5098,1479],{"class":1138},[1103,5100,5101,5103,5106],{"class":1105,"line":1124},[1103,5102,3211],{"class":1929},[1103,5104,5105],{"class":1933},"Handles all user-related operations",[1103,5107,1937],{"class":1929},[1103,5109,5110,5112,5115,5117,5119,5121,5123,5126],{"class":1105,"line":1132},[1103,5111,1484],{"class":1471},[1103,5113,5114],{"class":1532}," register_user",[1103,5116,1315],{"class":1138},[1103,5118,1494],{"class":1493},[1103,5120,1286],{"class":1138},[1103,5122,3933],{"class":1499},[1103,5124,5125],{"class":1138},"):",[1103,5127,5128],{"class":1268}," pass\n",[1103,5130,5131,5133,5135,5137,5139,5141,5143,5145],{"class":1105,"line":1146},[1103,5132,1484],{"class":1471},[1103,5134,4339],{"class":1532},[1103,5136,1315],{"class":1138},[1103,5138,1494],{"class":1493},[1103,5140,1286],{"class":1138},[1103,5142,4348],{"class":1499},[1103,5144,5125],{"class":1138},[1103,5146,5128],{"class":1268},[1103,5148,5149,5151,5154,5156,5158,5160,5162,5164,5167,5169],{"class":1105,"line":1156},[1103,5150,1484],{"class":1471},[1103,5152,5153],{"class":1532}," update_profile",[1103,5155,1315],{"class":1138},[1103,5157,1494],{"class":1493},[1103,5159,1286],{"class":1138},[1103,5161,4379],{"class":1499},[1103,5163,1286],{"class":1138},[1103,5165,5166],{"class":1499}," profile_data",[1103,5168,5125],{"class":1138},[1103,5170,5128],{"class":1268},[1103,5172,5173],{"class":1105,"line":1166},[1103,5174,1295],{"emptyLinePlaceholder":1294},[1103,5176,5177,5179,5182],{"class":1105,"line":1174},[1103,5178,1472],{"class":1471},[1103,5180,5181],{"class":1475}," OrderService",[1103,5183,1479],{"class":1138},[1103,5185,5186,5188,5191],{"class":1105,"line":1182},[1103,5187,3211],{"class":1929},[1103,5189,5190],{"class":1933},"Handles all order-related operations",[1103,5192,1937],{"class":1929},[1103,5194,5195,5197,5200,5202,5204,5206,5209,5211],{"class":1105,"line":1190},[1103,5196,1484],{"class":1471},[1103,5198,5199],{"class":1532}," create_order",[1103,5201,1315],{"class":1138},[1103,5203,1494],{"class":1493},[1103,5205,1286],{"class":1138},[1103,5207,5208],{"class":1499}," order_data",[1103,5210,5125],{"class":1138},[1103,5212,5128],{"class":1268},[1103,5214,5215,5217,5220,5222,5224,5226,5228,5230],{"class":1105,"line":1198},[1103,5216,1484],{"class":1471},[1103,5218,5219],{"class":1532}," get_order_status",[1103,5221,1315],{"class":1138},[1103,5223,1494],{"class":1493},[1103,5225,1286],{"class":1138},[1103,5227,3524],{"class":1499},[1103,5229,5125],{"class":1138},[1103,5231,5128],{"class":1268},[1103,5233,5234,5236,5239,5241,5243,5245,5247,5249],{"class":1105,"line":1585},[1103,5235,1484],{"class":1471},[1103,5237,5238],{"class":1532}," cancel_order",[1103,5240,1315],{"class":1138},[1103,5242,1494],{"class":1493},[1103,5244,1286],{"class":1138},[1103,5246,3524],{"class":1499},[1103,5248,5125],{"class":1138},[1103,5250,5128],{"class":1268},[1103,5252,5253],{"class":1105,"line":1601},[1103,5254,1295],{"emptyLinePlaceholder":1294},[1103,5256,5257],{"class":1105,"line":1616},[1103,5258,5259],{"class":1109},"# Avoid cross-service dependencies\n",[1103,5261,5262],{"class":1105,"line":1622},[1103,5263,5264],{"class":1109},"# BAD: OrderService directly accessing User database\n",[1103,5266,5267],{"class":1105,"line":1676},[1103,5268,5269],{"class":1109},"# GOOD: OrderService calling UserService API\n",[1043,5271,5273],{"id":5272},"_3-data-ownership","3. Data Ownership",[1026,5275,5276],{},"Each service owns its data:",[1093,5278,5280],{"className":1095,"code":5279,"language":1097,"meta":1098,"style":1098},"# Service-specific databases\n# User Service\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'user_service_db',\n    }\n}\n\n# Order Service\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'order_service_db',\n    }\n}\n",[1100,5281,5282,5287,5292,5300,5312,5330,5349,5353,5357,5361,5366,5374,5386,5404,5423,5427],{"__ignoreMap":1098},[1103,5283,5284],{"class":1105,"line":1106},[1103,5285,5286],{"class":1109},"# Service-specific databases\n",[1103,5288,5289],{"class":1105,"line":1113},[1103,5290,5291],{"class":1109},"# User Service\n",[1103,5293,5294,5296,5298],{"class":1105,"line":1124},[1103,5295,2336],{"class":1508},[1103,5297,1517],{"class":1138},[1103,5299,1564],{"class":1138},[1103,5301,5302,5304,5306,5308,5310],{"class":1105,"line":1132},[1103,5303,2345],{"class":1318},[1103,5305,2348],{"class":1322},[1103,5307,1319],{"class":1318},[1103,5309,1577],{"class":1138},[1103,5311,1564],{"class":1138},[1103,5313,5314,5316,5318,5320,5322,5324,5326,5328],{"class":1105,"line":1146},[1103,5315,2359],{"class":1318},[1103,5317,2362],{"class":1322},[1103,5319,1319],{"class":1318},[1103,5321,1577],{"class":1138},[1103,5323,2155],{"class":1318},[1103,5325,2371],{"class":1322},[1103,5327,1319],{"class":1318},[1103,5329,1582],{"class":1138},[1103,5331,5332,5334,5336,5338,5340,5342,5345,5347],{"class":1105,"line":1156},[1103,5333,2359],{"class":1318},[1103,5335,2382],{"class":1322},[1103,5337,1319],{"class":1318},[1103,5339,1577],{"class":1138},[1103,5341,2155],{"class":1318},[1103,5343,5344],{"class":1322},"user_service_db",[1103,5346,1319],{"class":1318},[1103,5348,1582],{"class":1138},[1103,5350,5351],{"class":1105,"line":1166},[1103,5352,2400],{"class":1138},[1103,5354,5355],{"class":1105,"line":1174},[1103,5356,2405],{"class":1138},[1103,5358,5359],{"class":1105,"line":1182},[1103,5360,1295],{"emptyLinePlaceholder":1294},[1103,5362,5363],{"class":1105,"line":1190},[1103,5364,5365],{"class":1109},"# Order Service\n",[1103,5367,5368,5370,5372],{"class":1105,"line":1198},[1103,5369,2336],{"class":1508},[1103,5371,1517],{"class":1138},[1103,5373,1564],{"class":1138},[1103,5375,5376,5378,5380,5382,5384],{"class":1105,"line":1585},[1103,5377,2345],{"class":1318},[1103,5379,2348],{"class":1322},[1103,5381,1319],{"class":1318},[1103,5383,1577],{"class":1138},[1103,5385,1564],{"class":1138},[1103,5387,5388,5390,5392,5394,5396,5398,5400,5402],{"class":1105,"line":1601},[1103,5389,2359],{"class":1318},[1103,5391,2362],{"class":1322},[1103,5393,1319],{"class":1318},[1103,5395,1577],{"class":1138},[1103,5397,2155],{"class":1318},[1103,5399,2371],{"class":1322},[1103,5401,1319],{"class":1318},[1103,5403,1582],{"class":1138},[1103,5405,5406,5408,5410,5412,5414,5416,5419,5421],{"class":1105,"line":1616},[1103,5407,2359],{"class":1318},[1103,5409,2382],{"class":1322},[1103,5411,1319],{"class":1318},[1103,5413,1577],{"class":1138},[1103,5415,2155],{"class":1318},[1103,5417,5418],{"class":1322},"order_service_db",[1103,5420,1319],{"class":1318},[1103,5422,1582],{"class":1138},[1103,5424,5425],{"class":1105,"line":1622},[1103,5426,2400],{"class":1138},[1103,5428,5429],{"class":1105,"line":1676},[1103,5430,2405],{"class":1138},[1030,5432,5434],{"id":5433},"communication-patterns","Communication Patterns",[1043,5436,5438],{"id":5437},"_1-synchronous-communication","1. Synchronous Communication",[1026,5440,5441],{},"Direct API calls between services:",[1093,5443,5445],{"className":1095,"code":5444,"language":1097,"meta":1098,"style":1098},"# Synchronous service communication\nimport requests\nfrom django.conf import settings\n\nclass OrderService:\n    def create_order(self, order_data):\n        # Validate user exists\n        user_response = requests.get(\n            f\"{settings.USER_SERVICE_URL}/users/{order_data['user_id']}/\"\n        )\n        if user_response.status_code != 200:\n            raise ValueError(\"User not found\")\n        \n        # Create order\n        order = Order.objects.create(**order_data)\n        return order\n",[1100,5446,5447,5452,5458,5472,5476,5484,5500,5505,5520,5561,5566,5584,5602,5606,5611,5638],{"__ignoreMap":1098},[1103,5448,5449],{"class":1105,"line":1106},[1103,5450,5451],{"class":1109},"# Synchronous service communication\n",[1103,5453,5454,5456],{"class":1105,"line":1113},[1103,5455,1280],{"class":1268},[1103,5457,1455],{"class":1116},[1103,5459,5460,5462,5464,5466,5468,5470],{"class":1105,"line":1124},[1103,5461,1269],{"class":1268},[1103,5463,1272],{"class":1116},[1103,5465,1139],{"class":1138},[1103,5467,4688],{"class":1116},[1103,5469,1280],{"class":1268},[1103,5471,4693],{"class":1116},[1103,5473,5474],{"class":1105,"line":1132},[1103,5475,1295],{"emptyLinePlaceholder":1294},[1103,5477,5478,5480,5482],{"class":1105,"line":1146},[1103,5479,1472],{"class":1471},[1103,5481,5181],{"class":1475},[1103,5483,1479],{"class":1138},[1103,5485,5486,5488,5490,5492,5494,5496,5498],{"class":1105,"line":1156},[1103,5487,1484],{"class":1471},[1103,5489,5199],{"class":1532},[1103,5491,1315],{"class":1138},[1103,5493,1494],{"class":1493},[1103,5495,1286],{"class":1138},[1103,5497,5208],{"class":1499},[1103,5499,1503],{"class":1138},[1103,5501,5502],{"class":1105,"line":1166},[1103,5503,5504],{"class":1109},"        # Validate user exists\n",[1103,5506,5507,5510,5512,5514,5516,5518],{"class":1105,"line":1174},[1103,5508,5509],{"class":1116},"        user_response ",[1103,5511,1303],{"class":1138},[1103,5513,1630],{"class":1116},[1103,5515,1139],{"class":1138},[1103,5517,1731],{"class":1311},[1103,5519,4233],{"class":1138},[1103,5521,5522,5525,5527,5529,5532,5534,5537,5539,5542,5544,5546,5548,5550,5552,5554,5556,5558],{"class":1105,"line":1182},[1103,5523,5524],{"class":1471},"            f",[1103,5526,1643],{"class":1322},[1103,5528,1647],{"class":1646},[1103,5530,5531],{"class":1311},"settings",[1103,5533,1139],{"class":1138},[1103,5535,5536],{"class":2762},"USER_SERVICE_URL",[1103,5538,1656],{"class":1646},[1103,5540,5541],{"class":1322},"/users/",[1103,5543,1647],{"class":1646},[1103,5545,3199],{"class":1311},[1103,5547,1877],{"class":1138},[1103,5549,1319],{"class":1318},[1103,5551,3702],{"class":1322},[1103,5553,1319],{"class":1318},[1103,5555,3362],{"class":1138},[1103,5557,1656],{"class":1646},[1103,5559,5560],{"class":1322},"/\"\n",[1103,5562,5563],{"class":1105,"line":1190},[1103,5564,5565],{"class":1138},"        )\n",[1103,5567,5568,5570,5573,5575,5577,5580,5582],{"class":1105,"line":1198},[1103,5569,1767],{"class":1268},[1103,5571,5572],{"class":1116}," user_response",[1103,5574,1139],{"class":1138},[1103,5576,1687],{"class":1142},[1103,5578,5579],{"class":1120}," !=",[1103,5581,1778],{"class":1693},[1103,5583,1479],{"class":1138},[1103,5585,5586,5588,5591,5593,5595,5598,5600],{"class":1105,"line":1585},[1103,5587,2996],{"class":1268},[1103,5589,5590],{"class":1880}," ValueError",[1103,5592,1315],{"class":1138},[1103,5594,1643],{"class":1318},[1103,5596,5597],{"class":1322},"User not found",[1103,5599,1643],{"class":1318},[1103,5601,1673],{"class":1138},[1103,5603,5604],{"class":1105,"line":1601},[1103,5605,2908],{"class":1116},[1103,5607,5608],{"class":1105,"line":1616},[1103,5609,5610],{"class":1109},"        # Create order\n",[1103,5612,5613,5616,5618,5621,5623,5625,5627,5629,5631,5634,5636],{"class":1105,"line":1622},[1103,5614,5615],{"class":1116},"        order ",[1103,5617,1303],{"class":1138},[1103,5619,5620],{"class":1116}," Order",[1103,5622,1139],{"class":1138},[1103,5624,4225],{"class":1142},[1103,5626,1139],{"class":1138},[1103,5628,4230],{"class":1311},[1103,5630,1315],{"class":1138},[1103,5632,5633],{"class":1120},"**",[1103,5635,3199],{"class":1311},[1103,5637,1673],{"class":1138},[1103,5639,5640,5642],{"class":1105,"line":1676},[1103,5641,1679],{"class":1268},[1103,5643,5644],{"class":1116}," order\n",[1043,5646,5648],{"id":5647},"_2-asynchronous-communication","2. Asynchronous Communication",[1026,5650,5651],{},"Event-driven communication:",[1093,5653,5655],{"className":1095,"code":5654,"language":1097,"meta":1098,"style":1098},"# Asynchronous event publishing\nimport json\nfrom django.core.management.base import BaseCommand\nfrom kafka import KafkaProducer\n\nclass EventPublisher:\n    def __init__(self):\n        self.producer = KafkaProducer(\n            bootstrap_servers=['localhost:9092'],\n            value_serializer=lambda x: json.dumps(x).encode('utf-8')\n        )\n    \n    def publish_event(self, topic, event_data):\n        self.producer.send(topic, event_data)\n        self.producer.flush()\n\n# Usage\npublisher = EventPublisher()\npublisher.publish_event('user.created', {\n    'user_id': user.id,\n    'email': user.email,\n    'timestamp': timezone.now().isoformat()\n})\n",[1100,5656,5657,5662,5668,5693,5705,5709,5718,5730,5746,5764,5808,5812,5816,5837,5861,5876,5880,5885,5896,5919,5937,5956,5983],{"__ignoreMap":1098},[1103,5658,5659],{"class":1105,"line":1106},[1103,5660,5661],{"class":1109},"# Asynchronous event publishing\n",[1103,5663,5664,5666],{"class":1105,"line":1113},[1103,5665,1280],{"class":1268},[1103,5667,1462],{"class":1116},[1103,5669,5670,5672,5674,5676,5678,5680,5683,5685,5688,5690],{"class":1105,"line":1124},[1103,5671,1269],{"class":1268},[1103,5673,1272],{"class":1116},[1103,5675,1139],{"class":1138},[1103,5677,3676],{"class":1116},[1103,5679,1139],{"class":1138},[1103,5681,5682],{"class":1116},"management",[1103,5684,1139],{"class":1138},[1103,5686,5687],{"class":1116},"base ",[1103,5689,1280],{"class":1268},[1103,5691,5692],{"class":1116}," BaseCommand\n",[1103,5694,5695,5697,5700,5702],{"class":1105,"line":1132},[1103,5696,1269],{"class":1268},[1103,5698,5699],{"class":1116}," kafka ",[1103,5701,1280],{"class":1268},[1103,5703,5704],{"class":1116}," KafkaProducer\n",[1103,5706,5707],{"class":1105,"line":1146},[1103,5708,1295],{"emptyLinePlaceholder":1294},[1103,5710,5711,5713,5716],{"class":1105,"line":1156},[1103,5712,1472],{"class":1471},[1103,5714,5715],{"class":1475}," EventPublisher",[1103,5717,1479],{"class":1138},[1103,5719,5720,5722,5724,5726,5728],{"class":1105,"line":1166},[1103,5721,1484],{"class":1471},[1103,5723,1488],{"class":1487},[1103,5725,1315],{"class":1138},[1103,5727,1494],{"class":1493},[1103,5729,1503],{"class":1138},[1103,5731,5732,5734,5736,5739,5741,5744],{"class":1105,"line":1174},[1103,5733,1509],{"class":1508},[1103,5735,1139],{"class":1138},[1103,5737,5738],{"class":1142},"producer",[1103,5740,1517],{"class":1138},[1103,5742,5743],{"class":1311}," KafkaProducer",[1103,5745,4233],{"class":1138},[1103,5747,5748,5751,5754,5756,5759,5761],{"class":1105,"line":1182},[1103,5749,5750],{"class":1664},"            bootstrap_servers",[1103,5752,5753],{"class":1138},"=[",[1103,5755,1319],{"class":1318},[1103,5757,5758],{"class":1322},"localhost:9092",[1103,5760,1319],{"class":1318},[1103,5762,5763],{"class":1138},"],\n",[1103,5765,5766,5769,5771,5774,5777,5779,5781,5783,5786,5788,5791,5794,5797,5799,5801,5804,5806],{"class":1105,"line":1190},[1103,5767,5768],{"class":1664},"            value_serializer",[1103,5770,1303],{"class":1138},[1103,5772,5773],{"class":1471},"lambda",[1103,5775,5776],{"class":1499}," x",[1103,5778,1577],{"class":1138},[1103,5780,1665],{"class":1311},[1103,5782,1139],{"class":1138},[1103,5784,5785],{"class":1311},"dumps",[1103,5787,1315],{"class":1138},[1103,5789,5790],{"class":1311},"x",[1103,5792,5793],{"class":1138},").",[1103,5795,5796],{"class":1311},"encode",[1103,5798,1315],{"class":1138},[1103,5800,1319],{"class":1318},[1103,5802,5803],{"class":1322},"utf-8",[1103,5805,1319],{"class":1318},[1103,5807,1673],{"class":1138},[1103,5809,5810],{"class":1105,"line":1198},[1103,5811,5565],{"class":1138},[1103,5813,5814],{"class":1105,"line":1585},[1103,5815,1525],{"class":1116},[1103,5817,5818,5820,5822,5824,5826,5828,5831,5833,5835],{"class":1105,"line":1601},[1103,5819,1484],{"class":1471},[1103,5821,4189],{"class":1532},[1103,5823,1315],{"class":1138},[1103,5825,1494],{"class":1493},[1103,5827,1286],{"class":1138},[1103,5829,5830],{"class":1499}," topic",[1103,5832,1286],{"class":1138},[1103,5834,4204],{"class":1499},[1103,5836,1503],{"class":1138},[1103,5838,5839,5841,5843,5845,5847,5850,5852,5855,5857,5859],{"class":1105,"line":1616},[1103,5840,1509],{"class":1508},[1103,5842,1139],{"class":1138},[1103,5844,5738],{"class":1142},[1103,5846,1139],{"class":1138},[1103,5848,5849],{"class":1311},"send",[1103,5851,1315],{"class":1138},[1103,5853,5854],{"class":1311},"topic",[1103,5856,1286],{"class":1138},[1103,5858,4204],{"class":1311},[1103,5860,1673],{"class":1138},[1103,5862,5863,5865,5867,5869,5871,5874],{"class":1105,"line":1622},[1103,5864,1509],{"class":1508},[1103,5866,1139],{"class":1138},[1103,5868,5738],{"class":1142},[1103,5870,1139],{"class":1138},[1103,5872,5873],{"class":1311},"flush",[1103,5875,1796],{"class":1138},[1103,5877,5878],{"class":1105,"line":1676},[1103,5879,1295],{"emptyLinePlaceholder":1294},[1103,5881,5882],{"class":1105,"line":1697},[1103,5883,5884],{"class":1109},"# Usage\n",[1103,5886,5887,5890,5892,5894],{"class":1105,"line":1702},[1103,5888,5889],{"class":1116},"publisher ",[1103,5891,1303],{"class":1138},[1103,5893,5715],{"class":1311},[1103,5895,1796],{"class":1138},[1103,5897,5898,5901,5903,5906,5908,5910,5913,5915,5917],{"class":1105,"line":1720},[1103,5899,5900],{"class":1116},"publisher",[1103,5902,1139],{"class":1138},[1103,5904,5905],{"class":1311},"publish_event",[1103,5907,1315],{"class":1138},[1103,5909,1319],{"class":1318},[1103,5911,5912],{"class":1322},"user.created",[1103,5914,1319],{"class":1318},[1103,5916,1286],{"class":1138},[1103,5918,1564],{"class":1138},[1103,5920,5921,5923,5925,5927,5929,5931,5933,5935],{"class":1105,"line":1764},[1103,5922,2345],{"class":1318},[1103,5924,3702],{"class":1322},[1103,5926,1319],{"class":1318},[1103,5928,1577],{"class":1138},[1103,5930,2266],{"class":1311},[1103,5932,1139],{"class":1138},[1103,5934,3332],{"class":1142},[1103,5936,1582],{"class":1138},[1103,5938,5939,5941,5944,5946,5948,5950,5952,5954],{"class":1105,"line":1783},[1103,5940,2345],{"class":1318},[1103,5942,5943],{"class":1322},"email",[1103,5945,1319],{"class":1318},[1103,5947,1577],{"class":1138},[1103,5949,2266],{"class":1311},[1103,5951,1139],{"class":1138},[1103,5953,5943],{"class":1142},[1103,5955,1582],{"class":1138},[1103,5957,5958,5960,5963,5965,5967,5970,5972,5975,5978,5981],{"class":1105,"line":1799},[1103,5959,2345],{"class":1318},[1103,5961,5962],{"class":1322},"timestamp",[1103,5964,1319],{"class":1318},[1103,5966,1577],{"class":1138},[1103,5968,5969],{"class":1311}," timezone",[1103,5971,1139],{"class":1138},[1103,5973,5974],{"class":1311},"now",[1103,5976,5977],{"class":1138},"().",[1103,5979,5980],{"class":1311},"isoformat",[1103,5982,1796],{"class":1138},[1103,5984,5985],{"class":1105,"line":2108},[1103,5986,3502],{"class":1138},[1030,5988,5990],{"id":5989},"when-to-use-microservices","When to Use Microservices",[1043,5992,5994],{"id":5993},"good-candidates","Good Candidates",[1048,5996,5997,6000,6003,6006,6009],{},[1051,5998,5999],{},"Large, complex applications",[1051,6001,6002],{},"Multiple development teams",[1051,6004,6005],{},"Different scaling requirements",[1051,6007,6008],{},"Technology diversity needs",[1051,6010,6011],{},"Independent deployment requirements",[1043,6013,6015],{"id":6014},"when-to-avoid","When to Avoid",[1048,6017,6018,6021,6024,6027,6030],{},[1051,6019,6020],{},"Small applications",[1051,6022,6023],{},"Simple business logic",[1051,6025,6026],{},"Single development team",[1051,6028,6029],{},"Tight coupling requirements",[1051,6031,6032],{},"Limited operational expertise",[1030,6034,6036],{"id":6035},"summary","Summary",[1026,6038,6039],{},"Microservices architecture offers significant benefits in terms of scalability, flexibility, and maintainability, but comes with increased complexity. Understanding the trade-offs and design principles is crucial for successful implementation.",[1026,6041,6042],{},"Key takeaways:",[1048,6044,6045,6048,6051,6054,6057],{},[1051,6046,6047],{},"Microservices are independent, focused services",[1051,6049,6050],{},"They enable scalability and technology diversity",[1051,6052,6053],{},"Communication patterns are critical for success",[1051,6055,6056],{},"Proper service boundaries prevent coupling",[1051,6058,6059],{},"Consider complexity vs. benefits for your use case",[1026,6061,6062],{},"In the next section, we'll explore how Django's components can be leveraged to build effective microservices architecture.",[6064,6065,6066],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}",{"title":1098,"searchDepth":1106,"depth":1113,"links":6068},[6069,6072,6076,6081,6087,6092,6097,6102,6106,6110],{"id":1032,"depth":1113,"text":1033,"children":6070},[6071],{"id":1045,"depth":1124,"text":1046},{"id":1083,"depth":1113,"text":1084,"children":6073},[6074,6075],{"id":1087,"depth":1124,"text":1088},{"id":1230,"depth":1124,"text":1231},{"id":1245,"depth":1113,"text":1246,"children":6077},[6078,6079,6080],{"id":1249,"depth":1124,"text":1250},{"id":1434,"depth":1124,"text":1435},{"id":1808,"depth":1124,"text":1809},{"id":2122,"depth":1113,"text":2123,"children":6082},[6083,6084,6085,6086],{"id":2126,"depth":1124,"text":2127},{"id":2312,"depth":1124,"text":2313},{"id":2498,"depth":1124,"text":2499},{"id":2563,"depth":1124,"text":2564},{"id":3143,"depth":1113,"text":3144,"children":6088},[6089,6090,6091],{"id":3147,"depth":1124,"text":3148},{"id":3639,"depth":1124,"text":3640},{"id":3962,"depth":1124,"text":3963},{"id":4274,"depth":1113,"text":4275,"children":6093},[6094,6095,6096],{"id":4278,"depth":1124,"text":4279},{"id":4393,"depth":1124,"text":4394},{"id":4656,"depth":1124,"text":4657},{"id":4955,"depth":1113,"text":4956,"children":6098},[6099,6100,6101],{"id":4959,"depth":1124,"text":4960},{"id":5076,"depth":1124,"text":5077},{"id":5272,"depth":1124,"text":5273},{"id":5433,"depth":1113,"text":5434,"children":6103},[6104,6105],{"id":5437,"depth":1124,"text":5438},{"id":5647,"depth":1124,"text":5648},{"id":5989,"depth":1113,"text":5990,"children":6107},[6108,6109],{"id":5993,"depth":1124,"text":5994},{"id":6014,"depth":1124,"text":6015},{"id":6035,"depth":1113,"text":6036},"md",null,{},{"title":881,"description":1028},"6ilWSH_r4opxgvp-CHnizme8vTUlCu8PGDkzatm9zpY",[6117,6119],{"title":875,"path":876,"stem":877,"description":6118,"children":-1},"Welcome to the comprehensive guide on building microservices with Django. This chapter explores how to architect, develop, deploy, and maintain microservices using Django as your primary framework.",{"title":885,"path":886,"stem":887,"description":6120,"children":-1},"Django, traditionally known for building monolithic web applications, can be effectively adapted for microservices architecture. In this section, we'll explore Django's native components that support microservices development and the external tools that complement Django in a distributed environment.",1772474962161]