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.

</>

12/10/2021

A evolução do CIO

Em uma conversa aqui e ali, entre um café e um novo projeto se fala sobre os papéis de cada um dentro da empresa durante a pandemia. E mexendo aqui e ali na internet, encontrei esse material:

“CIOs e outros líderes de tecnologia lideraram um trabalho heróico para ajudar suas empresas a permanecerem no negócio durante a pandemia”, tema do relatório recente, Pilotos, co-pilotos e engenheiros: insights da transformação digital de CIOs para CIOS.

“A questão agora é onde estará o foco dos CIOs e de suas organizações no pós pandemia?”

Para esclarecer essa questão, a empresa de serviços profissionais Genpact entrevistou 500 CIOs e líderes de tecnologia em parceria com o Simpósio de CIO do MIT Sloan e o professor do Babson College, Tom Davenport. Suas descobertas foram apresentadas no 2021 MIT Digital Symposium.

“Encontramos um nível surpreendente de semelhança em termos das tecnologias nas quais eles estão focados, a infraestrutura que estão tentando construir e sua visão de expansão de responsabilidades”, foi a principal descoberta do relatório.

“Grande parte dos CIOs, estão focadas em inteligência artificial (IA) e análises avançadas, migrando para a nuvem e modernização da arquitetura. No entanto, há uma falta de consenso sobre uma questão crítica: a função do CIO na transformação dos negócios”.

No passado, a principal responsabilidade de muitos CIOs era operar as infraestruturas de TI de suas empresas, mantendo os custos baixos. Devido a sua função, eles geralmente se reportavam ao COO ou ao CFO. Porém, cada vez mais, os CIOs têm recebido responsabilidade pela estratégia digital geral de suas empresas, trabalhando em estreita colaboração com executivos seniores em toda a empresa.

“A função continua a evoluir”, observa o relatório Genpact.

“Quase todos os CIOs esperam que suas funções se expandam. Quase todos se reportam ou interagem com o CEO regularmente. E muitos estão explorando a nuvem, análises avançadas e automação. A grande aposta futura que une todos os CIOs é a inteligência artificial (IA). E para acessar novos conjuntos de talentos e habilidades, muitos estão explorando seus parceiros externos do ecossistema. Tudo isso é um bom presságio para as futuras atividades de transformação do CIO. Além de exercitar seus músculos de tecnologia, muitos CIOs ainda estão construindo seus músculos de transformação, que devem incluir força no gerenciamento de mudanças e conhecimento de negócios.”98% dos CIOs pesquisados concordam que sua responsabilidade se tornará mais estratégica nos próximos anos;57% ainda incluiram maior colaboração multifuncional;55% estão ajudando a impulsionar a transformação de negócios;53% aplicarão maior supervisão sobre outras tecnologias relacionadas e funções atualmente não ocupadas pelo CIO;

Cada vez mais se espera que os CIOs unam as estratégias de negócios e tecnologia de sua empresa. Além de sua função tradicional de gerenciamento de operações de TI e ameaças à segurança cibernética, os CIOs estão sendo solicitados a ajudar no crescimento dos negócios por meio de novos produtos digitais, aumentar a produtividade por meio da automação de processos e aproveitar tecnologias para melhorar as experiências do cliente (CX) e do funcionário (EX).

Quando questionados sobre quais tecnologias eles planejam priorizar para atingir esses objetivos, os CIOs responderam:48% responderam que a IA e aprendizado de máquina estão em suas prioridades;44% disseram que a migração de data centers para a nuvem estão em suas prioridades;41% apontam para tecnologias de comércio digital;40% falam em aplicativos e plataformas para a nuvem e automação de processos;39% em tecnologias de Customer Xperience / Eemployee Xperience;

A pesquisa revelou três tipos distintos de CIOs, dependendo de seu nível de influência na transformação digital de suas empresas:22% dos CIOs (pilotos), conduzem a transformação geral nas principais funções de negócios;61% (co-pilotos), fazem parceria com líderes de negócios para moldar e entregar transformação; e17%, executam (engenheiros), mas não conduzem a transformação.

Pilotos: “A função do CIO sempre teve vários componentes, mas em empresas com visão de futuro, é cada vez mais orientada para liderar a transformação de negócios por meio da tecnologia. Ao mesmo tempo, a maioria dos CIOs surgiu por meio da função de TI, mas agora muitos vêm para o trabalho com experiência em negócios e apreciam o potencial da tecnologia para transformar estratégias, processos e modelos de negócios. Este conhecimento de negócios – combinado com reuniões regulares do CEO – está ajudando os pilotos de transformação a ter sucesso.”

