{"id":26838,"date":"2019-08-12T21:20:00","date_gmt":"2019-08-12T21:20:00","guid":{"rendered":"https:\/\/building.nubank.com\/microservices-at-nubank-an-overview\/"},"modified":"2024-03-18T17:22:08","modified_gmt":"2024-03-18T17:22:08","slug":"microservicios-en-nubank-una-descripcion-general","status":"publish","type":"post","link":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/","title":{"rendered":"Microservicios en Nubank, una descripci\u00f3n general"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Los microservicios son el estilo arquitect\u00f3nico predominante en la actualidad. Para nuestro prop\u00f3sito, no vale la pena describir aqu\u00ed lo que significa y sus ventajas, porque hay mucho contenido excelente disponible en otros lugares. En lugar de eso, vamos a ser m\u00e1s espec\u00edficos y revisar lo que hemos aprendido al desarrollar un sistema complejo en una fintech durante los \u00faltimos seis a\u00f1os. Esta es una breve historia de los microservicios en Nubank.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>El comienzo<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seis a\u00f1os, de 2013 a 2019, es tambi\u00e9n la vida \u00fatil completa de la empresa, lo que significa que comenzamos con microservicios desde el primer d\u00eda, desafiando el consejo est\u00e1ndar de comenzar con un monolito. El razonamiento que se suele dar es que es mejor optimizar para lograr un giro r\u00e1pido al principio&nbsp; \u2013 mientras la startup todav\u00eda busca adaptarse al mercado \u2013 para luego refactorizar a una estructura m\u00e1s estable. Descubrimos que era cierto que comenzar con microservicios, particularmente en 2013, nos hizo m\u00e1s lentos al principio. Armar una infraestructura de aprovisionamiento compleja mientras se creaba el producto desde cero fue mucho para un equipo peque\u00f1o, y tom\u00f3 alg\u00fan tiempo hasta que sentimos que el trabajo flu\u00eda sin problemas. Por otro lado, nuestro negocio no era muy propenso a cambios r\u00e1pidos y esos primeros meses fueron probablemente el mejor momento para invertir en una base s\u00f3lida, en lugar de m\u00e1s tarde, cuando tuvimos que enfrentar las crecientes presiones de ampliar y desarrollar el conjunto de funciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso no quiere decir que hayamos hecho todo bien desde el principio. Por el contrario, tuvimos que cambiar muchas de nuestras abstracciones centrales a medida que entend\u00edamos el dominio con mayor profundidad, lo que en ocasiones signific\u00f3 que tuvimos que volver a trazar los l\u00edmites del servicio. Este proceso de aprendizaje contin\u00faa hasta el d\u00eda de hoy. En un momento dado, un equipo u otro estar\u00e1 trabajando en dividir un servicio o fusionar dos servicios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/bit.ly\/jobs-at-nu\">Consulte nuestras oportunidades laborales&nbsp;<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Aprovisionamiento e implementaci\u00f3n<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nuestra infraestructura de producci\u00f3n pas\u00f3 por varias iteraciones. Comenzamos sobre un servicio Chef administrado, experimentamos con CoreOS Fleet y ECS, construimos una infraestructura simple de <span class=\"quotes\">\u2033<\/span>un contenedor por m\u00e1quina virtual<span class=\"quotes\">\u2033<\/span> utilizando abstracciones centrales de AWS EC2 y CloudFormation, para finalmente converger en la implementaci\u00f3n de nuestros propios cl\u00fasteres de Kubernetes. Fue un viaje largo pero mucho menos arduo debido a la automatizaci\u00f3n generalizada. Todos nuestros recursos en la nube, desde el principio, se aprovisionan mediante alg\u00fan tipo de proceso automatizado. Incluso las situaciones \u00fanicas, como la instancia de livegrep que un equipo quer\u00eda poner en funcionamiento r\u00e1pidamente, deben automatizarse. Como la mayor\u00eda de las cosas en la empresa, nuestra obsesi\u00f3n por la automatizaci\u00f3n es mucho m\u00e1s una norma cultural que una regla impuesta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La \u00faltima encarnaci\u00f3n de nuestra infraestructura de automatizaci\u00f3n toma la forma de una base de c\u00f3digo Clojure que organiza la creaci\u00f3n de recursos de AWS o Kubernetes. Una aportaci\u00f3n fundamental a ese proceso proviene de un repositorio de git donde los ingenieros colaboran para declarar metadatos para cada microservicio: qu\u00e9 tipo de base de datos requiere, qu\u00e9 tan pesada es la carga de trabajo, qu\u00e9 tipo de herramientas de compilaci\u00f3n y prueba se deben utilizar durante la compilaci\u00f3n, etc. Con base en esos datos, nuestra automatizaci\u00f3n puede hacer magia, como aprovisionar bases de datos, configurar el descubrimiento de servicios e incluso crear canales de compilaci\u00f3n completos para todos los servicios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Infraestructura Inmutable<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gran parte de nuestra cultura de ingenier\u00eda est\u00e1 conectada con la comunidad y las ideas de programaci\u00f3n funcional. Una idea central es el concepto de inmutabilidad: siempre es m\u00e1s seguro crear copias actualizadas de los datos que cambiarlos en el momento. Cuando trasladamos esta visi\u00f3n al dominio de la infraestructura, se traduce en crear copias actualizadas de los recursos en lugar de mutarlos en su lugar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una aplicaci\u00f3n simple de este principio se aplica a la implementaci\u00f3n: primero creamos nuevos contenedores para luego derribar las instancias antiguas. No hay nada particularmente interesante all\u00ed: un ejemplo bastante est\u00e1ndar de t\u00e9cnicas azul-verde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una aplicaci\u00f3n a mayor escala es la de generar nuevas pilas de producci\u00f3n. De vez en cuando, tenemos que realizar cambios que van m\u00e1s all\u00e1 de una simple implementaci\u00f3n. Podr\u00edamos estar reforzando la seguridad, mejorando el descubrimiento de servicios o redimensionando los elementos de infraestructura. Independientemente de los detalles, el enfoque general es el mismo. Giramos una pila de producci\u00f3n completa (incluidos todos los servicios, cl\u00fasteres de Kubernetes, cl\u00fasteres de Kafka, etc.), probamos si est\u00e1 funcionando bien y luego dirigimos el tr\u00e1fico a la nueva pila actualizando los alias DNS de todos los puntos de entrada. No hace falta decir que todo este proceso est\u00e1 muy automatizado, hasta el punto de que un peque\u00f1o equipo puede ejecutar todos los pasos cada dos meses.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Comunicaci\u00f3n de servicio y mensajer\u00eda asincr\u00f3nica.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuidar las finanzas de las personas es un cargo que nos tomamos muy en serio. En consecuencia, la integridad de los datos es de suma importancia. Ejecutar una malla de microservicios manteniendo esos altos est\u00e1ndares plantea nuevos desaf\u00edos: \u00bfc\u00f3mo garantizar que los datos nunca se pierdan en un mundo donde las fallas parciales y las particiones de red son la norma? Nuestra respuesta es depender en gran medida de la mensajer\u00eda asincr\u00f3nica.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/KItFgwC-_P1siIGllrnslwQZe9kazaI-Jn9IpbI5f-KRJ5afgrwlBmAP3jmQPGniLTqj_aU2XqQt9D7jEWmLMae0knMP950PEkiw3vPGDc1nORmIB1yKlFTgMeH4pqczFvcd7vQ\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Se deben adoptar fallas parciales y particiones de red para garantizar la confiabilidad.\u00a0<br><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La mayor\u00eda de las interacciones entre servicios son intermediadas por un broker de mensajer\u00eda replicada confiable. En lugar de hacer que el servicio del cliente espere a que el servidor termine de procesar y responda \u2014 sujeto a todo tipo de fallas debido a desequilibrios de carga, fallas en la red y similares, \u2014 el servicio iniciador publicar\u00e1 de manera confiable un mensaje que luego ser\u00e1 consumido por el siguiente servicio del flujo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00fan pueden ocurrir fallas. Imagine que, para procesar un mensaje, el servicio al consumidor necesita realizar una llamada a un servicio de terceros que est\u00e1 teniendo problemas de estabilidad. Incluso entonces, podemos recuperar y evitar la p\u00e9rdida de datos detectando el error en una capa inferior y redirigiendo autom\u00e1ticamente el mensaje a un tema de letra muerta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Extracci\u00f3n de datos y toma de decisiones.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s de los aspectos operativos que hemos cubierto hasta ahora, debemos considerar las necesidades de datos para la toma de decisiones en la empresa. Los tomadores de decisiones, incluidos los analistas de negocios y los cient\u00edficos de datos, dependen de los datos que alguna vez fueron escritos por microservicios para sus modelos. Nuestro objetivo como ingenieros es ofrecerles una interfaz estable para esos datos. Esto es un desaf\u00edo, dado que los modelos de datos y los l\u00edmites siempre est\u00e1n cambiando. Adem\u00e1s, nuestros datos est\u00e1n fragmentados para manejar la escalabilidad \u2014 en general, son demasiado <em>crudos<\/em> y desagradables para que nuestros hom\u00f3logos anal\u00edticos trabajen con ellos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hace unos a\u00f1os, implementamos una capa llamada <span class=\"quotes\">\u2033<\/span>contratos<span class=\"quotes\">\u2033<\/span> para resolver el problema. Los contratos sirven como la interfaz estable mencionada anteriormente. Mediante contratos, podemos exponer de forma segura los datos de microservicios al lado anal\u00edtico de la empresa y reducir el riesgo de romper (silenciosamente) los modelos. Los contratos son objetos de Scala generados autom\u00e1ticamente a partir del modelo de datos del servicio. Con los contratos, nuestros trabajos por lotes de Spark transforman los datos en tablas destinadas a cumplir cualquier prop\u00f3sito anal\u00edtico posterior. Para asegurarnos de que esta capa refleje consistentemente la realidad (la forma de los datos), dependemos en gran medida de pruebas automatizadas \u2014 tanto para los servicios como para los trabajos de Spark.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debido a las pruebas, rara vez nos encontramos con problemas debido a cambios en el esquema de datos ascendentes que interrumpen el an\u00e1lisis descendente. Sin embargo, todav\u00eda nos cuesta reaccionar adecuadamente a los cambios de los <span class=\"quotes\">\u2033<\/span>valores de datos<span class=\"quotes\">\u2033<\/span> en sentido ascendente. Esto puede suceder cuando la definici\u00f3n de un dato cambia (a veces de manera peligrosamente sutil) sin que el an\u00e1lisis posterior sea consciente de ello. Actualmente estamos atacando este problema desde varios \u00e1ngulos, como la detecci\u00f3n de anomal\u00edas en las estad\u00edsticas de la tabla (recuento, cardinalidad, etc.), la mejora de la comunicaci\u00f3n entre las partes interesadas anal\u00edticas y de ingenier\u00eda y la desvinculaci\u00f3n de contratos y casos de uso anal\u00edticos (implementaci\u00f3n del almac\u00e9n de datos). Sin embargo, todav\u00eda est\u00e1 lejos de ser un problema resuelto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Conclusi\u00f3n<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hay mucho m\u00e1s de lo que podemos hablar. Desde otros patrones de confiabilidad que hemos aplicado a lo largo de los a\u00f1os hasta los detalles de nuestro viaje de orquestaci\u00f3n de contenedores. Desde la forma en que planificamos la escalabilidad con fragmentaci\u00f3n hasta la cultura de aprender de las interrupciones mediante autopsias irreprochables. Desde nuestras experiencias en la introducci\u00f3n de back-ends para nuestros front-ends hasta&#8230; bueno, ya se hace una idea. Esto es demasiado para una sola publicaci\u00f3n de blog, pero mant\u00e9ngase atento a futuras notas de nuestro equipo de ingenier\u00eda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/bit.ly\/jobs-at-nu\">Consulte nuestras oportunidades laborales&nbsp;<\/a><\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Lo que hemos aprendido al hacer crecer un sistema complejo durante los primeros seis a\u00f1os de una fintech <\/p>\n","protected":false},"author":178110053,"featured_media":21621,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[2589],"tags":[2991,2500],"ppma_author":[2340],"class_list":["post-26838","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-engineering-es","tag-microservices-es","tag-software-engineering-es"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Microservicios en Nubank, una descripci\u00f3n general - Building Nubank<\/title>\n<meta name=\"description\" content=\"Lo que hemos aprendido al hacer crecer un sistema complejo durante los primeros seis a\u00f1os de una fintech\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microservicios en Nubank, una descripci\u00f3n general - Building Nubank\" \/>\n<meta property=\"og:description\" content=\"Lo que hemos aprendido al hacer crecer un sistema complejo durante los primeros seis a\u00f1os de una fintech\" \/>\n<meta property=\"og:url\" content=\"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/\" \/>\n<meta property=\"og:site_name\" content=\"Building Nubank\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-12T21:20:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-18T17:22:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2020\/04\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1440\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Rafael Ferreira - Software Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rafael Ferreira - Software Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/\"},\"author\":{\"name\":\"Rafael Ferreira - Software Engineer\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/#\\\/schema\\\/person\\\/657d24575e20de71fe23b4a8def0a435\"},\"headline\":\"Microservicios en Nubank, una descripci\u00f3n general\",\"datePublished\":\"2019-08-12T21:20:00+00:00\",\"dateModified\":\"2024-03-18T17:22:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/\"},\"wordCount\":1570,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1\",\"keywords\":[\"Microservices\",\"Software engineering\"],\"articleSection\":[\"Software Engineering\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/\",\"name\":\"Microservicios en Nubank, una descripci\u00f3n general - Building Nubank\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1\",\"datePublished\":\"2019-08-12T21:20:00+00:00\",\"dateModified\":\"2024-03-18T17:22:08+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/#\\\/schema\\\/person\\\/657d24575e20de71fe23b4a8def0a435\"},\"description\":\"Lo que hemos aprendido al hacer crecer un sistema complejo durante los primeros seis a\u00f1os de una fintech\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1\",\"width\":1440,\"height\":600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/microservicios-en-nubank-una-descripcion-general\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microservicios en Nubank, una descripci\u00f3n general\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/\",\"name\":\"Building Nubank\",\"description\":\"We make the extraordinary happen\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/#\\\/schema\\\/person\\\/657d24575e20de71fe23b4a8def0a435\",\"name\":\"Rafael Ferreira - Software Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae578e1c289306db5da3e2f9f35dc7a547093fe0ccebe62016dec7bcae586109?s=96&d=identicon&r=gb707d9a4ff5606f3881f68cfc8ff3897\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae578e1c289306db5da3e2f9f35dc7a547093fe0ccebe62016dec7bcae586109?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae578e1c289306db5da3e2f9f35dc7a547093fe0ccebe62016dec7bcae586109?s=96&d=identicon&r=g\",\"caption\":\"Rafael Ferreira - Software Engineer\"},\"description\":\"Rafael Ferreira is a lead software engineer at Nubank and has taken part in shaping the overall software architecture and engineering organization. He has a deep interest in technology particularly focused on delivering high-quality composable and testable code. Likes to dabble with lesser known languages, but delivered production code in Clojure, Java, C#, Scala, Ruby and Javascript. A programming languages enthusiast, have been a firm believer that the future belongs to polyglot programming.\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/es\\\/author\\\/ferreira\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Microservicios en Nubank, una descripci\u00f3n general - Building Nubank","description":"Lo que hemos aprendido al hacer crecer un sistema complejo durante los primeros seis a\u00f1os de una fintech","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:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/","og_locale":"es_ES","og_type":"article","og_title":"Microservicios en Nubank, una descripci\u00f3n general - Building Nubank","og_description":"Lo que hemos aprendido al hacer crecer un sistema complejo durante los primeros seis a\u00f1os de una fintech","og_url":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/","og_site_name":"Building Nubank","article_published_time":"2019-08-12T21:20:00+00:00","article_modified_time":"2024-03-18T17:22:08+00:00","og_image":[{"width":1440,"height":600,"url":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2020\/04\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1","type":"image\/jpeg"}],"author":"Rafael Ferreira - Software Engineer","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Rafael Ferreira - Software Engineer","Tiempo de lectura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/#article","isPartOf":{"@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/"},"author":{"name":"Rafael Ferreira - Software Engineer","@id":"https:\/\/building.nubank.com\/es\/#\/schema\/person\/657d24575e20de71fe23b4a8def0a435"},"headline":"Microservicios en Nubank, una descripci\u00f3n general","datePublished":"2019-08-12T21:20:00+00:00","dateModified":"2024-03-18T17:22:08+00:00","mainEntityOfPage":{"@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/"},"wordCount":1570,"commentCount":0,"image":{"@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2020\/04\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1","keywords":["Microservices","Software engineering"],"articleSection":["Software Engineering"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/","url":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/","name":"Microservicios en Nubank, una descripci\u00f3n general - Building Nubank","isPartOf":{"@id":"https:\/\/building.nubank.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/#primaryimage"},"image":{"@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2020\/04\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1","datePublished":"2019-08-12T21:20:00+00:00","dateModified":"2024-03-18T17:22:08+00:00","author":{"@id":"https:\/\/building.nubank.com\/es\/#\/schema\/person\/657d24575e20de71fe23b4a8def0a435"},"description":"Lo que hemos aprendido al hacer crecer un sistema complejo durante los primeros seis a\u00f1os de una fintech","breadcrumb":{"@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/#primaryimage","url":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2020\/04\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1","contentUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2020\/04\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1","width":1440,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/building.nubank.com\/es\/microservicios-en-nubank-una-descripcion-general\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/building.nubank.com\/es\/"},{"@type":"ListItem","position":2,"name":"Microservicios en Nubank, una descripci\u00f3n general"}]},{"@type":"WebSite","@id":"https:\/\/building.nubank.com\/es\/#website","url":"https:\/\/building.nubank.com\/es\/","name":"Building Nubank","description":"We make the extraordinary happen","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/building.nubank.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/building.nubank.com\/es\/#\/schema\/person\/657d24575e20de71fe23b4a8def0a435","name":"Rafael Ferreira - Software Engineer","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/ae578e1c289306db5da3e2f9f35dc7a547093fe0ccebe62016dec7bcae586109?s=96&d=identicon&r=gb707d9a4ff5606f3881f68cfc8ff3897","url":"https:\/\/secure.gravatar.com\/avatar\/ae578e1c289306db5da3e2f9f35dc7a547093fe0ccebe62016dec7bcae586109?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae578e1c289306db5da3e2f9f35dc7a547093fe0ccebe62016dec7bcae586109?s=96&d=identicon&r=g","caption":"Rafael Ferreira - Software Engineer"},"description":"Rafael Ferreira is a lead software engineer at Nubank and has taken part in shaping the overall software architecture and engineering organization. He has a deep interest in technology particularly focused on delivering high-quality composable and testable code. Likes to dabble with lesser known languages, but delivered production code in Clojure, Java, C#, Scala, Ruby and Javascript. A programming languages enthusiast, have been a firm believer that the future belongs to polyglot programming.","url":"https:\/\/building.nubank.com\/es\/author\/ferreira\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2020\/04\/Microservices-at-Nubank-Header.jpg?fit=1440%2C600&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pbKBB5-6YS","jetpack_sharing_enabled":true,"authors":[{"term_id":2340,"user_id":178110053,"is_guest":0,"slug":"ferreira","display_name":"Rafael Ferreira - Software Engineer","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/ae578e1c289306db5da3e2f9f35dc7a547093fe0ccebe62016dec7bcae586109?s=96&d=identicon&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/posts\/26838","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/users\/178110053"}],"replies":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/comments?post=26838"}],"version-history":[{"count":4,"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/posts\/26838\/revisions"}],"predecessor-version":[{"id":28696,"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/posts\/26838\/revisions\/28696"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/media\/21621"}],"wp:attachment":[{"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/media?parent=26838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/categories?post=26838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/tags?post=26838"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/building.nubank.com\/es\/wp-json\/wp\/v2\/ppma_author?post=26838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}