Saudações a todos os leitores de Habr! Meu nome é Igor Rybakov e sou o diretor técnico da empresa de TI do Cazaquistão, DAR. Hoje vou compartilhar com você a compreensão e o uso dos princípios da computação paralela nos modernos sistemas de informação. Para entender isso mais profundamente, gostaria de apresentar argumentos a favor do estudo e da aplicação prática dos conceitos de computação paralela e distribuída no desenvolvimento de sistemas de informação modernos.
Computação paralela ou o que o fundador da Intel
Primeiro, um pouco de história. Em 1965, Gordon Moore, um dos fundadores da Intel, descobriu um padrão: o aparecimento de novos modelos de microcircuitos foi observado cerca de um ano após os antecessores, enquanto o número de transistores neles quase dobrou a cada vez. Acontece que o número de transistores colocados no chip de circuito integrado dobrava a cada 24 meses. Essa observação passou a ser chamada lei de Moore. O fundador da Intel previu que o número de elementos no chip aumentaria de 2 ^ 6 (cerca de 60) em 1965 para 2 ^ 16 (65 mil) em 1975 .
Agora, para poder colocar em prática esse poder computacional adicional que Moore previu, tornou-se necessário usar a computação paralela. Por várias décadas, os fabricantes de processadores aumentaram constantemente a velocidade do relógio e o paralelismo no nível das instruções, de modo que, nos novos processadores, os aplicativos antigos de thread único executam mais rapidamente, sem alterações no código do programa.
Desde meados da década de 2000, os fabricantes de processadores começaram a preferir uma arquitetura de vários núcleos, mas, para obter o benefício total do aumento do desempenho do processador central, os programas devem ser reescritos de maneira apropriada. Aqui surge um problema, porque, de acordo com a lei de Amdahl , nem todos os algoritmos podem ser paralelizados, determinando assim o limite fundamental da eficiência na resolução de um problema computacional em supercomputadores.
Para superar esse limite, são utilizadas abordagens de computação distribuída. Essa é uma maneira de resolver problemas de computação que exigem muita mão-de-obra usando vários computadores, que geralmente são combinados em um sistema de computação paralelo. Cálculos seqüenciais em sistemas de informações distribuídos são realizados levando em consideração a solução simultânea de muitos problemas computacionais. Um recurso dos sistemas de computação multiprocessados distribuídos, em contraste com os supercomputadores locais, é a possibilidade de aumento ilimitado no desempenho devido ao dimensionamento .
Por volta de meados de 2005, os computadores estão maciçamente equipados com processadores com vários núcleos, o que permite a computação paralela. E as modernas tecnologias de rede permitem combinar centenas e milhares de computadores. O que levou ao surgimento da chamada "computação em nuvem".
O uso da computação paralela
Os sistemas de informações atuais, como o comércio eletrônico, precisam urgentemente de fornecer serviços de qualidade aos seus clientes. As empresas estão competindo, inventando novos serviços e produtos de informação. Os serviços devem ser projetados para alta carga e alta tolerância a falhas, como usuários de serviços, não um escritório, nem um país, mas o mundo inteiro.
Ao mesmo tempo, é importante preservar a viabilidade econômica dos projetos e não gastar fundos desnecessários em equipamentos de servidor caros, se um software antigo que usa apenas parte da capacidade de computação trabalhar com ele.
Os desenvolvedores de sistemas de aplicativos enfrentaram um novo problema - a necessidade de reescrever os sistemas de informação para atender aos requisitos dos negócios modernos e a necessidade de utilizar melhor os recursos do servidor para reduzir o custo total de propriedade. As tarefas que precisam ser tratadas pelos modernos sistemas de informação são diversas.
A partir do aprendizado de máquina e da análise de big data, para garantir a operação estável da funcionalidade básica do sistema existente durante os períodos de pico. Por exemplo, aqui você pode citar vendas em massa na loja online. Todas essas tarefas podem ser resolvidas usando uma combinação de computação paralela e distribuída, por exemplo, implementando uma arquitetura de microsserviço.
Controle de Qualidade de Serviço
Para medir a qualidade real dos serviços de um cliente, é usado o conceito de contrato de nível de serviço (SLA), ou seja, algumas métricas estatísticas do desempenho do sistema.
Por exemplo, os desenvolvedores podem definir a tarefa de que 95% de todas as solicitações de usuários são atendidas com um tempo de resposta não superior a 200 ms. A propósito, são requisitos não funcionais bastante reais, porque os usuários não gostam de esperar.
Para avaliar a satisfação do usuário com o serviço, você pode usar o indicador Apdex, que reflete a proporção de respostas bem-sucedidas (satisfeitas) e insatisfatórias (insatisfatórias). Por exemplo, nosso valor limite é SLA = 1,2 segundos e, com 95% do tempo de resposta das solicitações <= 1,2 segundos, o resultado será bem-sucedido. No caso de um grande número de solicitações por mais de 1,2 segundos, mas menos de 4T (4,8 segundos), o resultado é considerado satisfatório e, quando um grande número de solicitações excede 4T, esses> 4,8 segundos, o resultado é considerado uma falha.
Conclusões
Como resultado, eu gostaria de dizer que o desenvolvimento de microsserviços realmente envolve entendimento e aplicação prática da Computação Distribuída e Paralela.
Claro, você terá que sacrificar algumas coisas:
- A simplicidade do desenvolvimento e manutenção - os esforços dos desenvolvedores para implementar módulos distribuídos;
- Ao trabalhar com bancos de dados, a consistência estrita (ACID) pode desaparecer e exigir outras abordagens;
- O poder da computação está sendo gasto em comunicações e serialização de rede;
- Passamos um tempo implementando práticas de DevOps para monitoramento e implantação mais complexos.
Em troca, temos, na minha opinião, muito mais:
- a capacidade de reutilizar módulos inteiros prontos para uso e, como resultado, lançamento rápido de produtos no mercado;
- alta escalabilidade de sistemas, o que significa mais clientes sem perder o SLA;
- Usando eventual consistência, com base no teorema da CAP, temos a capacidade de gerenciar grandes quantidades de dados, novamente, sem perder o SLA;
- a capacidade de registrar qualquer alteração no estado do sistema para posterior análise e aprendizado de máquina.