通过提问和回答,将是了解一个东西的好办法,特别是你对这个领域有一定基础的时候,所以本文将通过问答的形式来介绍PasteSpider,问答来自PasteSpider的开发历程,也有部分来自网友的提问,如果后续你有疑问,可以到QQ群296245685提问,也可以在本文进行评论,现整理如下:
PasteSpider是什么东东,为啥和K8S来比较?
其实PasteSpider和K8S,还是K3S也好,或者说其他的容器管理工具,在我看来不是一个维度的东西,能比较的地方也仅限与他们都可以帮你部署你的项目到服务器上!在我看来有以下几点比较明显的点:
运行方式不一样,PasteSpider作为一个工具,就真的是工具,在平时你看PasteSpider不爽了,你可以直接docker stop xxxx他,不让他运行,对于你的其他服务来说是不会有啥影响的(PasteSpider没有在运行的时候,将无法为其他容器收集运行状态的数据,这个数据用于报表,比如展示最近1个小时某一个容器的内存占用情况,流量使用情况等)!
上手容易度不一样,把PasteSpider专题的几篇文章读一下,30分钟就可以入手和使用上PasteSpider,因为他里面的思想和开发很贴近,操作上都是图文操作的。如果使用中遇到问题,那么你只要搜索相关的原生知识点就行了,比如部署那就是docker/podman,路由相关的信息那就搜索nginx。
资源消耗不一样,PasteSpider使用过程中的资源消耗是可以说很小,大概在100~300MB内,他支持一个PasteSpider服务多台服务器,也支持多个PasteSpider合并成一个集群使用。我的一台服务器1GB内存的,我也给上了PasteSpider!
如何理解PasteSpider里面的项目,服务,环境等信息
PasteSpider我觉得他更适合于开发人员使用,因为他的部署思想是遵照开发人员的思维来设计的,比如你开发了一个商城系统,有api,node,web,h5等组成,他们可以公用一个域名来进行访问,那么这就是一个完整的项目,项目下挂载了api,node,web,h5等服务(不一定要运行在容器里面的才叫服务),如果我们把这些服务看成横向的话,那么纵向的理解就是环境了,比如开发环境,正式环境,一个环境包含一整套的服务!可能在发布上我们会部署成https://test.abc.com/测试环境,而https://www.abc.com为正式环境!
开发中如何隔离开,各自开发各自的
我个人角色微服务的最大贡献就是把工作分割了,各干各的,在PasteSpider里面表现为服务,一个服务一个人开发,比如api由张三开发,node模块由李四开发,最后部署的时候使用nginx的upstream和location进行路由的关联,在PasteSpider里面中,你可以为张三和李四绑定他们各自的服务,那么在升级过程中他们就只能看到这个项目下的各自的服务,各自部署各自的!PasteSpider里面支持按照项目,服务,环境的维度为账号授权!
如何保证部署时候的配置文件不搞混
拿.net来说明,现在的项目有一个配置文件appsettings.json,其实其他语言也有,没有的话你也可以自己弄一个出来,无外乎就是启动的时候读取这个配置,然后使用它!还有一个地方就是启动的时候传入的参数,使用docker的小伙伴应该很熟悉docker的一个命令docker run -e XXX=YYYY。如果是文件,那么你可以在服务的同步过滤中标注这个文件不升级,就是每次更新文件都不更新appsettings.json,而如果是环境参数的话,你可以使用PasteSpider里面的key-value,把环境变量打开,比方说你可以为api的服务在启动的时候分别导入-e runkey=abc或者-e runkey=bbc,这里的abc或者bbc你应该配置到Key-value里面。文件同步过滤还可以配置文件夹,也可以基于账号配置,比如张三不更新/page/这个文件夹的内容,李四不更新/mobile/这个文件夹的内容!
在PasteSpider配置路由后没有生效
在PasteSpider的路由模块中,你可以给某一个项目的某一个环境设定他的nginx的规则,也就是nginx的路由信息的模板,系统将基于这个模板生成nginx.conf内的upstream和server模块的内容。
1.可能是宿主服务器的路径设置错误,一般的这个路由文件放于/etc/nginx/conf.d/,要按照宿主实际的情况设定
2.PasteSpider需要触发了升级或者伸缩才会触发对路由文件的更新!还有对应的环境要对,比如你给项目A设定了测试环境的路由信息,结果发布的是正式环境的,那么这个路由文件是不会更新的!
3.可能在生成路由文件的时候遇到错误,这个可以查看任务详细可以看到。
4.从开始到路由可用的顺序错误了,正确的顺序应该是项目对应的服务先启动运行(服务-环境-构建于升级),然后去为这个项目的这个环境新建一个路由信息,这个时候可以直接点击预览,看看基于模板框的内容生成的路由信息是什么样子的,保存后,点击路由列表页面中这个路由的重载,重载就是基于这个路由的项目和环境信息,读取对应的内容,然后写入到对应的.conf文件上,然后执行命令nginx -t和nginx -s reload
如果配置的这个.conf文件已经在宿主的对应文件夹上看到了,还不能访问,那就要看生成的这个路由配置信息,基于Nginx的支持去排查了!
如何应对服务器重启的问题
docker有一个重启机制,就是启动容器的时候设定restart=always,所以重启就变成docker的问题了,其实PasteSpider里面有一个运行数量监听的机制,创建服务后,一般会给这个服务的指定环境在某一台服务器上配置至少运行一个容器,在下一次PasteSpider监测服务运行情况的时候,如果容器数量小于设定的,则会基于这个服务的配置启动一个容器!这点作用在podman可以理解为podman重启后,其他容器如何重启的问题(只要配置PasteSpider开机重启,然后就等待PasteSpider检查容器运行情况了)
对于容器来说重启的另外一个问题是IP的问题,一般路由我们使用端口映射,或者内部IP,所以PasteSpider引入了自定义网关的模式,一个项目一个网关,为容器配置了网关和IP的,重启后这个IP是不变的!!!
未完待续 明天继续…