Mostrando postagens com marcador Development. Mostrar todas as postagens
Mostrando postagens com marcador Development. Mostrar todas as postagens

22/07/2023

Ferramentas como o ChatGPT são realmente inteligentes?

Modelos de linguagem grandes (Large Linguage Models – LLMs) – como por exemplo, o BERT, GPT-3, – e os chatbots como ChatGPT, são impressionantes. Nos próximos anos, eles levarão a um desenvolvimento de uma série de ferramentas e aplicativos. Eles podem anunciar a próxima revolução da IA. Mas, quanto mais eles nos aproximam do tipo de inteligência geral que, apenas os humanos tem, como podemos separar seu verdadeiro significado e valor do hype que os acompanha?

Vou comentar isso a partir de dois artigos diferentes abordaram essas questões.

“O sucesso dos modelos de linguagem neural em muitas tarefas de NLP [Natural Language Processing] é empolgante”, escrito pelos professores de linguística Emiliy Bender e Alexander Koller em seu artigo de 2020 “ClimbingwardsNLU: On Meaning, Form, and Understanding in the Age of Data.” “Isso levou a reivindicações, tanto em publicações acadêmicas quanto populares, de que tais modelos entendem ou compreendem a linguagem natural ou aprendem seu significado. Do nosso ponto de vista, essas são afirmações exageradas causadas por um mal-entendido da relação entre forma linguística e significado”.

Em seu artigo, Bender e Koller explicam por que LLMs como o GPT-3 provavelmente se tornarão ferramentas de linguagem inovadoras – como corretores ortográficos ou processadores de texto altamente avançados – enquanto descartam as alegações de que eles têm a capacidade de raciocinar e entender o significado de a linguagem que estão gerando. Suas explicações são expressas em conceitos linguísticos que eles definem cuidadosamente: forma, intenção comunicativa, significado e compreensão.
A forma refere-se a como a linguagem é expressa de fato, ou seja, como texto quando expressa em um documento físico ou digital, ou como sons quando expressa em uma conversa ou palestra;
A intenção comunicativa é o propósito que um falante pretende alcançar por meio da linguagem, como transmitir alguma informação a outra pessoa, pedir que ela faça algo ou apenas socializar;
O significado é a relação entre a forma na qual a linguagem é expressa e a intenção comunicativa que está sendo usada para evocar no ouvinte ou leitor; e
A compreensão é a capacidade do ouvinte de captar o significado que o falante pretendia transmitir.

“Intenções comunicativas são sobre algo que está fora da linguagem. Quando dizemos Abra a janela! ou Quando ‘Malala Yousafzai’ nasceu?, a intenção comunicativa é fundamentada no mundo real que o falante e o ouvinte habitam juntos.” Transmitir significado por meio da linguagem e evocar a intenção de comunicação no leitor exige um conhecimento do mundo físico e social ao nosso redor. “Em contraste com alguns exageros atuais, o significado não pode ser aprendido apenas com a forma”, disseram os autores. “Isso significa que os grandes modelos de linguagem, como o BERT, não aprendem o significado; eles aprendem alguma reflexão do significado na forma linguística, o que é muito útil nas aplicações”.

O texto gerado por um LM ou chatbot não carrega nenhuma intenção comunicativa ou entende o modelo do estado de espírito do leitor, porque não foi para isso que eles foram treinados. “Isso pode parecer contra-intuitivo, dadas as qualidades cada vez mais fluentes do texto gerado automaticamente, mas temos que levar em consideração o fato de que nossa percepção do texto em linguagem natural, independentemente de como foi gerado, é mediada por nossa própria competência linguística e nossa predisposição para interpretar atos comunicativos como transmitindo significado e intenção coerentes, quer o façam ou não”.

Em “A A.I. está dominando a linguagem. Devemos confiar no que ela diz?”, um artigo da NY Times Magazine publicado em abril de 2022, o escritor de ciência Steven Johnson, escreveu sobre o GPT-3, – tanto sobre o seu desempenho, quanto possíveis armadilhas. “Nas primeiras vezes que usei o GPT-3, … fiquei emocionado”, escreveu ele. “Parecia quase impossível que uma máquina pudesse gerar um texto tão lúcido e responsivo baseado inteiramente no treinamento elementar da previsão da próxima palavra.”

“Desde o lançamento do GPT-3, a internet foi inundada com as facilidades do software – junto com suas fraquezas e outras tendências mais sinistras”, disse Johnson. “Até agora, os experimentos com os LLMs foram basicamente: experimentos de busca de sinais de verdadeira inteligência, explorando seus usos criativos e expondo seus vieses. Mas o potencial comercial final é enorme. Se a trajetória continuar, um software como o GPT-3 poderá revolucionar a forma como buscamos informações nos próximos anos. … O atendimento ao cliente pode ser totalmente transformado: qualquer empresa com um produto que atualmente exija uma equipe humana de suporte técnico pode treinar um L.L.M. para isso”.

