Förderjahr 2020 / Stipendien Call #15 / ProjektID: 5115 / Projekt: Improving Serverless Edge Computing for Network Bound Workloads
Wie die Load Balancer im Detail funktionieren und wie sie sich verhalten haben wir nun im Detail erklärt. Was wir allerdings noch nicht besprochen haben, und was für Edge Computing enorm wichtig ist, ist der Ressourcenverbrauch. Besonders bei Edge-Computing, wo spezialisierte Hardware zum Einsatz kommt und Ressourcen potenziell rar sind, ist es wichtig effizient zu argieren. Methodologisch arbeite ich mit einer simulierten Serverless Computing Umgebung. Um die Ergebnisse aber so realistisch wie möglich zu halten werden so viele Aspekte wie möglich aus echen Daten abgeleitet. Die Berechnungszeiten für Anfragen werden bespielsweise anhand von echten Experimenten gesetzt, bei denen die selben Anfragen tatsächlich auf verschiedenster Hardware ausgeführt und die Zeit gemessen wurden. Um den Simulator zu verbessern, und nachdem die Daten für Load Balancer fehlen führe ich ebenfalls solche Experimente durch, die ich in diesem Blogpost beschreiben werde.
Hierzu benutze ich einen experimentellen Cluster der Distributed Systems Group, bei der ich diese Diplomarbeit schreibe. Der Cluster hat eine weite Bandbreite an Geräten, angefangen von solchen mit leistungsfähigen Intel Xeon Prozessoren, über NVIDIA Jetson Boards mit Machine Learning Beschleunigern bis hin zu einem einfachen ARM Raspberry Pi 3. Die Experimente sind vergleichsweise simpel: Während Anfragen an den Load Balancer geschickt werden misst eine Software den Ressourcenverbraucht des Load Balancers mit. Konkret senden wir eine steigende Anzahl an Anfragen, beginnend mit 1 Anfrage pro Sekunde bis hin zu 250 Anfragen pro Sekunde. Die Anfragen sind zwar nicht echt, aber wir simulieren realistische Serverless Antworten, inklusive realistischen Antwortzeiten. Als simulierte Serverless Functions-Instanzen benutze ich Responder, eine Software welche ich speziell für diesen Zweck geschrieben habe. Die Software wird nach wie vor an der Gruppe verwendet und ist selbstverständlich Open Source: https://github.com/jjnp/responder. Zum Messen der Daten verwenden wir telemd, eine Monitoring Lösung welche ebenfalls in der DSG entwickelt wurde, und welche ich um die für mich notwendigen Metriken erweitert habe. Auch telemd ist OSS: https://github.com/edgerun/telemd Ausgeführt wird alles in Kubernetes, was ein repräsentativer Unterbau für Serverless Computing ist, wie OpenFaaS zeigt. In einem weiteren Experiment testen wir den Effekt von Antwortzeiten auf den Ressourcenverbrauch, indem wir unterschiedliche Antwortzeiten bei Responder konfigurieren.
Die beiden folgenden Grafiken zeigen die Ergebnisse. Ohne sich nun besonder in Details zu verlieren (Interessierte Leser*Innen verweise ich hier an die fertige Arbeit) zeigt das Experiment folgende Interessante Ergebnisse:
- Der Ressourcenverbrauch unterscheidet sich dramatisch zwischen den unterschiedlichen Geräten.
- Beim CPU Verbrauch liegen die Ergebnisse innerhalb der Erwartungen, ein Load Balancer belastet also vergleichsweise langsame Geräte mehr als Leistungsstarke.
- Beim RAM Verbrauch allerdings zeigen sich erstsaunliche Muster. Manche Geräte verbrauchen ein vielfaches von anderen. Wodurch genau dieses Verhalten hervorgerufen wird konnte ich nicht zeigen, allerdings scheint es nicht durch die Prozessorarchitektur oder etwas vergleichbares ausgelöst zu werden. Eventuell liegt der Unterschied an den teilweise unterschiedlichen Linux Distributionen und Versionen der Geräte. Was es allerdings Eindrucksvoll zeigt ist die unvorhersehbare Heterogenität von Edge Computing und wie wenig man sich auf sonst typische Annahmen verlasen kann.
- Ein interessantes Ergebnis ist auch, dass längere Antwortzeiten mehr Ressourcen verbrauchen, insbesondere RAM. Dies ist auch verständlich, weil die Anfrage länger im Speicher gehalten werden muss, und daher insgesamt auch mehr Speicher belegt wird. Es zeigt allerdings, dass die schnelleren Antwortzeiten unserer Load Balancer Implementierung nicht nur bessere Performance bieten, sondern hierdurch auch den Ressourcenverbrauch senken. Der Aufwand zusätzlicher Berechnungen beim Load Balancing wird also durch gerineren Speicherverbrauch ausgeglichen.