RabbitMQ-viestintä ja asynkroniset järjestelmät · Oppitunti

Peilatut jonot HA-käyttöä varten

Toteuttakaa peilatut jonot viestien replikointiin useiden klusterisolmujen välillä. Saavuttakaa jonoillenne korkea käytettävyys ja varmistakaa viestien säilyminen solmujen vikatilanteissa.

Oppitunti 3/411 vaihetta

Peilatut jonot HA-käyttöä varten on ilmainen RabbitMQ-viestintä ja asynkroniset järjestelmät-oppitunti CoddyKitissä. Tämä on oppitunti 3/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 RabbitMQ-viestintä ja asynkroniset järjestelmät-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. RabbitMQ-viestintä ja asynkroniset järjestelmät-kurssilla on yhteensä 4 oppituntia.

Peilattujen jonojen perusteet

RabbitMQ-klusterissa jonot sijaitsevat oletusarvoisesti yhdessä solmussa. Jos kyseinen solmu vikaantuu, kaikki sen jonoissa olevat viestit ja jonot itse muuttuvat käytettävissä oleviksi vasta, kun solmu palautuu.

Peilatut jonot ratkaisevat tämän ongelman replikoimalla jonojen sisällön useisiin solmuihin. Näin viestien käytettävyys ja vikasietoisuus paranevat.

Miksi peilattuja jonoja käytetään?

Kuvittele kriittinen sovellus, jossa viestien menettäminen tai käyttökatkot eivät ole hyväksyttäviä. Peilatut jonot tarjoavat seuraavat edut:

  • Korkea käytettävyys: Jos ensisijaista jonoa isännöivä solmu vikaantuu, replika voi ottaa sen tehtävät saumattomasti.
  • Tietojen kestävyys: Viestit tallennetaan useisiin solmuihin, mikä suojaa yksittäisen solmun vikaantumiselta.
  • Vikasietoisuus: Järjestelmä voi jatkaa toimintaansa, vaikka jotkin solmut siirtyisivät offline-tilaan.

Ne ovat välttämättömiä luotettaville, tuotantokäyttöön tarkoitetuille RabbitMQ-käyttöönotoille.

Master- ja replika-arkkitehtuuri

Kun jono peilataan, yksi solmu isännöi master- eli ensisijaista jonoa. Kaikki muut peilejä isännöivät solmut käyttävät replikoita.

Kaikki peilatun jonon toiminnot, kuten julkaiseminen, kuluttaminen ja viestien lisääminen, käsitellään ensin masterissa. Tämän jälkeen master repliko i toiminnot kaikille replikoilleen.

Peilauksen määrittäminen käytäntöjen avulla

Peilausta ei määritetä suoraan yksittäisille jonoille. Sen sijaan käytetään käytäntöjä. Käytäntö on sääntöjoukko, jota sovelletaan jonoihin, joiden nimet vastaavat tiettyä kaavaa.

Näin peilauskäyttäytyminen voidaan määrittää useille jonoille kerralla tai tulevaisuudessa luotaville jonoille ilman asiakaskoodin muuttamista.

Käytäntöesimerkki: kaikkien jonojen peilaus

Näin luot käytännön nimeltä ha-all, joka peilaa kaikki jonot, jotka vastaavat kaavaa ".*", kaikkiin klusterin solmuihin ("ha-mode":"all").

Suorittaisit tämän komennon yleensä komentoriviltä yhdessä RabbitMQ-klusterin solmuista.

rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}' --apply-to queues

ha-mode-asetusten ymmärtäminen

Käytännön ha-mode-argumentti määrittää, miten peilaus toimii:

  • all: Jono peilataan kaikkiin klusterin solmuihin.
  • exactly: Jono peilataan tiettyyn määrään solmuja, esimerkiksi {"ha-mode":"exactly", "ha-params":2}.
  • nodes: Jono peilataan tiettyyn nimettyjen solmujen luetteloon, esimerkiksi {"ha-mode":"nodes", "ha-params":["rabbit@node1", "rabbit@node2"]}.

Tuottajat ja peilatut jonot

Tuottajan näkökulmasta peilatun jonon käyttäminen ei eroa tavallisen jonon käyttämisestä. Asiakas yhdistää mihin tahansa klusterin solmuun, ja RabbitMQ huolehtii viestin reitittämisestä master-jonoon peilausta varten.