Ao mesmo tempo, GPT-3 e outros LLMs estão atraindo críticas de que são capazes de imitar os padrões sintáticos da linguagem humana, mas incapazes de gerar suas próprias ideias, tomar decisões complexas e em amadurecer algo que se assemelhe à inteligência humana. “Para esses críticos, o GPT-3 é apenas o mais recente objeto da longa história de hype I.A., canalizando dólares de pesquisa e atenção para o que acabará por se revelar um beco sem saída, impedindo que outras abordagens promissoras amadureçam. Outros críticos ainda acreditam que software como o GPT-3 permanecerá para sempre comprometido pelos preconceitos, propaganda e desinformação nos dados em que foi treinado, o que significa que usá-lo para qualquer coisa além de truques de salão sempre será irresponsável.”

O artigo de Johnson levanta uma série de pontos de advertência sobre os LLMs e vou brevemente comentar algumas de suas advertências.

LLMs são apenas papagaios. O termo papagaio foi mencionado em um artigo de março de 2021, “On the Dangers of Stochastic Parrots: Can Language Models Be Too Big?”, por Emily Bender e Timnit Gebru. O artigo deles argumentou que os LLMs estão apenas repetindo o enorme número de frases de autoria humana usadas em seu treinamento. Sua capacidade impressionante de gerar frases convincentes e articuladas nos dá a ilusão de que estamos lidando com um ser humano bem educado e inteligente, e não com um papagaio que só repete palavras e que não tem uma compreensão humana das ideias subjacentes às frases que está reunindo.

Falta de conhecimento de bom senso. Os LLMs carecem do conhecimento de bom senso sobre o mundo físico e social do qual a inteligência humana está inserida, incluindo as habilidades de raciocínio intuitivo que nossos cérebros biológicos consideram normais. Nascemos com a capacidade de aprender rapidamente e nos adaptar ao ambiente social ao nosso redor. “Um dos segredos do aprendizado das crianças é que elas constroem modelos ou teorias do mundo”, escreveu a psicóloga da UC Berkeley, Alison Gopney, em “The Ultimate Learning Machines”, um ensaio do WSJ de 2019. “O futuro da inteligência artificial depende do desenvolvimento de computadores que possam pensar e explorar os mesmos recursos que os bebês.”

Vieses nos dados de treinamento do LLM. Uma das principais descobertas do relatório do índice de IA de 2022 foi que, embora os LLMs como o GPT-3 estejam estabelecendo novos recordes em benchmarks técnicos, eles também são mais propensos a refletir os vieses que podem ter sido incluídos em seus dados de treinamento, incluindo temas racistas, sexistas, linguagem extremista e outras coisas nocivas, bem como padrões de linguagem abusivas e ideologias nocivas.

LLMs são caixas pretas. É muito difícil explicar em termos humanos por que um LLM escolheu uma resposta entre tantas outras. Os LLMs têm um grande número de parâmetros em suas complexas redes neurais, tornando muito difícil avaliar as contribuições individuais para uma decisão em termos de como um ser humano entenderá.

LLMs podem ser confiáveis? Os LLMs são muito bons em gerar textos, mas não possuem mecanismos para verificar a veracidade do que eles geram. Eles podem ser propensos a variações, inventando frases que parecem plausíveis, mas não fazem o menor sentido e não enganariam os humanos. “O debate mais acalorado sobre os LMMs não gira em torno da questão de saber se eles podem ser treinados para entender o mundo. Gira em torno de saber se eles são confiáveis”.

“O problema de treinamento será resolvido nos próximos anos e GPT-3 e seus pares deixam uma coisa muito clara: as máquinas adquiriram linguagem”, escreveu Johnson em conclusão. “Se você passar bastante tempo com o GPT-3, tentando explorar suas capacidades e falhas, acabará se sentindo como se estivesse interagindo com uma espécie de criança prodígio cujo brilhantismo é obscurecido por algumas limitações óbvias: capaz de respostas surpreendentes; possuindo profundo conhecimento e domínio em uma vasta quantidade de temas, mas também sem noção sobre muitos fatos básicos; propenso a respostas estranhas e sem sentido; livre de etiqueta e normas sociais”.

12/04/2022

O impacto do Open Source na economia

Na década de 1990, o Sistema em código aberto era visto como uma abordagem experimental para o desenvolvimento de software usado principalmente por pesquisas e comunidades acadêmicas em projetos emergentes como Internet e Linux. Desde então, o código aberto evoluiu para se tornar um modelo bem aceito de produção econômica em quase todas as comunidades do setor público e privado em todo o mundo. Mas, embora amplamente utilizado, qual tem sido o impacto econômico do código aberto às nações e às empresas? Esta questão foi abordada em um estudo sobre o impacto do código aberto na economia europeia. “A crescente relevância do Open Source (OS) durante as últimas duas décadas exige uma atualização de uma análise aprofundada de seu papel atual e seu potencial para a economia europeia”, disse a Comissão Europeia (CE) em seu relatório sobre O impacto do software e hardware de código aberto na independência tecnológica, competitividade e inovação na economia da UE. “Enquanto o software de código aberto (OSS) se tornou popular em todos os setores da indústria de software nos últimos 20 anos, o hardware de código aberto (OSH) ainda está em uma fase emergente. No entanto, o ecossistema de negócios para OSH está se desenvolvendo.”

