Code.org ist eine gemeinnützige Organisation, die das Wissen bei der Programmierung fördert. Die von den Brüdern Ali und Hadi Partovi gegründete Organisation arbeitet daran, die Anzahl von Informatikprogrammen an Schulen in den USA zu erhöhen und die stärkere Beteiligung von Frauen und unterrepräsentierten farbigen Schülern zu fördern. Code.org bietet auf ihrer Website Programme und Tutorials zur Codierung und setzt sich bei Organisationen auf Bundes- und lokaler Ebene für Informatikunterricht ein. Code.org wurde im Januar 2013 gestartet und ist eine öffentliche 501c3 Organisation mit Unterstützung aus öffentlichen Spenden.

Computer Science Education Week (CSEdWeek) ist ein jährliches Programm zur weltweiten Förderung von Informatik. Abbildung 1 stellt einen auf der Website von Code.org verfügbaren Onlinekurs dar.

Abbildung 1. Programmierkurs für Schüler auf Code.org

Im August 2013 entschied Code.org, während der im Dezember stattfindenden CSEdWeek die Hour-of-Code-Kampagne zu starten, eine Kampagne zur Einführung von Schülern in Codierungsprogramme und Tutorials auf der Website der Organisation. Vor der Nutzung von Amazon Web Services (AWS) bestand die Umgebung von Code.org aus unterschiedlichen Website mit verschiedenen Technologien. Code.org hatte sich das ehrgeizige Ziel gesetzt, 10 Millionen Schüler zu erreichen. Die Ingenieure der gemeinnützigen Organisation hatten vier Monate Zeit zum Erstellen einer Plattform für die Unterstützung der Kampagne.

Code.org musste extreme Datenverkehrsspitzen bei der Anmeldung der Schüler während der CSEdWeek bei gleichzeitiger Kostenkontrolle verwalten. Die Organisation zog auch andere Cloudanbieter in Betracht, entschied sich aber im Endeffekt wegen der Flexibilität, niedrigen Kosten und des von der AWS Cloud bereitgestellten vollständigen Dienstepakets für AWS.

Zudem würde Code.org die globale AWS-Infrastruktur und mehrere Regionen bei der Planung für Redundanz und hohe Verfügbarkeit nutzen können. "Ursprünglich hatten wir den Start einer nationalen Kampagne geplant", sagt Softwareingenieur Geoffrey Elliott. "Der Start auf internationaler Ebene war ein nachträglicher Einfall. Aber aufgrund der Entwicklung in AWS hat sich unser Design nicht geändert. Wir wussten, dass der Start und die Skalierung in einer weiteren AWS-Region möglich ist."

Die Umgebung von Code.org wird auf zwei Stapeln in AWS ausgeführt: einer für die interaktiven Tutorial-Programme und der andere für Benutzer, die mehr über die Hour-of-Code-Initiative erfahren möchten. Beide Stapel werden in der Region US East (No. Virginia) ausgeführt und verwenden Amazon RDS Multi-AZ für das automatische Failover und die hohe Verfügbarkeit auf der Datenbankebene.

Code.org erstellt eigene Tutorials mithilfe von Blockly und anderer Tools für ein grafisches, intensives Erlebnis für Schüler. Die Stiftung stellt auch zusammen mit der Khan Academy und weiteren Partnern Dutzende von Tutorials für die Website bereit. Code.org betreibt die Web-Tutorials in AWS mithilfe von Ruby on Rails, MySQL für Amazon Relational Database Service (Amazon RDS), Amazon CloudFront zum Bereitstellen von Inhalten und Amazon Route 53 als DNS-Webdienst.

"Nachdem man mit der Nutzung von Diensten wie Amazon Route 53 begonnen hat, ist es schwierig, davon loszukommen", sagt Elliott. "Ungefähr alle 90 Tage wird einem unserer lokalen Server eine neue IP-Adresse zugewiesen. Das manuelle Anpassen einer DNS-Einstellung klingt nicht gerade nach viel Arbeit. Wenn man es aber gar nicht machen muss, ist es eine große Sache. Amazon Route 53 verwendet Aliase für Endpunkte anstelle tatsächlicher IP-Adressen, DNS-Aktualisierungen erfolgen daher meistens automatisch. Ich muss mich nicht um Änderungen von IP-Adressen kümmern. Deshalb schätze ich diese und andere Funktionen, die AWS bietet."

Code.org hat die Webanwendung getestet und festgelegt, um Engpässe zu erkennen und die Leistung zu verbessern. Zum Optimieren der Vorgänge haben Ingenieure die Serveraktivitäten in Lesevorgänge (wenn Benutzer eine Seite lesen) und Schreibvorgänge (wenn Benutzer ein Formular ausfüllen) unterteilt. Front-End-Server generieren und speichern eine Seite einmal zwischen und verschieben dann alle Schreibvorgänge zu den Back-End-Servern, die für Aktualisierungen der Datenbank verantwortlich sind. Elastic Load Balancing sichert die hohe Verfügbarkeit zum Verarbeiten extremer Datenverkehrsspitzen.

