Go Academy · Oppitunti

Vaihtoehdot: HashiCorp go-plugin

RPC-pohjaiset pluginit monialustatukeen

Oppitunti 4/414 vaihetta

Vaihtoehdot: HashiCorp go-plugin on ilmainen Go Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Go Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Go Academy-kurssilla on yhteensä 4 oppituntia.

Miksi go-plugin?

Natiivinen Go-plugin-paketti toimii vain Linuxissa ja macOS:ssä, edellyttää riippuvuuksien täsmälleen samoja versioita eikä pysty poistamaan plugineja. HashiCorp go-plugin ratkaisee nämä ongelmat suorittamalla pluginit erillisinä prosesseina, jotka viestivät RPC:n (gRPC tai net/rpc) kautta.

Arkkitehtuuri

go-plugin suorittaa plugin-binääritiedoston aliprosessina. Isäntäsovellus käynnistää sen, muodostaa gRPC- tai net/rpc-yhteyden ja kutsuu pluginia generoidun asiakkaan kautta. Plugin-prosessi lopetetaan isäntäsovelluksen päättyessä.

Rajapinnan määrittäminen

Määritä rajapinta jaetussa paketissa ja toteuta sitten gRPC- tai net/rpc-silta.

// shared/interface.go
type Greeter interface {
    Greet(name string) (string, error)
}

Pluginin puoli

Plugin toteuttaa rajapinnan ja rekisteröi sen go-pluginin tarjoilumekanismiin:

func main() {
    plugin.Serve(&plugin.ServeConfig{
        HandshakeConfig: Handshake,
        Plugins: map[string]plugin.Plugin{
            "greeter": &GreeterPlugin{Impl: &Greeter{}},
        },
        GRPCServer: plugin.DefaultGRPCServer,
    })
}

Isäntäsovelluksen puoli

Isäntäsovellus käynnistää pluginin aliprosessina ja hankkii rajapinnan asiakkaan kautta:

client := plugin.NewClient(&plugin.ClientConfig{
    HandshakeConfig: Handshake,
    Plugins:         PluginMap,
    Cmd:             exec.Command("./greeter-plugin"),
    AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC},
})
rpcClient, _ := client.Client()
raw, _ := rpcClient.Dispense("greeter")
greeter := raw.(Greeter)

Kättelymääritys

Jaettu HandshakeConfig (taikaevästeen avain ja arvo) estää muuta kuin pluginia olevaa binääritiedostoa käynnistymästä vahingossa pluginina:

var Handshake = plugin.HandshakeConfig{
    ProtocolVersion:  1,
    MagicCookieKey:   "GREETER_PLUGIN",
    MagicCookieValue: "hello",
}

Alustariippumattomuus

Koska plugin on erillinen prosessi, joka viestii TCP:n tai Unix-socketin kautta, se voidaan kääntää mille tahansa alustalle. Isäntäsovelluksella ja pluginilla ei tarvitse olla samaa Go-versiota.

Kaatumiseristys

Jos plugin kaatuu, isäntäsovellus saa virheen seuraavan RPC-kutsun yhteydessä. Isäntäsovellus voi käynnistää pluginin aliprosessin uudelleen ja muodostaa yhteyden uudelleen ilman omaa kaatumistaan.

Suorituskyky

go-pluginin RPC lisää viivettä prosessin sisäisiin funktiokutsuihin verrattuna (mikrosekunteja nanosekuntien sijaan). Tämä sopii harvoin kutsuttaviin, raskaisiin plugin-toimintoihin, mutta ei sovellu tiukkoihin silmukoihin.

Versiointi

go-plugin tukee protokollan versiointia — isäntäsovellus voi neuvotella samanaikaisesti plugin-rajapinnan useiden versioiden kanssa, mikä mahdollistaa pluginien asteittaiset päivitykset.

Käyttö käytännössä

go-pluginia käyttävät HashiCorp Terraformin providerit, Vaultin secrets-enginet ja Packerin builderit — kyseessä on laaja yhteisön kehittämien pluginien ekosysteemi.

Milloin valita

Valitse go-plugin natiivisten pluginien sijaan, kun tarvitaan alustariippumattomuutta tai kaatumiseristystä, riippuvuuksien versioita ei voida yhdenmukaistaa tai pluginit ovat kolmansien osapuolten kirjoittamia.

Pikatarkistus

Miten HashiCorp go-plugin toteuttaa kaatumiseristyksen?

Kertaus: HashiCorp go-plugin

Keskeiset kohdat:

  • Pluginit suoritetaan aliprosesseina ja ne viestivät gRPC:n tai net/rpc:n kautta
  • Alustariippumaton, kaatumisilta eristetty ja versioita sietävä ratkaisu
  • HandshakeConfig estää binääritiedoston tahattoman käynnistämisen
  • RPC aiheuttaa suorituskykykustannuksia; käytä sitä raskaisiin tai harvoin kutsuttaviin toimintoihin
Aloita maksutta

Opi Go tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Vaihtoehdot: HashiCorp go-plugin” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “Vaihtoehdot: HashiCorp go-plugin”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Go Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Vaihtoehdot: HashiCorp go-plugin”?

RPC-pohjaiset pluginit monialustatukeen Harjoittelet Go Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Go Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Go Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Vaihtoehdot: HashiCorp go-plugin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Go Academy-oppitunnilla?

Kyllä. Jokainen Go Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Go plugin -paketin perusteet
  2. Plugin-rajapinnan suunnittelu
  3. Dynaaminen lataus ja symbolit
  4. Vaihtoehdot: HashiCorp go-plugin
← Takaisin: Go Academy