Skip to content

Instantly share code, notes, and snippets.

@wey-gu
Last active June 22, 2021 14:24
Show Gist options
  • Save wey-gu/5012c144ee990127707c528317be8e5e to your computer and use it in GitHub Desktop.
Save wey-gu/5012c144ee990127707c528317be8e5e to your computer and use it in GitHub Desktop.
2050-website-graph-design

2050 website design, graph part

By 古思为

设计需求 via 庄表伟

简单介绍一下我的思路。在2050,最重要的就是人与人之间产生的各种关系,我是被谁“interface”来的,我又“interface”了哪些人。我发起了一个,有哪些因此被吸引而来(有些人是来帮忙,有些人只是来参加活动),我在2050的聚会中,与谁聊得特别开心,后来就follow了TA,进一步关注TA的一举一动,等等。

在一个人的个人页面上,我们会在右侧,先简单展示他的“上下游”关系,点击更多,可以把各种关系都展示出来,越是与他有N种关系的人,就会离他越近

Graph Modeling

Vertex:

  • user
    • user.name
    • user.id
  • event
    • event.name
    • event.start_date
    • event.end_date
    • event.city
    • event.address
  • group
    • group.name
    • group.created_at

Edge:

  • joined:
    • user --> event
    • joined.role(string)
  • liked:
    • user --> user
    • liked.at(timestamp)
    • liked.via(VID_of_event)
  • first_joined_via:
    • user --> event
  • is_member_of:
    • user --> group
    • is_member_of.role(string)
    • is_member_of.date
  • is_sub_event_of:
    • event --> event

设计架构

网站主体

  • Web Site Backend Application
    • 网站后端程序
  • RDBMS
    • 网站后端关系型数据库
  • API GW/LB
  • Web Site Frontend Application
    • 前端程序

图相关组件

采用对现存后端代码非侵入(无需为后端数据库写入增加更新图的hook),异步周期图关系同步的设计,引入周期执行(提供按需执行接口) ETL Job 机制抓取会员信息。 看最终落地实现,可以在公有云上利用 FaaS ,Scheduler-aaS,Pub/Sub 服务,实现除了 Graph DB 之外的新组件全都 Serverless,不过如果是非云原生的情况,也可以按需利用 cron job,和 web server 实例去做。

  • Graph Data Extractor
    • 图数据生成 Batch Job,FaaS 实例
    • 用来从网站数据库抓取数据导入图数据库
    • 从 Pub/Sub Topic msg 触发
  • Graph DB
    • 存图结构数据,方便前端程序 Query
    • 通过 Graph DB HTTP GW 提供 HTTP Access
    • 通过 API GW/LB 保护 HTTP GW
  • Web Site Frontend Application
    • 前端程序,图展示、图扩展
      • 使用 echart.js 之类的有图展示的库
      • 默认展示一两度关系
      • 双击触发扩展请求,获取返回数据刷新渲染图

示意图

                                                                  Web Site Front End Application

                                                                ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
                                                                │                                                                                                                                        │
                                                                │   https://2050-new-awesome-website.org/people/10032/                                                                                   │
                                                                │                                                                                                                                        │
                                                                ├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
                                                                │                                                                                                                                        │
                                                                │     .------\ /------.    │                                                                                                             │
                                                                │     |       -       |    │                                                                       ########*                             │
                                                                │     |               |    │                                                                     #############                           │
                                                                │     |               |    │                                                                    ##############/                          │
                                                                │     |               |    │                                                                    ##############*                          │
                                                                │  _______________________ │                    ,,,,,,,,,,.                                      ############*                           │
                                                                │  ===========.=========== │                 .,,,,,,,,,,,,,,,                                 *.    ######(                              │
