diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-05-03 21:12:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-03 21:12:00 +0200 |
| commit | 17ffe995ee06d5755cd3943a5ea14f982884009e (patch) | |
| tree | 2f360f1974bdbfd5f7fcd3d8e9c142b28650d7ed /docs/architecture.md | |
| parent | c3ee3cb899d5259c619e79ff9f29984756c3813e (diff) | |
| parent | f081b9cab58a31a55c4f9dc6ccedd8cb92fc9242 (diff) | |
Prepare for OpenDC 2.0 release (v1)
This pull request performs several preparations for the official release of OpenDC 2.0.
This pull request mostly focuses on documentation changes.
## Details
1. Restructure project documentation
2. Migrate to Dokka 1.4.32
3. Merge CI builds into single workflow
Diffstat (limited to 'docs/architecture.md')
| -rw-r--r-- | docs/architecture.md | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 00000000..032e8f4b --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,25 @@ +# Architecture + +OpenDC consists of four components: a Kotlin simulator, a MongoDB database, a Python +Flask [API](/opendc-web/opendc-web-api), and a React.js [frontend](/opendc-web/opendc-web-ui). + +<p align="center"> + <img src="https://raw.githubusercontent.com/atlarge-research/opendc/master/misc/artwork/opendc-component-diagram.png" alt="OpenDC Component Diagram"> +</p> + +On the frontend, users can construct a topology by specifying a datacenter's rooms, racks and machines, and create +scenarios to see how a workload trace runs on that topology. The frontend communicates with the web server over +SocketIO, through a custom REST request/response layer. For example, the frontend might make a `GET` request +to `/api/v1/users/{userId}`, but this request is completed via SocketIO, not plain HTTP requests. Note that the API +itself can also be accessed by HTTP. + +The (Swagger/OpenAPI compliant) API spec specifies what requests the frontend can make to the web server. To view this +specification, go to the [Swagger Editor](https://editor.swagger.io/) and paste in +our [opendc-api-spec.yml](../opendc-api-spec.yml). + +The web server receives API requests and processes them in the database. When the frontend requests to run a new +scenario, the web server adds it to the `scenarios` collection in the database and sets its `state` as `QUEUED`. + +The simulator monitors the database for `QUEUED` scenarios, and simulates them as they are submitted. The results of the +simulations are processed and aggregated in memory. Afterwards, the aggregated summary is written to the database, which +the frontend can then again retrieve via the web server. |
