Repository contains both server and client in respective folders.
- Navigate into server folder from the project root:
cd ./server
- Build server:
go build
- Run server tests:
go test -v ./...
- Run server (replace placeholders with actual AWS credentials/configuration values):
AWS_ACCESS_KEY_ID=<...> AWS_SECRET_ACCESS_KEY=<...> AWS_REGION=<...> BUCKET_NAME=<...> ./server
- Performance
Memory usage: 180 MB
QPS: 12000
- Navigate into client folder from the project root:
cd ./client
- Build client:
go build
- Run client (runs 1 million iterations):
./client
- Basic server and client implementation 2h
- Workers implementation 8h
- Basic test and this report creation 1h
- missing gzip compression
- improve solution because current solution blocks requests processing when object parts are delivered to s3. AWS Kinesis Firehose usage looks as more suitable solution to deliver data streams to S3 though it will not allow to meet all requirements regarding objects naming.
- refactor solution to interfaces to make the code more testable using mocks
- add more tests