{"id":4885,"date":"2018-03-27T07:27:51","date_gmt":"2018-03-27T14:27:51","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4885"},"modified":"2023-06-13T05:30:35","modified_gmt":"2023-06-13T12:30:35","slug":"condemn-microservices-architecture-fail-even-start","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/","title":{"rendered":"How to Condemn Your Microservices Architecture to Fail Before You Even Start"},"content":{"rendered":"<p><span style=\"font-weight: 400\">A lot has already been said about microservices over the last few years, but I commonly see new distributed systems being developed with the old mindset of monoliths. The side effect of building something new without the understanding of some key concepts is that you will end up with more problems than before, which is definitely not the goal you had in mind.<\/span><\/p>\n<p><span style=\"font-weight: 400\">In this article, I would like to tackle some concepts that we historically take for granted and which might lead to poor architecture when applied to microservices:<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b>Make Synchronous Calls Only<\/b><\/h2>\n<p><span style=\"font-weight: 400\">In a monolith architecture, we are used to All-Or-Nothing availability, we can always call any service anytime. However, in a microservices world, there are no guarantees that a service on which we depend will be online. It could be even worse, as a slow service can potentially slow down the whole system as each thread will be locked for a certain amount of time while waiting for the response of the external service.<\/span><\/p>\n<div id=\"attachment_4887\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4887\" class=\"wp-image-4887 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/timeout-1024x406.png\" alt=\"\" width=\"900\" height=\"357\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/timeout-1024x406.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/timeout-300x119.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/timeout-768x304.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/timeout-1536x609.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/timeout-20x8.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/timeout-1320x523.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/timeout.png 1627w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-4887\" class=\"wp-caption-text\">How locked\/slow threads eventually consumes your entire thread pool<\/p><\/div>\n<p><span style=\"font-weight: 400\">We are still learning how to properly implement communications between services, but the rule of thumb is to <\/span><b><i>make everything asynchronous<\/i><\/b><span style=\"font-weight: 400\">, and that is where one of the first challenges emerges, because historically we haven\u2019t exercised enough our ability to transform a synchronous flow into asynchronous. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Hopefully, most of the use cases can be implemented asynchronously with the right amount of effort. Amazon, for instance, implemented its whole order system that way, and you barely <em><strong>feel<\/strong><\/em> it. They will almost certainly let you place an order successfully, but if there is any problem with the payment or if the product is out of stock, you will receive an email notification a few minutes or hours later telling you about it and which actions need to be taken. The advantage of this approach is clear; even if the payment or stock service is down, it won\u2019t block users from placing an order. That is the beauty of asynchronous communication.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Of course, not everything in your system can be async, and to deal with the common problems of synchronous calls like network instability, high latency or temporary unavailability of services, we had to come up with a set of patterns to avoid cascading failures such as local caches, timeouts, retries, circuit breakers, bulkheads, etc. There are many frameworks out there implementing those concepts, but the <\/span><a href=\"https:\/\/github.com\/Netflix\/Hystrix\"><span style=\"font-weight: 400\">Netflix Hystrix<\/span><\/a><span style=\"font-weight: 400\"> is currently the most well-known library.<\/span><\/p>\n<p><span style=\"font-weight: 400\">There is nothing essentially wrong with this approach;\u00a0it works pretty well for several companies. The only downside is that we are pushing an extra responsibility for each service, which makes your microservice even less \u201cmicro\u201d. Some options have been proposed in the last two years to address this issue. The Service Mesh pattern, for instance, tries to externalize this complexity in a form of a sidecar container :\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4888\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/Screen-Shot-2018-03-27-at-10.56.47-AM-1024x553.png\" alt=\"\" width=\"741\" height=\"400\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-27-at-10.56.47-AM-1024x553.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-27-at-10.56.47-AM-300x162.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-27-at-10.56.47-AM-768x415.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-27-at-10.56.47-AM-1536x829.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-27-at-10.56.47-AM-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-27-at-10.56.47-AM-1320x713.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-27-at-10.56.47-AM.png 1604w\" sizes=\"auto, (max-width: 741px) 100vw, 741px\" \/><\/p>\n<p><span style=\"font-weight: 400\">I personally like this approach, especially because it is language agnostic, which means that It will work for all of your microservices regardless of the language in which it is written. Another advantage is the standardized metrics, as different libraries\/frameworks might use a slightly different algorithm for retries, timeouts, circuit breaks, etc. Those small differences might impact significantly the generated metrics, making impossible to have a reliable vision of the system&#8217;s behavior.\u00a0<\/span><\/p>\n<p><strong>UPDATE:<\/strong>\u00a0\u00a0If you want to read more about the Service Mesh pattern, <a href=\"https:\/\/www.youtube.com\/watch?v=hG5k61vXgfo\">check out this excellent presentation<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-4889\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/Screen-Shot-2018-03-22-at-3.37.35-PM-1024x470.png\" alt=\"\" width=\"900\" height=\"413\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-22-at-3.37.35-PM-1024x470.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-22-at-3.37.35-PM-300x138.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-22-at-3.37.35-PM-768x353.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-22-at-3.37.35-PM-1536x705.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-22-at-3.37.35-PM-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-22-at-3.37.35-PM-1320x606.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Screen-Shot-2018-03-22-at-3.37.35-PM.png 1856w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400\">In Summary, thinking about how services will communicate with each other is essential for a successful architecture, and should be planned ahead to avoid a chain of dependencies. The less the services know about each other, the better the architecture is.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b>Just Use RDBMS for Everything<\/b><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">After a 30-year monopoly of RDBMS, it is understandable why many people still think that way. However, nowadays, virtually every day a new database is born (and <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=mY3DyBT55do\"><span style=\"font-weight: 400\">two JavaScript frameworks<\/span><\/a><span style=\"font-weight: 400\">). If in the old days, picking a database was a matter of choosing one among five, today, the same task demands much more attention. <\/span><\/p>\n<div id=\"attachment_4890\" style=\"width: 743px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4890\" class=\" wp-image-4890\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/Picture1-1-1024x679.png\" alt=\"\" width=\"733\" height=\"486\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Picture1-1-1024x679.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Picture1-1-300x199.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Picture1-1-768x509.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Picture1-1-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/Picture1-1.png 1062w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><p id=\"caption-attachment-4890\" class=\"wp-caption-text\">Source: db-engines.com &#8211; initial release dates<\/p><\/div>\n<p><span style=\"font-weight: 400\">As <\/span><a href=\"https:\/\/martinfowler.com\/bliki\/PolyglotPersistence.html\"><span style=\"font-weight: 400\">Martin Fowler said<\/span><\/a><span style=\"font-weight: 400\"> 12 years ago, there are a lot of benefits on choosing a specialized storage, such as: higher performance, lower cost, etc. I won\u2019t spend your time going through all the downsides of RDBMS (slow reads, sparse data, impedance mismatch, joins, etc). Rather, I would just like to highlight again how the database plays a major role in the overall performance of the system, and an inappropriate choice will eventually cost you much more money.<\/span><\/p>\n<p><iframe loading=\"lazy\" title=\"How Couchbase Helped Pokemon Go Evolve\" width=\"900\" height=\"506\" src=\"https:\/\/www.youtube.com\/embed\/B3IGuOzuL3I?feature=oembed&#038;enablejsapi=1&#038;origin=https:\/\/www.couchbase.com\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/p>\n<p><span style=\"font-weight: 400\">The benefits of polyglot persistence are crystal clear, and the maturity of the solutions have been proven by <\/span><a href=\"https:\/\/www.computerweekly.com\/feature\/NoSQL-databases-ride-horses-for-courses-to-edge-competitive-advantage\"><span style=\"font-weight: 400\">numerous successful critical use cases<\/span><\/a><span style=\"font-weight: 400\">, just to name a few: <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pokemon-go-scaling-profile-services-with-couchbase-nosql\/\"><span style=\"font-weight: 400\">Pok\u00e9mon Go<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/medium.com\/airbnb-engineering\/data-infrastructure-at-airbnb-8adfb34f169c\"><span style=\"font-weight: 400\">AirBnB<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/www.couchbase.com\/customers\/viber\/\"><span style=\"font-weight: 400\">Viber<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=2GZA5SrWlvk\"><span style=\"font-weight: 400\">eBay<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=JQUxqqJIQU8\"><span style=\"font-weight: 400\">Sky<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=VwXr-326Yb4\"><span style=\"font-weight: 400\">Amadeus<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/www.allthingsdistributed.com\/files\/amazon-dynamo-sosp2007.pdf\"><span style=\"font-weight: 400\">Amazon<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/research.google.com\/archive\/bigtable.html\"><span style=\"font-weight: 400\">Google<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/engineering.linkedin.com\/blog\/2017\/12\/couchbase-ecosystem-at-linkedin\"><span style=\"font-weight: 400\">LinkedIn<\/span><\/a><span style=\"font-weight: 400\"> and <\/span><a href=\"https:\/\/highscalability.com\/blog\/2015\/11\/9\/a-360-degree-view-of-the-entire-netflix-stack.html\"><span style=\"font-weight: 400\">Netflix<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400\">I would have agreed five years ago with the \u201clearning curve argument\u201d of why you have not started with NoSQL yet. Nonetheless, since then, a lot has changed, and some companies have put a lot of effort on making it really easy for developers and DBAs, like the Couchbase <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-boot-spring-data\/\"><span style=\"font-weight: 400\">Spring Boot\/Spring Data<\/span><\/a><span style=\"font-weight: 400\"> support or the recently launched \u00a0<\/span><a href=\"https:\/\/www.couchbase.com\/blog\/kubernetes-operators-game-changer\/\"><span style=\"font-weight: 400\">Kubernetes Operator<\/span><\/a><span style=\"font-weight: 400\"> which aims to automate most of the DBAs work. <\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b>Don\u2019t think about Debugging and Observability<\/b><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">One day, you will eventually have a distributed bug which spreads inconsistencies on your whole system. Then, you realize that there is no easy way to understand where things are failing: Was it a bug? Was it a network issue? Was the service temporarily unavailable?<\/span><\/p>\n<p><span style=\"font-weight: 400\">That\u2019s is why you have to plan in advance how are you going debug your system. Hopefully, for networking a Service Mesh might be a quick fix, and for distributed logging, tools like <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=1ye0-sityBw\"><span style=\"font-weight: 400\">FluentD or Logstash<\/span><\/a><span style=\"font-weight: 400\"> are handy. But, when we talk about understanding how an entity reached a specific state, or even how to correlate data between services, there is no easy tool out there. \u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">To address this issue, you can use\u00a0<\/span><a href=\"https:\/\/martinfowler.com\/eaaDev\/EventSourcing.html\"><span style=\"font-weight: 400\">Event Sourcing\/Logging<\/span><\/a><span style=\"font-weight: 400\">.<\/span><span style=\"font-weight: 400\"> In this pattern, each service stores (and validates) all changes to the state of the application in an event object, and naturally, whenever you need to check what happened with a particular entity, all you need to do is navigate through all the log of events related to it.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">If you also add versioning to your state, fixing inconsistencies will be even easier now, as you will have the ability to fix the inconsistent messages by just setting the state of the object to what it was before, and then replay all messages received from the problematic one onwards. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Both versioning and logging can be done asynchronously, and you probably won\u2019t query this data often, which makes it a cheap in-house solution for debugging\/auditing your system. I will post next week a deep dive on this pattern, so hold on for a week.<\/span><\/p>\n<p><span style=\"font-weight: 400\">There are many other frameworks\/patterns to help you debug your microservices, but they all usually demand a single distributed strategy in order to work. Unfortunately, the moment you realize that you need such a thing, it is already too late and you will need to spend a significant amount of time refactoring the whole thing. That is one of the main reasons why you need to define how are you going to observe\/debug your system before even start.<\/span><\/p>\n<p>If you have any questions, feel free to tweet me at\u00a0<a href=\"https:\/\/twitter.com\/deniswsrosa\">@deniswsrosa<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A lot has already been said about microservices over the last few years, but I commonly see new distributed systems being developed with the old mindset of monoliths. The side effect of building something new without the understanding of some [&hellip;]<\/p>\n","protected":false},"author":8754,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814],"tags":[],"ppma_author":[9059],"class_list":["post-4885","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Condemn Microservices Architecture to Fail Before Even Start<\/title>\n<meta name=\"description\" content=\"The blog focus on concepts that we historically take for granted and which might lead to poor architecture when applied to microservices.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Condemn Your Microservices Architecture to Fail Before You Even Start\" \/>\n<meta property=\"og:description\" content=\"The blog focus on concepts that we historically take for granted and which might lead to poor architecture when applied to microservices.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-27T14:27:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-13T12:30:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/timeout-1024x406.png\" \/>\n<meta name=\"author\" content=\"Denis Rosa, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@deniswsrosa\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Denis Rosa, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/\"},\"author\":{\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257\"},\"headline\":\"How to Condemn Your Microservices Architecture to Fail Before You Even Start\",\"datePublished\":\"2018-03-27T14:27:51+00:00\",\"dateModified\":\"2023-06-13T12:30:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/\"},\"wordCount\":1272,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Application Design\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/\",\"name\":\"Condemn Microservices Architecture to Fail Before Even Start\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-03-27T14:27:51+00:00\",\"dateModified\":\"2023-06-13T12:30:35+00:00\",\"description\":\"The blog focus on concepts that we historically take for granted and which might lead to poor architecture when applied to microservices.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Condemn Your Microservices Architecture to Fail Before You Even Start\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257\",\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/be0716f6199cfb09417c92cf7a8fa8d6\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g\",\"caption\":\"Denis Rosa, Developer Advocate, Couchbase\"},\"description\":\"Denis Rosa is a Developer Advocate for Couchbase and lives in Munich - Germany. He has a solid experience as a software engineer and speaks fluently Java, Python, Scala and Javascript. Denis likes to write about search, Big Data, AI, Microservices and everything else that would help developers to make a beautiful, faster, stable and scalable app.\",\"sameAs\":[\"https:\/\/x.com\/deniswsrosa\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/denis-rosa\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Condemn Microservices Architecture to Fail Before Even Start","description":"The blog focus on concepts that we historically take for granted and which might lead to poor architecture when applied to microservices.","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:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/","og_locale":"en_US","og_type":"article","og_title":"How to Condemn Your Microservices Architecture to Fail Before You Even Start","og_description":"The blog focus on concepts that we historically take for granted and which might lead to poor architecture when applied to microservices.","og_url":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-03-27T14:27:51+00:00","article_modified_time":"2023-06-13T12:30:35+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/timeout-1024x406.png","type":"","width":"","height":""}],"author":"Denis Rosa, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@deniswsrosa","twitter_misc":{"Written by":"Denis Rosa, Developer Advocate, Couchbase","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/"},"author":{"name":"Denis Rosa, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257"},"headline":"How to Condemn Your Microservices Architecture to Fail Before You Even Start","datePublished":"2018-03-27T14:27:51+00:00","dateModified":"2023-06-13T12:30:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/"},"wordCount":1272,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Application Design"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/","url":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/","name":"Condemn Microservices Architecture to Fail Before Even Start","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-03-27T14:27:51+00:00","dateModified":"2023-06-13T12:30:35+00:00","description":"The blog focus on concepts that we historically take for granted and which might lead to poor architecture when applied to microservices.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/condemn-microservices-architecture-fail-even-start\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Condemn Your Microservices Architecture to Fail Before You Even Start"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257","name":"Denis Rosa, Developer Advocate, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/be0716f6199cfb09417c92cf7a8fa8d6","url":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","caption":"Denis Rosa, Developer Advocate, Couchbase"},"description":"Denis Rosa is a Developer Advocate for Couchbase and lives in Munich - Germany. He has a solid experience as a software engineer and speaks fluently Java, Python, Scala and Javascript. Denis likes to write about search, Big Data, AI, Microservices and everything else that would help developers to make a beautiful, faster, stable and scalable app.","sameAs":["https:\/\/x.com\/deniswsrosa"],"url":"https:\/\/www.couchbase.com\/blog\/author\/denis-rosa\/"}]}},"authors":[{"term_id":9059,"user_id":8754,"is_guest":0,"slug":"denis-rosa","display_name":"Denis Rosa, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","author_category":"","last_name":"Rosa, Developer Advocate, Couchbase","first_name":"Denis","job_title":"","user_url":"","description":"Denis Rosa is a Developer Advocate for Couchbase and lives in Munich - Germany. He has a solid experience as a software engineer and speaks fluently Java, Python, Scala and Javascript. Denis likes to write about search, Big Data, AI, Microservices and everything else that would help developers to make a beautiful, faster, stable and scalable app."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/8754"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=4885"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4885\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=4885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=4885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=4885"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=4885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}