Simulador para Algoritmos Distribuídos Caio Kinzel Filho
Simulador para Algoritmos Distribuídos
Caio Kinzel Filho
• as ideias, as funcionalidades, as limitações, as possíveis extensões, então tem que ser equilibrado
Motivação
• Exercicio: fazer um algoritmo distribuido• Debugar...• Testar em mais de uma topologia• Baseado em composição
Solução
• Modelo + Templates + Algoritmos
• C#• DSL Tools• Visual Studio• T4
Modelo
Modelo
Modelo
Templates
• T4• Criação do código C# para as topologias• Customizável
Templates
Algoritmospublic interface IAlgorithm{ Action<INode, IMessage> BeforeSend { get; } Action<INode, IMessage> AfterSend { get; } Action<INode> BeforeReceive { get; } Action<INode, IMessage> AfterReceive { get; } Action<IMessage> Handle { get; } Action<INode, IMessage> Send { get; } Action<INode> Start { get; }}
Algoritmospublic interface IChannel{ INode Source { get; } INode Sink { get; } Queue<IMessage> InputMessages { get; set; } Queue<IMessage> OutputMessages { get; set; } void Receive(); void Send<T>(T args) where T : IMessage; event EventHandler MessageSent;}
Algoritmos
public interface IMessage{ INode Sender { get; set; } INode Receiver { get; set; } INode Originated { get; set; } string Content { get; set; }}
Algoritmos
public interface INode{ int ID { get; set; } List<IChannel> SendsTo { get; set; } List<IChannel> ReceivesFrom { get; set; } IAlgorithm Algorithm { get; set; } Dictionary<string, object> NodeInfo { get; set; }}
Algoritmos
• MultiThread, MonoThread• Sincrono, Assincrono• Com falhas, Sem falhas
Limitações
• Desempenho MultiThread• Grandes topologias– Tempo de computação– Debugging
Possibilidades
• Novos modelos de canais• Estratégias de injeção de falhas• Estratégias de Halting