{"id":1031,"date":"2019-11-30T09:00:13","date_gmt":"2019-11-30T08:00:13","guid":{"rendered":"http:\/\/cmagazine.test\/naturally-born-reactive-systems\/"},"modified":"2021-06-28T12:32:52","modified_gmt":"2021-06-28T10:32:52","slug":"naturally-born-reactive-systems","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/","title":{"rendered":"Naturally born reactive systems"},"content":{"rendered":"<p>Modern applications are required to do many tasks at the same time, in the optimal way, and be very quick to respond to consumers\u2019 input and expectations.<\/p>\n<p>Moreover, <span id=\"urn:batch-analysis-da4639d9-d06c-4a91-a2ad-8bdfbf562702\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">software<\/span> needs to <b>adapt<\/b> to changing scenarios, in a consistent and resilient fashion.<\/p>\n<p>Thanks to Charles Darwin, we all know that the ability to adapt is the key to evolution for the species of the animal realm. But what about software development?<\/p>\n<p>What is the key to survive in the code jungle?<\/p>\n<p>While there is not a single answer to this big question, you may find some inspiration at <a href=\"https:\/\/events.codemotion.com\/conferences\/milan\/2019\/\"><strong>Codemotion Milan 2019<\/strong><\/a>, attending to Grace Jansen\u2019s talk <b><i>Reacting to the future of application architecture<\/i><\/b> on what we can learn from <i>s<\/i>uccessful biological models that are naturally occurring in our world (more info in the <a href=\"https:\/\/events.codemotion.com\/conferences\/milan\/2019\/agenda\/\">agenda<\/a>). Last tickets are still available: <a href=\"https:\/\/www.eventbrite.co.uk\/e\/codemotion-milan-2019-conference-october-24-25-tickets-53998269277\">get yours here<\/a>!<\/p>\n<p>In the meantime, we could ask ourselves: why are <strong>reactive systems<\/strong> so fashionable these days? The reactive paradigm looks like the key to manage the <span id=\"urn:batch-analysis-c5604bed-c972-4d6e-80be-7c186431eeb0\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/complexity\">complexity<\/span> of modern software architecture, so it may be worth to have at least an overall understanding of its basic <span id=\"urn:batch-analysis-fcc69147-013d-4460-b113-be81cf8449ee\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/feature_machine_learning\">features<\/span>.<\/p>\n<h2><b>Reactive systems for the masses<\/b><\/h2>\n<p>The <a href=\"https:\/\/www.codemotion.com\/magazine\/interview-with-dave-farley-4849\">reactive manifesto<\/a> describes what a reactive architecture looks like: responsive, resilient, elastic and message-driven. According to these principles, a reactive application should be conceived to work to its best, even under adverse conditions.<\/p>\n<p>The manifesto really sounds like \u201ccounteracting to Murphy\u2019s law\u201d was a functional <span id=\"urn:batch-analysis-dba5f50f-ed0b-4b75-84f9-368ccc4fec09\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/requirement\">requirement<\/span> and the main cross-cutting concern of your application.<\/p>\n<p>Kidding aside, there are indeed a lot of practical hints on how to pack all these good intentions into your design and the good news is that none of that is really brand-new. Being reactive, actually, is a matter of mindset, rather than technology.<\/p>\n<p>We start analyzing these principles from the last one, because the message-driven concept is, under many aspects, the cornerstone of the whole reactive way of thinking.<\/p>\n<p>A message-driven system is by definition, made up of parts or components that are exchanging information to carry out their work. In order to ensure <i><span id=\"urn:batch-analysis-c85a3adc-d2a8-41f0-8911-0015d0f928f1\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/responsiveness\">responsiveness<\/span><\/i>, components must rely on <b>asynchronous<\/b> message delivery.<\/p>\n<p>With reference to the way messages propagates through the system, you can think of reactive design as a good match for <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/backend-dev\/how-to-transition-from-monolithic-systems-to-microservices-with-hexagonal-architecture\/\" target=\"_blank\" rel=\"noopener\">microservices architectures<\/a>. Indeed, microservices provide a model for modular applications conceived as a set of distinct services inter-operating by means of lightweight communication protocols.<\/p>\n<p>Most of the times, these protocols are based on RESTful APIs since they are stateless (i.e. lightweight on server side) and travel over HTTP requests that are by nature, asynchronous.<\/p>\n<p>However, microservices architectures are not reactive by default, since there is no <i>resilient<\/i> <span id=\"urn:batch-analysis-cfe6592e-2632-49cb-af7b-ec9c3adadb8a\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/management\">management<\/span> of messages. In this aspect, a reactive system typically adds to the microservices paradigm persistent or <b>durable<\/b> message queues to implement fail recovery strategies.<\/p>\n<p>Reactive systems embrace <span id=\"urn:batch-analysis-471fa544-fad6-4015-8830-8c1846f6f247\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/failure\">failure<\/span> as a fact, rather than a possibility. Hence the message system is also responsible to propagate errors in order to enable counteracting policies based on the feedback sent by each component.<\/p>\n<p>In reactive jargon the so called back-pressure, is applied to manage varying workloads in a graceful fashion. That practically means that reactive systems need to be <i>elastic<\/i>, hence scalable and distributed across a net of homogeneous nodes with no bottlenecks or central point of <span id=\"urn:batch-analysis-609b17a2-c7ed-4467-b3b5-d57160d85bf8\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/failure\">failures<\/span>.<\/p>\n<p>In the latest years, <b>containers<\/b> have proven to be a solid and cost-effective technology to deploy services and manage the effects of their eventual <span id=\"urn:batch-analysis-74be751b-4b8f-4fd3-8385-5b7b63f15bac\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/failure\">failures<\/span> in an automated fashion.<\/p>\n<p>Therefore, many times, you will find that reactive systems are built on top of container cloud infrastructures.<\/p>\n<p>So far, nothing is new and you can safely say that at architectural level, reactive design combines already existing technologies to fulfill its promises. You could indeed ask yourself which came first, reactive principles or reactive-enabling technologies?<\/p>\n<p>Like the chicken and the egg, there is no definitive answer, but we can say for sure that all these abstract concepts must go down to actual code at some point, and that\u2019s where the term <i>reactive <\/i>reaches the highest value in innovation.<\/p>\n<h2><b>The devil is in the (implementation) details<\/b><\/h2>\n<p>The reactive manifesto qualifies the behavior that a system should exhibit to be reactive, but there is no specific description of how it is implemented.<\/p>\n<p>As an example, reactive systems can be built on top of event-driven applications, using the well known Observer design pattern. Such implementations are commonly found in many frameworks based on <span id=\"urn:batch-analysis-a525b029-310f-42f0-ba46-6539260fbbe1\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/object-oriented_programming\">Object Oriented Programming<\/span> languages, and they could theoretically fit in a reactive scenario too.<\/p>\n<p>However, in the recent years we assisted to the rise of <b>reactive <span id=\"urn:batch-analysis-c942042f-231b-4269-9a55-ecba468fbc9d\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">programming<\/span> <\/b>as the new frontier in the implementation of distributed systems.<\/p>\n<p>Reactive <span id=\"urn:batch-analysis-3f2fd95f-e560-4621-89ee-6d00c4841d9f\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">programming<\/span> provides an alternative data model foundation based on an abstraction called <b>stream<\/b>. In other words, a <i>stream<\/i> is to reactive programming what an <i>object<\/i> is to OOP.<\/p>\n<p>Streams are defined as sequences of values that evolve through time. Instead of interfacing to them with getter and setter methods in an imperative fashion like we are used to with objects in OOP, streams actively notify changes by means of <b>subscriptions<\/b>.<\/p>\n<p>With reference to the classic producer\/consumer scheme, when streams play the role of the producer they <i>push<\/i> the information to their consumers as soon as it is available, instead of waiting for the consumer to <i>pull<\/i> an update request.<\/p>\n<p>Consumers can be in turn, other streams that transform the information received in some way and forward the results to other destinations.<\/p>\n<p>But subscription in reactive <span id=\"urn:batch-analysis-92a7bcd0-022a-422d-9883-6d6cededa6fd\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">programming<\/span> is not just a method to notify state changes. It is indeed a way to build effective <b>data binding<\/b> between different entities addressing two of the major concerns of DDD (domain driven design) like <i>isolation<\/i> and <i>encapsulation<\/i> of <span id=\"urn:batch-analysis-b9a71d66-e3b7-4c15-a5f6-98bb849a83cf\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> at the same time.<\/p>\n<p>Instead of relying on state propagation through the <b>copy<\/b> of updated values after pull requests, subscription is implemented with the execution of asynchronous <b>callbacks<\/b> every time a new value is pushed by a stream to its subscribers.<\/p>\n<p>Callbacks execution, therefore, prevents the need to store a copy of data values just for the sake of encapsulation, making state propagation automatic and <b>safe<\/b> as long as they do not have <i>side effects<\/i> on the <span id=\"urn:batch-analysis-3fc7a90a-6e3e-40c2-933d-5f63d7b9ecaf\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> they receive.<\/p>\n<p>In this sense, reactive state management is easily implemented according to the principles of <i>referential transparency<\/i> of <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/backend-dev\/lsp-functional-programming\/\" target=\"_blank\" rel=\"noopener\">functional <span id=\"urn:batch-analysis-c82a1ff5-0dff-4827-aeb9-34c506800ff4\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">programming<\/span><\/a>. That practically means that callbacks are guaranteed to never change the values back in the source stream, thus ensuring isolation between subscribers and providing an improvement in the resiliency of the overall system without additional effort.<\/p>\n<p>Beside that, streams are also called <b>observables<\/b> since the subscription mechanism provides an effective way to link state changes to actions. Observability in turn, implies the ability not only to <b>monitor<\/b> each part of the system but also to understand the reasons of eventual <span id=\"urn:batch-analysis-16d1e525-49ee-461d-b4a7-d8503e9ed33a\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/failure\">failures<\/span> just looking at its history. Aside resiliency, this also affects the <i>elasticity<\/i> of the system, opening the way to the implementation of adaptive workload policies.<\/p>\n<p>Streams provide a very high level of abstraction that makes them suitable to model every data source into a reactive system: variables, user input, data caches, sensor events or <b>messages <\/b>that travel between components of the reactive system itself.<\/p>\n<p>Hence reactive <span id=\"urn:batch-analysis-95f12364-624c-4633-a0ee-08b3e926b3eb\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">programming<\/span> is the founding paradigm of many frameworks that are conceived to support the development of reactive architectures with <i>ad hoc<\/i> features.<\/p>\n<h2><b>Conclusions<\/b><\/h2>\n<p>Modelling our application on the base of streams of information is not an intuitive and easy task at first. Nevertheless, our everyday <span id=\"urn:batch-analysis-5fba3ccc-46c9-415f-942b-f834bd9c68e8\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/user_experience\">user experience<\/span> can give us a solid understanding of the abstract principles of the reactive manifesto.<\/p>\n<p>Whenever we use an application that runs smoothly and consistently, rarely letting us down with some cryptic or vague error message, we know that we are probably dealing with a system designed to be reactive.<\/p>\n<p>Responsiveness, resiliency and elasticity are desirable <span id=\"urn:batch-analysis-36e8b08b-4cb0-440c-90e2-473c3e96b67d\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/feature_machine_learning\">features<\/span> of every software application, hence in a certain way, we can tell that reactive architectures are a natural consequence of the goals that we set for our designs.<\/p>\n<p>We know from biology that the term reactive qualifies a behavior.<\/p>\n<p>In software development it translates into a set of emergent properties, rather than a specific technology. Nevertheless, some frameworks are based on abstractions that are more suitable than others to achieve reactive <span id=\"urn:batch-analysis-f2a34f66-a565-426f-882f-ce44aeabe701\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/feature_machine_learning\">features<\/span>, hence the level of reactiveness actually depends on our attitude towards the integration of these new tools.<\/p>\n<p>Don\u2019t miss the opportunity to learn more on how to integrate reactive design into your natural way of thinking attending to Grace Jansen\u2019s talk <b><i>Reacting to the future of application architecture <\/i><\/b>at <a href=\"https:\/\/events.codemotion.com\/conferences\/milan\/2019\/\">Codemotion Milan 2019<\/a>. Tickets are still available, get yours <a href=\"https:\/\/www.eventbrite.co.uk\/e\/codemotion-milan-2019-conference-october-24-25-tickets-53998269277?aff=buttonHomeSite\">here<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Modern applications are required to do many tasks at the same time, in the optimal way, and be very quick to respond to consumers\u2019 input and expectations. Moreover, software needs to adapt to changing scenarios, in a consistent and resilient fashion. Thanks to Charles Darwin, we all know that the ability to adapt is the&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/\">Read more<\/a><\/p>\n","protected":false},"author":33,"featured_media":946,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[36],"tags":[22],"collections":[],"class_list":{"0":"post-1031","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend","8":"tag-codemotion-milan","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Naturally born reactive systems - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Why are reactive systems so fashionable these days? In this article you will get an overall understanding of reactive paradigms basic features.\" \/>\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.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Naturally born reactive systems\" \/>\n<meta property=\"og:description\" content=\"Why are reactive systems so fashionable these days? In this article you will get an overall understanding of reactive paradigms basic features.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-30T08:00:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-28T10:32:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1013\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Gabriella Giordano\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gabriella Giordano\" \/>\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.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/\"},\"author\":{\"name\":\"Gabriella Giordano\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/34dc42d951a0781e0bf59e7eb3349cc9\"},\"headline\":\"Naturally born reactive systems\",\"datePublished\":\"2019-11-30T08:00:13+00:00\",\"dateModified\":\"2021-06-28T10:32:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/\"},\"wordCount\":1433,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg\",\"keywords\":[\"Codemotion Milan\"],\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/\",\"name\":\"Naturally born reactive systems - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg\",\"datePublished\":\"2019-11-30T08:00:13+00:00\",\"dateModified\":\"2021-06-28T10:32:52+00:00\",\"description\":\"Why are reactive systems so fashionable these days? In this article you will get an overall understanding of reactive paradigms basic features.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg\",\"width\":1013,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/backend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Naturally born reactive systems\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/34dc42d951a0781e0bf59e7eb3349cc9\",\"name\":\"Gabriella Giordano\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1f774e60e728e161d77afc375d94c8670bd2d0e48751456650aa735180078b7f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1f774e60e728e161d77afc375d94c8670bd2d0e48751456650aa735180078b7f?s=96&d=mm&r=g\",\"caption\":\"Gabriella Giordano\"},\"description\":\"I'm a software engineer and I do a lot of Qt\/C++ programming for work, and also for fun :) Currently, I'm running my own ICT consulting company that provides custom software development services and training for IT professionals.\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/gabriella-giordano\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Naturally born reactive systems - Codemotion Magazine","description":"Why are reactive systems so fashionable these days? In this article you will get an overall understanding of reactive paradigms basic features.","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.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/","og_locale":"en_US","og_type":"article","og_title":"Naturally born reactive systems","og_description":"Why are reactive systems so fashionable these days? In this article you will get an overall understanding of reactive paradigms basic features.","og_url":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2019-11-30T08:00:13+00:00","article_modified_time":"2021-06-28T10:32:52+00:00","og_image":[{"width":1013,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg","type":"image\/jpeg"}],"author":"Gabriella Giordano","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Gabriella Giordano","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/"},"author":{"name":"Gabriella Giordano","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/34dc42d951a0781e0bf59e7eb3349cc9"},"headline":"Naturally born reactive systems","datePublished":"2019-11-30T08:00:13+00:00","dateModified":"2021-06-28T10:32:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/"},"wordCount":1433,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg","keywords":["Codemotion Milan"],"articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/","url":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/","name":"Naturally born reactive systems - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg","datePublished":"2019-11-30T08:00:13+00:00","dateModified":"2021-06-28T10:32:52+00:00","description":"Why are reactive systems so fashionable these days? In this article you will get an overall understanding of reactive paradigms basic features.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg","width":1013,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/naturally-born-reactive-systems\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/backend\/"},{"@type":"ListItem","position":3,"name":"Naturally born reactive systems"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/34dc42d951a0781e0bf59e7eb3349cc9","name":"Gabriella Giordano","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1f774e60e728e161d77afc375d94c8670bd2d0e48751456650aa735180078b7f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1f774e60e728e161d77afc375d94c8670bd2d0e48751456650aa735180078b7f?s=96&d=mm&r=g","caption":"Gabriella Giordano"},"description":"I'm a software engineer and I do a lot of Qt\/C++ programming for work, and also for fun :) Currently, I'm running my own ICT consulting company that provides custom software development services and training for IT professionals.","url":"https:\/\/www.codemotion.com\/magazine\/author\/gabriella-giordano\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-600x600.jpg","author_info":{"display_name":"Gabriella Giordano","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/gabriella-giordano\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg",1013,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg",1013,675,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg",1013,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg",1013,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9280-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Gabriella Giordano","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/gabriella-giordano\/"},"uagb_comment_info":0,"uagb_excerpt":"Modern applications are required to do many tasks at the same time, in the optimal way, and be very quick to respond to consumers\u2019 input and expectations. Moreover, software needs to adapt to changing scenarios, in a consistent and resilient fashion. Thanks to Charles Darwin, we all know that the ability to adapt is the&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/1031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=1031"}],"version-history":[{"count":4,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/1031\/revisions"}],"predecessor-version":[{"id":15274,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/1031\/revisions\/15274"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/946"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=1031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=1031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=1031"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=1031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}