Kokeile suorittaa tämä yksinkertainen Java-tuottaja:

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Producer {
  private final static String QUEUE_NAME = "my_mirrored_queue";

  public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost"); // Connect to any cluster node
    try (Connection connection = factory.newConnection();
         Channel channel = connection.createChannel()) {
      // Declare a durable queue (important for mirrored queues)
      channel.queueDeclare(QUEUE_NAME, true, false, false, null);
      String message = "Hello, Mirrored Queue!";
      channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
      System.out.println(" [x] Sent '" + message + "'");
    }
  }
}

Kuluttajat ja peilatut jonot

Vastaavasti kuluttajat eivät tarvitse erityistä logiikkaa peilatusta jonosta kuluttamiseen. Ne vain yhdistävät solmuun ja tilaavat jonon.

Jos master-jono vikaantuu, RabbitMQ ylentää automaattisesti replikasta uuden masterin, ja kuluttajat siirtyvät huomaamatta käyttämään uutta masteria. Lyhyt uudelleenyhdistäminen saattaa kuitenkin olla tarpeen.

Suorita tämä kuluttajaesimerkki:

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;

public class Consumer {
  private final static String QUEUE_NAME = "my_mirrored_queue";

  public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost"); // Connect to any cluster node
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.queueDeclare(QUEUE_NAME, true, false, false, null);
    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

    DeliverCallback deliverCallback = (consumerTag, delivery) -> {
      String message = new String(delivery.getBody(), "UTF-8");
      System.out.println(" [x] Received '" + message + "'");
    };
    // Basic consume with auto-acknowledgement
    channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});
  }
}

Vikasietoisuus ja replikan synkronointi

Kun master-solmu vikaantuu, RabbitMQ valitsee uuden masterin käytettävissä olevista replikoista. Uusi master ottaa tehtävät hoitaakseen, ja viestien käsittely jatkuu ilman tietojen menetystä.

Jos replikalla varustettu solmu liittyy uudelleen klusteriin tai uusi solmu lisätään, replika synkronoi sisältönsä nykyisen masterin kanssa. Näin kaikki viestit pysyvät yhdenmukaisina peilatuissa jonoissa.

Pikatarkistus: peilatut jonot

Olet oppinut peilattujen jonojen merkityksen ja toimintaperiaatteet. Testataan seuraavaksi ymmärrystäsi.

Kertaus: peilatut jonot korkean käytettävyyden takaajina

Tutustuimme peilattuihin jonoihin, jotka ovat tärkeä ominaisuus korkean käytettävyyden ja tietojen kestävyyden takaamisessa RabbitMQ-klustereissa.

  • Peilatut jonot replikoivat viestit master- ja replikan sisältäviin solmuihin.
  • Ne määritetään käytäntöjen avulla, mikä mahdollistaa peilauskäyttäytymisen joustavan hallinnan.
  • Asiakassovellukset eli tuottajat ja kuluttajat käyttävät peilattuja jonoja läpinäkyvästi.
  • Jos master-solmu vikaantuu, replika ylennetään masteriksi, mikä varmistaa palvelun jatkuvuuden ja viestien säilymisen.

Tämä mekanismi on tärkeä luotettavien ja vikasietoisten viestintäjärjestelmien rakentamisessa.

Aloita maksutta

Opi RabbitMQ-viestintä ja asynkroniset järjestelmät 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
11
Oppitunnit
44

Usein kysytyt kysymykset

Onko oppitunti ”Peilatut jonot HA-käyttöä varten” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa RabbitMQ-viestintä ja asynkroniset järjestelmät-oppimispolun 3 oppituntia, myös oppitunnin “Peilatut jonot HA-käyttöä varten”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. RabbitMQ-viestintä ja asynkroniset järjestelmät-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Peilatut jonot HA-käyttöä varten”?

Toteuttakaa peilatut jonot viestien replikointiin useiden klusterisolmujen välillä. Saavuttakaa jonoillenne korkea käytettävyys ja varmistakaa viestien säilyminen solmujen vikatilanteissa. Harjoittelet RabbitMQ-viestintä ja asynkroniset järjestelmät-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni RabbitMQ-viestintä ja asynkroniset järjestelmät-opiskelun?

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

Kuinka kauan ”Peilatut jonot HA-käyttöä varten”-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ä RabbitMQ-viestintä ja asynkroniset järjestelmät-oppitunnilla?

Kyllä. Jokainen RabbitMQ-viestintä ja asynkroniset järjestelmät-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. RabbitMQ-klusteroinnin perusteet
  2. Klusteriympäristön määrittäminen
  3. Peilatut jonot HA-käyttöä varten
  4. Quorum-jonot nykyaikaista HA:ta varten
← Takaisin: RabbitMQ-viestintä ja asynkroniset järjestelmät