┌─────────────────────────┐                        ┌───────┐    │    / ~~~~~     ~~~~~ \   │                ,,,,,,,,,,,,,,,,,,,                           .*             *,                              │
│                         │                        │       │    │   /|     |     |\        │               ,,,,,,,,,,,,,,,,,,,,                        .*                 ,.                             │
│  Web Site               │                        │ API   │    │   W   ---  / \  ---   W  │               .,,,,,,,,,,,,,,,,,,,                     .*                     *.                            │
│  Backend Application    │                        │ GW    │    │   \.      |o o|      ./  │                ,,,,,,,,,,,,,,,,,,.                  ,*                         *                            │
│                         ◄────────────────────────┼───────┼────┤    |                 |   │                  ,,,,,,,,,,,,,,, .*.             ,*                             *                           │
└────────────▲────────────┘                        │       │    │    \    #########    /   │                   *,,,,,,,,,,        ,*.      ,*                                 *                          │
             │                                     │       │    │     \  ## ----- ##  /    │                  **                      ,*,*                                     *                         │
             │                                     │       │    │      \##         ##/     │                 ,*                      ,*   **                                    *                        │
┌────────────▼────────────┐                        │       │    │       \_____v_____/      │                ,*                    **          **                                 *                       │
│                         │                        │       │    │                          │               ,*                  **                 **                              *                      │
│  RDBMS                  │                        │       │    │                          │              .*                **                        **                           *                     │
│                         │                        │       │    │                          │              *              **                               **                        *                    │
│  Source of Truth        │                        │       │    │    Foo Bar               │         .******,         **                                      **                     *                   │
│  For Website Backend    │                        │       │    │    Joined on 2020, June  │     ,***************  *,                                             *,                  *                  │
│                         │                        │       │    │    Member of xxx         │   ********************                                                  .*,               *                 │
└────────────▲────────────┘                        │       │    │                          │  ******          ******                                                     .*.            *                │
             │                                     │       │    │                          │ .****** Foo Bar  *******                                                        ,*.         *               │
             │                                     │       │    │                          │  ******          ******,                                                            ,*      ,,,,,,,,        │
             │                                     │       │    │                          │  ,*********************                                                                 ,,,,,,,,,,,,,,,     │
┌────────────▼────────────┐                        │       │    │                          │   .*******************,                                                                 ,,,,,,,,,,,,,,,,.   │
│                         │    ┌───────────────┐   │       │    │                          │      **************.    ,*,                                                             ,,,,,,,,,,,,,,,,,***│
│  Graph Data Extractor   ◄────┤ Job Scheduler │   │       │    │                          │           .,,.              **,                                                        .,,,,,,,,,,,,,,,,.   │
│                         │    └───────────────┘   │       │    │                          │                                 **.                                                **,   ,,,,,,,,,,,,,,     │
│  Batch Job to ETL Graph │                        │       │    │                          │                           Joined as Orgnizer                                   **.          ,,,,,,,,.       │
│  Data from DBMS         │    ┌───────────────┐   │       │    │                          │                                         **                                 **                               │
│                         ◄────┤ Trigger API   │   │       │    │                          │                                             **     ,,,,,,,,,,,,,      ,**                                   │
│                         │    └───────────────┘   │       │    │                          │                                                 *,,,,,,,,,,,,,,,,,,**                                       │
└────────────┬────────────┘                        │       │    │                          │                                                 ,,,               ,                                         │
             │                                     │       │    │                          │                                                .,,,Awesome Meetup ,,                                        │
             │                                     │       │    │                          │                                                 ,,,2022 in Beijing,**,                                      │
┌────────────▼────────────┐    ┌───────────────┐   │       │    │                          │                                                  ,,,,,,,,,,,,,,,,,.       ****,                             │
│                         │    │               │   │       │    │                          │                                                ,*  ,,,,,,,,,,,,,.                  ****,                    │
│  Graph DB               │    │  Graph DB     │   │       │    │                          │                                              **        .,,,.                               .****.           │
│                         ◄────┤  HTTP GW      ◄───┼───────┼────┤                          │                                   ,,,,,   ,*                                                        .****.  │
│  Nebula Graph           │    │               │   │       │    │                          │                                ,,,,,,,,,,,                                                                  │
│                         │    │               │   │       │    │                          │                               ,,,,,,,,,,,,,                                                                 │
└─────────────────────────┘    └───────────────┘   └───────┘    │                          │                               ,,,,,,,,,,,,,                                                                 │
                                                                │                          │                                ,,,,,,,,,,,                                                                  │
                                                                │                          │                                   .,,,.                                                                     │
                                                                │                          │                                                                                                             │
                                                                │                          │                                                                                                             │
                                                                │                                                                                                                                        │
                                                                └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment