A comunicação entre processos (IPC) é crucial para a computação moderna, permitindo que vários núcleos de processador executem threads simultaneamente. Essencialmente, o IPC permite que diferentes threads, ou mesmo programas separados, compartilhem dados de forma eficiente. Por exemplo, quando você está transmitindo um vídeo, um thread pode lidar com a decodificação do vídeo enquanto outro lida com a renderização.
O desafio surge quando esses threads estão operando em programas diferentes, como um servidor web e um servidor de segurança. Os métodos tradicionais de transferência de grandes volumes de dados entre esses programas podem ser lentos e ineficientes, muitas vezes devido à forma como os diferentes sistemas operacionais gerenciam a memória. O Flow-IPC de código aberto aborda esse desafio tornando o IPC rápido e direto para desenvolvedores C++.
Flow-IPC: um projeto de código aberto
A aquisição da Linode pela Akamai em 2022 marcou uma aceleração estratégica em direção à computação nativa em nuvem. Estamos incluindo contribuições originais e defendendo o código aberto como parte de nossa estratégia de negócios. Com esse espírito, apresentamos o Flow-IPC no início deste ano. É um middleware de código aberto (licenças Apache 2.0 e MIT) projetado especificamente para ajudar os programadores C++ a otimizar seu IPC.
O Flow-IPC começou como uma ferramenta interna da Akamai usada em um projeto para o qual precisávamos dividir um aplicativo grande sem comprometer o desempenho. As soluções IPC existentes eram muito lentas ou muito complexas. Desde o início, projetamos o Flow-IPC para ser uma solução geral para IPC em C++. Tornar o Flow-IPC de código aberto e compartilhá-lo com a comunidade de desenvolvedores é uma forma de promover a inovação e tornar a vida mais simples para qualquer desenvolvedor que precise usar C++ para gerenciar vários threads no compartilhamento de dados.
Lançamos o Flow-IPC publicamente em abril de 2024, e o projeto recebeu uma forte resposta no Hacker News e em outras plataformas da comunidade. Os desenvolvedores compartilharam seus próprios desafios e soluções de IPC, gerando discussões construtivas e feedback valioso.
O Flow-IPC foi projetado para um público amplo na comunidade de desenvolvimento de sistemas do lado do servidor. Embora atualmente se concentre em C++, há potencial para expansão para outros ambientes de programação. Da mesma forma, atualmente suporta Linux rodando em x86-64. Temos planos de expandir este projeto para macOS e ARM64, seguido por Windows e outras variantes de SO, dependendo da demanda.
Flow-IPC é uma biblioteca com uma API C++17 extensível que está atualmente disponível para comunicação local através dos limites do processo. Ele está hospedado no GitHub junto com documentação completa, testes automatizados e demonstrações, e um pipeline de CI que testa em uma variedade de versões e configurações de compilação do GNU Compiler Collection (GCC) e Clang, incluindo proteção por meio de sanitizadores de tempo de execução, como ASan (endurece contra uso indevido de memória), TSan (contra condições de corrida) e UBSan (contra comportamentos diversos indefinidos).
Comparando Flow-IPC com outras soluções
Flow-IPC oferece simplicidade e eficiência. Ao contrário de soluções gerais como o gRPC, que são elegantes, mas podem introduzir latência, o Flow-IPC minimiza a cópia de dados e integra-se perfeitamente aos sistemas existentes. O IPC tradicional introduz latência com base no tamanho da carga útil; em nossos testes, as velocidades de transferência atingiram a faixa de um segundo. O Flow-IPC pode transmitir cargas úteis de estrutura de dados de até 1 GB tão rapidamente quanto uma carga útil de 100 KB – em microssegundos. Esta é uma melhoria de até três ou quatro ordens de grandeza. Um alocador de memória de nível comercial é integrado à memória compartilhada para aumentar ainda mais o desempenho.
Perspectivas futuras
Estamos entusiasmados em ver aonde a comunidade levará o Flow-IPC. Contribuições, solicitações de recursos e relatórios de bugs são bem-vindos à medida que continuamos a desenvolver e refinar o projeto.
Temos ideias com excelente potencial para desenvolvimento futuro. No curto prazo, a integração com capnp-rpc e possivelmente gRPC é óbvia. O protocolo e a API continuariam sendo o que se espera dessas estruturas elegantes, enquanto o Flow-IPC forneceria o desempenho subjacente de cópia zero. A longo prazo, com seu design extensível, o Flow-IPC pode se expandir para IPC em rede e, além disso, o desempenho de LAN ultrarrápido é possível com acesso remoto direto à memória (RDMA).
O Flow-IPC está ganhando força na comunidade de código aberto e estamos ansiosos para colaborar com desenvolvedores de C++ para torná-lo ainda melhor. É um exemplo dos tipos de projetos em que estamos trabalhando para levar nossa tecnologia a desenvolvedores de todo o mundo por meio de modelos de código aberto.
YOUTUBE.COM/THENEWSTACK
A tecnologia avança rápido, não perca um episódio. Inscreva-se em nosso canal no YouTube para transmitir todos os nossos podcasts, entrevistas, demonstrações e muito mais.
SE INSCREVER
Yuri Goldfeld é engenheiro de software sênior sênior na divisão de servidores de borda da Akamai. Ele é apaixonado por escrever códigos desde os 9 anos de idade, quando começou a se interessar pelos computadores domésticos Atari e Amstrad em…
Este site utiliza cookies para melhorar sua experiência de navegação. Ao continuar, você concorda com o uso de cookies. Para mais informações, consulte nossa Política de Privacidade.
Funcional
Sempre ativo
O armazenamento ou acesso técnico é estritamente necessário para a finalidade legítima de permitir a utilização de um serviço específico explicitamente solicitado pelo assinante ou utilizador, ou com a finalidade exclusiva de efetuar a transmissão de uma comunicação através de uma rede de comunicações eletrónicas.
Preferências
O armazenamento ou acesso técnico é necessário para o propósito legítimo de armazenar preferências que não são solicitadas pelo assinante ou usuário.
Estatísticas
O armazenamento ou acesso técnico que é usado exclusivamente para fins estatísticos.O armazenamento técnico ou acesso que é usado exclusivamente para fins estatísticos anônimos. Sem uma intimação, conformidade voluntária por parte de seu provedor de serviços de Internet ou registros adicionais de terceiros, as informações armazenadas ou recuperadas apenas para esse fim geralmente não podem ser usadas para identificá-lo.
Marketing
O armazenamento ou acesso técnico é necessário para criar perfis de usuário para enviar publicidade ou para rastrear o usuário em um site ou em vários sites para fins de marketing semelhantes.