Distributed Computing Systems Project: Distributed Shell Implementation

 
Distributed Computing Systems
 
Project 2 – Distributed Shell
Due: Tuesday, February 2
nd
 
Motivation
 
Shell is core operating systems concept
Executing commands on remote machine is
core distributed systems concept
Computing in the “cloud” (except in this case,
server address is known, not a service) with
results returned to user
 
Distributed Shell
 
Distributed Shell
Client-Server
Server on “known” port for
client
Non-interactive
Command line args
get-opt.c
Authentication built-in
Uses TCP sockets
listen.c
 and 
talk.c
Security
Authentication (next slide)
Can handle multiple requests
fork()
Concurrent server
Server
Client
 
1. connect
Server
 
3. 
ls
 
4. 
fork()
and 
exec()
 
5. data
 
2. authenticate
 
Simple Authentication
 
Client connects to server, sending in user-name (not password)
Note, typically name used to lookup unique data (salt) stored with each name
that further randomizes hash salt – here, just a check that valid
Server responds by sending back unique random number
Use 
rand()
Changes each invocation (provide different random seed each run, using
srand()
)
Client encrypts using password  and number as key
Here, password can be “hard coded” into client
Use 
crypt()
Client sends hashed value to server
Server encrypts with user's password and same number as key
Server “knows” password (e.g., externally exchanged)
Here, password can be “hard coded” into server
Server compares two hashed/encrypted values, if same then ok
Otherwise, return error message and exit
Note, can do authentication either before or after 
fork()
Question: pluses and minuses for each?
 
Sample
 
Client
 
cccwork2%
 
./
dsh
 -c "ls" -s cccwork3
Makefile
client.c
dsh
dsh.c
index.html
server
server.c
server.h
sock.c
sock.h
 
Server
 
cccwork3%
 
./
server
./server activating.
port: 4513
dir: /home/claypool/dsh Socket
created!
Accepting connections.
 
Connection request received.
forked child
received: john
password ok
command: ls
executing command...
 
Hints
 
Build shell independent of server
Get basic connection working without shell
Socket help: 
listen-tcp.c
 and 
talk-tcp.c
Socket slides (next deck)
Shell help
fork.c
execl.c
fork()
, 
execve()
, 
getopt()
, 
strtok()
, 
dup2()
Use a 
Makefile
Web page’s is simple
Use 
man
 pages for functionality, return codes
Beware of zombies!
 
Cloud Computing – Amazon
 
Setup Amazon Elastic Compute Cloud (EC2)
 
1.
Sign up (free, 1 year)
2.
Launch Linux VM
Copy security keys
3.
Connect (e.g., putty)
4.
Clean up (when done)
 
Cloud Computing – Amazon
 
Will have “cloud” Linux host to admin
Note IP of instance when starting
Install software
gcc (or g++)
make
sysbench (for performance)
Typically: 
sudo apt-get install {name}
Copy server source (e.g., server.c and Makefile) to
cloud host
Build
Test
(See Web page for links to documentation)
 
Experiments – Network Performance
 
Latency of connection (milliseconds)
Includes authentication
Force call to server so that server does not do
exec()
Maximum throughput (b/s)
Transfer large file
redirect > to file else 
stdout
 may be bottleneck
Multiple runs
 
Transfer Size (MB)
 
Time (s)
 
(y-intercept is
connection time)
 
(slope is per-
byte time)
 
- measured data
 
Experiments –
CPU and File I/O Performance
 
Sysbench for CPU
sysbench --test=cpu --cpu-max-prime=20000 run
total time: 23.8724s
Sysbench for File I/O
sysbench --test=fileio --file-total-size=16G prepare
sysbench --test=fileio --file-total-size=16G --file-test-
mode=rndrw --init-rng=on --max-time=30 --max-requests=0 run
Read 9.375Mb …(
53.316Kb/sec
)
Clean up!
sysbench --test=fileio --file-total-size=16G cleanup
Local (own host or CCC) and remote (cloud)
 
Model
 
Simple, algebraic model
Compute when (for data
transfer) cloud
computing gives better
performance (reduced
time for task)
Solve for n
 
Local_CPU + Local_File_I/O = 
n 
* Network + Remote_CPU + Remote_File_I/O
 
Writeup
 
Design
 - describe your experiments
Programs/scripts (pseudo-code)
Number of runs
Data recording method
System conditions
lscpu 
CPU information (also 
/proc/cpuinfo
)
lsblk 
block device information (also 
/df/mount | column -t
)
free -h
 available memory
uname -a
 OS version (also 
/proc/version
)
Other …
Results
 - depict your results 
clearly
Graph (see previous slide)
Table (at least 
mean
 and 
standard deviation)
Analysis
 - interpret results
Describe what results mean
 
Hand In
 
Source code package
server.c
, 
client.c
Support files (
*.h
)
Makefile
README.txt
 detailing building and using
Experimental writeup
Clean and 
zip
Turnin via Instruct Assist
 
Grading
 
Basic shell program 
    
(15 points)
Basic Client-Server communication program 
 
(15 points)
Proper re-direction of standard output 
  
(10 points)
Proper error checking of system/socket calls 
 
(10 points)
Proper authentication
    
(10 points)
Proper closing of sockets in relation to fork 
 
(5 points)
Proper handling of zombies 
   
(5 points)
Amazon EC2 setup
     
(15 points)
Experiment Design 
    
(6 points)
Experiment Results 
    
(5 points)
Experiment Analysis 
    
(4 points)
See 
rubric
 on Web page, too
Slide Note
Embed
Share

Explore the concept of a Distributed Shell in the realm of distributed computing systems, where commands can be executed on remote machines with results returned to users. The project involves building a client-server setup for a Distributed Shell, incorporating functionalities like authentication, handling multiple requests, and concurrent server operations.

  • Distributed Systems
  • Shell Implementation
  • Distributed Computing
  • Client-Server Architecture
  • Authentication

Uploaded on Oct 01, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Distributed Computing Systems Project 2 Distributed Shell Due: Tuesday, February 2nd

  2. Motivation Shell is core operating systems concept Executing commands on remote machine is core distributed systems concept Computing in the cloud (except in this case, server address is known, not a service) with results returned to user Distributed Shell

  3. Distributed Shell Client-Server Server on known port for client Non-interactive Command line args get-opt.c Authentication built-in Uses TCP sockets listen.c and talk.c Security Authentication (next slide) Can handle multiple requests fork() Concurrent server 1. connect Server Client 2. authenticate 3. ls 4. fork() and exec() 5. data Server

  4. Simple Authentication Client connects to server, sending in user-name (not password) Note, typically name used to lookup unique data (salt) stored with each name that further randomizes hash salt here, just a check that valid Server responds by sending back unique random number Use rand() Changes each invocation (provide different random seed each run, using srand()) Client encrypts using password and number as key Here, password can be hard coded into client Use crypt() Client sends hashed value to server Server encrypts with user's password and same number as key Server knows password (e.g., externally exchanged) Here, password can be hard coded into server Server compares two hashed/encrypted values, if same then ok Otherwise, return error message and exit Note, can do authentication either before or after fork() Question: pluses and minuses for each?

  5. Sample Server cccwork3% ./server ./server activating. port: 4513 dir: /home/claypool/dsh Socket created! Accepting connections. Client cccwork2% ./dsh -c "ls" -s cccwork3 Makefile client.c dsh dsh.c index.html server server.c server.h sock.c sock.h Connection request received. forked child received: john password ok command: ls executing command...

  6. Hints Build shell independent of server Get basic connection working without shell Socket help: listen-tcp.c and talk-tcp.c Socket slides (next deck) Shell help fork.c execl.c fork(), execve(), getopt(), strtok(), dup2() Use a Makefile Web page s is simple Use man pages for functionality, return codes Beware of zombies!

  7. Cloud Computing Amazon Setup Amazon Elastic Compute Cloud (EC2) 1. Sign up (free, 1 year) 2. Launch Linux VM Copy security keys 3. Connect (e.g., putty) 4. Clean up (when done)

  8. Cloud Computing Amazon Will have cloud Linux host to admin Note IP of instance when starting Install software gcc (or g++) make sysbench (for performance) Typically: sudo apt-get install {name} Copy server source (e.g., server.c and Makefile) to cloud host Build Test (See Web page for links to documentation)

  9. Experiments Network Performance Latency of connection (milliseconds) Includes authentication Force call to server so that server does not do exec() Maximum throughput (b/s) Transfer large file redirect > to file else stdout may be bottleneck Multiple runs - measured data Time (s) (slope is per- byte time) (y-intercept is connection time) Transfer Size (MB)

  10. Experiments CPU and File I/O Performance Sysbench for CPU sysbench --test=cpu --cpu-max-prime=20000 run total time: 23.8724s Sysbench for File I/O sysbench --test=fileio --file-total-size=16G prepare sysbench --test=fileio --file-total-size=16G --file-test- mode=rndrw --init-rng=on --max-time=30 --max-requests=0 run Read 9.375Mb (53.316Kb/sec) Clean up! sysbench --test=fileio --file-total-size=16G cleanup Local (own host or CCC) and remote (cloud)

  11. Model Local_CPU + Local_File_I/O = n * Network + Remote_CPU + Remote_File_I/O Simple, algebraic model Compute when (for data transfer) cloud computing gives better performance (reduced time for task) Solve for n

  12. Writeup Design - describe your experiments Programs/scripts (pseudo-code) Number of runs Data recording method System conditions lscpu CPU information (also /proc/cpuinfo) lsblk block device information (also /df/mount | column -t) free -h available memory uname -a OS version (also /proc/version) Other Results - depict your results clearly Graph (see previous slide) Table (at least mean and standard deviation) Analysis - interpret results Describe what results mean

  13. Hand In Source code package server.c, client.c Support files (*.h) Makefile README.txt detailing building and using Experimental writeup Clean and zip Turnin via Instruct Assist

  14. Grading Basic shell program Basic Client-Server communication program Proper re-direction of standard output Proper error checking of system/socket calls Proper authentication Proper closing of sockets in relation to fork Proper handling of zombies Amazon EC2 setup Experiment Design Experiment Results Experiment Analysis See rubric on Web page, too (15 points) (15 points) (10 points) (10 points) (10 points) (5 points) (5 points) (15 points) (6 points) (5 points) (4 points)

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#