
前面的文章我们讨论了产品设计的部分,这里说下架构设计。但在此之前,我想讨论用户是如何使用产品的。
产品应该要一分钟内部署完成。后续运维的成本应极低。
在产品部署完成后,我们会默认注册管理员。
用户可以通过管理员用户进入后台,并配置 SDK
在后台,用户可复制 SDK 代码并粘贴到前端项目中,在前端项目发布后,SDK 会自主采集错误、性能等日志。用户可以在后台查看数据。
SDK 初始化后,会自行监听事件并上报数据。
每次打开或刷新页面都会产生一条 session ,错误、性能等数据上报会附上当前的 sessionId 。session 会存储页面会话的上下文信息,如设备信息和 ip 等。你也可以向 session 追加你关心的元数据。
你也可以借助 SDK 上报自定义的数据。比如用户的关键路径和关键交互数据。
用户分为管理员和普通用户。管理员可以在后台新增、删除用户。
目标:易部署、简洁的架构
数据库:采用 sqlite ,一个文件存储所有数据,完美符合我们的架构目标。
user 存储 dashboard 的用户的信息,分为两种角色:管理员和普通用户
session ,存储页面会话的上下文信息,如设备信息和 ip 等。以下表都会存储 sessionId
js_error ,js 错误
http_metric ,接口错误的数据
performance_metric ,web-vitals 的性能指标
event ,存储用户的自定义事件
当然,所有表会附上 create_at update_at 等信息。
附上数据库设计:
BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS "user" ( "id" INTEGER, "name" TEXT NOT NULL UNIQUE, "password" TEXT NOT NULL, "role" INTEGER NOT NULL, PRIMARY KEY("id" AUTOINCREMENT) ); CREATE TABLE IF NOT EXISTS "session" ( "id" INTEGER, "uuid" TEXT NOT NULL UNIQUE, "ua" TEXT NOT NULL, "language" TEXT NOT NULL, "ip" TEXT NOT NULL, "app_version" TEXT, "meta" TEXT, PRIMARY KEY("id" AUTOINCREMENT) ); CREATE TABLE IF NOT EXISTS "js_error" ( "id" INTEGER, "session_id" INTEGER NOT NULL, "error" TEXT NOT NULL, PRIMARY KEY("id" AUTOINCREMENT), FOREIGN KEY("session_id") REFERENCES "session"("id") ); CREATE TABLE IF NOT EXISTS "http_metric" ( "id" INTEGER, "session_id" INTEGER NOT NULL, "url" TEXT NOT NULL, "method" TEXT NOT NULL, "data" TEXT, "headers" TEXT NOT NULL, "status" INTEGER NOT NULL, "response" TEXT, PRIMARY KEY("id" AUTOINCREMENT), FOREIGN KEY("session_id") REFERENCES "session"("id") ); CREATE TABLE IF NOT EXISTS "event" ( "id" INTEGER, "session_id" INTEGER NOT NULL, "name" TEXT NOT NULL, "value" TEXT NOT NULL, PRIMARY KEY("id" AUTOINCREMENT), FOREIGN KEY("session_id") REFERENCES "session"("id") ); CREATE TABLE IF NOT EXISTS "performance_metric" ( "id" INTEGER, "session_id" INTEGER NOT NULL, "name" TEXT NOT NULL, "value" REAL NOT NULL, PRIMARY KEY("id" AUTOINCREMENT), FOREIGN KEY("session_id") REFERENCES "session"("id") ); COMMIT; golang + typescript + react ,因为
提供 CLI ,一键启动,暂时不提供 docker 。
1 mrxiehuang 2023-03-28 11:41:41 +08:00 康康代码? |
2 luvsic OP |