A CE realizou uma análise abrangente dos usos comerciais, custos e benefícios de OSS e OSH. “Com base nessas informações, o estudo avalia o potencial da União Europeia (UE) para atingir seus objetivos políticos (incluindo crescimento econômico, maior competitividade, inovação e criação de empregos) por meio do uso, promoção e apoio de OSS e OSH.” O relatório inclui uma análise detalhada e quantitativa do custo-benefício e do impacto econômico dos investimentos em código aberto; inclusive, uma pesquisa foi conduzida, com opiniões de mais de 900 partes interessadas; uma série de estudos de caso concretos; e várias recomendações de políticas públicas à CE e aos países membros da UE.

1. Análise de custo-benefício. “Com base em informações de domínio público, as empresas localizadas na UE investiram cerca de € 1 bilhão em OSS em 2018.” O relatório explicou como chegou a essa estimativa. Em 2018, havia pelo menos 260.000 colaboradores de OSS no GitHub e mais de 3,1 milhões de desenvolvedores de software nos países da UE. Esses contribuidores de OSS fizeram mais de 30 milhões de commits no Github, o que representa um investimento em pessoal de cerca de 16.000 posições de trabalho em tempo integral (FTE). Com base nos custos médios de mão de obra da UE, 16.000 FTEs representam um investimento de 1 bilhão de euros. “A análise econométricas dos dados do PIB dos Estados Membros da UE indica que em 2018, em todos os Estados Membros, o impacto econômico do OSS foi entre € 65 e € 95 bilhões.” Com base nessa análise, o estudo estimou que um aumento de 10% nas contribuições do OSS geraria um PIB adicional à UE, por ano, entre 0,4% e 0,6%. Em 2018, o PIB da UE foi de € 15.900 bilhões, portanto, um aumento do PIB de 0,4% – 0,6% corresponde a um aumento de € 65 – € 95 bilhões. “No geral, os benefícios do Open Source superam em muito os custos associados a ele.” De acordo com o estudo, em 2018 “a contribuição do OSS para o PIB da UE e as contribuições dos funcionários da UE para o OSS geram uma relação custo-benefício ligeiramente acima de 1:10. Depois de levar em conta o hardware e outros custos de capital dos 260.000 contribuintes da UE para o OSS, a relação custo-benefício ainda está ligeiramente acima de 1:4.” A metodologia desta análise de custo-benefício é explicada em detalhes no relatório da CE.

2. Informações da pesquisa. Além da análise quantitativa, o estudo recolheu e analisou os pontos de vista das partes interessadas da UE sobre o impacto do OSS e OSH. A pesquisa recebeu respostas de mais de 900 empresas e desenvolvedores. A maioria dos entrevistados estava envolvida em projetos OSS como usuários, desenvolvedores ou provedores de serviços, com apenas um pequeno número envolvido no desenvolvimento de OSS. A pesquisa mostrou que as principais motivações para se envolver em código aberto foram encontrar soluções técnicas, evitar o aprisionamento de fornecedores, avançar no estado da arte da tecnologia, desenvolver código de alta qualidade e buscar e criar conhecimento. Outras motivações incluíam economia de custos, redução dos esforços internos de manutenção, acesso a código livre de royalties e aumento do retorno dos investimentos em P&D. Além disso, a pesquisa descobriu que os indivíduos eram motivados por seus interesses pessoais em contribuir com código para comunidades de OSS. Os entrevistados individuais da pesquisa disseram que os maiores benefícios de trabalhar com grupos de OSS foram o suporte a padrões abertos e interoperabilidade, acesso aprimorado ao código-fonte, independência de fornecedores de software proprietário, acesso a uma comunidade altamente experiente e ativa e segurança e qualidade aprimoradas.

3. Estudos de caso. Para resolver a falta de dados em algumas áreas, em particular sobre OSH, o estudo realizou uma série de entrevistas. Depois elas foram filtradas e detalhadas em vários estudos de caso, incluindo:Inovação de Processo de Fabricante para Fabricante. Projetos de OSH como Arduino, MyriadRF e RepRap reúnem a academia e o movimento maker e fornecem uma ponte entre a fabricação cidadã e a indústria.
Computação e Infraestrutura de Hardware Aberta. Histórias de sucesso de SST como RISC-V e SiFive fornecem uma plataforma para inovação e exploração comercial.
Sistemas Embarcados e IoT. Projetos OSH como OpenCompute, CentOS e Yocto ajudam os desenvolvedores a incorporar computadores de uso geral em dispositivos físicos, de smartphones a carros, usando hardware de prateleira e software licenciado gratuitamente.

