很小的公司一般采用什么样的服务器架构呢?

2023-07-14 10:58:44 +08:00
 qinconquer

背景

公司服务器上有个官网,一个软件的后台服务,数据库都在这一台服务器上。

问题

有什么好的方式去解决更新 api 的时候不会中断呢服务呢。

3589 次点击
所在节点    服务器
25 条回复
akira
2023-07-14 11:00:33 +08:00
更新时间在 1 分钟之内,直接重启就是了。 大不了半夜重启咯。
BeforeTooLate
2023-07-14 11:04:09 +08:00
单机不重要的都是选个没人的时间段更新一下
vacuitym
2023-07-14 11:06:12 +08:00
用部署两个实例,平时开一个,更新的时候 ng 打到更新好的端口,然后把旧的停掉
mineralsalt
2023-07-14 11:08:50 +08:00
运行两个实例不同端口, nginx 负载均衡, 随便停一个都不影响 api 请求, 轮流更新即可, 我就是这么做的
zzzzzzZ
2023-07-14 11:10:26 +08:00
你期望的无感平滑更新
小公司「滚动发布」是最常见的,或者「灰度发布」
LeegoYih
2023-07-14 11:13:07 +08:00
1.假设已有实例 A:8080 正在运行
2.运行实例 B:8081
3.Nginx 改配置端口 8080->8081 ,nginx -s reload
4.销毁实例 A:8080
0x663
2023-07-14 11:13:54 +08:00
灰度发布
buffzty
2023-07-14 11:14:46 +08:00
docker-compose 最优解
everyx
2023-07-14 11:39:06 +08:00
我们用的 docker swarm 简单、轻量 😁
brader
2023-07-14 11:46:55 +08:00
不好意思,我们 PHP 没有这个烦恼,都是直接 git pull ,嘿嘿
zx900930
2023-07-14 13:20:39 +08:00
双实例,负载均衡,可以用 nginx 或者 traefik ,haproxy 之类。
更新的时候 rolling update 就可以了,数据库也可以做成主从复制类型的,这样数据库 migration 的时候也不会中断服务。
tool2d
2023-07-14 13:28:52 +08:00
一般都是热更新,但你也说了,“很小的公司”,说明访问量很低,那服务重启一分钟,也完全没问题的。

我个人觉得 API 在初期变动很大的情况下,没必要追求热更新的无缝切换。
qinconquer
2023-07-14 13:43:12 +08:00
@tool2d 明白了 感谢
qinconquer
2023-07-14 13:44:33 +08:00
@everyx 貌似这个也要最少两台服务器
seth19960929
2023-07-14 14:23:35 +08:00
说一下你的系统架构, 像 PHP 这种不会存在更新中断, 想 Go 这种有直接在代码中判断信号来升级的.
实现不想在代码下手的就用楼下说的 Nginx 两个端口号轮流用更新
Vraw5
2023-07-14 15:55:49 +08:00
old 用端口 8888 起服务,new 用 9999 起服务,改 nginx ,reload 一下改过去就是了
hytex
2023-07-14 15:55:56 +08:00
关键字 nginx 、upstream 、backup ,完美实现你说的这种发布。只需要启动到一个端口,然后 kill 掉另一个端口的进程就好了
hytex
2023-07-14 15:57:12 +08:00
@hytex 和 6l 差不多的想法,但不需要 reload
Erroad
2023-07-14 16:00:37 +08:00
找段没流量的时间直接重启
rbe
2023-07-14 16:32:58 +08:00
负载均衡有流量控制的作用,参考 6 楼说的,部署完新服务做完健康检查后,用 nginx 切一下流量就行。

这里提供更多一点参考:
可以用 confd 来做自动切换 nginx 配置重启,把 nginx 的配置做成模板让 confd 管理,将新、旧容器的端口记在 etcd 或者简单点记在文件里。
用脚本在发布服务后更新 etcd 的 key => 触发 confd 更新 nginx 模板并自动执行 nginx -t / nginx -s reload

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/956689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX