群组信息应该持久化保存在 db 中,群组相关的操作在群组服务中进行写入和读取,通过 api 对群组进行操作(比如添加成员)那么将会采用一致性 hash 通过群组 id 找到对应的群组服务器中进行业务操作,那么群组信息写入后缓存的操作逻辑有两种:
1:对应请求后从 db 读取缓存在内存中加读写锁维护,进行写入时先写内存后写 db ,读只会读内存
2:纯粹作为缓存来读取,有写入时则删除缓存,后续请求需要再从 db 读取数据
第一种的问题是:如果群组集群有服务器 a 宕机,那么一个群组(id=xxx)就会被分配到新的服务器 b 上,当 b 服务器在写入时,a 服务器恢复上线就会造成 db 层数据不一致;或者是 b 服务器服务了一段时间后,a 重新上线,该群组又会回到 a 上处理,过了段时间又宕机,这时群组 xxx 又被分配到了 b 上,可 b 上的内存数据是旧数据
如果采用第一种感觉对 db 的操作会过于频繁,有什么更好的方案吗
求解这个错误是什么原因导致的
github 上找的 blog 程序,本地运行正常,可以正常 build 输出,但是在 vercel cloudflare 这些平台上就报下面的错误,node 版本也设置了不行。
好像经常碰到 node-fetch 类的问题
error [vite]: Rollup failed to resolve import "node-fetch" from "/vercel/path0/src/lib/blog-helpers.ts".
22:49:46.923
This is most likely unintended because it can break your application at runtime.
22:49:46.923
If you do want to externalize this module explicitly add it to
22:49:46.924
`build.rollupOptions.external`
22:49:46.924
Error: [vite]: Rollup failed to resolve import "node-fetch" from "/vercel/path0/src/lib/blog-helpers.ts".
22:49:46.924
This is most likely unintended because it can break your application at runtime.
22:49:46.924
If you do want to externalize this module explicitly add it to
22:49:46.924
`build.rollupOptions.external`
22:49:46.924
at viteWarn (file:///vercel/path0/node_modules/.pnpm/vite@4.5.3/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:48216:27)
22:49:46.924
at onRollupWarning (file:///vercel/path0/node_modules/.pnpm/vite@4.5.3/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:48248:9)
```