Simulátor distribuované sítě
Užitečné odkazy
Distsim
Jednoduchá Python knihovna pro simulaci distribuované sítě za pomoci procesů.
Instalace knihovny
Zatím není dostupná na pip
, proto je nutná ruční instalace:
1
2
3
$ git clone https://github.com/mikulatomas/distsim
$ cd distsim
$ pip install -e .
Použití knihovny distsim
Knihovna obsahuje třídy Network
a Node
. Uživatelsky nás zajímá zejména třída Network
.
Třídě Network
předáme topologii a cestu kde mají být uloženy logy. Níže vidíme příklad jednoduché sítě s dvěma uzly. Uzel node1
a node2
vykonávájí funkci node_code
a nepřímá žádné argumenty. Z uzlu node1
vede jednosměrný kanál do uzlu node2
. Podobně je tomu rovněž opačným směrem. V topologii sítě tedy musíme zadefinovat názvy uzlů, jejich odchozí kanály, funkce které mají vykonávat a jejich argumenty.
1
2
3
4
5
6
7
8
9
10
NETWORK_ARCHITECTURE = {
'node1': {
'out': {'node2', },
'function': node_code,
'args': ()},
'node2': {
'out': {'node1', },
'function': node_code,
'args': ()},
}
Funkce node_code
může vypadat následovně:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def node_code():
# get current node object
node = current_process()
# get logger
logger = node.get_logger()
logger.info(f"Starting node.")
# send msg to each output pipelines
for node_name in node.out_pipes.keys():
node.send_to(node_name, f"Msg from node {node.name}")
# recieve msg from each input pipelines
for node_name in node.in_pipes:
msg = node.recv_from(node_name)
logger.info(f"Recieved msg: {msg}")
time.sleep(2)
logger.info(f"Shutting down.")
Jako poslední krok stačí síť vytvořit a spustit:
1
2
3
4
5
6
7
# run network
if __name__ == "__main__":
network = Network(NETWORK_ARCHITECTURE,
log_dir=pathlib.Path(__file__).parent.absolute())
network.start()
network.join()
Ostatní příklady
Pokročilejší funkcionalita knihovny je demonstrována v příkladech zde.
Úkol
Nainstalujte a otestujte funkčnost knihovny. Použít můžete dostupné příklady.
Úkol
Vytvořte úplnou topologii (každý uzel má spojení s každým). V této topologii každý uzel odešle zprávu všem ostatním a počká na zprávy příchozí. Vše zalogujte.