16
Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Embed Size (px)

Citation preview

Page 1: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Simulador para Algoritmos Distribuídos

Caio Kinzel Filho

Page 2: 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

Page 3: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Motivação

• Exercicio: fazer um algoritmo distribuido• Debugar...• Testar em mais de uma topologia• Baseado em composição

Page 4: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Solução

• Modelo + Templates + Algoritmos

• C#• DSL Tools• Visual Studio• T4

Page 5: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Modelo

Page 6: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Modelo

Page 7: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Modelo

Page 8: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Templates

• T4• Criação do código C# para as topologias• Customizável

Page 9: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Templates

Page 10: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

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; }}

Page 11: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

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;}

Page 12: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Algoritmos

public interface IMessage{ INode Sender { get; set; } INode Receiver { get; set; } INode Originated { get; set; } string Content { get; set; }}

Page 13: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

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; }}

Page 14: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Algoritmos

• MultiThread, MonoThread• Sincrono, Assincrono• Com falhas, Sem falhas

Page 15: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Limitações

• Desempenho MultiThread• Grandes topologias– Tempo de computação– Debugging

Page 16: Simulador para Algoritmos Distribuídos Caio Kinzel Filho

Possibilidades

• Novos modelos de canais• Estratégias de injeção de falhas• Estratégias de Halting