4. Recomendações de políticas. Com base nas análises, o estudo fez uma série de recomendações à Comissão Europeia, que incluem:Capacitação Institucional. Criar e financiar uma rede de até 20 Escritórios de Projetos de Código Aberto para apoiar e acelerar o consumo, a criação e a aplicação de tecnologias abertas.

Criação de Legitimidade. Integrar a OSS e as suas comunidades nas políticas europeias de investigação e inovação, bem como na estratégia industrial europeia; envolver-se com fundações OSS/OSH que possam oferecer uma abordagem adequada para financiamento e apoio.
Inteligência Estratégica. Expandir o Open Source Observatory – um lugar onde a comunidade OSS se reúne para aprender, encontrar soluções relevantes de software de código aberto e ler sobre o uso de código aberto e gratuito em administrações públicas em toda a Europa e fora dela; e integrar o Open Source nas atividades de coleta de dados do Eurostat.

Criação do Conhecimento. Aumentar o financiamento de P&D relacionado a projetos OSS e OSH por meio de programas existentes, como Horizon Europe, e novas iniciativas voltadas para startups de PMEs e desenvolvedores individuais; e oferecer prêmios e prêmios de pesquisa para comunidades, estudantes e professores de OSS e OSH.
Difusão de Conhecimento e Networking. Apoiar o desenvolvimento e manutenção de plataformas e repositórios OSS/OSH; e fornecer incentivos para o upload de código gerado em projetos de P&D com financiamento público.
Atividades Empreendedoras. Fornecer habilidades empreendedoras em start-ups baseadas em OSS e OSH com apoio financeiro de fundações para esses fins.
Criação de Mercado. Considerar o Open Source explicitamente nas políticas de concorrência e plataforma relacionadas à governança de comunidades de código aberto.

Desenvolvimento do Capital Humano. Promover a educação Open Source, – incluindo desenvolvimento, modelos de negócios, licenciamento e gestão, – em instituições de ensino superior; oferecer licenças de certificação para indivíduos com habilidades em OSS/OSH; e apoiar projetos de pesquisa para aumentar a diversidade de colaboradores.

Desenvolvimento de Capital Financeiro. Tratar contribuições OSS/OSH de pessoas físicas e jurídicas como doações de caridade para fins fiscais; e lançar instrumentos financeiros como fundos de capital de risco focados para ajudar as startups OSS/OSH a se unirem a empresas.

Ambiente regulatório. Promover o OSS como um importante canal de transferência de conhecimento e tecnologia; melhorar a inclusão de OSS nas compras públicas; considerar Open Source em futuras revisões da legislação europeia de direitos autorais e patentes; e financiar auditorias de segurança de projetos críticos de OSS.

O software de código aberto já está tendo um grande impacto na economia europeia e o potencial do hardware de código aberto está começando a surgir. É necessária uma abordagem abrangente e coordenação política certa para ampliar e incentivar ainda mais as produções de código aberto em benefício da economia global.

03/11/2021

Segurança cibernética e o comércio internacional

O sucesso explosivo da Internet na década de 1990 levou a uma transição histórica da era industrial dos últimos dois séculos para uma economia e sociedade cada vez mais baseadas em interações digitais globais.

Essa transição continuou a avançar nas últimas duas décadas com o advento de bilhões de smartphones, centenas de bilhões de dispositivos IoT, uma ampla variedade de aplicativos online e aplicativos móveis e enormes quantidades de dados, todos conectados por meio de redes de banda larga baseadas na Internet.

E então, veio a Covid-19. Uma pesquisa recente da McKinsey menciona que a pandemia acelerou a adoção geral de tecnologias e aplicativos digitais em três a sete anos em apenas alguns meses.

Ao mesmo tempo, as ameaças à segurança cibernética têm crescido, como o recente acontecimento com a Atento, no Brasil. Fraudes em grande escala, violações de dados e roubos de identidade se tornaram muito mais comuns. À medida que passamos de um mundo de interações físicas e documentos em papel para um mundo regido principalmente por dados e transações digitais, nossos métodos de segurança cibernética existentes estão longe de ser adequados.

As ciberameaças internacionais aumentaram assustadoramente. A segurança cibernética é agora invocada pelos governos como um aspecto importante da segurança nacional, pois eles se concentram na proteção de suas infraestruturas críticas e no bem-estar geral de suas nações. No início de junho, por exemplo, o diretor do FBI Christopher Wray comparou o perigo de ataques de ransomware, aos ataques terroristas de 11 de setembro. E, em um editorial recente, o NY Times argumentou que os ataques de ransomware surgiram como

“uma ameaça potencial à segurança nacional“, dada “sua capacidade de perturbar seriamente as economias e violar empresas ou agências estrategicamente críticas“, exortando os governos que “É uma guerra que precisa ser travada e vencida.”

Além do terrorismo e da segurança nacional, as ameaças cibernéticas têm o potencial de causar estragos no comércio internacional e na economia global. Em um artigo recente, Framework for Understanding Cybersecurity Impacts on International Trade, os professores do MIT Stuart Madnick e Simon Johnson e o cientista pesquisador Keman Huang disseram que as preocupações com a cibersegurança se tornaram uma questão fundamental para a política de comércio internacional.

“Governos em todo o mundo estão desenvolvendo estratégias para se proteger contra ameaças cibernéticas”, escreveram os autores.

“Mais de 50 países publicaram uma estratégia de segurança cibernética para definir a segurança do ambiente online de uma nação. … No entanto, diferentes políticas são implementadas para cumprir esses objetivos estratégicos. Um exemplo típico, que foi sugerido informalmente, é que produtos potencialmente perigosos vindos de países questionáveis devem ser excluídos da importação. Mas isso levanta muitas questões políticas, como:

(1) o que é um país questionável considerando as cadeias de suprimentos globalizadas para quase todos os produtos,

(2) quais produtos são mais preocupantes e

(3) presumindo que tais restrições rapidamente se tornem políticas mundiais com retaliações, qual pode ser o impacto no comércio internacional e na economia?”

As preocupações com a segurança cibernética estão aumentando.

Dada a ampla adoção de tecnologias digitais em todas as economias e sociedades, a segurança cibernética se tornou cada vez mais importante para a segurança nacional de um país. A segurança cibernética nacional é um conceito multidimensional, incluindo segurança militar, segurança política, segurança econômica e segurança cultural. Ao mesmo tempo, as empresas e as instituições governamentais dependem cada vez mais das cadeias de abastecimento globais. As cadeias de suprimentos se tornaram uma ameaça significativa de ataque cibernético para muitas organizações, aprofundando ainda mais suas preocupações com a segurança cibernética.

Os países estão agindo em resposta às suas preocupações com a segurança cibernética.

Os países estão aumentando suas capacidades ofensivas e defensivas para proteger suas sociedades, organizações e indivíduos de ataques cibernéticos em potencial.

“Não há dúvida de que essas políticas e regulamentações impactarão o ciberespaço, não apenas para os próprios países, mas também para a sociedade globalizada da Internet, resultando em um impacto no comércio internacional, incluindo a importação e exportação de bens e serviços de TI.”

As ações dos países geralmente se enquadram em uma das quatro categorias:

1) ignorar ou expressar preocupações,

2) desenvolver barreiras comerciais de importação,

3) desenvolver barreiras comerciais relacionadas à exportação e

4) colaborar para mitigar conflitos.

As organizações afetadas estão tomando medidas com base em suas preocupações com a segurança cibernética.

As organizações precisam gerenciar cuidadosamente seus riscos de segurança cibernética para proteger suas cadeias de suprimentos físicas e digitais. Isso definitivamente afetará suas decisões sobre fornecedores e seleção de mercado, incluindo onde comprar bens e serviços e em quais países fazer negócios. Geralmente, as organizações colaborarão com seu governo em políticas que podem impactar o comércio internacional. Mas, em alguns casos específicos, a organização tentará encorajar ambos os lados a se comprometer e evitar o potencial de uma guerra comercial que acaba prejudicando a todos.

As questões de segurança cibernética nacional e da cadeia de suprimentos interagem e impactam uma à outra.

As nações e as organizações podem escolher entre várias ações diferentes para lidar com essas questões. Depois de examinar as ações potenciais, a equipe de pesquisa do CAMS identificou três cenários diferentes para pensar sobre o impacto da segurança cibernética no comércio internacional:

Conformidade com a regulamentação: neste cenário, a nação iniciadora implementará políticas e regulamentações comerciais relacionadas à segurança cibernética, o que impactará o comércio internacional. As organizações cumprirão esses regulamentos, os quais orientarão sua gestão de risco da cadeia de abastecimento global. Em alguns casos, as organizações podem tentar negociar com a nação iniciadora para diminuir o impacto negativo da regulamentação do comércio.

Estratégia de negócios da cadeia de suprimentos: neste cenário, as organizações consideram o impacto dos riscos de segurança cibernética em suas cadeias de suprimentos como um aspecto importante de sua estratégia de negócios. As empresas desenvolverão diretrizes para o gerenciamento da segurança cibernética de suas cadeias de suprimentos globais. Eles também podem tentar influenciar as nações a implementar regulamentos de comércio de importação / exportação que podem impactar ainda mais o comércio internacional. “Essas influências trabalharão juntas para remodelar a cadeia de abastecimento global.”

