This is the online appendix for all publications related to DCM:
- Submitted to Journal of Web Engineering: Heil, S., Schröder, L., Gaedke, M.: Client-Server Code Mobility at Runtime.
- Heil, S., Gaedke, M.: DCM: Dynamic Client-Server Code Migration. Proceedings of the 23rd International Conference on Web Engineering, ICWE 2023, pp. 3-18, 2023.
The repository contains the DCM infrastructure implemented in Go, the evaluation projects and scripts in the following repository structure:
wasm-builderthe DCM infrastructure for compiling code fragmentsprojecta sample project that can be used with the DCM infrastructure, containingproject/backend/src/codedistributionthe DCM runtime infrastructureproject/backend/src/webservera sample web shop application showcasing the integration of DCM into web applications
evaluationthe evaluation and data containingevaluation/icwe2023the evaluation and data as referenced in "DCM: Dynamic Client-Server Code Migration"evaluation/icwe2023/GenerationTimesamples and scripts used for scenario Ievaluation/icwe2023/NetworkTimesamples and scripts used for scenario IIevaluation/icwe2023/ExecutionTimesamples and scripts used for scenario IIIevaluation/icwe2023/measurementsthe raw evaluation data
evaluation/jwe2023the evaluation and data as referenced in "Client-Server Code Mobility at Runtime"evaluation/jwe2023/GenerationTimesamples and scripts used for scenario Ievaluation/jwe2023/NetworkTimesamples and scripts used for scenario IIevaluation/jwe2023/ExecutionTimesamples and scripts used for scenario IIIevaluation/jwe2023/ComparisonTimesamples and scripts used for scenarion IVevaluation/jwe2023/measurementsthe raw evaluation data
To enable easy replication, we are using Docker. Follow the instructions below and in the readme files in the subdirectories to try it out yourself.
The WASM-Builder and your project are required to use the same Go version in order to use Go plugins.
The runtime needs to be the same. The package version of the packages used inside the Go plugins are required to be the same like currently installed. Update the Go version of the Go image correspondingly.
cd ./wasm-builder
build image (takes ~40s):
docker-compose build --no-cache build_current
>> for older docker version
docker-compose -f ./docker-compose.old.yaml build --no-cache build_current
clear dangling images afterwards:
docker rmi $(docker images -q -f "dangling=true" -f "label=autodelete=true")
cd ../project
Adjust environment variables inside the docker-compose file - this is already done.
The environment variable paths are relative to the path which you mount into the /usr/app directory. The mounted directory should have read, write and execute permissions for user,group and others before it gets mounted. (chmod 777 <hostPath>)
build-wasm:
image: sebastianheil/wasm-builder:<version>
environment:
- CFD=<path/to/cdf/file>
- WWW=<path/to/public/folder>
- PLUGINS=<path/to/codedistribution>
working_dir: /usr/app
volumes:
- <hostPath>:/usr/app
entrypoint: wasmbuilder
command: allcreate wasm files
docker-compose run --rm build-wasm
>> for older docker version
docker-compose -f ./docker-compose.old.yaml run --rm build-wasm
start Go web server
docker-compose run --rm --service-ports go-server
>> for older docker version
docker-compose -f ./docker-compose.old.yaml run --rm --service-ports go-server
Navigate to the URL as prompted in the console.
We would like to thank Alexander Senger as main contributor to the proof-of-concept implementation of the DCM architecture and the evaluation experiments.