Laravel + docker-compose + 外部数据库,性能非常低
Laravel + docker-compose + external db, very low performance
有一个项目由三个容器组成:
- 网络-nginx
- 应用程序 - php (laravel 5.4)
- db - mysql (5.7)
出于稳定性的考虑,我打算把数据库迁移到aws上。
测试表明,应用程序在传输到aws的过程中的加载时间增加了数倍。似乎每个对数据库的请求都是对数据库的连接。
api-call 做这样的事情:
$mycustomer = $customer->find($id);
$mycustomer = $this->getCustomerFooData($mycustomer);
$mycustomer = $this->getCustomerBarData($mycustomer);
...
...
return $mycustomer;
接受:
- 容器1200毫秒;
- aws 64000 毫秒
(微时间(真))
Docker-compose.yml 数据库容器:
version: '2.0'
services:
web:
container_name: my_web
build:
context: ./
dockerfile: web.docker
volumes:
- ./:/var/www
ports:
- "8040:80"
links:
- app
networks:
- portrouter_default
app:
container_name: my_app
build:
context: ./
dockerfile: app.docker
volumes:
- ./:/var/www
links:
- database
networks:
- portrouter_default
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
database:
container_name: my_db
image: mysql:5.7
networks:
- portrouter_default
environment:
- „MYSQL_ROOT_PASSWORD=password"
- „MYSQL_DATABASE=dbname"
ports:
- "33063:3306"
networks:
portrouter_default:
external: true
Docker-compose.yml 没有数据库容器:
version: '2.0'
services:
web:
container_name: my_web
build:
context: ./
dockerfile: web.docker
volumes:
- ./:/var/www
ports:
- "8040:80"
links:
- app
networks:
- portrouter_default
app:
container_name: my_app
build:
context: ./
dockerfile: app.docker
volumes:
- ./:/var/www
networks:
- portrouter_default
networks:
portrouter_default:
external: true
.env 数据库容器:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=33063
DB_DATABASE=dbname
DB_USERNAME=user
DB_PASSWORD=pass
.env aws:
DB_CONNECTION=mysql
DB_HOST=xxxxx.rds.amazonaws.com
DB_PORT=33063
DB_DATABASE=dbname
DB_USERNAME=user
DB_PASSWORD=pass
有人遇到过这个问题吗?
提前致谢!
这是正常的,从您的本地主机到 AWS 比从您的本地主机到您的本地主机慢。如果您想验证真实性能,您应该将您的应用程序部署到 AWS,将其连接到 RDS,然后验证真实性能。
有一个项目由三个容器组成:
- 网络-nginx
- 应用程序 - php (laravel 5.4)
- db - mysql (5.7)
出于稳定性的考虑,我打算把数据库迁移到aws上。 测试表明,应用程序在传输到aws的过程中的加载时间增加了数倍。似乎每个对数据库的请求都是对数据库的连接。
api-call 做这样的事情:
$mycustomer = $customer->find($id);
$mycustomer = $this->getCustomerFooData($mycustomer);
$mycustomer = $this->getCustomerBarData($mycustomer);
...
...
return $mycustomer;
接受:
- 容器1200毫秒;
- aws 64000 毫秒
(微时间(真))
Docker-compose.yml 数据库容器:
version: '2.0'
services:
web:
container_name: my_web
build:
context: ./
dockerfile: web.docker
volumes:
- ./:/var/www
ports:
- "8040:80"
links:
- app
networks:
- portrouter_default
app:
container_name: my_app
build:
context: ./
dockerfile: app.docker
volumes:
- ./:/var/www
links:
- database
networks:
- portrouter_default
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
database:
container_name: my_db
image: mysql:5.7
networks:
- portrouter_default
environment:
- „MYSQL_ROOT_PASSWORD=password"
- „MYSQL_DATABASE=dbname"
ports:
- "33063:3306"
networks:
portrouter_default:
external: true
Docker-compose.yml 没有数据库容器:
version: '2.0'
services:
web:
container_name: my_web
build:
context: ./
dockerfile: web.docker
volumes:
- ./:/var/www
ports:
- "8040:80"
links:
- app
networks:
- portrouter_default
app:
container_name: my_app
build:
context: ./
dockerfile: app.docker
volumes:
- ./:/var/www
networks:
- portrouter_default
networks:
portrouter_default:
external: true
.env 数据库容器:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=33063
DB_DATABASE=dbname
DB_USERNAME=user
DB_PASSWORD=pass
.env aws:
DB_CONNECTION=mysql
DB_HOST=xxxxx.rds.amazonaws.com
DB_PORT=33063
DB_DATABASE=dbname
DB_USERNAME=user
DB_PASSWORD=pass
有人遇到过这个问题吗? 提前致谢!
这是正常的,从您的本地主机到 AWS 比从您的本地主机到您的本地主机慢。如果您想验证真实性能,您应该将您的应用程序部署到 AWS,将其连接到 RDS,然后验证真实性能。