Partilhar via


Projetos estudantis

Sugerimos dois tipos de projetos para os alunos:

  1. O primeiro tipo inclui projetos exploratórios, abertos e orientados para a investigação, a fim de permitir novas capacidades em matéria de Orleans. Estes projetos teriam normalmente um âmbito alargado e seriam adequados para estudantes de mestrado ou doutoramento ou estudantes de licenciatura avançada no seu último ano de estudos. O objetivo final destes projetos seria contribuir com ideias e design para Orleans. Não esperamos necessariamente que o código produzido nesses projetos seja diretamente contribuído para este repositório, no entanto, isso seria bom.

  2. O segundo tipo inclui ideias para a educação dos alunos. Estas são ideias para aplicações interessantes que podem ser construídas em cima de Orleans ou algumas novas capacidades para Orleans. Esses projetos são adequados para serem ministrados em cursos avançados de graduação ou pós-graduação, onde os alunos aprendem sobre Cloud Computing e modernas tecnologias distribuídas e querem ganhar experiência prática no mundo real na construção de aplicativos em nuvem. Não esperamos que o código produzido nesses projetos seja contribuído diretamente para este repositório.

Projetos de investigação

  1. Dimensionamento automático: neste projeto, os alunos podem começar explorando os mecanismos de dimensionamento automático existentes para controlar a alocação de recursos no Azure Autoscaling. A próxima etapa envolve explorar várias estatísticas e métricas de consumo de recursos coletadas por Orleans e usá-las como entrada para o Azure Autoscaling. Uma etapa avançada deste projeto pode envolver a melhoria dos mecanismos internos Orleans para reagir a mudanças de elasticidade, por exemplo, implementando a migração de atores ao vivo para reduzir o tempo necessário para utilizar novos recursos.

  2. Front-ends gerados automaticamente para Orleansserviços de nuvem: este projeto estende perfeitamente o Orleans modelo de ator para o mundo HTTP. A fase de intensificação do projeto inclui a geração dinâmica de endpoints HTTP para atores baseadas nas suas interfaces .NET e metadados. A parte principal envolve a geração automática de front-ends para suportar soquetes web e streaming bidirecional de dados, o que requer geração de código complexa com otimizações para alto desempenho. Também requer atenção à tolerância a falhas, para manter a alta disponibilidade de sessões de streaming em reinicializações de servidor e reconexões e migração de clientes — um desafio de pesquisa significativo.

  3. Provedor de armazenamento para Entity Framework: Este projeto envolve permitir que Orleans os objetos armazenem seu estado em um banco de dados e, posteriormente, o consultem. Isso pode incluir a adição de suporte para Orleans persistência de objetos no Banco de Dados do SQL Azure usando o Entity Framework (EF), que é o mapeador objeto-relacional de código aberto da Microsoft para .NET, e a exposição desses dados por meio de consultas LINQ. A implementação pode ser avaliada e ajustada usando benchmarks de banco de dados padrão e/ou aplicativos personalizados Orleans.

  4. Benchmark de sistema distribuído: Defina uma lista de benchmarks adequados para sistemas distribuídos como Orleans. As aplicações de benchmark podem ser análogas, em espírito, ao benchmark de banco de dados TPC ou aos "Dwarfs Paralelos" da UC Berkeley, e podem ser usadas para caracterizar o desempenho e a escalabilidade de frameworks distribuídos. Considere o desenvolvimento de um novo parâmetro de referência destinado a Orleans, por exemplo, comparar o desempenho dos fornecedores de armazenamento.

  5. Linguagem declarativa de fluxo de dados sobre fluxos: defina e construa uma linguagem declarativa Trident-Storm sobre Orleans fluxos. Desenvolva um otimizador que configure o processamento de fluxo para minimizar o custo geral.

  6. Modelo de programação para dispositivos cliente: Estenda Orleans para dispositivos cliente, como sensores, telefones, tablets e desktops. Habilite a lógica de grão para ser executada no cliente. Potencialmente suporte a divisão de camadas, ou seja, decidir dinamicamente quais partes do código são executadas no dispositivo e quais são descarregadas para a nuvem.

  7. Consultas sobre classes de grãos/atores, índices secundários: Crie um índice de grãos distribuído, escalável e confiável. Isso inclui definir formalmente o modelo de consulta e implementar o índice distribuído. O índice em si pode ser implementado como Orleans grãos e/ou armazenado num banco de dados.

  8. Simulações em grande escala: Orleans é uma ótima opção para a construção de simulações em grande escala. Explore o uso de Orleans para diferentes simulações, por exemplo, interações de proteínas, simulações de rede, recozimento simulado, etc.

Projetos de cursos

  1. Aplicações da Internet das Coisas: Por exemplo, a aplicação pode permitir que sensores/dispositivos comuniquem o seu estado para a nuvem, onde cada dispositivo é representado na nuvem por um Orleans interveniente. Os usuários podem se conectar ao ator que representa seu dispositivo através de um navegador da Web e verificar seu status ou controlá-lo. Este projeto envolve o domínio de várias tecnologias de nuvem modernas, incluindo Azure, OrleansAPI Web mínimaASP.NET Core SignalR para transmitir comandos de volta da nuvem para o dispositivo e escrever um aplicativo de sensor/dispositivo/telefone.

  2. Serviço de bate-papo escalável grande semelhante ao Twitter na nuvem com base em Orleans: Cada usuário pode ser representado por um Orleans Ator, que contém sua lista de seguidores.

  3. Aplicativo social semelhante ao Facebook baseado em Orleans: Cada usuário pode ser representado por um Orleans Ator, que inclui uma lista de amigos e uma parede na qual os amigos podem escrever.

  4. Provedor de armazenamento simples: adicione um provedor de armazenamento para um sistema de armazenamento, como um armazenamento de chave-valor ou um sistema de banco de dados. Um método simples poderia utilizar Orleans serializador, como no provedor de armazenamento de Tabela do Azure existente. Um mais sofisticado mapearia variáveis de estado de uma Orleans classe para estruturas refinadas do sistema de armazenamento. Um complexo é o provedor de armazenamento do Entity Framework mencionado acima em Projetos de Pesquisa. Compare o desempenho de diferentes provedores de armazenamento para diferentes tipos e tamanhos de estados de ator.

  5. Comparação com outras estruturas de aplicativos distribuídos: pegue um exemplo de aplicativo escrito para outra estrutura de aplicativo, como o Google App Engine ou o Akka, e traduza-o em Orleans. Resuma os pontos fortes e fracos relativos de cada estrutura comparando os aplicativos.

Projetos de investigação concluídos

Seguem-se vários exemplos de anteriores projetos de investigação bem sucedidos:

  1. Análise de log distribuído, correlação e depuração: Depurar sistemas distribuídos em grande escala é uma tarefa desafiadora devido a enormes quantidades de dados e interações dinâmicas complexas entre os componentes distribuídos, executados em diferentes processos e máquinas diferentes. O objetivo deste projeto era analisar a arte anterior sobre este tópico, propor uma solução e, em seguida, implementar ferramentas de protótipo para coletar, correlacionar e analisar dados de arquivos de log de erros de aplicativos em um ambiente de tempo de execução de aplicativos distribuídos de várias máquinas. Isso envolveu explorar o espaço do problema a partir de uma variedade de perspetivas, incluindo:

    1. Abordagens para registro eficiente de logs, coleta e análise de informações de falha de vários mecanismos de captura de logs num ambiente de execução distribuída Orleans.

    2. Possíveis aplicações de aprendizado de máquina para encontrar padrões de log que sinalizam sérios problemas de produção e, em seguida, detetar esses padrões quase em tempo real como um utilitário de monitoramento de produção.

    3. Maneiras de ajudar desenvolvedores individuais a realizar depuração em tempo real de problemas durante a execução dos seus aplicativos.

    Este projeto foi realizado com sucesso e resultou em um artigo publicado PAD: Performance Anomaly Detection in Multi-Server Distributed Systems e uma implementação de prova de conceito de uma ferramenta de análise de log distribuído.

  2. Horton - Distributed Graph Database: Horton foi um projeto de pesquisa para construir um sistema para armazenar, gerenciar e consultar gráficos distribuídos em grande escala. Foi implementado inteiramente como uma Orleans aplicação. O projeto resultou em algumas publicações e vários projetos estudantis muito bem-sucedidos.