Os pilotos não só precisam liderar a criação da estratégia digital, mas também devem comunicar seu raciocínio ao CEO da empresa, executivos de negócios seniores e membros do conselho. A capacidade de unir e articular as estratégias de negócios e tecnologia da empresa ajuda os pilotos de transformação a estarem sempre à frente na adoção de tecnologias-chave e iniciativas de mercado. Como resultado, 52% dos CIOs piloto concordaram fortemente que sua organização está bem posicionada para o crescimento da empresa pós-pandemia, em comparação com 43% dos co-pilotos e 36% dos engenheiros.

Os pilotos também estão mais focados em IA e tecnologias de automação, com 45% tendo feito isso, em comparação com 36% dos co-pilotos e 33% dos engenheiros. Além disso, os pilotos de transformação dominaram sua função de operações de TI, contando fortemente com a automação e os parceiros do ecossistema, o que lhes permite concentrar suas energias nas tarefas que mais requerem sua atenção.

Co-pilotos: são o maior grupo de CIOs pesquisados. Embora impactante, o papel do co-piloto é menos visivelmente influente do que o do piloto. Eles fazem parceria com líderes empresariais para moldar e implementar iniciativas transformacionais. Mas, em comparação com os pilotos, eles muitas vezes lutam para unir a estratégia de negócios e tecnologia e não têm o mesmo nível de recursos para explorar tecnologias e mercados emergentes.

“Os co-pilotos são adequados para a colaboração que a transformação digital exige – uma habilidade que os CIOs em todos os níveis devem desenvolver para impulsionar a mudança.”

Os co-pilotos geralmente estão mais focados em questões de infraestrutura de tecnologia do que os pilotos, mas menos do que os engenheiros. Eles tendem a se envolver no aumento da produtividade por meio de novos modelos de prestação de serviços, como automação de processos e parcerias com fornecedores de tecnologia. Os copilotos estão à frente na migração de data centers para a nuvem e na re-plataforma de aplicativos para execução na nuvem.

“Enquanto os co-pilotos ainda estão ocupados com a migração para a nuvem, os pilotos já fizeram esses investimentos e estão prontos para aprimorar suas pegadas na nuvem.”

Engenheiros: Manter os negócios em andamento é responsabilidade primária dos engenheiros, o menor grupo (17%) dos CIOs pesquisados. Eles exercem liderança em iniciativas relacionadas à tecnologia, enquanto recebem orientação de líderes de negócios na execução de iniciativas de transformação.

“Na verdade, esta tem sido a função principal dos CIOs desde que sua função foi definida em 1981. A função do engenheiro, no entanto, parece estar em declínio, pois os CIOs esperam mais responsabilidades para conduzir a transformação dos negócios nos próximos dois anos.”

Os engenheiros não estão no mesmo nível de maturidade digital que seus colegas. Dos três tipos de CIOs, eles são os mais propensos a dizer que a falta de talentos qualificados é uma barreira para a transformação. Para acessar as habilidades necessárias, os engenheiros geralmente contam com fornecedores de tecnologia externos e parceiros de serviço. 45% dos engenheiros disseram que o aprimoramento de talentos e a migração de cargas de trabalho para infraestruturas e aplicativos baseados em nuvem eram necessários para se adaptar ao ambiente de negócios em constante mudança.

“A nuvem é uma prioridade para todos os CIOs. Na verdade, nos próximos 12 meses, todos os entrevistados planejam continuar ou iniciar sua transição para a nuvem. Infelizmente, os engenheiros têm uma longa jornada pela nuvem pela frente. Eles são os menos focados na migração de data centers para a nuvem, construindo uma infraestrutura de desenvolvimento, segurança, operações e governança na nuvem e construindo lagos de dados e sistemas analíticos de percepção na nuvem.”

“As questões relacionadas ao talento aparecem nos três principais desafios externos e internos. Quando questionado sobre quais habilidades e competências serão mais importantes para o sucesso da organização do CIO, a prática de desenvolvimento e entrega ágil, gerenciamento de parcerias com ecossistemas externos e combinação de conjuntos de dados internos e externos para gerar inteligência preditiva foi a vencedora.” Esses recursos tiveram alta demanda durante a pandemia.

Por fim, apesar dos investimentos sem precedentes em infraestrutura e transformação digital, muitos dos CIOs pesquisados se preocupam com o futuro – o que é plausível, dentro d todas as mudanças realizadas e a perspectiva de transformação vindouras.

“Apenas 44% concordam fortemente que sua organização CIO está bem posicionada para apoiar o crescimento da empresa após a pandemia … O sentimento é igualmente preocupante quanto à resiliência dos negócios em face de turbulências futuras. Na verdade, 68% dos CIOs acreditam que sua organização não está completamente preparada para ajudar suas empresas a resistir a outra grande interrupção nos negócios.”

Minha principal conclusão ao olhar para o relatório é que os CIOs terão que desempenhar um papel importante para ajudar suas empresas a prosperar em nossa economia cada vez mais digital.

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...