From 4e371e5e52c0bf281eb32d21765f182a56d5275d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lazar=20Cvetkovi=C4=87?= Date: Wed, 21 Aug 2024 23:47:10 +0200 Subject: [PATCH] Main README update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lazar Cvetković --- docs/architecture.png | Bin 0 -> 82525 bytes readme.md | 161 +++++++++++------------------------------- 2 files changed, 43 insertions(+), 118 deletions(-) create mode 100644 docs/architecture.png diff --git a/docs/architecture.png b/docs/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb6f5a6097a3fcd3d47e274d26584be57579a2a GIT binary patch literal 82525 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

EY3|Pz4;`GE=8kYSi#%D>g!YGTcR#tfY^t` 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

f}C%w%*4b&~FovjmR8~DqaVwe$x*IweLyOLf( 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 -

Dirigent

- ---- +

Dirigent

+

+ A serverless cluster manager built by + Systems Groups + at ETH Zürich +

[![GitHub Workflow Status](https://github.com/eth-easl/modyn/actions/workflows/workflow.yaml/badge.svg)](https://github.com/eth-easl/modyn/actions/workflows/workflow.yaml) [![License](https://img.shields.io/github/license/eth-easl/modyn)](https://img.shields.io/github/license/eth-easl/modyn) -

- A research cluster manager built at ETH Zürich -
- Systems groups page » -
-
- View Demo - · - Report Bug +--- +

Dirigent is a lightweight cluster manager for FaaS that aims to solve performance issues of existing FaaS platforms. It is a clean-slate system architecture for FaaS orchestration based on three key principles. First, Dirigent optimizes internal cluster manager abstractions to simplify state management. Second, it eliminates persistent state updates on the critical path of function invocations, leveraging the fact that FaaS abstracts sandboxes from users to relax exact state reconstruction guarantees. Finally, Dirigent runs monolithic control and data planes to minimize internal communication overheads and maximize throughput. The architecture of Dirigent is shown on the picture below. Our performance study reveals that compared to current state-of-the-art platforms Dirigent reduces 99th percentile per-function scheduling latency for a production workload by 2.79x compared to AWS Lambda and can spin up 2500 sandboxes per second at low latency, which is 1250x more than with Knative.

- -

Serverless computing optimizes cloud resource use for better performance. Yet, current serverless cluster managers are retrofitted from old systems, not built for serverless tasks. We examine Knative-on-K8s, a modern serverless cluster manager. It causes delays and 65%+ of latency for cold start function calls. These issues arise during high sandbox changes, common in production serverless setups. We identify the problem and suggest new design principles to enhance performance by rethinking cluster manager architecture.

+ Dirigent architecture - - -## About The Project - -The cluster manager in question has been developed within the systems group at ETH Zürich. It has been designed and fine-tuned specifically to the requirements of Function as a Service (FaaS) paradigms. +
### Built With -
- ![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white) ![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white) @@ -47,13 +36,16 @@ See the `README.md` to get started with the code. The folder structure is as follow: -* `cmd` is the list of programms you can start -* `api` represents the API handlers -* `internal/master_node` corresponds to the source code of the master node -* `internal/data_plane` corresponds to the source code of the data plane -* `internal/woker_node` corresponds to the source code of the worker node -* `pkg` are shared packages that are used inside of internal to perform multiple actions -* `scripts` are a list of scripts you can use to measures or tests the cluster manager +* `api` - proto files for Dirigent components +* `artifact_evaluation` - instructions and material for SOSP'24 artifact evaluation +* `cmd` - Dirigent components main methods +* `configs` - configuration files for external dependencies +* `internal/master_node` - control plane source code +* `internal/data_plane` - data plane source code +* `internal/worker_node` - worker node source code +* `pkg` - common packages of Dirigent components +* `scripts` - auxiliary scripts +* `workload` - workload we used for evaluation ## Getting the code @@ -75,10 +67,9 @@ Install HAProxy ```bash sudo apt update && sudo apt install -y haproxy sudo cp configs/haproxy.cfg /etc/haproxy/haproxy.cfg - ``` -kubernetes-cni must be installed. +kubernetes-cni must be installed ```bash @@ -87,7 +78,7 @@ sudo mkdir -p /opt/cni/bin sudo tar -C /opt/cni/bin -xzf cni-plugins.tgz ``` -If you want to install it on a custom path. +If you want to install it on a custom path ```bash INSTALL_PATH='your/path/here' @@ -97,110 +88,51 @@ sudo mkdir -p /opt/cni/bin sudo tar -C INSTALL_PATH -xzf cni-plugins.tgz ``` -## Start the code - -To launch the code, perform the following actions. - +## Start Dirigent on a cluster -Once the configuration stage is complete, we can start the programs. - -#### Clone the code - -First we need to install a copy of a master node on one machine, a dataplane on another machine, a copy of redis on a third machine and finally copy the code base on several other machines for the workers. You can simply call the script remote_install.sh with the ssh address of the computers. Before calling the script you have to make sure you have a github token on the following path which can install ssh keys. - -```bash -ACCESS_TOKEN="$(cat ~/.git_token_loader)" -``` +Prepare a Cloudlab cluster of at least 5 nodes. We tested our setup on xl170 and d430 nodes. Clone the repository locally, configure `scripts/setup.cfg` and run the following script to deploy the cluster. The load generator will be deployed on node0, control plane with Redis on node1, data plane on node2, and the rest of the nodes will be used as worker nodes. ```bash -./remote_install.sh ip1 ip2 ... +./scripts/remote_install.sh user@node0 user@node1 user@node2 user@node ... ``` -#### Setup configuration file +After this setup, you run the following scripts to (re)start the cluster. -Once this has been done, we can move on to configuring the various programs. The most important field is to set the correct IP for the database and control plane. - -Config master node - -```yaml -port: "9090" # Port used for the GRPC server -portRegistration: "9091" # Port for registrating a new service -verbosity: "trace" # Verbosity of the logs -traceOutputFolder: "data" # Output folder for measurements -placementPolicy: "kubernetes" # Placement policy -persistence: true # Store persistence value - if the value is false you can run the cluster without database -reconstruct: false # Reconstruct values on start - -profiler: - enable: true # Enable profiler support - it makes the programm a bit slower - mutex: false # Enable mutex support in profiler - -redis: - address: "127.0.0.1:6379" # Address of the database - password: "" # Password - db: 0 # Database name - -``` - -Config dataplane - -```yaml -controlPlaneIp: "localhost" # Ip of the control plane (master node) -controlPlanePort: "9090" # GRPC port used in the control plane -portProxy: "8080" # Port used for requests -portGRPC: "8081" # Port used for the GRPC server -verbosity: "trace" # Verbosity of the logs -traceOutputFolder: "data" # Output folder for measurements -loadBalancingPolicy: "knative" # Load balancing policy +```bash +./scripts/remote_start_cluster.sh user@node0 user@node1 user@node2 user@node ... ``` -Config worker node +We recommend using [Invitro Load Generator](https://github.com/vhive-serverless/invitro) on rps_mode branch for running experiments with Dirigent cluster manager. The load generator will be automatically cloned on node0 after running `scripts/remote_install.sh`. -```yaml -controlPlaneIp: "localhost" # Ip of the control plane (master node) -controlPlanePort: "9090" # GRPC port used in the control plane -port: "10010" # Port used for the GRPC server -verbosity: "trace" # Verbosity of the logs -criPath: "/run/containerd/containerd.sock" # path for CRI -cniConfigPath: "configs/cni.conf" # path for CNI -prefetchImage: true # If enabled, workers will prefetch an image (thus image download will be removed from the measures) -``` +## Start Dirigent locally -#### Launch code - -> launch db +Start a Redis DB instance ```bash sudo docker-compose up ``` -> launch master node +Start the master node ```bash -cd cmd/master_node; go run main.go --config config_cluster.yaml +cd cmd/master_node; sudo /usr/local/go/bin/go run main.go --config cmd/config.yaml ``` -> launch data plane +Start the data plane ```bash -cd cmd/data_plane; go run main.go --config config_cluster.yaml +cd cmd/data_plane; go run main.go --config cmd/config.yaml ``` -> launch master node +Start the worker node ```bash -cd scripts/francois; ./restart_workers.sh ip1 ip2 ip3 .... +cd cmd/worker_node; sudo /usr/local/go/bin/go run main.go --config cmd/config.yaml ``` -#### Fire invocation - -This command will fire a single invocation. - -```bash -cd scripts/francois; ./burst.sh 1 -``` +#### Potential problems -In case you get a timeout, try to run the following command before +In case you get a timeout, try to run the following command and then repeat the experiment. ```bash # For local readiness probes @@ -239,12 +171,12 @@ git lfs fetch git lfs checkout git lfs pull ``` -- Run control plane and data plane processes. Run worker daemon with `sudo` and by hardcoding environmental variable `PATH` to point to the directory where Firecracker is located. +- Run control plane and data plane processes. Run worker daemon with `sudo` and with hardcoded environmental variable `PATH` to point to the directory where Firecracker is located. ```bash sudo env 'PATH=\$PATH:/usr/local/bin/firecracker' /usr/local/go/bin/go run cmd/worker_node/main.go ``` -## If the network breaks locally +#### If the network breaks locally ```bash sudo iptables -t nat -F @@ -252,7 +184,7 @@ sudo iptables -t nat -F ## License -Distributed under the MIT License. See `LICENSE.txt` for more information. +Distributed under the MIT License. See `LICENSE` for more information. ## Contact @@ -262,8 +194,7 @@ François Costa - fcosta@ethz.ch Ana Klimovic - aklimovic@ethz.ch -## For developpers - +## For developers ### Generate proto files @@ -310,9 +241,3 @@ or with verbose ``` bash golangci-lint run -v --timeout 5m0s ``` - -### Profiler - -Nice tutorial that explains how to use it - -> https://teivah.medium.com/profiling-and-execution-tracing-in-go-a5e646970f5b