Portalite: többrelés kötéssel és szabványos net.Listener alapú könnyűsúlyú Portal Go SDK

Korábban a Portal bemutatásakor a modern webes problémákról beszéltünk. Az AI-alapú kódolóeszközök megjelenésével mindenki képes weboldalt készíteni, ám annak nyilvánossá tétele továbbra is a nagy platformok és a felhőszolgáltatások monopóliumának területén marad. A Portal szétválasztja a webes tárhelyezést és a tartalomkészítést, és a személyes helyi szolgáltatásokat végponttól végpontig titkosított átjátszókon (relay) keresztül köti össze a világgal, így a nyilvánossá tétel jogát ismét a személyeknek adja vissza.
Bemutatjuk a Portalite-ot
Ma a Portalite projektet mutatom be. A Portalite minimális függőségekkel készült, ultrakönnyű Portal-kliens és Go SDK.
Ha a Portal filozófiája arra a kérdésre keres választ, hogyan változtassa meg a webet, akkor a Portalite az a legvékonyabb ragasztóanyag, amely ezt a filozófiát a fejlesztő alkalmazásához rögzíti. A fejlesztőnek összetett felhőbeállítások vagy telepítési folyamatok nélkül elegendő importálnia az SDK-t és néhány sornyi kódot hozzáadnia ahhoz, hogy alkalmazásába portál ingress-t építsen. Abban a pillanatban, hogy az alkalmazás elindul, a korábban csak helyben élő szerver az internet bármely pontjáról elérhető nyilvános szolgáltatássá válik.
1. Nyilvános Ingress két sor kódból
A Portalite támogatja a Go szabványos interfészét, a net.Listener-t. A meglévő webes keretrendszer vagy szerverkód figyelőjének (listener) cseréje elegendő, és a megoldás azonnal működik.
1identity, err := portalite.GenerateIdentity("my-service")
2
3listener, err := portalite.Expose(ctx, portalite.ExposeConfig{
4 Relays: portalite.DefaultRelays(),
5 Identity: identity,
6})
7
8http.Serve(listener, handler)
- Nulla konfiguráció (Zero-config): Portátirányítás, fix IP-cím és tűzfal bejövő szabályainak beállítása egyáltalán nem szükséges.
- Szabványos kompatibilitás: 100%-ban kompatibilis minden olyan Go könyvtárral, amely szabványos
net.Listener-t használ, így ahttp.Server, agrpc.Server, a Gin, az Echo, a Chi és további könyvtárak is működnek vele.
2. Lényeg: többrelés egyidejű kötés (Multi-Relay Binding)
A legtöbb alagútkezelő eszköz egyetlen végponttól függ, ezért ha a relé szerver leáll, a szolgáltatás is megszakad. A Portalite egyidejűleg több relé szerverhez kapcsolódva működik.
- Megszakítás nélküli hibaelkülönítés (Failover): Ha a relék egy része leáll, vagy hálózati késleltetés lép fel, a működő többi relé ugyanazon virtuális figyelőn keresztül továbbra is fogadja a forgalmat.
- Egyetlen hibapont (SPOF) kiküszöbölése: Amíg az összes relé-munkamenet nem szakad meg egyszerre, az alkalmazás
Accept()ciklusa nem áll le. - Végponttól végpontig titkosítás (E2EE): A forgalom titkosítva kerül továbbításra, így a relé szerverek nem tekinthetnek bele az adatokba, és nem módosíthatják azokat.
- Automatikus újracsatlakozás és öngyógyulás (Self-Healing): Átmeneti hálózati szakadás vagy a relé újraindítása esetén a háttérben automatikusan újratárgyalja a munkameneteket és a tokeneket, így helyreállítja a kapcsolatot.
3. Használat azonnal, egyetlen CLI-paranccsal
Ha nem Go kódot használ, vagy gyors tesztelésre van szüksége, elegendő a CLI-nak csak a portszámot átadnia.
1$ go install gosuda.org/portalite/cmd/portalite@latest && portalite expose --name "my-service" 3000
2URL https://my-service.rly.best
3URL https://my-service.s-h.day
4
A parancs végrehajtásakor azonnal több relé URL kerül kiadásra, és a szolgáltatás közvetlenül kívülről is elérhetővé válik.
4. Könnyű, mégis erőteljes funkciók
- Minimális függőségek: A harmadik féltől származó függőségek elhagyásával a bináris fájl könnyű, a fordítás pedig gyors.
- TLS és UDP támogatás: A HTTP/gRPC-hez hasonló TLS-forgalom mellett a QUIC datagram backhaul segítségével a játékszerverekhez hasonló UDP-szolgáltatások is egyszerűen közzétehetők.
Kezdés
- GitHub-tárhely: https://github.com/gosuda/portalite
- Go-csomag:
go get gosuda.org/portalite