{"id":26836,"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-21T12:14:29","modified_gmt":"2024-03-21T12:14:29","slug":"microsservicos-no-nubank-uma-visao-geral","status":"publish","type":"post","link":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/","title":{"rendered":"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Microsservi\u00e7os s\u00e3o o estilo arquitet\u00f4nico predominante da atualidade. Para o nosso prop\u00f3sito, n\u00e3o vale a pena descrever aqui o que significa e suas vantagens, pois h\u00e1 muito conte\u00fado excelente dispon\u00edvel por a\u00ed. Em vez disso, vamos ser mais espec\u00edficos e revisar o que aprendemos criando um sistema complexo em uma fintech nos \u00faltimos seis anos. Esta \u00e9 uma breve hist\u00f3ria dos microsservi\u00e7os no Nubank.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O come\u00e7o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Seis anos, de 2013 a 2019, \u00e9 tamb\u00e9m toda a vida \u00fatil da empresa, o que significa que come\u00e7amos com microsservi\u00e7os desde o primeiro dia, desafiando o conselho padr\u00e3o de come\u00e7ar com um mon\u00f3lito. A justificativa geralmente dada \u00e9 que \u00e9 melhor otimizar para uma r\u00e1pida centraliza\u00e7\u00e3o no in\u00edcio \u2013 enquanto a startup ainda est\u00e1 em busca de adequa\u00e7\u00e3o ao mercado \u2013 para posteriormente refatorar para uma estrutura mais est\u00e1vel. Descobrimos que, de fato, come\u00e7ar com microsservi\u00e7os, especialmente em 2013, nos tornou mais lentos no in\u00edcio. Montar uma infraestrutura de provisionamento complexa enquanto constru\u00edmos o produto do zero foi muito para uma equipe pequena e levou algum tempo at\u00e9 sentirmos que o trabalho flu\u00eda sem problemas. Por outro lado, o nosso neg\u00f3cio n\u00e3o estava muito inclinado a mudan\u00e7as r\u00e1pidas, e aqueles primeiros meses foram provavelmente o melhor momento para investir numa base s\u00f3lida, em vez de mais tarde, quando tivemos que enfrentar as press\u00f5es crescentes de amplia\u00e7\u00e3o e desenvolvimento do conjunto de recursos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso n\u00e3o quer dizer que acertamos tudo desde o in\u00edcio. Pelo contr\u00e1rio, tivemos que mudar muitas das nossas abstra\u00e7\u00f5es centrais \u00e0 medida que entend\u00edamos o dom\u00ednio com mais profundidade, o que \u00e0s vezes significava que t\u00ednhamos que redesenhar os limites de servi\u00e7o. Este processo de aprendizagem continua at\u00e9 hoje. A qualquer momento, um esquadr\u00e3o ou outro trabalhar\u00e1 na divis\u00e3o de um servi\u00e7o ou na fus\u00e3o de dois servi\u00e7os.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/bit.ly\/jobs-at-nu\">Confira nossas oportunidades de trabalho&nbsp;<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Provisionamento e implanta\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nossa infraestrutura de produ\u00e7\u00e3o passou por diversas itera\u00e7\u00f5es. Come\u00e7amos com um servi\u00e7o gerenciado do Chef, experimentamos com o Fleet e ECS do CoreOS, constru\u00edmos uma infraestrutura DIY simples de um cont\u00eainer por m\u00e1quina virtual usando as abstra\u00e7\u00f5es principais do AWS EC2 e CloudFormation, para finalmente convergir na implanta\u00e7\u00e3o de nossos pr\u00f3prios clusters Kubernetes. Foi uma longa jornada, mas muito menos \u00e1rdua devido \u00e0 automa\u00e7\u00e3o pervasiva. Todos os nossos recursos em nuvem, desde o in\u00edcio, s\u00e3o provisionados por meio de algum tipo de processo automatizado. Mesmo coisas de uma vez s\u00f3, como aquela inst\u00e2ncia de livegrep que um esquadr\u00e3o queria colocar em execu\u00e7\u00e3o rapidamente, precisam ser automatizadas. Como a maioria das coisas na empresa, a nossa obsess\u00e3o pela automa\u00e7\u00e3o \u00e9 muito mais uma norma cultural do que uma regra imposta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A mais recente encarna\u00e7\u00e3o da nossa infraestrutura de automa\u00e7\u00e3o assume a forma de uma base de c\u00f3digo Clojure que orquestra a cria\u00e7\u00e3o de recursos AWS ou Kubernetes. Uma entrada cr\u00edtica para esse processo vem de um reposit\u00f3rio git onde os engenheiros colaboram para declarar metadados para cada microsservi\u00e7o: que tipo de banco de dados ele requer, qu\u00e3o pesada \u00e9 a carga de trabalho, que tipo de constru\u00e7\u00e3o e ferramentas de teste ele deve passar durante a constru\u00e7\u00e3o etc. Com base nesses dados, nossa automa\u00e7\u00e3o pode fazer m\u00e1gica, como provisionar bancos de dados, configurar a descoberta de servi\u00e7os e at\u00e9 criar pipelines de constru\u00e7\u00e3o inteiros para todos os servi\u00e7os.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Infraestrutura imut\u00e1vel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Grande parte da nossa cultura de engenharia est\u00e1 conectada \u00e0 comunidade e \u00e0s ideias de programa\u00e7\u00e3o funcional. Uma ideia central \u00e9 o conceito de imutabilidade: \u00e9 sempre mais seguro construir c\u00f3pias atualizadas dos dados do que alter\u00e1-los. Quando transportamos esta vis\u00e3o para o campo da infraestrutura, isso se traduz na constru\u00e7\u00e3o de c\u00f3pias atualizadas dos recursos, em vez de transform\u00e1-los no local.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma aplica\u00e7\u00e3o simples desse princ\u00edpio se aplica \u00e0 implanta\u00e7\u00e3o: primeiro criamos novos cont\u00eaineres para depois desmontarmos as inst\u00e2ncias antigas. Nada particularmente interessante a\u00ed: um exemplo bastante padr\u00e3o de t\u00e9cnicas azul-verde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma aplica\u00e7\u00e3o em maior escala \u00e9 criar novas pilhas de produ\u00e7\u00e3o. De vez em quando, temos que fazer altera\u00e7\u00f5es maiores do que uma simples implanta\u00e7\u00e3o. Poder\u00edamos refor\u00e7ar a seguran\u00e7a, melhorando a descoberta de servi\u00e7os ou redimensionando elementos de infraestrutura. Independentemente das especificidades, a abordagem geral \u00e9 a mesma. Inovamos uma pilha de produ\u00e7\u00e3o inteira \u2014 incluindo todos os servi\u00e7os, clusters Kubernetes, clusters Kafka etc. \u2014 testamos se ela est\u00e1 funcionando bem e, em seguida, apontamos o tr\u00e1fego para a nova pilha atualizando os aliases de DNS de todos os pontos de entrada. Desnecess\u00e1rio dizer que todo esse processo \u00e9 altamente automatizado, a ponto de uma pequena equipe poder executar todas as etapas a cada dois meses.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comunica\u00e7\u00e3o de servi\u00e7o e mensagens ass\u00edncronas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuidar das finan\u00e7as das pessoas \u00e9 uma tarefa que levamos muito a s\u00e9rio. Consequentemente, a integridade dos dados \u00e9 de extrema import\u00e2ncia. Executar uma malha de microsservi\u00e7os e manter esses padr\u00f5es elevados traz novos desafios: como garantir que os dados nunca sejam perdidos em um mundo onde falhas parciais e parti\u00e7\u00f5es de rede s\u00e3o a norma? Nossa resposta \u00e9 confiar fortemente em mensagens ass\u00edncronas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/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\">Falhas parciais e parti\u00e7\u00f5es de rede devem ser aceitas para garantir a confiabilidade.&nbsp;<br><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A maioria das intera\u00e7\u00f5es entre servi\u00e7os \u00e9 intermediada por um broker de mensagens replicado confi\u00e1vel. Em vez de fazer com que o servi\u00e7o cliente espere que o servidor termine o processamento e responda \u2014 sujeito a todos os tipos de falhas devido a desequil\u00edbrios de carga, falhas de rede e assim por diante \u2014 o servi\u00e7o iniciador publicar\u00e1 de forma confi\u00e1vel uma mensagem para ser posteriormente consumida pelo pr\u00f3ximo servi\u00e7o no fluxo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Falhas ainda podem ocorrer. Imagine que, para processar uma mensagem, o atendimento ao cliente precise fazer uma liga\u00e7\u00e3o para um servi\u00e7o terceirizado que est\u00e1 com problemas de estabilidade. Mesmo assim, podemos recuperar e evitar a perda de dados detectando o erro em uma camada inferior e redirecionando automaticamente a mensagem para um t\u00f3pico de mensagens n\u00e3o entregues.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Extra\u00e7\u00e3o de dados e tomada de decis\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m dos aspectos operacionais que abordamos at\u00e9 agora, devemos considerar as necessidades de dados para a tomada de decis\u00f5es na empresa. Os tomadores de decis\u00e3o, incluindo analistas de neg\u00f3cios e cientistas de dados, dependem de dados antes escritos por microsservi\u00e7os para seus modelos. Nosso objetivo como engenheiros \u00e9 oferecer a eles uma interface est\u00e1vel para esses dados. Isto \u00e9 um desafio, visto que os modelos e limites de dados est\u00e3o sempre mudando. Al\u00e9m disso, nossos dados s\u00e3o fragmentados para lidar com a escalabilidade \u2014 em suma, muito <em>brutos<\/em> e desagrad\u00e1veis para nossos colegas anal\u00edticos trabalharem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e1 alguns anos, implantamos uma camada chamada \u201ccontratos\u201d para resolver o problema. Os contratos servem como a interface est\u00e1vel mencionada anteriormente. Usando contratos, podemos expor com seguran\u00e7a os dados de microsservi\u00e7os para o lado anal\u00edtico da empresa e reduzir o risco de quebrar modelos (silenciosamente). Contratos s\u00e3o objetos Scala gerados automaticamente a partir do modelo de dados de servi\u00e7o. Com os contratos, nossos trabalhos em lote do Spark transformam dados em tabelas destinadas a cumprir qualquer finalidade anal\u00edtica em est\u00e1gios posteriores. Para garantir que essa camada reflita consistentemente a realidade (o formato dos dados), dependemos fortemente de testes automatizados \u2014 tanto para os servi\u00e7os quanto para os trabalhos do Spark.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por causa dos testes, raramente encontramos problemas devido a altera\u00e7\u00f5es no esquema de dados iniciais que interrompem a an\u00e1lise posterior. No entanto, ainda temos dificuldade em reagir adequadamente \u00e0s mudan\u00e7as nos \u201cvalores dos dados\u201d em est\u00e1gios iniciais. Isso pode acontecer quando a defini\u00e7\u00e3o de um dado muda (\u00e0s vezes de forma perigosa e sutil) enquanto a an\u00e1lise posterior n\u00e3o est\u00e1 ciente disso. Atualmente, estamos lidando com esse problema por v\u00e1rios \u00e2ngulos, como detec\u00e7\u00e3o de anomalias em estat\u00edsticas de tabelas (contagem, cardinalidade etc.), melhorando a comunica\u00e7\u00e3o entre engenharia e partes interessadas anal\u00edticas, e desvinculando contratos e casos de uso anal\u00edticos (implementando um armaz\u00e9m de dados). No entanto, ainda est\u00e1 longe de ser um problema resolvido.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Concluindo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e1 muito mais sobre o que podemos conversar. Desde outros padr\u00f5es de confiabilidade que aplicamos ao longo dos anos at\u00e9 os detalhes de nossa jornada de orquestra\u00e7\u00e3o de cont\u00eaineres. Desde a maneira como planejamos a escalabilidade com fragmenta\u00e7\u00e3o at\u00e9 a cultura de aprender com interrup\u00e7\u00f5es por meio de an\u00e1lises post-mortem sem culpa. Desde nossas experi\u00eancias na introdu\u00e7\u00e3o de back-ends para nossos front-ends at\u00e9\u2026 bem, voc\u00ea entendeu. Isso \u00e9 demais para uma \u00fanica postagem no blog, mas fique atento \u00e0s notas futuras da nossa equipe de engenharia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/bit.ly\/jobs-at-nu\">Confira nossas oportunidades de trabalho&nbsp;<\/a><\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>O que aprendemos ao desenvolver um sistema complexo nos primeiros seis anos de uma fintech <\/p>\n","protected":false},"author":178110053,"featured_media":21620,"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":[2586],"tags":[2988,2498],"ppma_author":[2340],"class_list":["post-26836","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-engineering-pt-br","tag-microservices-pt-br","tag-software-engineering-pt-br"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Microsservi\u00e7os no Nubank, uma vis\u00e3o geral - Building Nubank<\/title>\n<meta name=\"description\" content=\"O que aprendemos ao desenvolver um sistema complexo nos primeiros seis anos de uma 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\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral - Building Nubank\" \/>\n<meta property=\"og:description\" content=\"O que aprendemos ao desenvolver um sistema complexo nos primeiros seis anos de uma fintech\" \/>\n<meta property=\"og:url\" content=\"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/\" \/>\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-21T12:14:29+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=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/\"},\"author\":{\"name\":\"Rafael Ferreira - Software Engineer\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/657d24575e20de71fe23b4a8def0a435\"},\"headline\":\"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral\",\"datePublished\":\"2019-08-12T21:20:00+00:00\",\"dateModified\":\"2024-03-21T12:14:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/\"},\"wordCount\":1537,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/#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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/\",\"name\":\"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral - Building Nubank\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/#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-21T12:14:29+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/657d24575e20de71fe23b4a8def0a435\"},\"description\":\"O que aprendemos ao desenvolver um sistema complexo nos primeiros seis anos de uma fintech\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/#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\\\/pt-br\\\/microsservicos-no-nubank-uma-visao-geral\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/\",\"name\":\"Building Nubank\",\"description\":\"We make the extraordinary happen\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/657d24575e20de71fe23b4a8def0a435\",\"name\":\"Rafael Ferreira - Software Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\\\/pt-br\\\/author\\\/ferreira\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral - Building Nubank","description":"O que aprendemos ao desenvolver um sistema complexo nos primeiros seis anos de uma 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\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/","og_locale":"pt_BR","og_type":"article","og_title":"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral - Building Nubank","og_description":"O que aprendemos ao desenvolver um sistema complexo nos primeiros seis anos de uma fintech","og_url":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/","og_site_name":"Building Nubank","article_published_time":"2019-08-12T21:20:00+00:00","article_modified_time":"2024-03-21T12:14:29+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","Est. tempo de leitura":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/#article","isPartOf":{"@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/"},"author":{"name":"Rafael Ferreira - Software Engineer","@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/657d24575e20de71fe23b4a8def0a435"},"headline":"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral","datePublished":"2019-08-12T21:20:00+00:00","dateModified":"2024-03-21T12:14:29+00:00","mainEntityOfPage":{"@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/"},"wordCount":1537,"commentCount":0,"image":{"@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/#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":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/","url":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/","name":"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral - Building Nubank","isPartOf":{"@id":"https:\/\/building.nubank.com\/pt-br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/#primaryimage"},"image":{"@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/#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-21T12:14:29+00:00","author":{"@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/657d24575e20de71fe23b4a8def0a435"},"description":"O que aprendemos ao desenvolver um sistema complexo nos primeiros seis anos de uma fintech","breadcrumb":{"@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/building.nubank.com\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/#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\/pt-br\/microsservicos-no-nubank-uma-visao-geral\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/building.nubank.com\/pt-br\/"},{"@type":"ListItem","position":2,"name":"Microsservi\u00e7os no Nubank, uma vis\u00e3o geral"}]},{"@type":"WebSite","@id":"https:\/\/building.nubank.com\/pt-br\/#website","url":"https:\/\/building.nubank.com\/pt-br\/","name":"Building Nubank","description":"We make the extraordinary happen","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/building.nubank.com\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/657d24575e20de71fe23b4a8def0a435","name":"Rafael Ferreira - Software Engineer","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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\/pt-br\/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-6YQ","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\/pt-br\/wp-json\/wp\/v2\/posts\/26836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/users\/178110053"}],"replies":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/comments?post=26836"}],"version-history":[{"count":4,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/26836\/revisions"}],"predecessor-version":[{"id":28756,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/26836\/revisions\/28756"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/media\/21620"}],"wp:attachment":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/media?parent=26836"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/categories?post=26836"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/tags?post=26836"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/ppma_author?post=26836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}