MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So entwickeln Sie Anwendungen für MongoDB und Redpanda mit Docker Compose

MongoDB braucht keine Einführung. Seit ihrem Debüt im Jahr 2007 hat die Dokumentendatenbank stetig an Popularität gewonnen und ist heute laut DB Engines die fünftplatzierte Datenbank weltweit. Es läuft jetzt nur noch Oracle, MySQL, SQL Server und PostgreSQL hinterher. Dies ist umso beeindruckender, wenn man bedenkt, dass die Top 4 traditionelle relationale Datenbanken sind, die im vorigen Jahrhundert herauskamen. MongoDB ist die Nummer eins in der neuen Generation skalierbarer, verteilter „NoSQL“-Datenbanken.

Das rasante Wachstum von MongoDB ist auf einen starken Fokus auf Entwicklererfahrung zurückzuführen. Das Produkt selbst ist einfach, leicht zu bedienen und bietet einen glücklichen Weg vom Prototyp bis zur Produktion. Beim Ausprobieren von MongoDB sind Entwickler in der Regel erfolgreich darin, funktionierende Prototypen in vollwertige Produktionsbereitstellungen zu verschieben. Das ist die Geschichte, an die man sich erinnern sollte.

Während MongoDB die Datenbankentwicklung für Millionen von Entwicklern weltweit vereinfachte, verfolgt Redpanda eine ähnliche Mission, um Echtzeit-Streaming-Anwendungen zu vereinfachen. Von Anfang an wurde Redpanda mit dem gleichen Engagement für Einfachheit, Benutzerfreundlichkeit und vor allem Entwicklerproduktivität entwickelt.

Anders, aber gleich

Während MongoDB und Redpanda unterschiedliche Teile des Tech-Stacks ansprechen, ist es interessant, die Ähnlichkeiten festzustellen, wie sie einzeln eine angenehme Entwicklererfahrung bieten und wie sie sich in Kombination ergänzen. Nämlich:

  • MongoDB wird als einzelne Binärdatei geliefert. So auch Redpanda. Im Gegensatz zu anderen vergleichbaren Streaming-Plattformen ist Redpanda nicht von externen Diensten wie Apache Zookeeper abhängig. Dadurch lässt sich Redpanda über Paketmanager genauso einfach installieren wie lokal auf dem Laptop eines Entwicklers. Es wird auch als Docker-Image geliefert, sodass Sie es über Docker Compose hochfahren, in CI/CD-Pipelines integrieren oder in Kubernetes mit einem einfachen Controller bereitstellen können.
  • Sowohl Redpanda als auch MongoDB sind verteilte Systeme. Um Skalierbarkeit und Ausfallsicherheit zu erreichen, installieren Sie einfach genau dieselbe Binärdatei auf mehreren Servern und richten sie aufeinander aus. Dies ermöglicht Entwicklern und Architekten, Entscheidungen über Skalierbarkeit und Leistung früh im Entwicklungsprozess aufzuschieben. Das mentale Modell und der Code für die Anwendung sind gleich, egal ob sie auf einem Laptop, einer virtuellen Single-Core-Maschine oder auf mehreren leistungsstarken Produktionsservern ausgeführt werden.
  • Sowohl Redpanda als auch MongoDB werden mit vernünftigen Standardeinstellungen ausgeliefert. Dies minimiert die Anzahl der Knöpfe, die Entwickler oder Administratoren optimieren müssen, unabhängig davon, ob sie eine Prototyping-Umgebung (wie bei Docker Compose) einrichten oder einen Produktionscluster bereitstellen. Redpanda geht sogar noch weiter mit der Fähigkeit zur automatischen Anpassung an die zugrunde liegende Hardware, wodurch die verfügbaren CPU-, Arbeitsspeicher- und Festplattenressourcen mit minimalem Aufwand maximiert werden können.
  • Die kognitive Belastung für Entwickler besteht nicht nur in der Byte-pro-Sekunde-Skalierbarkeit, sondern auch in der Entscheidung, welche Form Sie Ihren Daten geben und welche Typen Sie wählen sollen. MongoDB gibt Entwicklern die Flexibilität, das Schema mit einem benutzerfreundlichen JSON-ähnlichen Datenmodell im Laufe der Zeit weiterzuentwickeln. Ebenso erfordern Ereignisse und Nachrichten, die an Redpanda gesendet werden, kein Schema im Voraus. Es besteht jedoch die Möglichkeit, bei Bedarf ein Schema zu verwenden und das Schema an sich ändernde Geschäftsanforderungen anzupassen.

