{"id":289,"date":"2016-01-07T15:04:59","date_gmt":"2016-01-07T17:04:59","guid":{"rendered":"https:\/\/blog.umbler.com\/?p=289"},"modified":"2018-12-06T11:24:58","modified_gmt":"2018-12-06T13:24:58","slug":"utilizando-microservices-na-umbler","status":"publish","type":"post","link":"https:\/\/blog.umbler.com\/br\/utilizando-microservices-na-umbler\/","title":{"rendered":"Utilizando MicroServices na Umbler"},"content":{"rendered":"<p>Ultimamente, muito tem se falado sobre microservices: um padr\u00e3o de arquitetura de software que se prop\u00f5e a dividir suas aplica\u00e7\u00f5es em um conjunto de servi\u00e7os independentes.<br \/>\n\u00c0 medida que voc\u00ea vai evoluindo um projeto, \u00e9 natural colocar todas as funcionalidades em um \u00fanico sistema. Estes sistemas unificados, que comp\u00f5em todos os requisitos de um projeto, s\u00e3o chamados de sistemas monol\u00edticos.<\/p>\n<p>Sistemas monol\u00edticos t\u00eam suas vantagens, j\u00e1 que todo o c\u00f3digo est\u00e1 em uma s\u00f3 base de dados e a atualiza\u00e7\u00e3o do software acontece com um \u00fanico deploy. Por\u00e9m, essas for\u00e7as tamb\u00e9m s\u00e3o fraquezas, j\u00e1 que sistemas monol\u00edticos tendem a ficar cada vez mais complexos.<\/p>\n<p>Bons desenvolvedores tendem a criar sistemas monol\u00edticos divididos em m\u00f3dulos, criando um belo Megazord.<br \/>\n<img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-323 size-full\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2016\/01\/post-16-01-08-megazord.jpg\" alt=\"Sistema monol\u00edtico Megazord\" width=\"750\" height=\"500\" \/><br \/>\nOutros n\u00e3o t\u00eam a mesma sorte e acabam criando no m\u00e1ximo um Frankenstein.<br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-315 size-full\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2016\/01\/post-16-01-08-itsalive.jpg\" alt=\"It\" width=\"500\" height=\"356\" \/><br \/>\nOs sistemas monol\u00edticos podem at\u00e9 funcionar bem, pelo menos no in\u00edcio do projeto, com execu\u00e7\u00e3o de testes automatizados e cria\u00e7\u00e3o de m\u00faltiplas inst\u00e2ncias simult\u00e2neas em produ\u00e7\u00e3o. Por\u00e9m, \u00a0a tend\u00eancia \u00e9 causar frustra\u00e7\u00f5es, \u00e0 medida que a complexidade aumenta \u00a0\u2013 os testes passam a levar horas e os deploys s\u00e3o postergados o m\u00e1ximo poss\u00edvel.<\/p>\n<p>Para contornar esses problemas, tem se apostado muito na cria\u00e7\u00e3o de microservices. Ao contr\u00e1rio das aplica\u00e7\u00f5es monol\u00edticas, a ideia aqui \u00e9 dividirmos nossos sistemas em diversos microservi\u00e7os, cada um com uma pequena responsabilidade. Nada muito novo, j\u00e1 que a <a href=\"https:\/\/pt.wikipedia.org\/wiki\/Filosofia_Unix\" target=\"_blank\" rel=\"noopener\">Filosofia Unix<\/a> incentivava esse estilo de arquitetura desde os anos 1980, com a m\u00e1xima:<\/p>\n<blockquote><p>&#8220;escreva programas que fa\u00e7am apenas uma coisa, mas que fa\u00e7am bem feito&#8221;.<\/p><\/blockquote>\n<p>O termo se popularizou nos \u00faltimos anos, pois a cria\u00e7\u00e3o de &#8220;micro-web-services&#8221; tornou-se extremamente f\u00e1cil. Frameworks para a cria\u00e7\u00e3o de APIs REST est\u00e3o dispon\u00edveis nas principais linguagens do mercado, fazendo do protocolo HTTP a escolha padr\u00e3o para a comunica\u00e7\u00e3o entre microservices, APIs disponibilizadas por grandes empresas do mercado, como Google, Twitter e Facebook, tamb\u00e9m contribu\u00edram para isso.<\/p>\n<blockquote><p>E se cri\u00e1ssemos nossas pr\u00f3prias micro-api e microservices para determinadas funcionalidades de nossos pr\u00f3prios sistemas?<\/p><\/blockquote>\n<p>Os benef\u00edcios seriam grandes, j\u00e1 que atualiza\u00e7\u00f5es em sistema pequenos costumam ser mais tranquilas de serem realizadas, facilitando a implanta\u00e7\u00e3o, deploy, inicializa\u00e7\u00e3o, e escalabilidade de cada servi\u00e7o.<\/p>\n<p>Al\u00e9m disso, voc\u00ea poderia ter times pequenos focados em cada um dos servi\u00e7os, e novos times poderiam rapidamente se tornar produtivos, adaptando-se a um novo servi\u00e7o ou dando manuten\u00e7\u00e3o a um j\u00e1 existente.<\/p>\n<h2>Como come\u00e7ar<\/h2>\n<p>Os microservices devem ser criados de acordo com funcionalidades do neg\u00f3cio que possam ser independentes, possuindo um deploy pr\u00f3prio.<br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-324 size-full\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2016\/01\/post-16-01-08-megazord-bots.jpg\" alt=\"Sistema monol\u00edtico Megazord Bots\" width=\"750\" height=\"446\" \/><br \/>\nA granularidade vai de acordo com a necessidade. Tente notar partes do sistema que ficariam mais perform\u00e1ticas com uma linguagem ou um banco de dados diferente do utilizado atualmente.<\/p>\n<h3>Algumas regrinhas que todo o microservice deve ter para garantir seu sucesso.<\/h3>\n<ul class=\"icon-ul\">\n<li><i class=\"icon icon-li icon-check\"><\/i>Servi\u00e7os pequenos, que realizam uma \u00fanica fun\u00e7\u00e3o;<\/li>\n<li><i class=\"icon icon-li icon-check\"><\/i>Servi\u00e7os que possam ser facilmente substitu\u00eddos por outros com as mesmas funcionalidades;<\/li>\n<li><i class=\"icon icon-li icon-check\"><\/i>Servi\u00e7os que possam ser implementados usando diferentes linguagens de programa\u00e7\u00e3o e banco de dados, independente dos demais servi\u00e7os, podendo utilizar a <a href=\"https:\/\/blog.umbler.com\/br\/avancos-em-ia-generativa\/\">tecnologia<\/a> que mais se adequar;<\/li>\n<li><i class=\"icon icon-li icon-check\"><\/i>Servi\u00e7os f\u00e1ceis de manter e modificar, aplicando as pr\u00e1ticas de integra\u00e7\u00e3o cont\u00ednua, e com possibilidade de rodar m\u00faltiplas inst\u00e2ncias simultaneamente.<\/li>\n<\/ul>\n<h2>Antes de criar um microservice<\/h2>\n<p>Antes de migrar toda a sua aplica\u00e7\u00e3o para microservices, \u00e9 importante verificar a real necessidade da escolha, pois, ainda que existam diversos benef\u00edcios, vale lembrar que voc\u00ea ter\u00e1 mais projetos para gerenciar.<\/p>\n<p>Ser\u00e3o mais projetos para realizar deploy, o que pode acarretar em informa\u00e7\u00f5es duplicadas entre os servi\u00e7os. At\u00e9 mesmo l\u00f3gicas de <a href=\"https:\/\/blog.umbler.com\/br\/ia-e-legislacao-no-brasil\/\">neg\u00f3cios<\/a> podem precisar de duplica\u00e7\u00e3o e em diferentes tecnologias (bancos de dados e linguagens de programa\u00e7\u00e3o, etc).<\/p>\n<h2>Hospedando seus microservices na Umbler<\/h2>\n<p>O melhor de trabalhar com uma arquitetura de microservices \u00e9 que voc\u00ea n\u00e3o ter\u00e1 quase nada de custo adicional com hospedagem. Contratando na Umbler, voc\u00ea pode hospedar a maioria de seus microservices (se n\u00e3o todos) em um \u00fanico Cloud. Para come\u00e7ar, <a href=\"https:\/\/www.umbler.com\/br\/hospedagem-de-sites\">adicione um Cloud na sua conta<\/a> para hospedar seu site principal e seus microservices.<\/p>\n<p>J\u00e1 seus microservices podem ser hospedados como subdom\u00ednios. <a href=\"https:\/\/www.umbler.com\/br\/registro-de-dominio\">Adicione um subdom\u00ednio<\/a> para cada microservice que voc\u00ea possui e escolha o Cloud que voc\u00ea criou anteriormente. Usando o mesmo Cloud voc\u00ea n\u00e3o ter\u00e1 nenhum custo adicional.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-345 size-full\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2016\/01\/post-16-01-08-microservices-painel.png\" alt=\"Micro Services painel app Umbler\" width=\"599\" height=\"405\" \/><br \/>\nCaso seja necess\u00e1rio, voc\u00ea pode hospedar um de seus microservices, ou um grupo deles, em um Cloud separado. A escolha depender\u00e1 de uma s\u00e9rie de fatores, como n\u00famero de requisi\u00e7\u00f5es, processamento e mem\u00f3ria necess\u00e1ria para o servi\u00e7o funcionar.<\/p>\n<h2>Para saber mais<\/h2>\n<p>Migrar para uma arquitetura de microservices traz diferentes oportunidades de acordo com o projeto. Se ficou interessado sobre o assunto e quer se aprofundar, confira alguns links (em ingl\u00eas) para saber mais.<\/p>\n<ul class=\"icon-ul margin-no-l\">\n<li><i class=\"icon icon-external-link-square margin-sm-r\"><\/i><a href=\"https:\/\/martinfowler.com\/articles\/microservices.html\">martinfowler.com\/articles\/microservices<\/a><\/li>\n<li><i class=\"icon icon-external-link-square margin-sm-r\"><\/i><a href=\"https:\/\/martinfowler.com\/articles\/microservice-trade-offs.html\">martinfowler.com\/articles\/microservice-trade-offs<\/a><\/li>\n<li><i class=\"icon icon-external-link-square margin-sm-r\"><\/i><a href=\"https:\/\/martinfowler.com\/bliki\/MicroservicePrerequisites.html\">martinfowler.com\/bliki\/MicroservicePrerequisites<\/a><\/li>\n<\/ul>\n<p>Tem algum recurso que voc\u00ea queira ver na Umbler? Voc\u00ea pode ajudar a escolher as pr\u00f3ximas features: \u00e9 s\u00f3 <a href=\"https:\/\/feedback.userreport.com\/c565392d-0b6a-40b2-a7c6-999f14d22212\/#ideas\/popular\">clicar aqui e votar<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ultimamente, muito tem se falado sobre microservices: um padr\u00e3o de arquitetura de software que se prop\u00f5e a dividir suas aplica\u00e7\u00f5es em um conjunto de servi\u00e7os independentes. \u00c0 medida que voc\u00ea vai evoluindo um projeto, \u00e9 natural colocar todas as funcionalidades em um \u00fanico sistema. Estes sistemas unificados, que comp\u00f5em todos os requisitos de um projeto, [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":5667,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[38,39,40,41,42,43,44],"class_list":["post-289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev","tag-apis","tag-arquitetura-de-software","tag-micro-web-services","tag-microservices","tag-microservicos","tag-rest","tag-sistemas-monoliticos"],"_links":{"self":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts\/289"}],"collection":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/comments?post=289"}],"version-history":[{"count":0,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts\/289\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/media\/5667"}],"wp:attachment":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/media?parent=289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/categories?post=289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/tags?post=289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}