September 27, 2018

Projekt der Woche: PIRI

Projekt der Woche: PIRI

Piri ist ein Proxy und Load Balancer für eine oder mehrere IOTA-Nodes. Einerseits um die Last auf die Nodes zu verteilen, andererseits um die Nodes abzusichern und um zusätzliche Features nutzen zu können, wie beispielsweise Health Checks, Circuit Breaker, Rate Limiting und Metriken. Außerdem sorgt der Load Balancer dafür, dass neue Clients die aktuellsten Nodes bekommen und IRI Befehle jeweils an die richtige Node gesendet werden. So können Benutzer einfach und sicher über eine Adresse immer eine verfügbare Node für das Trinity-Wallet bekommen.

An welche Zielgruppe richtet sich PIRI?

An alle, die mehrere IOTA Nodes hinter einer Adresse (IP/Domain) betreiben wollen. Eine gewisse technische Affinität ist Voraussetzung, um PIRI selbst hosten zu können und man muss die Ressourcen dazu haben. Sofern die Ressourcen vorhanden sind, kann man nicht nur seine eigenen Nodes über PIRI zur Verfügung stellen, sondern auch externe Nodes (dies beugt der Zentralisierung vor und schafft Verfügbarkeit).

PIRI richtet sich somit an Privatpersonen, als auch an Firmen, die einen einen Load Balancer für IOTA aufbauen möchten.

Was ist deine Vision?

Ziel ist es einen performanten und stabilen Load Balancer zu entwickeln, der speziell auf IOTA Nodes zugeschnitten ist. Außerdem ist die Idee, dass sich Nodes selbst beim Load Balancer registrieren und abmelden können, um ihre Dienste zur Verfügung zu stellen und sich so Pools bilden, die performanter und effektiver sind als einzelne Nodes.

Die Richtung von PIRI selbst ist nicht langfristig definiert und kann sich jederzeit ändern. Ich orientiere mich derzeit an meinen eigenen Anforderungen und setze Features um, die sich Betreiber von Piri wünschen. Ein paar Features fehlen aus meiner Sicht jedoch noch, die werden implementiert, sobald sie gebraucht werden.

Welche Hard- und Software verwendet ihr?

Piri wurde in Java geschrieben und bedient sich somit der gleichen Programmiersprachen wie IRI. Die benötigten Systemressourcen für den Betrieb von Piri sind 2 CPU-Kerne und mindestens 1 GB Arbeitsspeicher.

Hinter den Kulissen wird Spring Webflux mit Project Reactor und Resilience4j als Fehlertoleranzbibliothek verwendet. Für Metriken wird Micrometer verwendet, das gut mit Prometheus und Grafana harmoniert. Alles ist Open Source und frei verfügbar. Für den Betrieb über eine SSL-Adresse, z. B. https://pool.trytes.eu, wird noch ein weiterer Dienst wie nginx empfohlen, um ein entsprechendes SSL-Zertifikat zur Verfügung stellen zu können.

Die Hardwareanforderungen sind relativ, je nach der Last, die es zu bewältigen gilt. Das Backend ist reaktiv implementiert und skaliert daher gut. Je mehr CPU-Kerne zur Verfügung stehen, desto performanter ist PIRI.

Wie läuft das Ganze technisch ab?

IOTA Node Anfragen werden entgegengenommen, analysiert und an die Nodes weitergleitet. Die Antworten werden dann an PIRI zurückgesendet und dem Client weitervermittelt. Daneben wird regelmäßig überprüft, wie der Zustand der Nodes ist und darauf geachtet, dass die Clients die aktuellsten Nodes bekommen und diese nicht überlastet werden.

Im Grunde ist es ganz einfach, der Teufel steckt im Detail und in den richtigen Einstellungen, da sich Wallet und Node nicht immer intuitiv verhalten.

Wer steckt hinter PIRI?

Derzeit arbeite nur ich am Projekt (mio#7632 im Discord). Es gab zwei Beiträge aus der Community, einen von @chrisss404 (Gitlab) für ein Docker Image und einen von Leibi133#0648 (Discord) für ein (separates) Frontend.

Welche Kenntnisse und Erfahrungen hast Du?

Ich bin Softwareentwickler und arbeite schon viele Jahre an unterschiedlichsten Projekten als Freelancer. Meist mit Java und Spring.

Was hat Dich motiviert, das Projekt voranzubringen?

Primär die Freude am Umsetzen, da ich die oben genannten Frameworks/Libraries ausprobieren wollte und sehen wollte, ob Spring Webflux/Project Reactor schon „production ready“ ist. Des Weiteren wollte ich schon immer mal Hystrix verwenden, bin dann aber über das wirklich tolle Resilience4j gestolpert, welches für meine Zwecke wesentlich geeigneter war. Auch Micrometer und Prometheus mit Grafana haben mich interessiert.

Abgesehen davon war das Ziel mit PIRI meine zwei IOTA-Nodes öffentlich zu machen und der Community zur Verfügung zu stellen, damit auch ich einen kleinen Beitrag zum Gelingen von IOTA leisten kann.

Was motiviert Dich dazu, das Projekt in Zukunft fortzuführen?

Es motiviert mich, wenn es neben mir noch andere Nutzer der Software gibt. Solange es jemanden gibt, der Interesse am Projekt hat, werde ich weiterentwickeln, sonst mache ich etwas Neues. Insbesondere freut es mich, dass einfach-IOTA.de auch PIRI verwendet.

Kann dir Community Dir helfen? Wenn ja, wie?

  • Geholfen wäre mir, wenn sich noch mehr Node-Betreiber an meinem Testsystem auf https://pool.trytes.eu registrieren würden, denn dieses ist derzeit etwas einsam.
  • Wenn jemand ein UI à la Field entwickeln würde, dann wäre es mit kleineren Adaptionen im Backend möglich ein weiteres Field aufzuziehen.
  • Ich bin für jedes Feedback, Fehlermeldungen, allg. Beiträge und Verbessungsvorschläge dankbar.

Zusammenfassend…

…kann man sagen, dass Mio als Entwickler voll und ganz hinter seinem Projekt steht und versucht zu der IOTA-Community und IOTA selbst einen wertvollen Beitrag zu leisten. Er ermöglicht es mit einfachen Mitteln eine Lastenverteilung für jedermann zu erstellen und somit die Stabilität und Entwicklung von IOTA weiter voranzutreiben.

Wir danken Dir auch im Namen von einfachIOTA für dieses wirklich tolle Projekt und die tolle Zusammenarbeit in unserem Team.

Ökosystem: https://ecosystem.iota.org/projects/piri

GitLab: https://gitlab.com/georg.mittendorfer/piri

Wiki: https://gitlab.com/georg.mittendorfer/piri/wikis/home

Demo/Test-System: https://pool.trytes.eu/