MongoDB mit Redpanda verbinden

MongoDB lässt sich auf zwei Arten in Redpanda integrieren:als Senke, wobei Redpanda-Ereignisse verbraucht und für Einfügungen oder Aktualisierungen an MongoDB gesendet werden, oder als CDC-Quelle, wo MongoDB sein Änderungsprotokoll an ein Redpanda-Thema für andere (einschließlich anderer MongoDB-Instanzen) auslagert verbrauchen. Die Integration erfolgt über Kafka Connect. Da Redpanda kabelkompatibel mit Apache Kafka ist, funktionieren die vorhandenen Kafka-Konnektoren nahtlos. Diese Fähigkeit, das riesige Kafka-Ökosystem zu nutzen, ist ein weiterer Weg, wie Redpanda das Leben von Entwicklern einfacher macht!

Unsere Freunde bei MongoDB haben eine Börsenticker-Demo zusammengestellt, die MongoDB und Redpanda über Kafka Connect integriert. Die Demo erfordert Docker Compose und die docker-compose.yml Datei sieht in etwa so aus:

version: '3.7'
services:

  redpanda:
    command:
    - redpanda
    - start
    - --smp
    - '1'
    - --reserve-memory
    - 0M
    - --overprovisioned
    - --node-id
    - '0'
    - --kafka-addr
    - PLAINTEXT://0.0.0.0:9092,OUTSIDE://0.0.0.0:9093
    - --advertise-kafka-addr
    - PLAINTEXT://redpanda:9092,OUTSIDE://localhost:9093
    image: docker.vectorized.io/vectorized/redpanda:v21.9.3
    ports:
    - 9093:9093

  connect:
    image: confluentinc/cp-kafka-connect-base:latest
    build:
      context: .
      dockerfile: Dockerfile-MongoConnect
    depends_on:
      - redpanda
    ports:
      - "8083:8083"
    environment:
      CONNECT_BOOTSTRAP_SERVERS: 'redpanda:9092'
      CONNECT_REST_ADVERTISED_HOST_NAME: connect
      CONNECT_REST_PORT: 8083
      CONNECT_GROUP_ID: connect-cluster-group
      CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs
      CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000
      CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets
      CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status
      CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components"
      CONNECT_AUTO_CREATE_TOPICS_ENABLE: "true"
      CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"

  mongo1:
    image: "mongo:5.0.3"
    volumes:
      - /data/db
    ports:
      - "27017:27017"
    restart: always

  nodesvr:
    image: node:16
    build:
      context: .
      dockerfile: Dockerfile-Nodesvr
    depends_on:
      - redpanda
      - mongo1
    ports:
      - "4000:4000"

Für ein vollständiges Tutorial und eine exemplarische Vorgehensweise besuchen Sie den ergänzenden Blogbeitrag bei MongoDB. Wir laden alle Mitglieder der MongoDB-Community ein, Redpanda auszuprobieren und der Redpanda-Community Slack beizutreten, wo Sie sich mit den Ingenieuren austauschen können, die Redpanda aufbauen und die Zukunft des Echtzeit-Streamings gestalten!

Weiterführende Literatur

  • Redpanda-Dokumentation
  • Benchmark von Redpanda gegen Kafka
  • Erste Schritte mit Redpanda