Geopolítica da cibersegurança: este cenário considera o impacto da cibersegurança no comércio internacional de uma perspectiva geopolítica. “Considerando as preocupações com a segurança cibernética nacional, a nação inicial usará as regulamentações de comércio de importação / exportação para impactar o comércio internacional, o que definitivamente impactará as outras nações. A nação que está enfrentando as mudanças tomará diferentes ações em reação aos regulamentos comerciais recém-iniciados.”

A segurança cibernética desempenhará um papel cada vez mais crítico no comércio internacional, dado o desenvolvimento acelerado da economia digital. Essa função não é apenas sobre políticas e conformidade, mas também pode ser uma importante estratégia de negócios e questão geopolítica. Os governos precisam considerar como evitar confrontos desnecessários para mitigar o impacto negativo das guerras comerciais e melhorar os resultados para todos.

“Do ponto de vista da organização, ignorar a segurança cibernética não é mais uma opção”, concluem os autores.

“Isso é especialmente verdadeiro para as empresas que dependem fortemente da tecnologia da Internet ou de cadeias de suprimentos globais, físicas e digitais. O impacto da segurança cibernética nessas empresas se tornará cada vez mais significativo no futuro. Em vez de considerar apenas a segurança cibernética uma questão de regulamentação e tentar cumprir as políticas e regulamentações emergentes, as organizações devem … envolver-se no processo de regulamentação, não apenas durante os períodos de comentários, mas também durante o processo de minuta de regulamentação. Uma vez que neste momento ainda não existem cibernorms no comércio internacional, ainda há um longo caminho pela frente“.

31/10/2021

Dicas de Arquitetura de Sistema


Depois de projetar a distribuição de cargas e balancear os servidores web, é preciso pensar no próximo problema: a Base de dados

Por algumas vezes trabalhando com arquitetura de soluções de Tecnologia da Informação, aprendi que definir o problema com perguntas esclarecedoras, é a chave de tudo:Definir os casos de uso,

Objetivos do sistema,
O quê é necessário para o sucesso do projeto?

Quais são as restrições,
Confiabilidade desejada,
Redundância,
Estabilidade,
Segurança,
Disponibilidade % up-time,
Simplicidade vs. Complexidade,
Manutenção e Consistência.

Lembra do Teorema de Cap? Aplique em seus projetos.

Uma vez que o componentes necessários ao projeto seja definido com base nas respostas das questões anteriores, os próximos passos são as definições de: WebServer e Load balancer,

Esses elementos são pontos de falha do projeto e devem receber total atenção. Para design de sistema móvel, é importante ainda pensar em: Acesso offline, Cache, Como ocorre a atualização das páginas, e
Otimização round trip. Como escalar servidores da web? 

Load Balancers Architecture

É possível usar um ou vários balanceadores de carga em paralelo,
Também é possível dividir as aplicações pelos recursos, dessa forma, pode-se equilibrar cada recurso em um grupo de servidores.

Como dimensionar o banco de dados?

Uma boa prática é armazenar em cache os resultados do banco de dados; para isso seria importante adicionar uma camada de cache extra entre os servidores e o banco de dados:

Pode-se usar o cache na memória ou salvar em disco. Por exemplo, o Redis permite salvar conteúdo/ativos do cache da memória no disco (mas lembre-se: o disco é muito mais lento do que a memória). Existem duas abordagens básicas a se seguir: write-back cache ou write-through cache.

Outra forma de dimensionar o banco de dados é vertical e horizontalmente. Para saber mais, veja aqui.

Como preparar nossos ativos para entregar mais rápido em todo o mundo? > CDNs

A CDN (Content Delivery Network ou Rede de Distribuição de Conteúdo) é muito boa para entregar ativos (js, png, mpeg4, etc) de forma muito rápida, porque ela geralmente estará mais próxima do usuário, fazendo com este, tenha uma experiência de usabilidade e navegação no site, e-commerce ou aplicação, mais fluida e dinâmica.

A arquitetura de CDN irá ajudar sua aplicação da seguinte maneira: o usuário acessa a URL da CDN, o servidor CDN verifica se seu servidor, mais próximo ao requisitante, possui os ativos requisitados; se ele tiver, fará a entrega dos ativos; caso contrário, o servidor CDN acessará o servidor que possui o ativo E carregará e salvará o ativo em seu cache. Então, na próxima consulta a este conteúdo/ativo, será usado o ativo armazenado em cache no servidor CDN.

Existem duas estratégias básicas de CDNs: PULL ou PUSH.

Estratégia Pull:

Nessa técnica, o usuário acessa a URL da CDN e o servidor CDN verifica se o servidor mais próximo à requisição, possui o ativo; caso contrário, o servidor acessará o servidor origem, que possui o ativo; a CDN irá carregar o ativo e salvá-lo em seu cache. Então, da próxima vez que houver uma consulta a este ativo, será usado o ativo armazenado no cache da CDN. Isso permite uma experiência mais dinâmica, como citado anteriormente.

Estratégia Push:

