GoSuda

Przedstawiamy Portalite: ultralekki, otwartoźródłowy klient oraz SDK do implementacji portali Ingress w aplikacji

By Lemon Mint
views ...

Portal przedstawialiśmy już wcześniej, omawiając problemy współczesnej sieci Web. Wraz z pojawieniem się narzędzi do kodowania wspomaganych przez AI każdy może stworzyć witrynę internetową, jednak jej publikacja w sieci pozostaje w dalszym ciągu domeną wielkich platform oraz chmury. Portal to projekt, który oddaje prawo do publikacji w ręce jednostek poprzez oddzielenie hostingu sieciowego od tworzenia treści oraz łączenie lokalnych usług użytkownika z całym światem za pomocą szyfrowanych transmisji typu end-to-end.

Przedstawiamy Portalite

Dzisiaj ogłaszam wydanie Portalite. Portalite to ultralekki klient Portal o minimalnych zależnościach oraz SDK języka Go.

O ile Portal stanowi filozofię odpowiadającą na pytanie, "w jaki sposób zmieni ona sieć Web", o tyle Portalite jest najcieńszą warstwą łączącą tę filozofię z aplikacją programisty. Bez skomplikowanej konfiguracji chmury czy rurociągów wdrażania, programista może zaimportować SDK i dodać zaledwie kilka linii kodu, aby wdrożyć ingress portalu we własnej aplikacji. W momencie uruchomienia aplikacji serwer, który istniał dotąd wyłącznie lokalnie, staje się publiczną usługą dostępną z każdego miejsca w internecie.

1. Publiczny Ingress w dwóch linijkach kodu

Portalite obsługuje standardowy interfejs języka Go net.Listener. Wystarczy wymienić nasłuchiwacz (listener) w istniejącym szkielecie sieciowym lub kodzie serwera, aby natychmiast rozpocząć działanie.

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)
  • Bezkonfiguracyjność (Zero-config): Przekierowanie portów, stałe adresy IP oraz konfiguracja reguł zapory sieciowej dla ruchu przychodzącego nie są w żaden sposób wymagane.
  • Zgodność ze standardami: Pełna, 100-procentowa kompatybilność ze wszystkimi bibliotekami języka Go wykorzystującymi standardowy net.Listener, takimi jak http.Server, grpc.Server, Gin, Echo czy Chi.

2. Kluczowy element: Jednoczesne wiązanie wielu przekaźników (Multi-Relay Binding)

Większość narzędzi do tworzenia tuneli polega na pojedynczym punkcie końcowym, co sprawia, że awaria serwera przekaźnika powoduje przerwę w świadczeniu usługi. Portalite działa poprzez jednoczesne połączenie z wieloma serwerami przekaźnikowymi.

  • Bezawaryjna izolacja błędów (Failover): Nawet w przypadku awarii niektórych przekaźników lub wystąpienia opóźnień sieciowych, pozostałe działające przekaźniki nadal kierują ruch przez ten sam wirtualny nasłuchiwacz.
  • Eliminacja pojedynczego punktu awarii (SPOF): Pętla Accept() aplikacji nie zostanie przerwana, dopóki wszystkie sesje przekaźnikowe nie zostaną przerwane w tym samym czasie.
  • Szyfrowanie end-to-end (E2EE): Ruch jest przesyłany w formie zaszyfrowanej, co uniemożliwia serwerom przekaźnikowym wgląd w dane lub ich modyfikację.
  • Automatyczne ponowne łączenie oraz autoleczenie (Self-Healing): W przypadku tymczasowego odcięcia sieci lub ponownego uruchomienia przekaźnika, sesje i tokeny są automatycznie negocjowane w tle w celu przywrócenia połączenia.

3. Natychmiastowe użycie za pomocą jednego polecenia CLI

Jeżeli nie korzystasz z języka Go lub potrzebujesz szybkiego testu, wystarczy przekazać numer portu za pomocą interfejsu CLI.

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

Adresy URL wielu przekaźników są generowane natychmiast po wykonaniu polecenia, co pozwala na natychmiastowy dostęp z zewnątrz.

4. Lekkość połączona z potężnymi możliwościami

  • Minimalne zależności: Ograniczenie zewnętrznych zależności sprawia, że plik binarny jest lekki, a proces kompilacji przebiega szybko.
  • Obsługa TLS oraz UDP: Z łatwością można udostępniać nie tylko ruch TLS, taki jak HTTP czy gRPC, lecz także usługi UDP, w tym serwery gier, za pośrednictwem protokołu zaplecza datagramów QUIC.

Rozpoczęcie pracy