GoSuda

Portalite: Лек Go SDK за Portal с мултирелейно свързване и съвместимост със стандартния net.Listener

By Lemon Mint views ...

Преди това, представяйки Portal, поставихме проблемите на съвременната мрежа. С появата на инструментите за програмиране с изкуствен интелект всеки може да създаде уебсайт, но публикуването му в света все още остава в изключителната област на големите платформи и облачните услуги. Portal отделя хостинга на мрежата от създаването на съдържание и чрез криптиран от край до край релей свързва локалните услуги на отделните хора със света, като по този начин връща правото на публикуване обратно на индивида.

Представяме Portalite

Днес представям Portalite. Portalite е ултралеков клиент за Portal и Go SDK, създаден с минимални зависимости.

Ако Portal е философията за това как да се промени мрежата, то Portalite е най-тънкото свързващо звено, което прилага тази философия към приложението на разработчика. Разработчикът не се нуждае от сложна облачна конфигурация или конвейер за внедряване. Достатъчно е да импортира SDK и да добави няколко реда код, за да включи портален ingress в своето приложение. В мига, в който приложението стартира, сървърът, който е съществувал само локално, става публична услуга, достъпна от всяка точка на интернет.

1. Публичен Ingress с два реда код

Portalite поддържа net.Listener, стандартния интерфейс на Go. Достатъчно е да се замени слушателят в съществуващата уеб рамка или сървърен код, и той започва да работи незабавно.

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)
  • Без конфигурация (Zero-config): Не са необходими пренасочване на портове, фиксиран IP адрес или правила за входящ трафик в защитната стена.
  • Стандартна съвместимост: Напълно съвместим с http.Server, grpc.Server, Gin, Echo, Chi и всяка друга Go библиотека, която използва стандартния net.Listener.

2. Основното: едновременно свързване към множество релета (Multi-Relay Binding)

Повечето инструменти за тунелиране разчитат на една крайна точка, така че когато релейният сървър спре, услугата прекъсва заедно с него. Portalite работи, като едновременно поддържа връзка с множество релейни сървъри.

  • Непрекъсната изолация на отказите (Failover): Ако някои от релетата спрат да работят или възникне мрежово забавяне, останалите активни релета продължават да приемат трафик през същия виртуален слушател.
  • Премахване на единична точка на отказ (SPOF): Докато всички релейни сесии не прекъснат едновременно, цикълът Accept() на приложението не се прекъсва.
  • Криптиране от край до край (E2EE): Трафикът се предава криптиран, поради което релейните сървъри не могат нито да разгледат, нито да променят данните.
  • Автоматично повторно свързване и самовъзстановяване (Self-Healing): При временни мрежови прекъсвания или рестартиране на релета сесиите и токените се договарят автоматично отново във фонов режим, за да се възстанови връзката.

3. Незабавна употреба с една команда в CLI

Ако не работите с Go код или се нуждаете от бърз тест, достатъчно е да подадете номера на порта в 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

Веднага след изпълнението на командата се издават URL адреси за множество релета и услугата става достъпна отвън.

4. Лек, но мощен

  • Минимални зависимости: Премахването на външни зависимости прави двоичния файл лек и изгражда бързо.
  • Поддръжка на TLS и UDP: Освен TLS трафик като HTTP/gRPC, чрез QUIC датаграмен бекхаул можете лесно да публикувате и UDP услуги, например игрови сървъри.

Начало