GoSuda

Portalite: monen releen sidonta ja standardin net.Listener-rajapintaan perustuva kevyt Portal Go SDK

By Lemon Mint views ...

Aiemmin esitellessämme Portalia keskustelimme nykyaikaisen verkon ongelmista. Tekoälyavusteisten koodaustyökalujen myötä kuka tahansa voi nyt luoda verkkosivuston, mutta sen julkaiseminen maailmalle on edelleen suurten alustojen ja pilvipalveluiden yksinoikeusalue. Portal erottaa verkon isännöinnin ja sisällöntuotannon toisistaan ja yhdistää yksittäisen henkilön paikallisen palvelun maailmanlaajuisesti päästä päähän salattujen releiden kautta. Näin julkaisuoikeus palautuu takaisin yksilölle.

Esittelyssä Portalite

Tänään esittelen Portalite-ohjelmiston. Portalite on vähimmäisriippuvuuksin rakennettu erittäin kevyt Portal-asiakasohjelma ja Go SDK.

Jos Portal on filosofia siitä, miten verkkoa voidaan muuttaa, Portalite on ohut liima, jolla tuo filosofia liitetään kehittäjän sovellukseen. Kehittäjän ei tarvitse tehdä monimutkaisia pilvikonfiguraatioita tai rakentaa julkaisuputkia. Riittää, että hän tuo SDK:n ja lisää muutaman rivin koodia, jolloin sovellukseen saadaan portaalin ingress. Heti kun sovellus käynnistyy, sen paikallisesti toimiva palvelin muuttuu julkiseksi palveluksi, johon pääsee käsiksi mistä tahansa Internetissä.

1. Julkinen Ingress kahdella koodirivillä

Portalite tukee Go-kielen vakiorajapintaa net.Listener. Riittää, että korvaa olemassa olevan web-kehyksen tai palvelimen kuuntelijan, jolloin ratkaisu toimii välittömästi.

 1// Luo palvelun tunniste
 2identity, err := portalite.GenerateIdentity("my-service")
 3
 4// Avaa julkinen kuuntelija releiden kautta
 5listener, err := portalite.Expose(ctx, portalite.ExposeConfig{
 6    Relays:   portalite.DefaultRelays(),
 7    Identity: identity,
 8})
 9
10// Käynnistä HTTP-palvelin kuuntelijalla
11http.Serve(listener, handler)
  • Nollakonfiguraatio (Zero-config): Porttien ohjausta, kiinteää IP-osoitetta tai palomuurin saapuvia sääntöjä ei tarvita lainkaan.
  • Standardiyhteensopivuus: Yhteensopiva 100 prosentin tarkkuudella kaikkien Go-kirjastojen kanssa, jotka käyttävät vakiomuotoista net.Listener-rajapintaa, kuten http.Server, grpc.Server, Gin, Echo ja Chi.

2. Ydinominaisuus: useiden releiden samanaikainen sitominen (Multi-Relay Binding)

Useimmat tunnelointityökalut luottavat yhteen päätepisteeseen, joten jos relepalvelin kaatuu, myös palvelu katkeaa. Portalite toimii yhdistämällä useisiin relepalvelimiin samanaikaisesti.

  • Katkeamaton vikaeristys (Failover): Vaikka osa releistä kaatuisi tai niissä ilmenisi verkkoviivettä, jäljellä olevat toimivat releet jatkavat liikenteen välittämistä saman virtuaalisen kuuntelijan kautta.
  • Yksittäisen vikapisteen (SPOF) poistaminen: Sovelluksen Accept()-silmukka ei pysähdy,ellei kaikki releyhteydet katkea samanaikaisesti.
  • Päästä päähän salaus (E2EE): Liikenne välitetään salattuna, joten relepalvelin ei voi tarkastella tai muokata dataa.
  • Automaattinen uudelleenyhdistäminen ja itseparantuminen (Self-Healing): Myös tilapäisen verkkokatkon tai releen uudelleenkäynnistyksen yhteydessä yhteys palautuu, kun taustalla neuvotellaan istunto ja tunnus automaattisesti uudelleen.

3. Välitön käyttö yhdellä CLI-komennolla

Jos et käytä Go-koodia tai tarvitset nopean testin, riittää, että välität CLI-työkalulle pelkän porttinumeron.

1# Asenna ja avaa portti 3000 julkisesti
2$ go install gosuda.org/portalite/cmd/portalite@latest && portalite expose --name "my-service" 3000
3URL https://my-service.rly.best
4URL https://my-service.s-h.day
5

Komennon suorituksen jälkeen useita releiden URL-osoitteita luodaan välittömästi, ja palvelu on heti saavutettavissa ulkopuolelta.

4. Kevyt mutta tehokas

  • Vähimmäisriippuvuudet: Kolmannen osapuolen riippuvuuksia on karsittu, joten binääri on kevyt ja käännös nopea.
  • TLS- ja UDP-tuki: HTTP- ja gRPC-liikenteen kaltaisen TLS-liikenteen lisäksi QUIC-datagrammien takaisinkytkennän avulla voidaan helposti julkaista myös UDP-palveluita, kuten pelipalvelimia.

Aloittaminen