Ingenieure haben einen Varnish-Cache zum Aufrechterhalten und Beschleunigen der Bereitstellung dynamischer Webinhalte zur Verfügung gestellt. Amazon RDS-Datenbank-Instances in einer Multi-AZ-Konfiguration unterstützen die Datenbankebene. CloudFront bietet Benutzern Inhalte aus AWS-Edge-Standorten und ermöglicht somit die weitere Reduzierung der Last für Front-End-Server. CloudFront ermöglicht zudem die höchst effiziente Bereitstellung von Inhalten für globale Benutzer. "Mithilfe von CloudFront konnten wir skalieren, um während der Spitzenlast mehr als 300 000 Benutzer gleichzeitig zu verarbeiten", sagt Elliott.

Amazon Elastic Compute Cloud (Amazon EC2) bietet verschiedene Instanztypen für unterschiedliche Datenverarbeitungsanforderungen. Nach umfangreichen Tests haben die Ingenieure von Code.org festgestellt, dass Amazon EC2 Compute Optimized-Instances für ihre Webserver am besten geeignet sind. Der Web-Datenverkehr ist zwar nicht rechenintensiv, die von den Computern generierten Seiten sind jedoch CPU-intensiv.

"Für den besten Durchsatz benötigt man den schnellsten Prozessor", sagt Elliott. "Wir verwenden C3-Instanztypen für unsere Front-End-Computer aufgrund der hohen Leistung und des Preis-Leistungsverhältnisses." Leistungstests haben gezeigt, dass CPU für die Cacheserver von Code.org nicht kritisch ist. Die Organisation verwendet kostengünstige Instances, die den gesamten Cache im RAM speichern.

Durch die Nutzung von AWS konnte Code.org die Hour of Code-Kampagne wie geplant während der CSEdWeek starten. "Unser Ziel waren 10 Millionen Studenten und wir hatten 20 Millionen Teilnehmer", sagt Elliott. "Die Nutzung der AWS Cloud gab uns die Elastizität, die Website während der Kampagnenwoche auch bei plötzlichen Datenverkehrsspitzen von null auf 20 Millionen Programmierer verfügbar zu halten, und dann effizient zurückzufahren. AWS war hervorragend."

Seit dem Start von Hour of Code haben mehr als 25 Millionen Schüler, die Hälfte davon Mädchen, aus mehr als 170 Ländern fast eine Milliarde Codezeilen auf Code.org geschrieben.

Nach dem Start hat Code.org eine Überdimensionierung festgestellt, und das Team hat damit begonnenen, Computer außer Betrieb zu nehmen. "Nachdem wir die Skalierung von AWS verstanden hatten, konnten wir den Spin-Down von Instances durchführen, um Kosten zu sparen. Obwohl der Datenverkehr intensiv war und jeden Tag zunahm, konnten wir ungefähr 50 % der Computer außer Betrieb nehmen." Code.org startete mit 21 Instances für die Front-End-Webserver während der Hour of Code, führt derzeit jedoch nur noch zwei Instances aus.

Mithilfe von AWS-Architekten und AWS Support konnte Code.org auf Unternehmensebene die Architektur vor und während der Kampagnenwoche optimieren. Vor dem Start hat die Organisation in Zusammenarbeit mit AWS-Architekten Redundanz und hohe Verfügbarkeit in die Webplattform implementiert und Amazon RDS Multi-AZ für mehrere Availability Zones eingerichtet. Am Wochenende, bevor die Website online ging, starteten AWS Support-Ingenieure einen Warmlauf, um sicherzustellen, dass plötzliche Datenverkehrsspitzen mit Elastic Load Balancing verarbeitet werden können.

Während der CSEdWeek haben AWS Support-Ingenieure eine Lösung bereitgestellt, um E-Mail-Nachrichten in Amazon Simple Email Service (Amazon SES) schneller zu senden. "AWS ist so großartig, wir mussten uns um Details wie die Zustellbarkeitsrate statt der Online-Verfügbarkeit kümmern", so der Kommentar von Elliott. Wir haben uns in der Kampagnenwoche darauf konzentriert, Computer außer Betrieb zu nehmen und uns am reibungslosen Ablauf zu erfreuen."

Mithilfe von AWS kann Code.org den Fokus auf Ziele statt auf die Infrastruktur legen. "Wir erwarten, dass der Dienst einfach funktioniert – und das macht er", sagt Elliot. "Unsere Erfahrungen mit AWS sind außergewöhnlich."

Weitere Informationen dazu, wie AWS Ihnen beim Erfüllen Ihrer Webanwendungsanforderungen helfen kann, finden Sie auf unserer Detailseite zu Webanwendungen: http://aws.amazon.com/web-mobile-social/.