很小的公司一般采用什么样的服务器架构呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qinconquer
V2EX    服务器

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

  •  
  •   qinconquer 2023-07-14 10:58:44 +08:00 3963 次点击
    这是一个创建于 822 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <2>背景

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

    问题

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

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

    我个人觉得 API 在初期变动很大的情况下,没必要追求热更新的无缝切换。
    qinconquer
        13
    qinconquer  
    OP
       2023-07-14 13:43:12 +08:00
    @tool2d 明白了 感谢
    qinconquer
        14
    qinconquer  
    OP
       2023-07-14 13:44:33 +08:00
    @everyx 貌似这个也要最少两台服务器
    SethShi
        15
    SethShi  
       2023-07-14 14:23:35 +08:00
    说一下你的系统架构, 像 PHP 这种不会存在更新中断, 想 Go 这种有直接在代码中判断信号来升级的.
    实现不想在代码下手的就用楼下说的 Nginx 两个端口号轮流用更新
    Vraw5
        16
    Vraw5  
       2023-07-14 15:55:49 +08:00
    old 用端口 8888 起服务,new 用 9999 起服务,改 nginx ,reload 一下改过去就是了
    hytex
        17
    hytex  
       2023-07-14 15:55:56 +08:00
    关键字 nginx 、upstream 、backup ,完美实现你说的这种发布。只需要启动到一个端口,然后 kill 掉另一个端口的进程就好了
    hytex
        18
    hytex  
       2023-07-14 15:57:12 +08:00
    @hytex 和 6l 差不多的想法,但不需要 reload
    Erroad
        19
    Erroad  
       2023-07-14 16:00:37 +08:00
    找段没流量的时间直接重启
    rbe
        20
    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
    displayabc
        21
    displayabc  
       2023-07-14 18:31:05 +08:00
    docker swarm 只需要一台机器就可以
    everyx
        22
    everyx  
       2023-07-15 09:22:32 +08:00
    @qinconquer #14 单机也可以的,还方便以后扩展到多台服务器,比 K8S 适合小企业,K8S 需要的资源又高、概念又多又复杂
    qinconquer
        23
    qinconquer  
    OP
       2023-07-16 19:38:22 +08:00
    @everyx 有这方面的资料吗,我想学习下你说的单机模式去跑这个
    everyx
        24
    everyx  
       2023-07-17 19:27:37 +08:00
    @qinconquer #23 很简单,直接 docker swarm init 就行了,可以直接看官方文档 https://docs.docker.com/engine/swarm/swarm-tutorial/
    zu1y
        25
    zu1y  
       2023-07-23 01:30:31 +08:00
    感觉上面说的都过于麻烦了。直接在一台服务器上部两个实例,然后 Nginx 上通过 nginx_upstream_check_module 模块配一个主动的健康检测就好了,后端使用滚动发布,发布过程中 Nginx 会通过心跳检测自动把不可用的那个实例摘除掉的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5503 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:30 PVG 16:30 LAX 01:30 JFK 04:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86