As a brief note before diving in, I want to highlight that the work that went into this project wouldn't have been possible in any way without the supervisors from UCD who helped me on this project Dr. Madhusanka Liyanage and Dr. Liam Murphy.
This project was made, between other college work, from November 2019 to early May 2020. It was a huge time sink, meaning I always found more work to do the more that I worked on it, but it was completely rewarding in terms of the learning that I got out of it.
My Final Year Project
My Final Year Project is an implementation of a mobile computing orchestrator and node setup which allows for TLS based secure migration of docker images. This was meant to be a proof of concept implementation of the migration and included a sample accompanying Android application to connect to any docker image hosted.
The gist is that the orchestrator allows for cloud and edge nodes to communicate with each other and when a user on the android app wants a service, the orchestrator will tell the app where to find the service. The orchestrator may also move around the services from the cloud to edge or vice versa to improve the android users' experience. It's a kinda bare-bones implementation of a more complex area of study, but it's definitely my biggest project to date.
Link to Code
This has a bit more of a technical breakdown of how to run the porject and what each element does, as I'm keeping this article to a bit of an overview.
Final Year Project 16387431
This Project is a implementation of a mobile computing orchestrator and node setup which allows for TLS based secure migration docker images. This serves as a proof of concept implementation of a migration and also includes a sample accompanying Android application to connect to any docker image hosted.
A note on security
For testing purposes these jars are using preprovided keystores, for any actual implementation built on top of this these should be swapped out by your own keystores.
Setup Instructions
Orchestrator
Before trying to run the orchestrator make sure that the port it will run on is free and has firewall clearence,
To run in ordinatry mode the command is
java -jar {Release.jar} {Port}
i.e java -jar orchestrator-0.7.0-jar-with-dependencies 443
To run in secure mode include -s
java -jar {Release.jar} {Port} -s
i.e java -jar orchestrator-0.7.0-jar-with-dependencies 443 -s
The orchestrator as part of its evaluation uses…
How I built it (what's the stack? did I run into issues or discover something new along the way?)
Originally it was going to use a Restful interface, but around New Years I decided that websockets would suit it much better, simply because of the amount of bi-directional information in the system. These websockets move around any requests or information as well as the docker images themselves and the backbone of the nodes and orchestrator is websocket interactions. I used a neat library called picocli to jazz up user input for the project as well as for its exception handling for when I would mess up input.
The entire project is written in java, as thats the language that I felt most comfortable programming in, though I think it fit this project well.
There were a few random libraries used for different minor tasks, but I'll just emphasise, that without TooTallNate's websocket library, I would've had a much much worse time developing this project, so thanks to all the devs on that project.
A barebones WebSocket client and server implementation written in 100% Java.
Java WebSockets
This repository contains a barebones WebSocket server and client implementation
written in 100% Java. The underlying classes are implemented java.nio
, which allows for a
non-blocking event-driven model (similar to the
WebSocket API for web browsers).
Implemented WebSocket protocol versions are:
Here some more details about protocol versions/drafts.
Getting Started
Dependency management tools
Below is a brief guide to using dependency management tools like maven or gradle.
Maven
To use maven add this dependency to your pom.xml:
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.1</version>
</dependency>
Gradle
To use Gradle add the maven central repository to your repositories list:
Then you can just add the latest version to your build.
compile "org.java-websocket:Java-WebSocket:1.5.1"
Logging
This library uses SLF4J for logging and does not ship with any default logging implementation.
Exceptions are using the log…
The amount of things I've learned in this project are immeasurable, I guess I've been inspired to keep myself busy now. Even though I only finished up college in the last week I've been trying to keep myself busy, and have started learning some basic javascript stuff and I'm trying to make a small github bot for fun.
Additional Thoughts / Feelings / Stories
I would have loved to have made any kind of GUI for this project but sadly with timings, everything except the android application is done through the command line, which meant there isn't really much of a "demo" for this project, unless you felt like watching command-line information flash by on 4 terminal tabs like in a hacker movie, although now that I say that, that does sound interesting.
Finally, I want to say a big thanks to DEV and Github for running this online graduation event, it's a very fun Idea.