Nessa técnica, os arquivos são carregados no servidor CDN, portanto, a primeira solicitação será mais rápida, mas custará mais, porque você precisará pagar pelo armazenamento carregado. Uma técnica comum é usar domínios personalizados ao lidar com CDN. O que você precisa fazer é configurar sua CDN para acessar seu provedor de CDN. No momento de pagar por um certificado SSL, você poderia pagar por *.myapp para estar pronto para lidar com diferentes subdomínios, evitar problemas de CORS, e também atuar como balanceador manual de suas solicitações.

Atualização de conteúdo na CDN

Uma técnica comum para atualizar seu conteúdo na sua CDN é anexar um parâmetro de consulta ao seu ativo para criar uma versão dele, como por exemplo: cnd.myapp.com/scripts/app.js?version=1 neste caso, assim que precisar atualizar seus arquivos, você pode mudar a versão do ativo. Isso ajuda a criar uma abordagem de controle de versão (versionamento) automática ou automatizada, dependendo de como irá usá-la.

Dicas de design de API

Finalizando o post, vamos falar sobre APIs e quais são os padrões de comunicação entre o cliente e o back-end? As APIs são um conjunto de padrões que fazem parte de uma interface e que permitem a criação de plataformas de maneira mais simples e prática para desenvolvedores. A partir de APIs é possível criar softwares, aplicativos, programas e plataformas diversas. Por exemplo, apps desenvolvidos para celulares Aindroid e IOS são criados a partir de padrões definidos e disponibilizados pelas APIs de cada sistema operacional. Existem diferentes estratégias e abordagens; e o cliente pode ser um navegador da web e IOS ou Andriod. E esses clientes podem ser comunicados ao back-end do seu servidor web.

O objetivo das APIs é tornar a experiência mais simples possível e uma maneira de ser simples e comum é fazer CRUDs. E aqui você encontra um conjunto de práticas recomendadas sobre APIs. Além disso, você precisa pensar sobre suas Entradas e Saídas, e como passar os parâmetros corretos para suas APIs. Lembre-se de usar sempre uma chave para autenticação segura, um mecanismo muito comum é usar tokens JWT. Outra consideração é decidir se o aplicativo será um driver cliente ou driver servidor. Por exemplo, se o APP for uma UX muito importante ou tenha necessidade crítica de desempenho, a aplicação precisa ser mais responsiva e haverá necessidade de desenvolvimento nativo para a plataforma desejada. As limitações incluem necessidade de duplicar o código lógico para cada nova aplicação nativa. Por exemplo, no caso de você precisar algo muito específico para Android, ou para IOS, etc. Além disso, outra limitação para o aplicativo móvel, é que geralmente um aplicativo de driver de servidor os recursos de memória e CPU são realmente limitados.

Outra consideração importante é dividir os pedidos de requisições ao servidor; por exemplo: poderíamos fazer um único pedido grande ao servidor e isso levaria vários milissegundos / segundos de resposta; ou podemos dividir esse pedido gigante em vários pedidos pequenos, para fazer um carregamento progressivo com melhor autonomia de resposta do servidor.

</>

Dicas de Arquitetura de Sistema

Por algumas vezes trabalhando com arquitetura de soluções de Tecnologia da Informação, aprendi que definir o problema com perguntas esclarecedoras, é a chave de tudo:Definir os casos de uso,
Objetivos do sistema,
O quê é necessário para o sucesso do projeto?
Quais são as restrições,
Confiabilidade desejada,
Redundância,
Estabilidade,
Segurança,
Disponibilidade % up-time,
Simplicidade vs. Complexidade,
Manutenção e Consistência.

Lembra do Teorema de Cap? Aplique em seus projetos.

Uma vez que o componentes necessários ao projeto seja definido com base nas respostas das questões anteriores, os próximos passos são as definições de:WebServer,
Load balancer,

Esses elementos são pontos de falha do projeto e devem receber total atenção.
Para design de sistema móvel, é importante ainda pensar em:Acesso offline,
Cache,
Como ocorre a atualização das páginas, e
Otimização round trip.

Como escalar servidores da web? > Balanceadores de carga

Load Balancers Architecture

É possível usar um ou vários balanceadores de carga em paralelo,
Também é possível dividir as aplicações pelos recursos, dessa forma, pode-se equilibrar cada recurso em um grupo de servidores.

Como dimensionar o banco de dados? > Cache

Depois de projetar a distribuição de cargas e balancear os servidores web, é preciso pensar no próximo problema: a Base de dados!

Data Base

Uma boa prática é armazenar em cache os resultados do banco de dados; para isso seria importante adicionar uma camada de cache extra entre os servidores e o banco de dados:
Cache Level

Pode-se usar o cache na memória ou salvar em disco. Por exemplo, o Redis permite salvar conteúdo/ativos do cache da memória no disco (mas lembre-se: o disco é muito mais lento do que a memória). Existem duas abordagens básicas a se seguir: write-back cache ou write-through cache.

