|
1 |
| -# oblishard |
2 |
| -A scalable and fault-tolerant Oblivious RAM (ORAM) data store |
| 1 | +# Oblishard [](https://github.com/dsg-uwaterloo/oblishard/actions/workflows/go.yml) |
| 2 | +Welcome to **Oblishard**, a cutting-edge and highly scalable Oblivious RAM (ORAM) data store designed to provide strong security guarantees by hiding access patterns from the storage server and randomizing client access. |
| 3 | +## Key Features: |
| 4 | +* **Scalability**: Oblishard is designed with horizontal scalability in mind, enabling scaling the system without leaking security information. |
| 5 | +* **Fault Tolerance**: Leveraging the power of Raft consensus algorithm, Oblishard ensures the resilience of your data store even in the face of node crashes or failures, enhancing the overall reliability of your system. |
| 6 | +* **High Throughput**: Oblishard achieves high-throughput performance, ensuring that your applications can handle large volumes of data seamlessly and efficiently. |
| 7 | +* **Configurable**: Oblishard recognizes the diverse needs of different projects and offers a high level of configurability to adapt seamlessly to your specific requirements. |
| 8 | +* **Easy to Deploy**: We've designed the setup of Oblishard to be straightforward, ensuring that you can integrate our secure and high-performance data store effortlessly into your projects. |
| 9 | +* **Easy to Extend**: Oblishard's modular architecture makes it easy to extend functionality. You can add new storage layers to Oblishard to support different use cases. |
3 | 10 |
|
4 |
| -The Readme is out of date. Don't use the instructions here! I will fix it soon. |
5 | 11 |
|
6 |
| -## Table of Contents |
7 |
| - |
8 |
| -1. [Protocol Buffers](#protocol-buffers) |
9 |
| -2. [Running the Project](#running-the-project) |
10 |
| - 1. [Running the Router](#running-the-router) |
11 |
| - 2. [Running the Shardnode](#running-the-shardnode) |
12 |
| - 3. [Running the ORAM Node](#running-the-oram-node) |
13 |
| - 4. [Running the Jaeger Backend](#running-the-jaeger-backend) |
14 |
| - 5. [Running Redis](#running-redis) |
15 |
| - 6. [Sending Requests](#sending-requests) |
16 |
| -3. [Example Execution](#example-execution) |
17 |
| -4. [Configurations](#configurations) |
18 |
| - |
19 |
| ---- |
20 |
| -## Protocol Buffers |
| 12 | +## Installation |
| 13 | +### Protocol Buffers |
21 | 14 |
|
22 | 15 | The following parts are generated, but if you want to generate them again yourself, you can run the provided script:
|
23 | 16 |
|
24 | 17 | ```bash
|
25 | 18 | ./scripts/generate_protos.sh
|
26 | 19 | ```
|
27 | 20 |
|
28 |
| -## Running the Project |
29 |
| -### Running the Router |
30 |
| -To run the router, use the following command: |
31 |
| -```bash |
32 |
| -go run -race . -routerid <routerid> -port <rpc port> |
33 |
| -``` |
34 |
| -### Running the Shardnode |
35 |
| -To run a shardnode, use the following command: |
36 |
| -```bash |
37 |
| -go run -race . -shardnodeid <id> -rpcport <rpcport> -replicaid <replicaid> -raftport <raftport> |
38 |
| -``` |
39 |
| -You can provide a `-joinaddr` for the followers to join the leader. |
40 |
| -### Running the ORAM Node |
41 |
| -To run an ORAM node, use the following command: |
42 |
| -```bash |
43 |
| -go run -race . -oramnodeid <id> -rpcport <rpcport> -replicaid <replicaid> -raftport <raftport> |
44 |
| -``` |
45 |
| -You can provide a `-joinaddr` for the followers to join the leader. |
46 |
| -### Running the Jaeger Backend |
47 |
| -To run the Jaeger backend, use Docker Compose: |
48 |
| -```bash |
49 |
| -docker compose up |
50 |
| -``` |
51 |
| -### Running Redis |
52 |
| -Ensure that Redis is up and running on the default port. |
53 |
| -### Sending Requests |
54 |
| -To send requests, run the following command in the `cmd/client` directory: |
55 |
| -```bash |
56 |
| -go run -race . |
57 |
| -``` |
58 |
| -It will send the requests that are in the `traces/simple.trace` file. |
59 |
| -## Example Execution |
60 |
| -Run each of the commands in a new terminal: |
61 |
| -```bash |
62 |
| -go run -race . -routerid 0 -port 8745 #cmd/router directory |
63 |
| -go run -race . -shardnodeid 0 -rpcport 8748 -replicaid 0 -raftport 3124 #cmd/shardnode directory |
64 |
| -go run -race . -shardnodeid 0 -rpcport 8749 -replicaid 1 -raftport 3125 -joinaddr=127.0.0.1:8748 #cmd/shardnode directory |
65 |
| -go run -race . -shardnodeid 0 -rpcport 8750 -replicaid 2 -raftport 3126 -joinaddr=127.0.0.1:8748 #cmd/shardnode directory |
66 |
| -go run -race . -oramnodeid 0 -rpcport 8751 -replicaid 0 -raftport 1415 #cmd/oramnode directory |
67 |
| -go run -race . -oramnodeid 0 -rpcport 8752 -replicaid 1 -raftport 1416 -joinaddr=127.0.0.1:8751 #cmd/oramnode directory |
68 |
| -go run -race . -oramnodeid 0 -rpcport 8753 -replicaid 2 -raftport 1417 -joinaddr=127.0.0.1:8751 #cmd/oramnode directory |
69 |
| -docker compose up #jaeger directory |
70 |
| -go run -race . #client directory |
71 |
| -``` |
72 |
| -## Configurations |
| 21 | +### Configurations |
73 | 22 | The configurations can be found in the configs directory.
|
74 | 23 | There are files for endpoint configs, as well as one file for the parameters.
|
| 24 | +* `*_endpoints.yaml`: These files include the endpoints of the different components in your system. You can specify the endpoints here and Ansible will use these files to deploy the components to their correct hosts and will configure them accordingly. |
| 25 | +* `parameters.yaml`: This file holds all the configuration parameters. You can change them as you want to fit your needs. |
| 26 | + |
| 27 | +### Running Oblishard |
| 28 | +1. Ensure that you have Ansible installed, and you have ssh access to your deployment hosts. |
| 29 | +2. Update the hosts file to include your deployment hosts. |
| 30 | +3. Run `ansible-playbook -i /path/to/hosts tasks.yaml` in the deploy directory. |
0 commit comments