• dgraph 集群模式 native graphal 试用


    dgraph 单机的已经运行过了,以下是一个简单的集群环境运行,以及试用

    环境准备

    • docker-compose 文件
    version: "3.2"
    services:
      zero1:
        image: dgraph/dgraph:latest
        volumes:
          - data-volume1:/dgraph
        ports:
          - 5080:5080
          - 6080:6080
        command: dgraph zero --my=zero1:5080 --replicas 3 --idx 1
      zero2:
        image: dgraph/dgraph:latest
        volumes:
          - data-volume2:/dgraph
        ports:
          - 5081:5081
          - 6081:6081
        command: dgraph zero -o 1 --my=zero2:5081 --replicas 3 --peer zero1:5080 --idx 2
      zero3:
        image: dgraph/dgraph:latest
        volumes:
          - data-volume3:/dgraph
        ports:
          - 5082:5082
          - 6082:6082
        command: dgraph zero -o 2 --my=zero3:5082 --replicas 3 --peer zero1:5080 --idx 3
      alpha1:
        image: dgraph/dgraph:latest
        hostname: "alpha1"
        volumes:
          - data-volume-app1:/dgraph
        ports:
          - 8080:8080
          - 9080:9080
        command: dgraph alpha --my=alpha1:7080 --lru_mb=2048 --zero=zero1:5080,zero2:5080,zero3:5080
      alpha2:
        image: dgraph/dgraph:latest
        hostname: "alpha2"
        volumes:
          - data-volume-app2:/dgraph
        ports:
          - 8081:8081
          - 9081:9081
        command: dgraph alpha --my=alpha2:7081 --lru_mb=2048 --zero=zero1:5080,zero2:5080,zero3:5080 -o 1
      alpha3:
        image: dgraph/dgraph:latest
        hostname: "alpha3"
        volumes:
          - data-volume-app3:/dgraph
        ports:
          - 8082:8082
          - 9082:9082
        command: dgraph alpha --my=alpha3:7082 --lru_mb=2048 --zero=zero1:5080,zero2:5080,zero3:5080 -o 2
      alpha4:
        image: dgraph/dgraph:latest
        hostname: "alpha4"
        volumes:
          - data-volume-app4:/dgraph
        ports:
          - 8083:8083
          - 9083:9083
        command: dgraph alpha --my=alpha4:7083 --lru_mb=2048 --zero=zero1:5080,zero2:5080,zero3:5080 -o 3
      alpha5:
        image: dgraph/dgraph:latest
        hostname: "alpha5"
        volumes:
          - data-volume-app5:/dgraph
        ports:
          - 8084:8084
          - 9084:9084
        command: dgraph alpha --my=alpha5:7084 --lru_mb=2048 --zero=zero1:5080,zero2:5080,zero3:5080 -o 4
      alpha6:
        image: dgraph/dgraph:latest
        hostname: "alpha6"
        volumes:
          - data-volume-app6:/dgraph
        ports:
          - 8085:8085
          - 9085:9085
        command: dgraph alpha --my=alpha6:7085 --lru_mb=2048 --zero=zero1:5080,zero2:5080,zero3:5080 -o 5
      ratel:
        image: dgraph/dgraph:latest
        hostname: "ratel"
        ports:
          - 8000:8000
        command: dgraph-ratel
    volumes:
      data-volume1:
      data-volume2:
      data-volume3:
      data-volume-app1:
      data-volume-app2:
      data-volume-app3:
      data-volume-app4:
      data-volume-app5:
      data-volume-app6:
    • 启动
    docker-compose up -d
    • 集群效果

    • 说明
      dgraph分不同的角色zero,以及alpha,以上是一个ha 的环境搭建,3个zero,6个alpha,以及配置,主要是方便学习,为了方便使用
      同时添加了ratel

    使用

    方法与单机的类似,集群的数据是自动处理的

    • schema 定义
      schema.graphql
     
    type Product {
        productID: ID!
        name: String @search(by: [term])
        reviews: [Review] @hasInverse(field: about)
    }
    type Customer {
        username: String! @id @search(by: [hash, regexp])
        reviews: [Review] @hasInverse(field: by)
    }
    type Review {
        id: ID!
        about: Product!
        by: Customer!
        comment: String @search(by: [fulltext])
        rating: Int @search
    }
    • deploy schema
    curl -X POST localhost:8080/admin/schema -d '@schema.graphql'
    • mutation
    mutation {
      addProduct(input: [
        { name: "GraphQL on Dgraph"},
        { name: "Dgraph: The GraphQL Database"}
      ]) {
        product {
          productID
          name
        }
      }
      addCustomer(input: [{ username: "Michael"}]) {
        customer {
          username
        }
      }
    }
    // 后边执行
    mutation {
      addReview(input: [{
        by: {username: "Michael"}, 
        about: { productID: "0x3"}, 
        comment: "Fantastic, easy to install, worked great.  Best GraphQL server available",
        rating: 10}]) 
      {
        review {
          comment
          rating
          by { username }
          about { name }
        }
      }
    }
    • 数据查询
    query {
      queryProduct {
        productID
        name
        reviews {
          id
          rating
          comment
        }
      }
    }
     

    效果

    说明

    对于graphql 的地址,实际上我们可以基于lb 的模式做负载处理,这样可以更好的利用资源,以及集群的能力
    一个参考模式

    说明

    https://github.com/dgraph-io/dgraph
    https://graphql.dgraph.io/docs/quick-start/
    https://dgraph.io/docs/design-concepts/
    https://github.com/rongfengliang/dgraph-cluster-graphql-learning

  • 相关阅读:
    基于 HTML5 WebGL 的 水泥工厂可视化系统
    基于 HTML5 WebGL 的楼宇智能化集成系统(二)
    基于 HTML5 WebGL 的楼宇智能化集成系统(一)
    20200601
    App上线-Unexpected CFBundleExecutable Key
    'CALayer position contains NaN: [nan nan]'异常
    shareSDK由4.2.8升级成4.3.7详解(微信sdk自动升级为1.8.6+)
    从0开始教你 swift
    20年开篇
    19再见,20你好
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/12924488.html
Copyright © 2020-2023  润新知