Em maio de 2022, nosso banco de dados vetorial de código aberto versão Milvus 2.0 estava se estabilizando após várias iterações significativas. Simultaneamente, nossos usuários expressaram um desejo retumbante por uma versão estável e hospedada comercialmente da plataforma. Para Zilliz, a empresa por trás do Milvus, as estrelas pareciam se alinhar perfeitamente, pois estávamos armados com uma equipe experiente de engenheiros, um produto à beira da maturidade e uma base de usuários fervorosa clamando por soluções. Impulsionados por esse impulso, estabelecemos corajosamente um objetivo ambicioso: revelar nosso serviço de nuvem, Zilliz Cloud, ao mundo em apenas seis meses.
Em meio a um cenário impulsionado pelo crescimento exponencial de grandes modelos de linguagem (LLMs), começamos a criar um serviço de nuvem abrangente do zero. Obtivemos vários insights durante a jornada de 18 meses de construção do Zilliz Cloud, um serviço de pesquisa vetorial totalmente gerenciado, impulsionado pelo banco de dados Milvus de código aberto. Discutirei as decisões de design e as lições valiosas aprendidas nesta jornada nesta série de duas partes.
A arquitetura Milvus
Etapa 1: avaliar os recursos existentes
Quando iniciamos o projeto, realizamos uma avaliação das capacidades existentes do Milvus e dos nossos objetivos gerais.
Avalie as tecnologias essenciais
Nossa tecnologia base, Milvus, é um banco de dados vetorial de código aberto, nativo da nuvem, construído com desagregação de armazenamento-computação e uma estrutura de microsserviços. Esse design garantiu uma integração perfeita aos clusters Kubernetes, facilitando a rápida adaptação a diversos ambientes de produção em nuvem.
Avalie a flexibilidade de implantação
Estávamos confiantes de que, ao aproveitar o Operador Kubernetes, a Milvus teria excelentes capacidades de implantação de serviços nas principais plataformas de nuvem pública, como Amazon Web Services (AWS), Google Cloud Platform (GCP) e Microsoft Azure. Esta versatilidade foi corroborada por numerosos membros da equipa que implementaram com sucesso serviços de produção nestas plataformas em empresas anteriores, sublinhando a escalabilidade e compatibilidade da plataforma Milvus.
Melhore a observabilidade
Embora o Milvus tivesse recursos básicos de observabilidade, como monitoramento e registro, reconhecemos que precisávamos reforçar funcionalidades de alerta personalizadas para ambientes de produção. Essa melhoria foi necessária para fornecer às nossas equipes internas e usuários insights em tempo real e medidas proativas para garantir a entrega ininterrupta de serviços.
Completude do serviço de endereço
Apesar dos avanços significativos com o Milvus, o Zilliz Cloud ainda era incipiente, carecendo de componentes críticos essenciais em um serviço gerenciado. Esses componentes incluem autenticação de login de usuário, sistemas de medição e cobrança, mecanismos de pagamento, infraestrutura de rede, protocolos de segurança, um console web abrangente, suporte de API voltado para o usuário, recursos de agendamento de recursos e ferramentas de gerenciamento de fluxo de trabalho. Abordar estas questões foi fundamental para fortalecer a eficácia do nosso serviço e atrair uma base de utilizadores mais ampla.
Etapa 2: Estabelecer Princípios de Design
Definitivamente tivemos um trabalho difícil para nós! Agora que determinamos o que era necessário para um produto mínimo viável (MVP), a próxima etapa foi maximizar a eficiência de nossa equipe no desenvolvimento do Zilliz Cloud MVP em um prazo de seis meses. Através de alguma introspecção e análise, destilamos um conjunto de princípios fundamentais de design para orientar nossos esforços de desenvolvimento.
Use produtos maduros de terceiros sempre que possível
Para nos prepararmos para a entrada no mercado, contamos com serviços de nuvem e de terceiros estabelecidos. As principais ofertas da AWS, incluindo Elastic Kubernetes Service (EKS), Elastic Compute Cloud (EC2), Simple Storage Service (S3), Elastic Block Store (EBS) e Application Load Balancer (ALB), juntamente com Kafka gerenciado pela AWS e Relational Database Service ( RDS), formou a base da nossa infra-estrutura. Esta abordagem atendeu às nossas necessidades imediatas, evitou “reinventar a roda” e abriu um caminho econômico para uma possível adaptação a um ambiente multicloud, acelerando nosso ritmo de inovação.
Infelizmente, fomos confrontados com desafios de compatibilidade entre as filas de mensagens do GCP/Azure e os serviços gerenciados do Kafka, o que nos levou a desenvolver um sistema de log distribuído usando o Apache Bookkeeper. A ausência de soluções de registro distribuídas nativas da nuvem, confiáveis e de código aberto estimulou essa iniciativa, e estamos considerando o código aberto dessa solução para ajudar outros a criar serviços em nuvem.
Provedores terceirizados de software como serviço (SaaS) também desempenharam um papel fundamental na aceleração do desenvolvimento de nossa plataforma. Por exemplo, adotamos o Stripe para processamento de pagamentos, atendendo aos requisitos de medição e tributação. Para agilizar as conexões com mercados multicloud, integramos o Suger.io. Além disso, avaliamos plataformas de serviços de cobrança como Orb e Metronome para otimizar nossas operações de cobrança. Auth0 serviu como nossa escolha preferida para gerenciamento de contas e funcionalidade de login, com suporte expandido para login do Google. O estabelecimento de nosso sistema de alerta operacional no PagerDuty, escolhido por sua integração perfeita com ferramentas de monitoramento existentes e regras de notificação personalizáveis, ajudou ainda mais nossa eficiência operacional.
Evite multiplicar entidades desnecessariamente
Adotamos um espírito de design minimalista que permeou várias facetas do nosso produto:
Simplicidade arquitetônica: Inicialmente, nosso projeto contava com mais de 60 microsserviços, o que representou desafios significativos no desenvolvimento e nos testes. Para simplificar nossa arquitetura, reduzimos a lista a menos de 10 microsserviços principais, incluindo faturamento de usuários, recursos, metadados e agendamento. Esta redução esclareceu as dependências e aliviou a carga de testes.
Simplicidade funcional: A iteração inicial do Zilliz Cloud priorizou as principais funcionalidades do usuário, como registro, implantação de cluster e faturamento. Recursos menos urgentes, como dimensionamento e backups, foram deliberadamente adiados para aliviar a carga de trabalho. Nós nos comprometemos a estabelecer um ciclo de feedback robusto, inicialmente por meio de feedback por e-mail e, posteriormente, aumentá-lo com a integração do Zendesk para que feedback rápido e de alta qualidade pudesse orientar futuras melhorias.
Simplicidade do projeto: Nosso design de serviço em nuvem prioriza a comunicação eficiente e o potencial de envolvimento do usuário, necessitando de uma abordagem disciplinada e focada. O aproveitamento de testes A/B rápidos nos permitiu validar recursos rapidamente e nos adaptar com base nas métricas de envolvimento do usuário.
Antecipe os desafios do dia 2 a partir do dia 1
Para os serviços em nuvem, tivemos que evoluir rapidamente sem comprometer a confiabilidade das interfaces de usuário e dos serviços. Mais fácil falar do que fazer! Isso é como “trocar os motores a jato no ar”. Externamente, o serviço parece contínuo, enquanto internamente se desenrola um vigoroso ciclo de inovação e melhoria. Aprendemos rapidamente que adotar uma abordagem de desenvolvimento end-in-mind é fundamental para navegar neste terreno complexo.
Etapa 3: desenvolver a arquitetura
Impulsionados pelos nossos princípios de design, atingimos com sucesso o marco de lançamento do nosso produto comercial de pesquisa de vetores no prazo de seis meses, assegurando simultaneamente o nosso grupo inicial de clientes de sementes. Aqui está o diagrama arquitetônico que ilustra a estrutura do nosso lançamento inaugural.
Conseguimos construir uma solução bastante robusta com os seguintes recursos.
Suporte multinuvem: Embora inicialmente nos concentrássemos na AWS, nosso compromisso com o agnosticismo em nuvem nos levou a avaliar a compatibilidade entre provedores de nuvem pública, incluindo GCP e Alibaba Cloud. Ao aproveitar as personalizações do projeto Crossplane de código aberto, desenvolvemos uma camada de adaptador de nuvem para agilizar o suporte multicloud e reduzir os custos associados. Essa abordagem facilitou a rápida integração com o GCP em apenas um mês e abriu caminho para uma integração perfeita com outros provedores de nuvem pública.
Segurança: Os serviços Zilliz Cloud dão grande importância à segurança dos dados. Aderimos estritamente aos padrões de gerenciamento de identidade e acesso (IAM) na nuvem, controlamos as permissões de acesso aos dados e implementamos criptografia para todos os dados, sejam eles em trânsito ou em repouso. Enfatizando o isolamento da rede para obter desempenho ideal, optamos pelos complementos de rede EKS da AWS por sua eficiência e facilidade de uso. Ao delinear os limites de interação entre as camadas de dados e de controle, obtivemos economias de custos significativas durante a implementação do nosso produto “traga sua própria nuvem” (BYOC).
Agrupamento de recursos: A Zilliz Cloud Services segue a “lei da comutatividade da nuvem”, priorizando a escalabilidade elástica por meio do agrupamento de recursos. Ao desacoplar armazenamento e computação e empregar balanceamento de carga dinâmico, possibilitamos a utilização eficiente dos recursos da nuvem. Essa abordagem nos permite reservar recursos somente quando necessário, melhorando significativamente a utilização de instâncias spot e funções Lambda e, ao mesmo tempo, reduzindo custos.
Facilidade de operação: Zilliz Cloud foi projetado pensando nos desenvolvedores e na equipe operacional. Apresentando uma interface gráfica de usuário (GUI) abrangente e recursos avançados de monitoramento, a plataforma oferece recuperação de desastres com zona de disponibilidade tripla e adere a acordos de nível de serviço (SLAs) rigorosos, ajudando a garantir estabilidade e confiabilidade para ambientes de produção.
Lições aprendidas
Tenho orgulho desta arquitetura e de todo o trabalho que fizemos em equipe. No entanto, apesar do nosso sucesso em chegar ao mercado no período de seis meses com o qual nos comprometemos, houve uma série de coisas que não prevíamos. Vou revisar as lições aprendidas na segunda parte desta série.
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
James Luan é o vice-presidente de engenharia da Zilliz. Com mestrado em engenharia da computação pela Cornell University, possui ampla experiência como engenheiro de banco de dados na Oracle, Hedvig e Alibaba Cloud. James desempenhou um papel crucial 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.