duuliy

微服务跨站数据共享

2023-8-19

拆服务

当小明喊着先有后优的口号快速完成了0到1之后,发现从1到N的过程产品越来越大,问题越来越多,虽然拆服务会有很大的成本和风险,
但是为了低耦合,高内聚,高可维护,高可复用,独立部署....并且各项条件达到后,
开始了拆服务,有独立的各种组件仓库,方法仓库,业务仓库,第三方仓库,静态资源仓库,站点仓库....

feign (https://github.com/OpenFeign/feign)

可是同事小张在站点A开发时候,发现页面a的模块1,模块2,模块3分别来自不同的仓库,模块2影响子站,模块3还影响非同源的站点B,
页面a还需要在pc和移动端都有呈现需求。于是想js有没有办法像java非常成熟的RPC一样在不同服务之间通讯?

整理知识库

于是小张开始了回忆知识片段:
1.让后端帮助我们存?
2.node中间层,redis?
3.indexDB,localForage,同源 兼容性不友好?
4.跨不同站点用cookie(domian),但是不同浏览器对同一域名大小(Firefox/safari 4097字节,IE 4095,Chrome 4097每个)
和数量(ie 50个,Firefox 50,Chrome 53,Safari 无具体)有不同的限制,并且会占用带宽?监听变化chrome.cookies API?
5.sessionstorage 存活期在会话窗口 大小5-10M 同源共享,同源页面/iframe 可以共享,支持window.open()共享,
a标签的_blank方式打开(Chrome支持,firefox不支持)共享,复制打开对应URL 不能共享。
6.localStorage 需要手动清除 大小5M 同源共享,
监听变化(https://github.com/duuliy/jsoo/blob/master/%E7%9B%91%E5%90%AClocalStorage.html),
无限存储(https://github.com/duuliy/jsoo/blob/master/%E6%97%A0%E9%99%90%E5%82%A8%E5%AD%98.html)
7.跨站点数据同步 postMessage
(https://github.com/duuliy/jsoo/blob/master/postMessage.html,
https://github.com/duuliy/jsoo/blob/master/postMessage2.html)

结果

结合现有业务条件及需求,前端用户行为监控等:
localStorage + localForage + postMessage + cookie 开发一个综合的storge包来管理此类数据,并根据条件进行降级使用。
1.当用户使用环境具有较好的兼容性 localStorage + localForage + postMessage,来满足用户的高级功能需求。
2.当处于移动端或一般使用环境 localStorage + postMessage,限制需要部分大容量的功能。
3.当处于权限限制(safari,默认防止跨站跟踪)或较差使用环境 localStorage + cookie,限制需要大容量和部分中级容量的功能。

第三方推荐:https://github.com/zendesk/cross-storage

进一步优化

1.不同浏览器之间,node中间层,redis?
2.随着时间推移,技术更迭继续优化结果2,3