V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
longmeier90
V2EX  ›  Python

有没有公司用 Python 或者 django 搭建集群、微服务成功的案例?

  •  
  •   longmeier90 · 2021-10-11 09:52:54 +08:00 · 4350 次点击
    这是一个创建于 1171 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果有的话请大佬帮忙讲讲怎么实现的:集群或者微服务都用到了什么,用什么做网关、服务之间怎么调用的。

    随着公司业务发展,发现一台服务器上部署的项目满足不了需求,想把项目部署到多台服务器上,也想把其中一些业务独立出来解耦,数据库也想搞一个读写分离,现在毫无头绪;

    21 条回复    2021-10-12 14:05:10 +08:00
    homelab
        1
    homelab  
       2021-10-11 10:02:47 +08:00
    网关可以用 kong,可以用与认证、限流
    服务之间用 rpc 调用,但你用 django 是 http 同步框架,只能走 http 相互调用吧
    ruanimal
        2
    ruanimal  
       2021-10-11 10:18:42 +08:00
    目前就一台机器就想上集群,小心步子迈太大
    676529483
        3
    676529483  
       2021-10-11 10:18:57 +08:00
    我现在用 k8s,相对简单,网关你看需要加,服务注册和负载均衡直接用 svc 和 ingress,用 django 的话就 http 呗。至于读写分离,做好主从同步,django 里配置多个数据库或者数据库路由就行
    Ehco1996
        4
    Ehco1996  
       2021-10-11 10:21:10 +08:00
    其实业界已经有很标准的做法了,抄作业的最快办法就是

    1 上云买云版本 k8s
    2 容器化你们当前的服务
    3 slb 直接打到 k8s 的 ingress controller

    至于业务 /db 拆分 这就是写代码的事情了, 可以慢慢考虑

    ----
    但是,如果现在毫无头绪的话建议不要上来就集群微服务

    单机性能有瓶颈了先上 nginx 后面拉几台机器负载均衡一下

    等心里面有数了(有人力)之后再考虑上微服务集群那一套
    arischow
        5
    arischow  
       2021-10-11 10:25:50 +08:00 via iPhone
    现在就一台服务器的单体要开始计划读写分离?需要补充更多语境
    podel
        6
    podel  
       2021-10-11 10:41:31 +08:00
    我司就是。
    要不要过来投个简历。偷师学艺一下吖~~~[手动滑稽]
    主要 python 里面的计算逻辑尽量的少。
    某些搜索分流到 ES 之类的。 频繁信息直接内存缓存或者 Redis 。最后数据库存储原始数据。
    web 只做 web 的事情,不要做其他事情。
    这样子 可以轻松的水平扩容。 (加 WEB POD 数量,加 ES 集群数量,升数据库配置。)
    另外阿里云 SLB+ K8S + istio 的 service mesh(不需要可以不用) 轻轻松松水平扩展吖。
    longmeier90
        7
    longmeier90  
    OP
       2021-10-11 10:53:24 +08:00
    @podel 大佬什么公司呀
    longmeier90
        8
    longmeier90  
    OP
       2021-10-11 10:57:11 +08:00
    @arischow 是因为财务统计、运营统计数据量大的情况下 cpu 经常报警;想着是读和写分开这样的话可以分担压力
    chengxiao
        9
    chengxiao  
       2021-10-11 11:21:18 +08:00
    v2 不就是么
    hushao
        10
    hushao  
       2021-10-11 11:31:57 +08:00
    想半天,默默打出一个负载均衡???
    gengchun
        11
    gengchun  
       2021-10-11 12:00:18 +08:00
    有 40 个核数以上吗?

    看上去是传统的业务,都是物理机的可能性较大,估计后面只有 mysql/mariadb,再加上 redis 就差不多了。这样 100 个核两三台用不到什么集群。nginx + uwsgi 光是 Python 的话,什么都对付过去了。

    做点内核参数调整就对付过去了。实在想的话,也就用一下 docker,用 ns 特性做点隔离就差不多了。

    数据库读写分离都不需要。搞个主从备份下就好了。早年阿里的中间件现在都不维护了。maxscale 这种东西。复杂业务也要踩坑。

    如果不是真心希望向运维方向发展的话,专注了解业务,不要在这上面浪费时间。
    ch2
        12
    ch2  
       2021-10-11 12:12:46 +08:00
    先搞清楚无状态计算跟有状态计算再说吧
    roundgis
        13
    roundgis  
       2021-10-11 12:12:57 +08:00 via Android
    @longmeier90 如果瓶頸在 db 和 django 關係不大
    dayeye2006199
        14
    dayeye2006199  
       2021-10-11 12:17:21 +08:00
    我们在 aws 上的简单配置:
    1. 多 EC2 实例部署 django 应用
    2. 接个 ASG 保证 HA
    3. 最前面再接个 API gateway

    LZ 的问题听者像是数据库瓶颈的问题。如果经常需要做大量数据统计和报表的功能,一个是考虑优化一下 query 的性能;一个是可以考虑设置定时任务预计算一些常用的报表;另一个是考虑上 OLAP 的数据库,例如我们的 OLTP 用的 postgre,OLAP 用的是相关的 greenplum
    christopheredwar
        15
    christopheredwar  
       2021-10-11 12:24:43 +08:00
    同学习中
    longmeier90
        16
    longmeier90  
    OP
       2021-10-11 14:17:18 +08:00
    @dayeye2006199 大佬能不能详细说一下 ASG 是个什么东西,从来没听说过,API 网关用的是什么?负载用的什么策略,配置中心用了没有?
    podel
        17
    podel  
       2021-10-11 17:24:07 +08:00
    @longmeier90 一家小公司。只不过技术栈比较新啦。
    公司信息[保护隐私,就不直接贴出来了] https://tttemp.oss-cn-shanghai.aliyuncs.com/current-company.txt
    longmeier90
        18
    longmeier90  
    OP
       2021-10-11 17:50:30 +08:00
    @podel 你要不要跳槽到俺们公司,眼科医疗行业,前景好、待遇高,加班少
    younglinuxer786
        20
    younglinuxer786  
       2021-10-12 10:26:26 +08:00
    1.看了下帖子,如果数据库和应用都在一台服务器上,先把数据独立放在一台服务器上(磁盘,cpu,men 这些搞好点)应该会好很多
    2.如果只是想搞个集群问题不大,微服务要拆分业务太费时间 能保证每个应用下没有单独保存的数据,同时共用数据库 即可实现集群。多个应用之间可以使用 nginx 作为入口 负载到下面的多个应用... (当然这是比较传统的方式 也比较好理解)
    3.你也可以考虑将应用打包成 docker 然后使用 k8s 来做集群 一个 pod 启动多个实例 使用 k8s 的 services 来做不同服务的负载 集群要方便管理点(满足第三点的前提)
    4.读写分离考虑使用 mycat 或者其他数据库中间件对业务影响不大
    5. 看了上面的帖子猜测是统计执行的 sql 造成数据压力有点大 建议先执行第一条...
    wangxin13g
        21
    wangxin13g  
       2021-10-12 14:05:10 +08:00
    现在的问题不是微服务+1
    你首先要考虑的是把数据库拆出来放另外一台单独的服务器或者直接迁移到云服务上去,然后数据库建主从,财务统计相关的操作放到从库上去做。
    就算不是数据库的问题也先考虑用 nginx 的负载均衡的方式先横向拓展机器,等到实在搞不定了公司也有钱能搞微服务了,再加人搞微服务吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:15 · PVG 05:15 · LAX 13:15 · JFK 16:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.