COP5615- Distributed Operating System Principles
Fall 2023
Programming Assignment #2
Chord: P2P System and Simulation
Deadline: Nov 2, 2023
LATE submission will be accepted for grading!
How to submit: Please complete the group submission via CANVAS system.
Introduction
The goal of this project is to implement the Chord protocol using F#.
The specification of the Chord protocol can be found in the paper “Chord: A Scalable Peer-to-peer
Lookup Service for Internet Applications” by Stoica, Morris, et.al.
https://pdos.csail.mit.edu/papers/ton:chord/paper-ton.pdf. The paper above, in section 2.3 contains a
specification of the Chord API and of the API to be implemented by the application.
You can also refer to the Wikipedia page: https://en.wikipedia.org/wiki/Chord(peer-to-peer). Requirements
You are required to implement functions to:
Create the network ring (create() function mentioned in the paper) with numNodes number of
nodes in it. numNodes will be passed as command line argument to the program. Each node in the
network must be associated with an integer key. Also create finger tables for each node.
Add nodes to the ring dynamically (join() function from the paper). Your code should update the
finger tables with information about the new nodes that have joined the network.
Function for scalable key lookup as described in the Chord paper (Section 4).
A simulator for key lookups. In the simulator, each node must perform numRequests number of
requests. numRequests will be passed as a command line argument to the program. Count the
number of hops required for each request made by every node, sum it up and find the average
number of hops as:
Average number of hops =
Sum of number of no. of hops for all requests for all nodes
𝑛𝑢𝑚𝑅𝑒𝑞𝑢𝑒𝑠𝑡𝑠 ∗ 𝑛𝑢𝑚𝑁𝑜𝑑𝑒𝑠
Input
The input provided (as command line arguments to Program.fs) will be of the form:
dotnet run numNodes numRequests
Where numNodes is the number of peers to be created in the peer-to-peer system and numRequests is the
number of requests each peer has to make. When all peers have performed those many requests, the
program can exit. Each peer should send a request/second.
Output
Print the average number of hops (node connections) that are made to deliver a message.
Actor model
In this project, you have to use exclusively the AKKA actor framework (projects that do not use multiple
actors or use any other form of parallelism will receive no credit). You should have one actor for each of
the peers modeled.
Report
In the report, include the following:
Team members
How to run your program?
What is working?
Attach screenshots of the output you get.
A table of the average hop count results you obtained by executing your program with various
number of nodes.
A graph of “number of nodes” vs “average hop count” that your program outputs.
Any assumptions you have made about the protocol.
What is the largest network you managed to deal with?
Submission Guidelines
1. The project folder should be called Chord. It should contain a Program.fs file which would be the entry point of your program and some other configuration files which are included when the project is created. 2. Do not include any executable files in your submission.
3. Include the report in .pdf or .txt format. Name it report.pdf/txt.
4. Zip all your files into a packet: Team_ID.zip
5. Upload the zip packet as attachment in CANVAS before deadline.
Your project structure should be like this:
Grading Criteria
Correct Implementation / Outputs 80%
Report 15%
Readability / Comments / Code structure 5%
Total 100%
版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。