Outra forma de dimensionar o banco de dados é vertical e horizontalmente. Para saber mais, veja aqui.

Como preparar nossos ativos para entregar mais rápido em todo o mundo? > CDNs

A CDN (Content Delivery Network ou Rede de Distribuição de Conteúdo) é muito boa para entregar ativos (js, png, mpeg4, etc) de forma muito rápida, porque ela geralmente estará mais próxima do usuário, fazendo com este, tenha uma experiência de usabilidade e navegação no site, e-commerce ou aplicação, mais fluida e dinâmica.

A arquitetura de CDN irá ajudar sua aplicação da seguinte maneira: o usuário acessa a URL da CDN, o servidor CDN verifica se seu servidor, mais próximo ao requisitante, possui os ativos requisitados; se ele tiver, fará a entrega dos ativos; caso contrário, o servidor CDN acessará o servidor que possui o ativo E carregará e salvará o ativo em seu cache. Então, na próxima consulta a este conteúdo/ativo, será usado o ativo armazenado em cache no servidor CDN.

Existem duas estratégias básicas de CDNs: PULL ou PUSH.

Estratégia Pull:

Nessa técnica, o usuário acessa a URL da CDN e o servidor CDN verifica se o servidor mais próximo à requisição, possui o ativo; caso contrário, o servidor acessará o servidor origem, que possui o ativo; a CDN irá carregar o ativo e salvá-lo em seu cache. Então, da próxima vez que houver uma consulta a este ativo, será usado o ativo armazenado no cache da CDN. Isso permite uma experiência mais dinâmica, como citado anteriormente.

Estratégia Push:

Nessa técnica, os arquivos são carregados no servidor CDN, portanto, a primeira solicitação será mais rápida, mas custará mais, porque você precisará pagar pelo armazenamento carregado. Uma técnica comum é usar domínios personalizados ao lidar com CDN. O que você precisa fazer é configurar sua CDN para acessar seu provedor de CDN. No momento de pagar por um certificado SSL, você poderia pagar por *.myapp para estar pronto para lidar com diferentes subdomínios, evitar problemas de CORS, e também atuar como balanceador manual de suas solicitações.

Atualização de conteúdo na CDN

Uma técnica comum para atualizar seu conteúdo na sua CDN é anexar um parâmetro de consulta ao seu ativo para criar uma versão dele, como por exemplo: cnd.myapp.com/scripts/app.js?version=1 neste caso, assim que precisar atualizar seus arquivos, você pode mudar a versão do ativo. Isso ajuda a criar uma abordagem de controle de versão (versionamento) automática ou automatizada, dependendo de como irá usá-la.

Dicas de design de API

Finalizando o post, vamos falar sobre APIs e quais são os padrões de comunicação entre o cliente e o back-end?
As APIs são um conjunto de padrões que fazem parte de uma interface e que permitem a criação de plataformas de maneira mais simples e prática para desenvolvedores. A partir de APIs é possível criar softwares, aplicativos, programas e plataformas diversas. Por exemplo, apps desenvolvidos para celulares Aindroid e IOS são criados a partir de padrões definidos e disponibilizados pelas APIs de cada sistema operacional. Existem diferentes estratégias e abordagens; e o cliente pode ser um navegador da web e IOS ou Andriod. E esses clientes podem ser comunicados ao back-end do seu servidor web.

O objetivo das APIs é tornar a experiência mais simples possível e uma maneira de ser simples e comum é fazer CRUDs. E aqui você encontra um conjunto de práticas recomendadas sobre APIs. Além disso, você precisa pensar sobre suas Entradas e Saídas, e como passar os parâmetros corretos para suas APIs. Lembre-se de usar sempre uma chave para autenticação segura, um mecanismo muito comum é usar tokens JWT. Outra consideração é decidir se o aplicativo será um driver cliente ou driver servidor. Por exemplo, se o APP for uma UX muito importante ou tenha necessidade crítica de desempenho, a aplicação precisa ser mais responsiva e haverá necessidade de desenvolvimento nativo para a plataforma desejada. As limitações incluem necessidade de duplicar o código lógico para cada nova aplicação nativa. Por exemplo, no caso de você precisar algo muito específico para Android, ou para IOS, etc. Além disso, outra limitação para o aplicativo móvel, é que geralmente um aplicativo de driver de servidor os recursos de memória e CPU são realmente limitados.

Outra consideração importante é dividir os pedidos de requisições ao servidor; por exemplo: poderíamos fazer um único pedido grande ao servidor e isso levaria vários milissegundos / segundos de resposta; ou podemos dividir esse pedido gigante em vários pedidos pequenos, para fazer um carregamento progressivo com melhor autonomia de resposta do servidor.

</>

Além da Guerra de Preços: O Oceano Azul na Conectividade Brasileira

Introdução Lançado em 2005 por W. Chan Kim e Renée Mauborgne, A Estratégia do Oceano Azul revolucionou o pensamento estratégico...