{"id":11126,"date":"2021-10-20T16:00:00","date_gmt":"2021-10-20T14:00:00","guid":{"rendered":"https:\/\/whiteduck.de\/?p=11126"},"modified":"2022-02-09T09:57:32","modified_gmt":"2022-02-09T08:57:32","slug":"what-are-polyglot-microservices","status":"publish","type":"post","link":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/","title":{"rendered":"1\/3 Polyglot microservice development with Dapr &#8211; What are polyglot Microservices?"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1170px + 0px );margin-left: calc(-0px \/ 2 );margin-right: calc(-0px \/ 2 );\"><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last\" style=\"--awb-bg-size:cover;width:100%;\"><div class=\"fusion-column-wrapper fusion-flex-column-wrapper-legacy\"><div class=\"fusion-clearfix\"><\/div><\/div><\/div><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-one\" style=\"--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;\"><h1 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:32;line-height:1.31;\"><\/p>\n<p>1\/3 Polyglot microservice development with Dapr &#8211; What are polyglot Microservices?<\/p>\n<p><\/h1><\/div><div class=\"fusion-text fusion-text-1\"><\/div><\/p>\n\n\n<p>This blog post series about polyglot microservices is based on my master&#8217;s thesis on &#8220;Polyglot Microservice Development with the Distributed Application Runtime&#8221;, which I have written in cooperation with white duck. The aim of this series is to give you an overview of polyglot microservices and show you why modern tooling like Dapr is needed to develop polyglot microservices efficiently. However, the scope of the blog posts is not limited to Dapr, but attempts to give you a holistic overview of the topic and the tooling options available.<\/p>\n\n\n\n<p>In the first part of the series, you will get an overview of polyglot microservices, how they differ from single language microservices, what is necessary to implement them and their advantages and disadvantages. After that, the second part uses the results of expert interviews conducted as part of my master&#8217;s thesis to show you the challenges that arise when using polyglot microservices. Lastly, the third part will provide you with an overview of the options for dealing with these challenges and how you can benefit from the advantages of polyglot microservices by leveraging modern tooling.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Contents<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#polyglotmicroservices\">Polyglot microservices<\/a><\/li><li><a href=\"#distributedsystems\">Distributed Systems<\/a><\/li><li><a href=\"#necessarynonfunctionalrequirements\">Necessary non-functional requirements<\/a><\/li><li><a href=\"#singlelanguagevspolyglotmicroservices\">Single language vs polyglot microservices<\/a><\/li><li><a href=\"#advantagesofpolyglotmicroservices\">Advantages of polyglot microservices<\/a><\/li><li><a href=\"#disadvantagesofpolyglotmicroservices\">Disadvantages of polyglot microservices<\/a><\/li><li><a href=\"#conclusion\">Conclusion<\/a><\/li><\/ul>\n\n\n\n<div style=\"height:41px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"polyglotmicroservices\">Polyglot microservices<\/h2>\n\n\n\n<p>Polyglot or multi-language microservices are a <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/guide\/architecture-styles\/microservices\" target=\"_blank\" rel=\"noreferrer noopener\">microservice architecture<\/a> in which developers use multiple programming languages and technologies simultaneously. Therefore, each microservice can use the technology that is best suited for implementing the microservice&#8217;s use case. This also means developers can choose the programming language they know the best or love the most. However, polyglot microservices are not a new programming or architectural style, but a variant of microservice architecture. <\/p>\n\n\n\n<p>They are the application of free technology choice that is often touted as one of the key benefits of the microservice architecture. For this reason, single language and polyglot microservice architectures have the same fundamentals and requirements. Both are distributed systems, and both require the implementation of non-functional requirements that are necessary to architect a microservice architecture.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-1024x69.png\" data-orig-src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-1024x69.png\" alt=\"Polyglot microservices can be written in any programming language\" class=\"lazyload wp-image-13457\" width=\"1024\" height=\"69\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271024%27%20height%3D%2769%27%20viewBox%3D%270%200%201024%2069%27%3E%3Crect%20width%3D%271024%27%20height%3D%2769%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-200x13.png 200w, https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-300x20.png 300w, https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-400x27.png 400w, https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-600x40.png 600w, https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-768x52.png 768w, https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-800x54.png 800w, https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-1024x69.png 1024w, https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-1200x81.png 1200w, https:\/\/whiteduck.de\/wp-content\/uploads\/Bild3-1536x104.png 1536w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Polyglot microservices can be written in any programming language<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"distributedsystems\">Distributed Systems<\/h2>\n\n\n\n<p>In contrast to a monolith, microservices only represent individual functions of a system and therefore only form a complete system when they interact. Consequently, microservices are distributed systems and thus must implement several non-functional requirements. In this way, microservices trade off the advantages of easier development of individual components, better scalability, and faster deployment, against the challenges associated with distributed systems. These are famously known as the eight fallacies of distributed systems. To address these fallacies, multiple non-functional requirements must be implemented in each microservice.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"necessarynonfunctionalrequirements\">Necessary non-functional requirements<\/h2>\n\n\n\n<p>Which <a href=\"https:\/\/en.wikipedia.org\/wiki\/Non-functional_requirement\" target=\"_blank\" rel=\"noreferrer noopener\">non-functional requirements<\/a> are necessary for a microservice varies from microservice to microservice. But all microservices that use the network must address potential network failures and be able to communicate over the network. And as we just saw, all microservices need to communicate with each other to form a system, thus using the network. Also, in most cases, a microservice architecture will need state management capabilities at some point. Furthermore, each microservice must have observability capabilities, such as logging, monitoring, and tracing of requests. Although observability is not essential for a microservice to function, without it, it will be difficult to operate and debug microservices.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"service-invocation\">Service invocation<\/h3>\n\n\n\n<p>The non-functional requirement <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/microservices\/design\/interservice-communication\" target=\"_blank\" rel=\"noreferrer noopener\">service invocation<\/a> represents one of the fundamental requirements of a microservice architecture. As a distributed system, microservices must invoke each other over the network, thus implementing service invocation capability. For this to be possible, microservices must first have information about the address at which other microservices can be reached. To avoid having to store this information in the application code and thus create dependencies between microservices, a service discovery should be used. Such a service discovery provides a database that has information about all instances, addresses, and the availability of microservices in the system.<\/p>\n\n\n\n<p>This feature can be implemented in two variants: <a href=\"https:\/\/microservices.io\/patterns\/client-side-discovery.html\" target=\"_blank\" rel=\"noreferrer noopener\">client-side service discovery<\/a> and <a href=\"https:\/\/microservices.io\/patterns\/server-side-discovery.html\" target=\"_blank\" rel=\"noreferrer noopener\">server-side service discovery<\/a>. Both variants have their advantages and disadvantages, but both require either the implementation of logic in each microservice or an additional network component for service discovery. Additionally, a <a href=\"https:\/\/microservices.io\/patterns\/service-registry.html\" target=\"_blank\" rel=\"noreferrer noopener\">service registry<\/a> is required to provide information about instances and locations of microservices for either client-side or server-side service discovery implementations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"publish-subscribe\">Publish subscribe<\/h3>\n\n\n\n<p>The non-functional requirement asynchronous communication is often implemented with the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/publisher-subscriber\" target=\"_blank\" rel=\"noreferrer noopener\">publish-subscribe pattern<\/a>. Asynchronous communication is also a type of service invocation, but with the additional requirements, that asynchrony introduces. The publish-subscribe pattern is thereby used to implement a loosely coupled microservice architecture and efficient messaging between microservices. An alternative is the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/async-request-reply\" target=\"_blank\" rel=\"noreferrer noopener\">request-reply pattern<\/a>, which has the disadvantage of creating a tight coupling between microservices. Therefore, the publish-subscribe pattern should be preferred for implementing asynchronous communication.<\/p>\n\n\n\n<p>Although asynchronous communication is more efficient than synchronous communication and enables loosely coupled microservices, it is also more complex to implement. To implement the publish-subscribe pattern, either a third-party <a href=\"https:\/\/en.wikipedia.org\/wiki\/Message_broker\" target=\"_blank\" rel=\"noreferrer noopener\">message broker<\/a> can be used, or a message broker can be implemented by the developer. In both cases, it is necessary to integrate microservices with the message broker, which requires either a programming language-specific library or custom code. Consequently, implementing the non-functional requirement asynchronous communication with the publish-subscribe pattern requires an implementation in each microservice that uses it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"state-management\">State management<\/h3>\n\n\n\n<p>The implementation of the non-functional requirement state management is necessary, when microservices are required to retrieve or persist data. While it may not be necessary to implement state management in every microservice, most services will need to store data at some point. Additionally, to prevent tight coupling of microservices, each microservice should have its own state management. <\/p>\n\n\n\n<p>In the context of a distributed system, this means <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/architecture\/cloud-native\/distributed-data\" target=\"_blank\" rel=\"noreferrer noopener\">distributed databases<\/a> with their own set of challenges. For example, data consistency can no longer be achieved simply by using database transactions in a single database. Therefore, new concepts such as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Eventual_consistency\" target=\"_blank\" rel=\"noreferrer noopener\">eventual consistency<\/a> or the <a href=\"https:\/\/microservices.io\/patterns\/data\/saga.html\" target=\"_blank\" rel=\"noreferrer noopener\">saga pattern<\/a> are required, which developers may not be familiar with. In addition, distributed databases mean that multiple microservices must be integrated with a database, which is usually a third-party component with its own API and integration libraries.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"security\">Security<\/h3>\n\n\n\n<p>As distributed systems, microservices communicate over the network, thus the non-functional requirement security must be considered. Unlike a monolith that uses inter-process communication, network calls are much more vulnerable to attack and must be protected. This means that each microservice must implement security, while a monolith only needs to implement network security capabilities when it communicates with other systems. Of course, implementing authentication, authorization, and encryption in each microservice is very time-consuming. Therefore, in practice, there is often a gateway that secures the communication of microservices with other systems. This is known as the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/gateway-offloading\" target=\"_blank\" rel=\"noreferrer noopener\">gateway offloading pattern<\/a>. However, a gateway only ensures that all communication with external systems is secured, but not calls between microservices. Consequently, a trade-off must be made between safety and time for implementation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"resilience\">Resilience<\/h3>\n\n\n\n<p>As mentioned earlier, microservices are distributed systems that need to communicate over the network. Therefore, microservices must deal with network errors, network latency, lost messages, and unreachable microservices on which they rely. This means that implementing the non-functional requirement resilience is not optional, but a necessity in a microservice architecture. Consequently, each microservice must take measures for network outages by using mechanisms and patterns such as <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/retry\" target=\"_blank\" rel=\"noreferrer noopener\">retries<\/a>, <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/rate-limiting-pattern\" target=\"_blank\" rel=\"noreferrer noopener\">rate limiting<\/a>, <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/throttling\" target=\"_blank\" rel=\"noreferrer noopener\">throttling<\/a>, <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/circuit-breaker\" target=\"_blank\" rel=\"noreferrer noopener\">circuit breaker<\/a> or <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/bulkhead\" target=\"_blank\" rel=\"noreferrer noopener\">bulkhead<\/a>. <\/p>\n\n\n\n<p>Unfortunately, it is necessary to implement these measures in many places across microservices, and to make it worse implementation is not straightforward. Of course, it is possible to use libraries for these patterns, but this in turn ties the developer to specific programming languages or requires using different libraries for each programming language. In summary, these patterns enable the implementation of robust microservice architectures that can handle network-related failures. But they come with a price tag and once again require a trade-off to be made.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"observability\">Observability<\/h3>\n\n\n\n<p>The non-functional requirement observability is not necessary for a microservice architecture to function. But without it, eventually, it will be difficult to debug and operate a microservice architecture. Therefore, to avoid these problems, observability should be implemented from the start. Observability can be divided into three pillars: <em>Distributed Tracing<\/em>, <em>Logging <\/em>and <em>Monitoring<\/em>. <\/p>\n\n\n\n<p>In this definition, distributed tracing is about correlating logs generated in different and distributed microservices to debug service calls across multiple services. Furthermore, logging is about creating and storing events for later analysis. Finally, monitoring is about gaining insight into the state of the infrastructure on which applications and services are running. In the context of microservices, the challenge lies in aggregating and correlating the distributed data generated by observability implementations. Again, this is a requirement that can be solved by using third-party libraries and components. But it does not come for free and must be considered in every microservice.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"singlelanguagevspolyglotmicroservices\">Single language vs polyglot microservices<\/h2>\n\n\n\n<p>As we can see, there is a lot to implement and to consider when using a microservice architecture. This applies to both single language and polyglot microservices. The difference lies in the number of programming languages in which non-functional requirements must be implemented.<\/p>\n\n\n\n<p>Since each programming language has its own peculiarities, and tools are usually not available in every programming language, the complexity and the number of implementations increases with each additional programming language. On the other hand, using more than one technology stack has also various advantages and might be even required to implement a use case. Thus, choosing between single language and polyglot microservices is not straightforward and should be done carefully.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-1024x683.jpg\" data-orig-src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-1024x683.jpg\" alt=\"Microservice architectures are complex\" class=\"lazyload wp-image-13467\" width=\"806\" height=\"538\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27806%27%20height%3D%27538%27%20viewBox%3D%270%200%20806%20538%27%3E%3Crect%20width%3D%27806%27%20height%3D%27538%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-200x133.jpg 200w, https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-300x200.jpg 300w, https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-400x267.jpg 400w, https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-600x400.jpg 600w, https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-768x512.jpg 768w, https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-800x533.jpg 800w, https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-1024x683.jpg 1024w, https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-1200x800.jpg 1200w, https:\/\/whiteduck.de\/wp-content\/uploads\/john-barkiple-l090uFWoPaI-unsplash-1536x1024.jpg 1536w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 806px) 100vw, 806px\" \/><figcaption>Implementing a polyglot microservice architecture might feel like that<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"advantagesofpolyglotmicroservices\">Advantages of polyglot microservices<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Each microservice can use the optimal technology for its use case (e.g. Python for AI\/ML, Rust for Safety and Speed, etc.)<\/li><li>Easier adoption of new and innovative technology, which is often only available in certain programming languages<\/li><li>Developers can use the programming language they love the most<\/li><li>Developers are more flexible about which projects they can contribute to<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"disadvantagesofpolyglotmicroservices\">Disadvantages of polyglot microservices<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Differences in programming languages<\/li><li>Differences in tooling (libraries, SDKs, frameworks)<\/li><li>Sharing of implementations between different programming languages is difficult<\/li><li>Time for implementation and complexity are increasing with each additional programming language<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n\n<p>While it may seem that using polyglot microservices is out of the question after we have looked at the complexity that even single language microservices have to deal with, there are significant advantages in using them. The concise list of benefits above may not fully reflect this, but just being able to use the optimal technology for each use case and microservice in a microservice architecture can be a huge advantage.<\/p>\n\n\n\n<p>Before we look at modern tooling such as <a href=\"https:\/\/whiteduck.de\/dapr-the-future-of-cloudnative-development-is-here\/\" target=\"_blank\" rel=\"noreferrer noopener\">Dapr <\/a>that allows us to take advantage of polyglot microservices without the complexity overhead, we&#8217;ll need to take a closer look at the drawbacks. This is necessary to understand what challenges modern tooling needs to solve to reduce the additional complexity of polyglot microservices. Therefore, the next blog post in this series will show you what challenges experienced developers face with polyglot microservices. Stay tuned!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog post series about polyglot microservices is based on my master&#8217;s thesis on &#8220;Polyglot Microservice Development with the Distributed Application Runtime&#8221;, which I have written in cooperation with white duck. The aim of this series is to give you an overview of polyglot microservices and show you why modern tooling like Dapr is needed <a href=\"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/\"> <\/p>\n<div style=\"color:#ff9900\">[&#8230;]<\/div>\n<p><\/a><\/p>\n","protected":false},"author":14,"featured_media":13196,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_tribe_events_control_status":"","_tribe_events_control_status_canceled_reason":"","_tribe_events_control_status_postponed_reason":"","_tribe_events_control_online":"","_tribe_events_control_online_url":"","footnotes":""},"categories":[],"tags":[316,382,414,111,413],"class_list":["post-11126","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-cloudnative","tag-dapr","tag-distributed-systems","tag-microservices","tag-polyglot-microservices"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>1\/3 Polyglot microservice development with Dapr - What are polyglot Microservices? - white duck<\/title>\n<meta name=\"description\" content=\"This blogpost offers an overview of polyglot microservices, what is necessary for their implementation; their advantages and disadvantages.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"1\/3 Polyglot microservice development with Dapr - What are polyglot Microservices? - white duck\" \/>\n<meta property=\"og:description\" content=\"This blogpost offers an overview of polyglot microservices, what is necessary for their implementation; their advantages and disadvantages.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/\" \/>\n<meta property=\"og:site_name\" content=\"white duck\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/whiteduckgmbh\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-20T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-09T08:57:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/whiteduck.de\/wp-content\/uploads\/matt-walsh-tVkdGtEe2C4-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1707\" \/>\n\t<meta property=\"og:image:height\" content=\"2560\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Markus Voit\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/whiteduck.de\/wp-content\/uploads\/\/matt-walsh-tVkdGtEe2C4-unsplash-scaled.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@whiteduck_gmbh\" \/>\n<meta name=\"twitter:site\" content=\"@whiteduck_gmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Markus Voit\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/\"},\"author\":{\"name\":\"Markus Voit\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#\\\/schema\\\/person\\\/786bc95aaeae8203e491c3acea75529e\"},\"headline\":\"1\\\/3 Polyglot microservice development with Dapr &#8211; What are polyglot Microservices?\",\"datePublished\":\"2021-10-20T14:00:00+00:00\",\"dateModified\":\"2022-02-09T08:57:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/\"},\"wordCount\":2064,\"image\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/whiteduck.de\\\/wp-content\\\/uploads\\\/lego-parts-scaled.jpg\",\"keywords\":[\"cloudnative\",\"Dapr\",\"Distributed systems\",\"Microservices\",\"polyglot Microservices\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/\",\"url\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/\",\"name\":\"1\\\/3 Polyglot microservice development with Dapr - What are polyglot Microservices? - white duck\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/whiteduck.de\\\/wp-content\\\/uploads\\\/lego-parts-scaled.jpg\",\"datePublished\":\"2021-10-20T14:00:00+00:00\",\"dateModified\":\"2022-02-09T08:57:32+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#\\\/schema\\\/person\\\/786bc95aaeae8203e491c3acea75529e\"},\"description\":\"This blogpost offers an overview of polyglot microservices, what is necessary for their implementation; their advantages and disadvantages.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/#primaryimage\",\"url\":\"https:\\\/\\\/whiteduck.de\\\/wp-content\\\/uploads\\\/lego-parts-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/whiteduck.de\\\/wp-content\\\/uploads\\\/lego-parts-scaled.jpg\",\"width\":2560,\"height\":1920},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/what-are-polyglot-microservices\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"1\\\/3 Polyglot microservice development with Dapr &#8211; What are polyglot Microservices?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/\",\"name\":\"white duck\",\"description\":\"Your Partner for Microsoft Azure &amp; AI\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#\\\/schema\\\/person\\\/786bc95aaeae8203e491c3acea75529e\",\"name\":\"Markus Voit\",\"url\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/author\\\/markus_voit\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"1\/3 Polyglot microservice development with Dapr - What are polyglot Microservices? - white duck","description":"This blogpost offers an overview of polyglot microservices, what is necessary for their implementation; their advantages and disadvantages.","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:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/","og_locale":"en_US","og_type":"article","og_title":"1\/3 Polyglot microservice development with Dapr - What are polyglot Microservices? - white duck","og_description":"This blogpost offers an overview of polyglot microservices, what is necessary for their implementation; their advantages and disadvantages.","og_url":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/","og_site_name":"white duck","article_publisher":"https:\/\/www.facebook.com\/whiteduckgmbh","article_published_time":"2021-10-20T14:00:00+00:00","article_modified_time":"2022-02-09T08:57:32+00:00","og_image":[{"width":1707,"height":2560,"url":"https:\/\/whiteduck.de\/wp-content\/uploads\/matt-walsh-tVkdGtEe2C4-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Markus Voit","twitter_card":"summary_large_image","twitter_image":"https:\/\/whiteduck.de\/wp-content\/uploads\/\/matt-walsh-tVkdGtEe2C4-unsplash-scaled.jpg","twitter_creator":"@whiteduck_gmbh","twitter_site":"@whiteduck_gmbh","twitter_misc":{"Written by":"Markus Voit","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/#article","isPartOf":{"@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/"},"author":{"name":"Markus Voit","@id":"https:\/\/whiteduck.de\/en\/#\/schema\/person\/786bc95aaeae8203e491c3acea75529e"},"headline":"1\/3 Polyglot microservice development with Dapr &#8211; What are polyglot Microservices?","datePublished":"2021-10-20T14:00:00+00:00","dateModified":"2022-02-09T08:57:32+00:00","mainEntityOfPage":{"@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/"},"wordCount":2064,"image":{"@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/#primaryimage"},"thumbnailUrl":"https:\/\/whiteduck.de\/wp-content\/uploads\/lego-parts-scaled.jpg","keywords":["cloudnative","Dapr","Distributed systems","Microservices","polyglot Microservices"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/","url":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/","name":"1\/3 Polyglot microservice development with Dapr - What are polyglot Microservices? - white duck","isPartOf":{"@id":"https:\/\/whiteduck.de\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/#primaryimage"},"image":{"@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/#primaryimage"},"thumbnailUrl":"https:\/\/whiteduck.de\/wp-content\/uploads\/lego-parts-scaled.jpg","datePublished":"2021-10-20T14:00:00+00:00","dateModified":"2022-02-09T08:57:32+00:00","author":{"@id":"https:\/\/whiteduck.de\/en\/#\/schema\/person\/786bc95aaeae8203e491c3acea75529e"},"description":"This blogpost offers an overview of polyglot microservices, what is necessary for their implementation; their advantages and disadvantages.","breadcrumb":{"@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/#primaryimage","url":"https:\/\/whiteduck.de\/wp-content\/uploads\/lego-parts-scaled.jpg","contentUrl":"https:\/\/whiteduck.de\/wp-content\/uploads\/lego-parts-scaled.jpg","width":2560,"height":1920},{"@type":"BreadcrumbList","@id":"https:\/\/whiteduck.de\/en\/what-are-polyglot-microservices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/whiteduck.de\/en\/"},{"@type":"ListItem","position":2,"name":"1\/3 Polyglot microservice development with Dapr &#8211; What are polyglot Microservices?"}]},{"@type":"WebSite","@id":"https:\/\/whiteduck.de\/en\/#website","url":"https:\/\/whiteduck.de\/en\/","name":"white duck","description":"Your Partner for Microsoft Azure &amp; AI","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/whiteduck.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/whiteduck.de\/en\/#\/schema\/person\/786bc95aaeae8203e491c3acea75529e","name":"Markus Voit","url":"https:\/\/whiteduck.de\/en\/author\/markus_voit\/"}]}},"_links":{"self":[{"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/posts\/11126","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/comments?post=11126"}],"version-history":[{"count":0,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/posts\/11126\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/media\/13196"}],"wp:attachment":[{"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/media?parent=11126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/categories?post=11126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/tags?post=11126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}