{"id":4808,"date":"2022-06-21T09:19:52","date_gmt":"2022-06-21T12:19:52","guid":{"rendered":"https:\/\/elemarjr.com\/arquiteturadesoftware\/?p=4808"},"modified":"2024-01-12T18:21:48","modified_gmt":"2024-01-12T21:21:48","slug":"iniciando-o-design-arquitetural-de-um-location-based-service-lbs","status":"publish","type":"volume-1","link":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/","title":{"rendered":"Cap 4.5 Iniciando o design arquitetural de um &#8220;Location-based service (LBS)&#8221;"},"content":{"rendered":"<p>O que <a href=\"https:\/\/www.ifood.com.br\/\">iFood<\/a>, <a href=\"https:\/\/www.yelp.com.br\/\">Yelp<\/a>\u00a0e <a href=\"https:\/\/tinder.com\/pt\">Tinder<\/a> t\u00eam em comum? Todas s\u00e3o <span style=\"text-decoration: underline;\">plataformas<\/span> que oferecem, por causa da demanda por proximidade dos participantes, de servi\u00e7os baseados em localiza\u00e7\u00e3o.<\/p>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/transformacao-digital-e-agil.online\/wp-content\/uploads\/2021\/11\/livro-transformacao-digital.png\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/transformacao-digital-e-agil.online\/wp-content\/uploads\/2021\/11\/livro-transformacao-digital.png\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 24px; font-weight: bold; color: #4c4c4c; line-height: 1.0; font-family: Lufga; margin-bottom: 10px;\">Relacionando plataformas e a transforma\u00e7\u00e3o digital<\/p>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Lufga; margin-bottom: 10px;\">Transforma\u00e7\u00e3o Digital e \u00c1gil<\/p>\r\nPlataformas est\u00e3o revolucionando a estrat\u00e9gia. Muitas das organiza\u00e7\u00f5es digitais que est\u00e3o transformando o mercado est\u00e3o implantando, consciente ou inconscientemente, plataformas. Deseja saber mais sobre o assunto?\r\n<p><a class=\"botao-livro\" href=\"https:\/\/transformacao-digital-e-agil.online\/relacionando-plataformas-e-a-transformacao-digital\/\" target=\"_blank\" rel=\"noopener\">Ler cap\u00edtulo<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>Nesse cap\u00edtulo, <strong>discutiremos como implementar servi\u00e7os de localiza\u00e7\u00e3o de maneira eficiente. Trata-se de um desafio interessante quando analisado sob a perspectiva da escala.\u00a0<\/strong><\/p>\n<p>Mais uma vez, iremos utilizar um cen\u00e1rio fict\u00edcio para fundamentar decis\u00f5es.<\/p>\n<h2>O que \u00e9 uma LBS?<\/h2>\n<p>Um servi\u00e7o baseado em localiza\u00e7\u00e3o (LBS) \u00e9 um tipo especial de servi\u00e7o de software que usam dados e informa\u00e7\u00f5es geogr\u00e1ficas para fornecer servi\u00e7os ou informa\u00e7\u00f5es aos usu\u00e1rios. LBS pode ser usado em uma variedade de contextos, como sa\u00fade, busca de objetos internos, entretenimento, trabalho, vida pessoal, etc.<\/p>\n<h2>Coletando informa\u00e7\u00f5es para o Haiku<\/h2>\n<div class=\"nota-link\">\r\n<table class=\"tabelalink\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-insight\" src=\"\/arquiteturadesoftware\/wp-content\/uploads\/2022\/05\/link.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/arquiteturadesoftware\/wp-content\/uploads\/2022\/05\/link.png\" alt=\"\" width=\"70\" height=\"70\" \/>\r\n<p style=\"font-size: 22px; font-weight: bold; line-height: 26px; font-family: Montserrat; color: #432b75; margin-bottom: 5px;\">Architecture Haiku<\/p>\r\n<p style=\"font-size: 16px; font-weight: Regular; line-height: 20px; font-family: Roboto; color: #45365d; margin-bottom: 0px;\">N\u00e3o sabe o que \u00e9 um &#8220;Architecture Haiku&#8221;? Consulte agora esse t\u00f3pico no cap\u00edtulo em que tratamos sobre documenta\u00e7\u00e3o de software.<\/p>\r\n<a class=\"botao-livro\" href=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/documentacao-arquitetural-na-medida-certa-capitulo-1-3-v3-01\/#Consideracoes_sobre_Architecture_Haiku\" target=\"_blank\" rel=\"noopener\">Acessar t\u00f3pico<\/a><\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p><strong>Desejamos conectar potenciais clientes com prestadores independentes de servi\u00e7o, conforme proximidade.<\/strong><\/p>\n<p>Prestadores de servi\u00e7o podem cadastrar-se a plataforma, especificando condi\u00e7\u00f5es de trabalho e hor\u00e1rios de funcionamento.<\/p>\n<p><strong>Assumimos que a plataforma contar\u00e1 com 150 milh\u00f5es de usu\u00e1rios ativos (DAU) e 50 milh\u00f5es de prestadores de servi\u00e7o dispon\u00edveis. Cada usu\u00e1rio faz, em m\u00e9dia, 4 consultas por dia.<\/strong><\/p>\n<p>As principais funcionalidades do sistema s\u00e3o:<\/p>\n<ol>\n<li>Relacionar prestadores pr\u00f3ximos de um consumidor, baseando-se em sua localiza\u00e7\u00e3o atual (latitude e longitude);<\/li>\n<li>Permitir que prestadores de servi\u00e7o incluam, atualizem ou removam suas ofertas de trabalho;<\/li>\n<li>Consumidores devem poder consultar detalhes das ofertas dos prestadores relacionados.<\/li>\n<\/ol>\n<hr \/>\n<p>Os principais atributos de qualidade s\u00e3o disponibilidade e escalabilidade.<\/p>\n<p>Eventualmente, pode ser necess\u00e1rio segregar dados geograficamente para atender normas de seguran\u00e7a de dados.<\/p>\n<h2>Algumas estimativas de &#8220;papel de p\u00e3o&#8221;<\/h2>\n<p>Com base nas informa\u00e7\u00f5es explicitadas no Haiku, em nosso cen\u00e1rio fict\u00edcio, \u00e9 poss\u00edvel elaborar algumas estimativas, grosseiras, mas j\u00e1 suficientes para orientar algumas decis\u00f5es de <em>design.<\/em><\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-4812\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/papel_de_pao.png\" alt=\"\" width=\"727\" height=\"159\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/papel_de_pao.png 1188w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/papel_de_pao-300x66.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/papel_de_pao-1024x224.png 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/papel_de_pao-768x168.png 768w\" sizes=\"(max-width: 727px) 100vw, 727px\" \/><\/p>\n<h2>Proposta ing\u00eanua de <em>design<\/em> arquitetural<\/h2>\n<p><strong>Uma primeira abordagem, quase instintiva, inclui segmentar as opera\u00e7\u00f5es administrativas (manuten\u00e7\u00e3o dos prestadores de servi\u00e7o) das buscas.<\/strong> Essa segmenta\u00e7\u00e3o pode ocorrer, no primeiro n\u00edvel, nos servidores de aplica\u00e7\u00e3o, e nas bases de dados relacionais, com o <em>master\u00a0<\/em>operando para atender tarefas administrativas e r\u00e9plicas suportando as buscas.<\/p>\n<p>Como cada prestador de servi\u00e7o possui, naturalmente, sua localiza\u00e7\u00e3o (latitude e longitude) na base de dados, a busca poderia simplesmente filtrar aqueles cujo a dist\u00e2ncia for aceit\u00e1vel.<\/p>\n<p>O problema natural dessa abordagem \u00e9 o custo das consultas que naturalmente ocorrem com buscas <em>full scan.\u00a0<\/em>Ali\u00e1s, \u00e9 importante destacar que a ado\u00e7\u00e3o de \u00edndices (para longitude ou para a latitude) minimiza o problema, reduzindo os <em>datasets<\/em>, mas n\u00e3o o resolve plenamente.<\/p>\n<div class=\"nota-insight\">\r\n<table class=\"tabelainsight\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-insight\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/> Uma restri\u00e7\u00e3o natural para escalabilidade surge nas demandas por computa\u00e7\u00e3o ou agrega\u00e7\u00e3o nas consultas.<\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Organizando informa\u00e7\u00f5es para gerar as primeiras ADRs<\/h2>\n<div class=\"nota-link\">\r\n<table class=\"tabelalink\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-insight\" src=\"\/arquiteturadesoftware\/wp-content\/uploads\/2022\/05\/link.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/arquiteturadesoftware\/wp-content\/uploads\/2022\/05\/link.png\" alt=\"\" width=\"70\" height=\"70\" \/>\r\n<p style=\"font-size: 22px; font-weight: bold; line-height: 26px; font-family: Montserrat; color: #432b75; margin-bottom: 5px;\">Architecture Decision Record<\/p>\r\n<p style=\"font-size: 16px; font-weight: Regular; line-height: 20px; font-family: Roboto; color: #45365d; margin-bottom: 0px;\">O bom arquiteto garante que decis\u00f5es sejam tomadas, justificadas e comunicadas! Precisa relembrar o que \u00e9 uma ADR? Visite o t\u00f3pico onde introduzimos o conceito.<\/p>\r\n<a class=\"botao-livro\" href=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/documentacao-arquitetural-na-medida-certa-capitulo-1-3-v3-01\/#Consideracoes_sobre_ADRs_Architecture_Decision_Records\" target=\"_blank\" rel=\"noopener\">Acessar t\u00f3pico<\/a><\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>A partir das informa\u00e7\u00f5es obtidas para formula\u00e7\u00e3o do <em>Haiku<\/em> e dos &#8220;n\u00fameros no papel de p\u00e3o&#8221;, j\u00e1 \u00e9 poss\u00edvel indicar algumas ADRs em status de &#8220;aberta para discuss\u00e3o&#8221;. Essas ADRs indicariam a &#8220;inclina\u00e7\u00e3o arquitetural&#8221; para diversos aspectos importantes, possibilitando debates com especialistas.<\/p>\n<h4>Endpoints candidatos<\/h4>\n<p>Parece ser adequado desenvolver o servi\u00e7o como uma API REST. Destacam-se cinco <em>endpoints<\/em> principais:<\/p>\n<ol>\n<li>Obter lista de prestadores de servi\u00e7o com <code>GET \/nearby?lat=&lt;latitude&gt;&amp;lon=&lt;longitude&gt;<\/code><\/li>\n<li>Obter informa\u00e7\u00f5es sobre um prestador de servi\u00e7o com <code>GET \/business\/&lt;id&gt;<\/code><\/li>\n<li>Adicionar informa\u00e7\u00f5es sobre um novo prestador de servi\u00e7o com <code>POST \/business<\/code><\/li>\n<li>Atualizar informa\u00e7\u00f5es sobre um prestador de servi\u00e7o com <code>PUT \/business\/&lt;id&gt;<\/code><\/li>\n<li>Remover informa\u00e7\u00f5es sobre um prestador de servi\u00e7o com <code>DELETE \/business\/&lt;id&gt;<\/code><\/li>\n<\/ol>\n<div class=\"nota-link\">\r\n<table class=\"tabelalink\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-insight\" src=\"\/arquiteturadesoftware\/wp-content\/uploads\/2022\/05\/link.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/arquiteturadesoftware\/wp-content\/uploads\/2022\/05\/link.png\" alt=\"\" width=\"70\" height=\"70\" \/>\r\n<p style=\"font-size: 22px; font-weight: bold; line-height: 26px; font-family: Montserrat; color: #432b75; margin-bottom: 5px;\">Filosofia REST<\/p>\r\n<p style=\"font-size: 16px; font-weight: Regular; line-height: 20px; font-family: Roboto; color: #45365d; margin-bottom: 0px;\">APIs (supostamente) REST s\u00e3o bem comuns. Deseja entender mais sobre a filosofia REST? Consulte o cap\u00edtulo destinado a esse tema.<\/p>\r\n<a class=\"botao-livro\" href=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/fundamentos-para-sistemas-com-arquiteturas-rest\/#Filosofia_REST\" target=\"_blank\" rel=\"noopener\">Acessar t\u00f3pico<\/a><\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h4>Op\u00e7\u00e3o de representa\u00e7\u00e3o #1: Adotar <em>Geohash<\/em><\/h4>\n<p><strong>O principal problema com a abordagem ing\u00eanua, proposta anteriormente, \u00e9 que o banco de dados consegue melhorar o desempenho das consultas a partir da latitude ou da longitude.<\/strong> Logo, naturalmente, o caminho para melhores resultados \u00e9 gerar uma \u00fanica chave de busca. Uma abordagem comum \u00e9 pela ado\u00e7\u00e3o de <em>Geohash<\/em>.<\/p>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-contribuicao-2\">\r\n<p style=\"font-size: 22px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Geohash<\/p>\r\n<em>Geohash<\/em> \u00e9 um sistema de geoc\u00f3digo de dom\u00ednio p\u00fablico inventado em 2008 por Gustavo Niemeyer que codifica uma localiza\u00e7\u00e3o geogr\u00e1fica em uma pequena sequ\u00eancia de letras e d\u00edgitos.<\/p>\n<hr \/>\n<p>Interessado em saber mais, consulte o artigo na Wikipedia.\r\n<p><a class=\"botao-livro\" href=\"https:\/\/en.wikipedia.org\/wiki\/Geohash\" target=\"_blank\" rel=\"noopener\">Acessar<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>A ado\u00e7\u00e3o de <em>geohashs\u00a0<\/em>implica no zoneamento de uma regi\u00e3o em quadrantes e sub-quadrantes, em tantos n\u00edveis quanto necess\u00e1rio, at\u00e9 que o tamanho de uma c\u00e9lula estiver em conformidade com a \u00e1rea de busca em que se deseja atuar.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4828 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/geohash.png\" alt=\"\" width=\"577\" height=\"243\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/geohash.png 812w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/geohash-300x126.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/geohash-768x323.png 768w\" sizes=\"(max-width: 577px) 100vw, 577px\" \/><\/p>\n<p>Cada quadrante pode, em qualquer n\u00edvel precisa de apenas 2 <em>bits\u00a0<\/em>para ser indicado que podem ser, ent\u00e3o, facilmente convertidos em sequ\u00eancias de caracteres usando-se, por exemplo,<em> Base32.<\/em><\/p>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-contribuicao-2\">\r\n<p style=\"font-size: 22px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Base32<\/p>\r\nBase32 \u00e9 o sistema num\u00e9rico de base 32. Ele usa um conjunto de 32 d\u00edgitos, cada um dos quais pode ser representado por 5 bits (25). Uma maneira de representar n\u00fameros Base32 de forma leg\u00edvel \u00e9 usando um conjunto padr\u00e3o de 32 caracteres, como as vinte e duas letras mai\u00fasculas A\u2013V e os d\u00edgitos 0-9. No entanto, muitas outras varia\u00e7\u00f5es s\u00e3o usadas em diferentes contextos.<\/p>\n<hr \/>\n<p>Deseja saber mais?<\/p>\n<p>\r\n<p><a class=\"botao-livro\" href=\"https:\/\/en.wikipedia.org\/wiki\/Base32\" target=\"_blank\" rel=\"noopener\">Acessar<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>Para mapear o mundo inteiro (latitude com intervalo entre -90 e +90, longitude com intervalo entre -180 e +180), seriam necess\u00e1rios apenas 6 caracteres para determinar regi\u00f5es com 4,9km x 2,5km.<\/p>\n<p><strong><em>Geohashes\u00a0<\/em>s\u00e3o f\u00e1ceis de usar e implementar. Entretanto, ignoram aspectos como densidade de cada regi\u00e3o.<\/strong><\/p>\n<h4>Op\u00e7\u00e3o de representa\u00e7\u00e3o #2: Adotar\u00a0<em>Quadtrees<\/em><\/h4>\n<p><strong>A principal desvantagem da abordagem baseada em <em>geohashes\u00a0<\/em>\u00e9 ignorar densidade em cada regi\u00e3o. Essa restri\u00e7\u00e3o pode ser facilmente suplantada pela ado\u00e7\u00e3o de <em>Quadtrees.<\/em><\/strong><\/p>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-contribuicao-2\">\r\n<p style=\"font-size: 22px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Quadtree<\/p>\r\n<\/p>\n<p>Uma <em>quadtree<\/em> \u00e9 uma estrutura de dados em \u00e1rvore na qual cada n\u00f3 interno tem exatamente quatro n\u00f3s filhos. <em>Quadtrees <\/em>s\u00e3o usados com mais frequ\u00eancia para particionar um espa\u00e7o bidimensional subdividindo-o recursivamente em quatro quadrantes ou regi\u00f5es.<\/p>\n<p>Os dados associados a uma c\u00e9lula folha variam de acordo com a aplica\u00e7\u00e3o, mas a c\u00e9lula folha representa uma &#8220;unidade de interesse espacial&#8221;.<\/p>\n<p>Deseja saber mais?<\/p>\n<p>\r\n<p><a class=\"botao-livro\" href=\"https:\/\/en.wikipedia.org\/wiki\/Quadtree\" target=\"_blank\" rel=\"noopener\">Acessar<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>Para nosso servi\u00e7o, um n\u00f3 folha poderia ser especificado por um n\u00famero m\u00ednimo de prestadores de servi\u00e7os atuantes (por exemplo, 150).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4834 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/quadtree_size.png\" alt=\"\" width=\"727\" height=\"339\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/quadtree_size.png 1188w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/quadtree_size-300x140.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/quadtree_size-1024x478.png 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/quadtree_size-768x358.png 768w\" sizes=\"(max-width: 727px) 100vw, 727px\" \/><\/p>\n<p><em>Quadtrees<\/em> s\u00e3o pequenas o suficiente para serem mantidas inteiramente na mem\u00f3ria tendo como custo principal sua computa\u00e7\u00e3o.<\/p>\n<div class=\"nota-insight\">\r\n<table class=\"tabelainsight\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-insight\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/> Dados consultados frequentemente e raramente modificados, devem ser mantidos na mem\u00f3ria, sempre que poss\u00edvel, evitando tr\u00e1fego de rede.<\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p><strong>Quadtrees s\u00e3o f\u00e1ceis de consultar, mas s\u00e3o caras de &#8220;computar&#8221;.<\/strong><\/p>\n<div class=\"nota-insight\">\r\n<table class=\"tabelainsight\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-insight\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/> Estruturas em mem\u00f3ria, com alto custo de computa\u00e7\u00e3o, podem ser preservadas, de maneira mais econ\u00f4mica, serializadas em um reposit\u00f3rio central (reconstru\u00eddos quando necess\u00e1rio).<\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Pontos que ainda necessitam reflex\u00e3o<\/h2>\n<p><strong>O processo de elabora\u00e7\u00e3o da arquitetura deve ser incremental.<\/strong>\u00a0T\u00e3o importante quanto relacionar decis\u00f5es realizadas \u00e9 indicar claramente o que ainda precisa ser ponderado.<\/p>\n<p>Com rela\u00e7\u00e3o ao design LBS \u00e9 importante, ainda, considerar:<\/p>\n<ul>\n<li>Como respeitar eventuais normas relacionadas a seguran\u00e7a de dados, com restri\u00e7\u00e3o a informa\u00e7\u00f5es de prestadores de servi\u00e7os? Usando como <em>sharding key\u00a0<\/em>a\u00a0<em>geohash <\/em>do prestador de servi\u00e7o para elei\u00e7\u00e3o do datacenter?<\/li>\n<li>Que m\u00e9todo usar para determinar disponibilidade de\u00a0 &#8220;prestadores de servi\u00e7os&#8221; conforme, por exemplo, hor\u00e1rios de funcionamento? O custo da busca, uma vez que h\u00e1 poucos prestadores retornados em cada consulta, no banco \u00e9 significativo?<\/li>\n<\/ul>\n<h2>Takeaways<\/h2>\n<p>A elabora\u00e7\u00e3o desse \u201cin\u00edcio de trabalho arquitetural\u201d para um \u201cLBS\u201d permite algumas li\u00e7\u00f5es importantes:<\/p>\n<ol>\n<li>Mesmo solu\u00e7\u00f5es muito simples se tornam desafiadoras quando envolvem suporte a escala.<\/li>\n<li>Desempenho, em muitas ocasi\u00f5es, \u00e9 garantido pela escolha de boas estruturas de dados.<\/li>\n<li>Sempre h\u00e1 mais de uma alternativa para resolver um problema arquitetural e, consequentemente,\u00a0<em>trade-offs<\/em>.<\/li>\n<li>Conhecer boas estruturas\/estrat\u00e9gias de dados (como <em>Geohashes<\/em> e <em>quadtrees<\/em>) pode ajudar a viabilizar algumas propostas de design.<\/li>\n<\/ol>\n<hr \/>\n<p>D\u00favidas ou sugest\u00f5es? Deixe suas contribui\u00e7\u00f5es nos coment\u00e1rios.<\/p>\n","protected":false},"featured_media":4840,"parent":0,"comment_status":"open","ping_status":"closed","template":"","url":[72],"sessoes":[62],"apendices":[],"capitulos":[75],"class_list":["post-4808","volume-1","type-volume-1","status-publish","has-post-thumbnail","hentry","url-permanente","sessoes-secao-4","capitulos-capitulo-4-5"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cap 4.5 Iniciando o design arquitetural de um &quot;Location-based service (LBS)&quot; - Manual do Arquiteto de Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cap 4.5 Iniciando o design arquitetural de um &quot;Location-based service (LBS)&quot; - Manual do Arquiteto de Software\" \/>\n<meta property=\"og:description\" content=\"O que iFood, Yelp\u00a0e Tinder t\u00eam em comum? Todas s\u00e3o plataformas que oferecem, por causa da demanda por proximidade dos participantes, de servi\u00e7os baseados em localiza\u00e7\u00e3o. Nesse cap\u00edtulo, discutiremos como implementar servi\u00e7os de localiza\u00e7\u00e3o de maneira eficiente. Trata-se de um desafio interessante quando analisado sob a perspectiva da escala.\u00a0 Mais uma vez, iremos utilizar um [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/\" \/>\n<meta property=\"og:site_name\" content=\"Manual do Arquiteto de Software\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/eximiaco\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-12T21:21:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/iStock-1328728348.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1773\" \/>\n\t<meta property=\"og:image:height\" content=\"591\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@eximiaco\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/\",\"name\":\"Cap 4.5 Iniciando o design arquitetural de um \\\"Location-based service (LBS)\\\" - Manual do Arquiteto de Software\",\"isPartOf\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/iStock-1328728348.jpg\",\"datePublished\":\"2022-06-21T12:19:52+00:00\",\"dateModified\":\"2024-01-12T21:21:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#primaryimage\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/iStock-1328728348.jpg\",\"contentUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/iStock-1328728348.jpg\",\"width\":1773,\"height\":591,\"caption\":\"Location Based Marketing And GPS Map Search On Phone\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Volume 1\",\"item\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cap 4.5 Iniciando o design arquitetural de um &#8220;Location-based service (LBS)&#8221;\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\",\"name\":\"Manual do Arquiteto de Software\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization\",\"name\":\"EximiaCo\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg\",\"contentUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg\",\"width\":150,\"height\":150,\"caption\":\"EximiaCo\"},\"image\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/eximiaco\",\"https:\/\/x.com\/eximiaco\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cap 4.5 Iniciando o design arquitetural de um \"Location-based service (LBS)\" - Manual do Arquiteto de Software","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:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/","og_locale":"pt_BR","og_type":"article","og_title":"Cap 4.5 Iniciando o design arquitetural de um \"Location-based service (LBS)\" - Manual do Arquiteto de Software","og_description":"O que iFood, Yelp\u00a0e Tinder t\u00eam em comum? Todas s\u00e3o plataformas que oferecem, por causa da demanda por proximidade dos participantes, de servi\u00e7os baseados em localiza\u00e7\u00e3o. Nesse cap\u00edtulo, discutiremos como implementar servi\u00e7os de localiza\u00e7\u00e3o de maneira eficiente. Trata-se de um desafio interessante quando analisado sob a perspectiva da escala.\u00a0 Mais uma vez, iremos utilizar um [&hellip;]","og_url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/","og_site_name":"Manual do Arquiteto de Software","article_publisher":"https:\/\/facebook.com\/eximiaco","article_modified_time":"2024-01-12T21:21:48+00:00","og_image":[{"width":1773,"height":591,"url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/iStock-1328728348.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@eximiaco","twitter_misc":{"Est. tempo de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/","name":"Cap 4.5 Iniciando o design arquitetural de um \"Location-based service (LBS)\" - Manual do Arquiteto de Software","isPartOf":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website"},"primaryImageOfPage":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#primaryimage"},"image":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#primaryimage"},"thumbnailUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/iStock-1328728348.jpg","datePublished":"2022-06-21T12:19:52+00:00","dateModified":"2024-01-12T21:21:48+00:00","breadcrumb":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#primaryimage","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/iStock-1328728348.jpg","contentUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/06\/iStock-1328728348.jpg","width":1773,"height":591,"caption":"Location Based Marketing And GPS Map Search On Phone"},{"@type":"BreadcrumbList","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/iniciando-o-design-arquitetural-de-um-location-based-service-lbs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/"},{"@type":"ListItem","position":2,"name":"Volume 1","item":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/"},{"@type":"ListItem","position":3,"name":"Cap 4.5 Iniciando o design arquitetural de um &#8220;Location-based service (LBS)&#8221;"}]},{"@type":"WebSite","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/","name":"Manual do Arquiteto de Software","description":"","publisher":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization","name":"EximiaCo","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg","contentUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg","width":150,"height":150,"caption":"EximiaCo"},"image":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/eximiaco","https:\/\/x.com\/eximiaco"]}]}},"_links":{"self":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/volume-1\/4808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/volume-1"}],"about":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/types\/volume-1"}],"replies":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/comments?post=4808"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/media\/4840"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/media?parent=4808"}],"wp:term":[{"taxonomy":"url","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/url?post=4808"},{"taxonomy":"sessoes","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/sessoes?post=4808"},{"taxonomy":"apendices","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/apendices?post=4808"},{"taxonomy":"capitulos","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/capitulos?post=4808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}