{"id":630,"date":"2023-12-07T23:11:11","date_gmt":"2023-12-07T16:11:11","guid":{"rendered":"https:\/\/thoaicoder.com\/?p=630"},"modified":"2024-01-07T22:47:18","modified_gmt":"2024-01-07T15:47:18","slug":"bulkhead-pattern","status":"publish","type":"post","link":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/","title":{"rendered":"Resilient Microservice Design \u2013 Bulkhead Pattern"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">1. Bulkhead pattern and Resilient4J<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bulkhead pattern<\/strong>&nbsp;improves system resilience by creating separate,&nbsp;<strong>isolated compartments for different system parts<\/strong>. It\u2019s inspired by the&nbsp;<strong>bulkheads on ships<\/strong>&nbsp;that prevent the entire vessel from flooding if one section is breached.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"517\" height=\"340\" src=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/image-1.png\" alt=\"\" class=\"wp-image-645\" srcset=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/image-1.png 517w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/image-1-300x197.png 300w\" sizes=\"auto, (max-width: 517px) 100vw, 517px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Resilience4j is a lightweight, fault-tolerance<\/strong> library for Java that helps developers build resilient applications. It offers various features to improve the stability and fault tolerance of applications by providing tools for handling and recovering from failures in a graceful manner including:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Circuit Breakers:<\/strong> Helps prevent system overload and cascading failures by providing a way to short-circuit calls to a failing service.<\/li>\n\n\n\n<li><strong>Retry:<\/strong> Allows developers to define and control how retries are performed when calling a potentially failing operation.<\/li>\n\n\n\n<li><strong>Rate Limiting:<\/strong> Enables limiting the rate at which certain operations can be executed, preventing overuse of resources.<\/li>\n\n\n\n<li><strong>Bulkheading:<\/strong> Isolates parts of the system to prevent failures in one component from affecting others.<\/li>\n\n\n\n<li><strong>Timeouts:<\/strong> Helps in setting timeouts for operations to avoid waiting indefinitely for a response.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">In this article, we will create a sample project which is an E-commerce system using <strong>an external KYC API<\/strong> to verify newly registered users. We will apply Bulkhead to the <strong>VerificationService <\/strong>using <strong>Resilience4j <\/strong>library to limit only a few concurrent requests to the registration feature when the KYC API is very slow.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">2. Sample project<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tech stack: JDK 11, Gradle, Spring boot, Spring Feign, Resilience4j, Wiremock.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bulkhead is applied to the <strong>VerificationService <\/strong>via the below configurations that means:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We allow a maximum of 5 concurrent requests to the verification service.<\/li>\n\n\n\n<li><strong>maxWaitDuration <\/strong>is for when we get any additional requests for rating service when the existing 5 threads are busy, we wait for only <strong>2000ms <\/strong>and fail the request immediately.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>application.yml<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>resilience4j.bulkhead:\n  instances:\n    verificationUserService:\n      maxConcurrentCalls: 5\n      maxWaitDuration: 2000ms\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>VerificationServiceClient.java<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>@FeignClient(value = \"VerificationServiceClient\", url = \"${kyc-service.url}\")\npublic interface VerificationServiceClient {\n  @PostMapping(value = \"\/kyc\/{userName}\", produces = MediaType.APPLICATION_JSON_VALUE)\n  String verify(@PathVariable String userName);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>VerificationServiceClientFallback.java<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>@Service\npublic class VerificationUserService {\n\n  private static final Logger LOGGER = LoggerFactory.getLogger(VerificationUserService.class);\n  private final VerificationServiceClient verificationServiceClient;\n\n  @Autowired\n  public VerificationUserService( VerificationServiceClient verificationServiceClient) {\n    this.verificationServiceClient = verificationServiceClient;\n  }\n\n  @Bulkhead(name = \"verificationUserService\", fallbackMethod = \"verifyDefault\")\n  public String verify(String userName) {\n    return verificationServiceClient.verify(userName);\n  }\n\n  public String verifyDefault(String userName, Throwable throwable) { return ApplicationUtil.FALLBACK_MESSAGE; }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To experiment with how Bulkhead works, we will write an integration test with a few scenarios. We will use <a href=\"https:\/\/wiremock.org\/\">Wiremock <\/a>to mock the KYC API and add some delay to the KYC API response. We also use <strong>CompletableFuture<\/strong> to simulate concurent requests to the verification service.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>private void simulateApiRequest() {\r\n  CompletableFuture.supplyAsync(() -> verificationUserService.verify(\"thoai\"));\r\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>VerificationServiceTest.java<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>@SpringBootTest\n@EnableConfigurationProperties\n@ExtendWith(SpringExtension.class)\n@ContextConfiguration(classes = {Application.class})\n@AutoConfigureWireMock(port = 8082)\npublic class VerificationServiceTest {\n\n  @Autowired\n  private VerificationUserService verificationUserService;\n  ...\n\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scenario 1<\/strong>: the fallback method will be triggered (thank for Bulkhead) when KYC is slow (3000ms > <strong>maxWaitDuration <\/strong>= 2000ms) and too many concurrent requests (6 requests > <strong>maxConcurrentCalls <\/strong>= 5).<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>    @Test\n    public void fallBackWillBeTriggered_when_kycApiIsSlow_and_tooManyRequests() throws InterruptedException {\n    WireMock.stubFor(WireMock.post(WireMock.urlPathEqualTo(\"\/kyc\/thoai\"))\n      .willReturn(WireMock.aResponse()\n        .withBody(ApplicationUtil.SUCCESS_MESSAGE)\n        .withFixedDelay(3000)\n        .withStatus(200)));\n\n    for (int i = 1; i &lt; 6; i++) {\n      simulateApiRequest();\n    }\n\n    Thread.sleep(1000);\n    String response = verificationUserService.verify(\"thoai\");\n    Assertions.assertEquals(response, ApplicationUtil.FALLBACK_MESSAGE);\n  }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scenario 2<\/strong>: the fallback method will not be triggered when KYC is slow (3000ms > <strong>maxWaitDuration <\/strong>= 2000ms) and but not too many concurrent requests (3 requests &lt; <strong>maxConcurrentCalls <\/strong>= 5).<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>  @Test\r\n  public void fallBackWillNotBeTriggered_when_kycApiIsSlow_but_notTooManyRequests() throws InterruptedException {\r\n    WireMock.stubFor(WireMock.post(WireMock.urlPathEqualTo(\"\/kyc\/thoai\"))\r\n      .willReturn(WireMock.aResponse()\r\n        .withBody(ApplicationUtil.SUCCESS_MESSAGE)\r\n        .withFixedDelay(3000)\r\n        .withStatus(200)));\r\n\r\n    for (int i = 1; i &lt; 2; i++) {\r\n      simulateApiRequest();\r\n    }\r\n\r\n    Thread.sleep(1000);\r\n    String response = verificationUserService.verify(\"thoai\");\r\n    Assertions.assertEquals(response, ApplicationUtil.SUCCESS_MESSAGE);\r\n  }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scenario 3<\/strong>: the fallback method will not be triggered when too many concurrent requests (8 requests > <strong>maxConcurrentCalls <\/strong>= 5) but the KYC is not very slow (1000ms &lt; <strong>maxWaitDuration <\/strong>= 2000ms)<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>  @Test\r\n  public void fallBackWillNotBeTriggered_when_tooManyRequests_but_kycApiIsNotSlow() throws InterruptedException {\r\n    WireMock.stubFor(WireMock.post(WireMock.urlPathEqualTo(\"\/kyc\/thoai\"))\r\n      .willReturn(WireMock.aResponse()\r\n        .withBody(ApplicationUtil.SUCCESS_MESSAGE)\n        .withFixedDelay(1000)\r\n        .withStatus(200)));\r\n\r\n    for (int i = 1; i &lt; 8; i++) {\r\n      simulateApiRequest();\r\n    }\r\n\r\n    Thread.sleep(1000);\r\n    String response = verificationUserService.verify(\"thoai\");\r\n    Assertions.assertEquals(response, ApplicationUtil.SUCCESS_MESSAGE);\r\n  }<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">3. Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The exploration of Resilient Microservice Design through the Bulkhead Pattern underscores the critical role of compartmentalization in ensuring system stability and reliability. By isolating components and limiting the scope of failures, this design principle significantly enhances fault tolerance within microservice architectures. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article illuminates how adopting the Bulkhead Pattern draws inspiration from naval engineering, translating the concept of compartmentalization into software design to fortify systems against disruptions using Resilient4J. Its emphasis on mitigating the cascading impact of failures underscores its value in maintaining operational continuity and resilience in microservice-based applications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Overall, the Bulkhead Pattern stands as a foundational pillar in constructing robust and dependable microservice architectures, safeguarding against unforeseen challenges and bolstering the overall system&#8217;s resilience. The sample project can be found on\u00a0<a href=\"https:\/\/github.com\/ThoaiNguyenHuu842\/bulkhead_resilience4j\">GitHub<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Bulkhead pattern and Resilient4J Bulkhead pattern&nbsp;improves system resilience by creating separate,&nbsp;isolated compartments for different [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":645,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,1,15],"tags":[25,28,22,24,23],"class_list":["post-630","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ci-cd","category-java","category-software-development-practices","tag-bulkhead-pattern","tag-java","tag-micro-services","tag-resilience4j","tag-spring"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.14 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Resilient Microservice Design \u2013 Bulkhead Pattern - I \u2764 Code<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Resilient Microservice Design \u2013 Bulkhead Pattern - I \u2764 Code\" \/>\n<meta property=\"og:description\" content=\"1. Bulkhead pattern and Resilient4J Bulkhead pattern&nbsp;improves system resilience by creating separate,&nbsp;isolated compartments for different [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/\" \/>\n<meta property=\"og:site_name\" content=\"I \u2764 Code\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-07T16:11:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-07T15:47:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/image-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"517\" \/>\n\t<meta property=\"og:image:height\" content=\"340\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Thoai\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thoai\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/\"},\"author\":{\"name\":\"Thoai\",\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720\"},\"headline\":\"Resilient Microservice Design \u2013 Bulkhead Pattern\",\"datePublished\":\"2023-12-07T16:11:11+00:00\",\"dateModified\":\"2024-01-07T15:47:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/\"},\"wordCount\":545,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720\"},\"keywords\":[\"Bulkhead Pattern\",\"Java\",\"Micro-services\",\"Resilience4j\",\"Spring\"],\"articleSection\":[\"CI\/CD\",\"Java\",\"Software Development Practices\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/\",\"url\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/\",\"name\":\"Resilient Microservice Design \u2013 Bulkhead Pattern - I \u2764 Code\",\"isPartOf\":{\"@id\":\"https:\/\/thoaicoder.com\/#website\"},\"datePublished\":\"2023-12-07T16:11:11+00:00\",\"dateModified\":\"2024-01-07T15:47:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/thoaicoder.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resilient Microservice Design \u2013 Bulkhead Pattern\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/thoaicoder.com\/#website\",\"url\":\"https:\/\/thoaicoder.com\/\",\"name\":\"I \u2764 Code\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/thoaicoder.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720\",\"name\":\"Thoai\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/03\/photo_2023-01-05_22-53-32.jpg\",\"contentUrl\":\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/03\/photo_2023-01-05_22-53-32.jpg\",\"width\":640,\"height\":640,\"caption\":\"Thoai\"},\"logo\":{\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/thoaicoder.com\",\"https:\/\/www.linkedin.com\/in\/huu-thoai-nguyen\/\"],\"url\":\"https:\/\/thoaicoder.com\/index.php\/author\/admin_cvyxq4b8\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Resilient Microservice Design \u2013 Bulkhead Pattern - I \u2764 Code","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/","og_locale":"en_US","og_type":"article","og_title":"Resilient Microservice Design \u2013 Bulkhead Pattern - I \u2764 Code","og_description":"1. Bulkhead pattern and Resilient4J Bulkhead pattern&nbsp;improves system resilience by creating separate,&nbsp;isolated compartments for different [&hellip;]","og_url":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/","og_site_name":"I \u2764 Code","article_published_time":"2023-12-07T16:11:11+00:00","article_modified_time":"2024-01-07T15:47:18+00:00","og_image":[{"width":517,"height":340,"url":"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/image-1.png","type":"image\/png"}],"author":"Thoai","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Thoai","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/#article","isPartOf":{"@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/"},"author":{"name":"Thoai","@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720"},"headline":"Resilient Microservice Design \u2013 Bulkhead Pattern","datePublished":"2023-12-07T16:11:11+00:00","dateModified":"2024-01-07T15:47:18+00:00","mainEntityOfPage":{"@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/"},"wordCount":545,"commentCount":0,"publisher":{"@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720"},"keywords":["Bulkhead Pattern","Java","Micro-services","Resilience4j","Spring"],"articleSection":["CI\/CD","Java","Software Development Practices"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/","url":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/","name":"Resilient Microservice Design \u2013 Bulkhead Pattern - I \u2764 Code","isPartOf":{"@id":"https:\/\/thoaicoder.com\/#website"},"datePublished":"2023-12-07T16:11:11+00:00","dateModified":"2024-01-07T15:47:18+00:00","breadcrumb":{"@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/07\/bulkhead-pattern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thoaicoder.com\/"},{"@type":"ListItem","position":2,"name":"Resilient Microservice Design \u2013 Bulkhead Pattern"}]},{"@type":"WebSite","@id":"https:\/\/thoaicoder.com\/#website","url":"https:\/\/thoaicoder.com\/","name":"I \u2764 Code","description":"","publisher":{"@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thoaicoder.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720","name":"Thoai","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/image\/","url":"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/03\/photo_2023-01-05_22-53-32.jpg","contentUrl":"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/03\/photo_2023-01-05_22-53-32.jpg","width":640,"height":640,"caption":"Thoai"},"logo":{"@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/thoaicoder.com","https:\/\/www.linkedin.com\/in\/huu-thoai-nguyen\/"],"url":"https:\/\/thoaicoder.com\/index.php\/author\/admin_cvyxq4b8\/"}]}},"_links":{"self":[{"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/posts\/630","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/comments?post=630"}],"version-history":[{"count":13,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/posts\/630\/revisions"}],"predecessor-version":[{"id":674,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/posts\/630\/revisions\/674"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/media\/645"}],"wp:attachment":[{"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/media?parent=630"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/categories?post=630"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/tags?post=630"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}