GoSuda

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

By Lemon Mint views ...

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 a http.Server, a grpc.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