docker-compose.yml例子
1 | version: "3" |
如果按照上面的docker-compose.yml配置文件,我们只能启动一个flask实例,无法使用docker-compose up scale=2启动多个,会提示Bind for 0.0.0.0:5000 failed: port is already allocated错误
如果将14行的配置改为- “5000”,docker-compose启动映射到主机端口又是随机的,需要执行docker-compose ps才能看到映射到主机的端口号
为了在不需要知道flask实例映射到主机的随机端口号,使用nginx作负载均衡
nginx.conf
1 | user nginx; |
这里通过docker内部的dns解析服务,它将使用循环实现来根据服务名称解析DNS请求,并将其分发到Docker容器。ngxin反向代理访问flask容器内部的5000端口,就不需要知道映射到主机的随机端口了
docker-compose.yml完整例子
1 | version: "3" |
这样就可以任意增加flask实例的数量了
1 | docker-compose up --scale flask_app=5 |
压力测试
- 启动8个flask实例压力测试
Label | # 样本 | 平均值 | 最小值 | 最大值 | 标准偏差 | 异常 % | 吞吐量 | 接收 KB/sec | 发送 KB/sec | 平均字节数 |
---|---|---|---|---|---|---|---|---|---|---|
HTTP Request | 12053 | 600 | 10 | 3940 | 331.77 | 0.83% | 138.10528 | 267.96 | 102.18 | 1986.8 |
总体 | 12053 | 600 | 10 | 3940 | 331.77 | 0.83% | 138.10528 | 267.96 | 102.18 | 1986.8 |
- 启动1个flask实例
Label | # 样本 | 平均值 | 最小值 | 最大值 | 标准偏差 | 异常 % | 吞吐量 | 接收 KB/sec | 发送 KB/sec | 平均字节数 |
---|---|---|---|---|---|---|---|---|---|---|
HTTP Request | 9514 | 1041 | 4 | 18758 | 797.87 | 1.05% | 83.50375 | 162.12 | 61.65 | 1988 |
总体 | 9514 | 1041 | 4 | 18758 | 797.87 | 1.05% | 83.50375 | 162.12 | 61.65 | 1988 |
明显启动多个flask实例,吞吐量会跟高些