V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonLaw
V2EX  ›  程序员

生产环境部署 web 服务多个实例的最佳实践是怎样的?

  •  
  •   JasonLaw · 2020-11-20 08:08:20 +08:00 via iPhone · 4194 次点击
    这是一个创建于 1463 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我有一个使用 Flask 的 web 服务,运行端口为 8080 。

    我想在生产环境部署多个实例,实例的数量可以很容易地增加和减少。对于服务客户来说,这些都不应该对它有任何影响。对于这个问题,我想到的是服务发现,服务实例会注册到注册中心,注册中心监控实例的状态,服务客户只需要知道注册中心即可。

    因为默认端口为 8080,应该是一台服务器一个实例?还是多个实例,然后运行在不同的端口?因为我想显式地设置实例中的请求处理线程数量为 CPU 数量*一个常量,所以我更倾向于一台服务器一个实例。

    想听听大家的意见以及最佳实践是怎样的。
    第 1 条附言  ·  2020-11-20 15:14:18 +08:00
    谢谢大家的回复,我先去学习一下 Kubernetes 。
    第 2 条附言  ·  2020-11-28 20:42:38 +08:00

    果然,学一学Kubernetes,你的努力不会浪费😄

    Kubernetes Tutorial for Beginners [Full Course in 4 Hours] - YouTube

    17 条回复    2020-11-20 15:26:55 +08:00
    fub2020
        1
    fub2020  
       2020-11-20 08:13:49 +08:00 via iPhone
    首先你需要看看 flask 关于部署的文档
    https://dormousehole.readthedocs.io/en/latest/deploying/wsgi-standalone.html#uwsgi
    1.以 uWSGI 为例,你可以随意修改 app 端口
    第二你需要看看 nginx 的文档
    2.nginx 可以轻松实现应用的代理,负载均衡
    ackfin01
        2
    ackfin01  
       2020-11-20 08:17:57 +08:00
    一个实例一台服务器么。。多个实例放在一个服务器没有意义啊
    d0m2o08
        3
    d0m2o08  
       2020-11-20 08:30:21 +08:00
    nginx 负载均衡?
    liberty1900
        4
    liberty1900  
       2020-11-20 08:49:46 +08:00 via Android
    负载均衡是把 load 分摊到多个服务器,以解决单台服务器计算资源和网络带宽不足的问题
    把一个实例克隆多份放到一台服务器,硬件资源还是那些,和一个实例多线程没有根本的区别吧
    yzbythesea
        5
    yzbythesea  
       2020-11-20 08:54:52 +08:00
    envoy + client load balancing
    opengps
        6
    opengps  
       2020-11-20 08:55:48 +08:00 via Android
    一台服务器一个实例,这是云架构弹性伸缩的思路,大型网站几乎必备,可以配合弹性伸缩服务自动增减服务器组的数量。这个用法欢迎跟我沟通下,我做上云支持业务,沟通下互相提升!
    一台服务器上多个实例,这是微服务的用法,很多初期用户不多的网站的常见做法
    kiddingU
        7
    kiddingU  
       2020-11-20 09:26:43 +08:00
    k8s
    XSugar
        8
    XSugar  
       2020-11-20 09:27:46 +08:00 via iPhone
    考虑下 k8s 、可以忽略机器层
    THESDZ
        9
    THESDZ  
       2020-11-20 09:36:44 +08:00
    k8s 太重了,要是没那么多需求,dockerswarm+portainer 就行
    676529483
        10
    676529483  
       2020-11-20 09:47:41 +08:00
    多个机器可以 k8s,一台机器可以 k3s,都不想搞允许重新发布可以 uwsgi/gunicorn 多 worker
    pepesii
        11
    pepesii  
       2020-11-20 09:56:16 +08:00
    如果不用 k8s,就 nginx upstream 加上负载均衡策略和健康检测就好了
    如果上 k8s,那就直接 ingress + deployment 搞定了
    monkeyWie
        12
    monkeyWie  
       2020-11-20 10:06:10 +08:00
    k8s +1
    salmon5
        13
    salmon5  
       2020-11-20 13:50:43 +08:00
    k8s+istio
    tikazyq
        14
    tikazyq  
       2020-11-20 13:57:45 +08:00
    nginx 一把梭
    cheng6563
        15
    cheng6563  
       2020-11-20 14:08:19 +08:00
    嫌 k8s 太重的可以用 k3s,dockerswarm 功能太残了。
    机器少不用容器的话就可以 nginx 一把梭
    wangritian
        16
    wangritian  
       2020-11-20 14:29:18 +08:00
    学一学 k8s,你的努力不会浪费
    jaylee4869
        17
    jaylee4869  
       2020-11-20 15:26:55 +08:00
    用 Docker 去运行你的单个实例,用 Kubernetes 去编排 Docker 。
    掌握核心的 Service 、Deployment ( Pod )、Ingress 等概念就能做基本的编排了,后续学 HPA 的时候可以根据 CPU 的毫核指标等动态的扩缩你的实例。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5341 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:33 · PVG 16:33 · LAX 00:33 · JFK 03:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.