Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SPA 发布辅助工具 #80

Closed
timzaak opened this issue Mar 2, 2022 · 9 comments
Closed

SPA 发布辅助工具 #80

timzaak opened this issue Mar 2, 2022 · 9 comments
Labels

Comments

@timzaak
Copy link
Owner

timzaak commented Mar 2, 2022

SPA 在当前体系下,常规的发布方法,是打包成 nginx docker 镜像再进行部署。这样就导致 nginx 的多重浪费,实际上一个 Nginx 足以支撑10+ SPA。如果再挂CDN,上千个都可以。
所以缺乏一个工具,他要达到:

  1. 静态文件 http(s) 代理,并可热加载,支持多SPA,简易设定。
  2. cli:打包好的静态文件上传(权限校验)。
  3. SPA资源更新通知,客户端、CDN 端。

第一条,很容易实现,web框架+ File Change Notify即可。 热加载可以通过重定向目录来解决。 添加版本一说
第二条,基本上用 Go/Python 之类的写就可以,用上 rsync。
第三条,CDN端可以用API接口来兼容,至于客户端,没有一个轻量级方案,而且需要根据具体场景做二次开发,例如:大工具类型的,就需要给客户端弹窗;资讯浏览类的,还没这个需求。

@timzaak
Copy link
Owner Author

timzaak commented Mar 11, 2022

Envoy 不支持 static web serve,要么基于 Nginx 做,要么用个类似替代的。

大致产品实现思路应该是:

基于 Rust 的 web 框架 来实现静态资源 http server, 并基于开源的 rust metrics 来实现统计,制作成 docker 镜像。

在 k8s 里不走 ingress,而是单独 EIP 暴露到公网(支持 LTS)。否则需要走 ingress controller,涉及 k8s ingress 配置管理。

SPA(静态文件)会以 ${域名}/${version} 的目录形式存储在服务器端硬盘或S3,将文件读到内存中以提升读取效率(做LRU)相关配置要写入到文件中,方便重启管理。

版本控制,要想一个合适的方法提供版本变化通知。

提供 grpc web api,暴露版本控制API 和 metrics。metrics 包括统计 当前5分钟/10分钟/24小时各域名-版本的访问量等。

客户端提供封装 rsync 的客户端,用来做用户传输静态文件到服务器端或S3,并做权限验证,提供一般 API 展示 SPA 服务状态。

第一个版本

最精简的服务控制台需要提供的 HTTP API 接口:

  1. 当前在服务的域名 + 版本 + 当前存在的所有版本及目录创建时间
  2. 获得域名的上传目录(携带版本号),方便用户组合 rsync/scp/ftp 等工具上传文件
  3. 更迭域名的服务版本

@timzaak timzaak changed the title SPA 发布辅助工具设计[WIP] SPA 发布辅助工具[WIP] Mar 11, 2022
@timzaak timzaak changed the title SPA 发布辅助工具[WIP] SPA 发布辅助工具 Mar 14, 2022
@timzaak
Copy link
Owner Author

timzaak commented Mar 14, 2022

@timzaak timzaak closed this as completed Mar 14, 2022
@timzaak timzaak reopened this Mar 14, 2022
@timzaak
Copy link
Owner Author

timzaak commented Mar 15, 2022

除了多证书(像是个伪需求)、S3的支持(S3可以直接挂载到容器内),剩下所有都是和性能相关的。

http2, tcp多路复用, 提升加载效率 https 自带 h2
spdy,缩减传输数据
compression, 缩减传输数据 更应该是 web build tool 解决的问题
memory fs,提升数据读取效率
header cache/expire config(etag),缩减传输数据
port reuse, 干掉socket dispatcher , 这个是 web 框架的问题

除了 memory fs (目前没有合适的实现),剩下的都是API缝合怪的工作。慢慢来吧。

后续最重要考虑的话,就是这个项目真正的干什么,第一个:自己提供 static web 托管服务,需要解决监管问题。但这在国内没需求。
第二个:目前暂时想不到。

@timzaak
Copy link
Owner Author

timzaak commented Mar 22, 2022

v1.2.2 版本发布了,这个项目算是有个终结。
实现的虽然比较粗暴,但作为我的用 Rust 实现的第一个完整项目,还不错。
后续,这个项目就进入到维护阶段,如果有时间,就写一点宣传文案,传播一下,不过类似项目太多,应该没啥人用。

后面应该开始面向用户思考,看如何解决一整套部署流程问题。
用户开发完毕后,编译、测试,然后便是部署,这个项目要解决部署及以后的事情。后面的内容有点多,要搞个思维导图先。

@timzaak timzaak closed this as completed Mar 22, 2022
@timzaak
Copy link
Owner Author

timzaak commented Apr 3, 2022

v1.2.4 spa-server, v0.1.1 spa-client 发布,文档(GitHub Pages)发布。
目前还剩下 Gitee Page 和 文档搜索功能,但已算是一个完完整整的开源项目。
从3月2日开这个 Issue,到4月3日我心目中的版本发布,一个月的时间飞快,其中编码的时间不到一半,都是在整理文档、CICD、梳理产品思路、做产品Roadmap、推广,真心收获颇多。

这个算是我真正意义上的第一个开源项目,虽然现在就3个 star、0个 issue😭,对自己而言也有了一个交代。

后续,会在花大量时间磨砺自己的想法后,再出发。现在还是要focus 在工作+写小说上。

期望下个开源项目能满 100 star!

@timzaak
Copy link
Owner Author

timzaak commented Apr 7, 2022

v1.2.5 发布,功能都已完善。
后续这个项目会进入个人使用/维护阶段,应该要持续到8月份。若没什么问题,会准备再做一下二次推广,期望到时候有时间处理这个项目。

@timzaak
Copy link
Owner Author

timzaak commented Apr 8, 2022

HTTP 缓存header 的讲解 https://my.oschina.net/vivotech/blog/5448571
对照来看,就是没有强加cache-control:public和 progma 的兼容。

@timzaak timzaak added the 产品 label Apr 14, 2022
@timzaak
Copy link
Owner Author

timzaak commented Jun 5, 2024

还是有一堆BUG,在没有写自动化测试之前,完全不可信。

@timzaak
Copy link
Owner Author

timzaak commented Jul 9, 2024

最终打造的产品形态: GitHub Pages 单机 + 私有化部署。所以 API 应该参考 Github Pages API,可无痛迁移。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant