By 古思为
设计需求 via 庄表伟
简单介绍一下我的思路。在2050,最重要的就是人与人之间产生的各种关系,我是被谁“interface”来的,我又“interface”了哪些人。我发起了一个,有哪些因此被吸引而来(有些人是来帮忙,有些人只是来参加活动),我在2050的聚会中,与谁聊得特别开心,后来就follow了TA,进一步关注TA的一举一动,等等。
在一个人的个人页面上,我们会在右侧,先简单展示他的“上下游”关系,点击更多,可以把各种关系都展示出来,越是与他有N种关系的人,就会离他越近
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 │ │ │ │ │ │ │ ,,,,,,,,,,, │
│ │ │ │ │ │ │ │ ,,,,,,,,,,,,, │
└─────────────────────────┘ └───────────────┘ └───────┘ │ │ ,,,,,,,,,,,,, │
│ │ ,,,,,,,,,,, │
│ │ .,,,. │
│ │ │
│ │ │
│ │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