๋ค์ ์ค์ ์ผ๋ก gunicorn์ ์คํํ๊ณ ์์ต๋๋ค.
gunicorn --worker-class gevent --timeout 30 --graceful-timeout 20 --max-requests-jitter 2000 --max-requests 1500 -w 50 --log-level DEBUG --capture-output --bind 0.0.0.0:5000 run:app
์ด๊ณ [CRITICAL] WORKER TIMEOUT
์ ์ธํ 3๋ช
์ ์์
์๋ฅผ ๋ชจ๋ ๋ณด๊ณ ์์ต๋๋ค. ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด gunicorn์ ๋ ์ด์ ์ผ๊พผ์ ์์ฑํ ์ ์๊ฑฐ๋ ์ต์ํ ์์ฑํ๋ ๋ฐ ๋งค์ฐ ๋๋ฆฝ๋๋ค. ์ด๋ก ์ธํด ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์๊ณ ๋ชจ๋ ์์ฒญ์ โโ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
์์ ์ ์๋ฅผ 3์ผ๋ก ์ค์ด๊ณ ๊ฐ ์์ ์์๊ฒ 2๊ฐ์ ์ค๋ ๋๋ฅผ ์ ๊ณตํ๋๋ฐ ์ด์ ์ด ๋ฌธ์ ๊ฐ ๋ ์ด์ ํ์๋์ง ์์ต๋๋ค.
์๊ฐ ์ด๊ณผ์์ ์คํ ์ถ์ ์ ์ป์ ์ ์์ง๋ง ํน์ ์์ ์์ ์ ํ์๋ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๊น?
์์ ์๊ฐ ์๊ฐ ์ด๊ณผ๋๋ฉด ์ค์ฌ์์๊ฒ ์ ์๊ฐ์ ์ด์ ์์์ ์๋ฆฌ์ง ์์์์ ์๋ฏธํฉ๋๋ค. ์ ํ ์๊ฐ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆด ์ ์๋ ์์ฒญ ์ค์ ์คํ๋ ์์ ์ด ์์ต๋๊น?
@jseidou ๋ฒํ.
@benoitc๋ ๋ต๋ณ์ด ๋ฆ์ด ์ฃ์กํฉ๋๋ค. ๋ด๊ฐ๋ณด๊ณ ์๋ ๋ฌธ์ ๋ ์ค์ ๋ก์ด ์์ ์ ์ํํ๋ ๋นํ์ฑ ์ค๋ ๋์ ๋๋ค. ๋ด ํ์ฑ ์ค๋ ๋๋ ์๊ฐ ์ด๊ณผ๋์ง ์์ผ๋ฉฐ ๋ถํ๊ฐ ์ ์ ๋นํ์ฑ ์ค๋ ๋๋ ์ ์์ ์ผ๋ก ์๊ฐ ์ด๊ณผ๋๋ ๊ฒ๋ณด๋ค ๋ ์ฌ๊ฐํ ์๊ฐ ์ด๊ณผ ์ค๋ฅ๋ฅผ ์ ๊ณตํฉ๋๋ค. gevent์์ ํ ๋ค์ด๋๋ก ์ ํํ๋๋ฐ ์ค๋จ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ง๋ง ์ฌ์ ํ 30์ด๋ง๋ค ์๊ณ ์๊ฐ ์ด๊ณผ๋ฅผ ์ง์์ ์ผ๋ก ์ ๊ณตํ๋ 3๋ช ์ ์์ ์๊ฐ ์์ต๋๋ค. ์ ์์ ์ธ ์๊ฐ ์ด๊ณผ์ธ ๊ฒฝ์ฐ ์ฌ๊ฐํ ์ค๋ฅ๊ฐ ์๋์ด์ผ ํฉ๋๋ค.
๋๋ ๋๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค.
๊ฑฐ๋์ฝ 19.7.1
์ ๋ฒคํธ 1.2.1
ํ์ด์ฌ 3.5.3
Docker์์ ์คํ, ๊ณต์ " python:3.5 "๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ด๋ฏธ์ง
@jseidou ์ค์ฌ์๊ฐ ์ด์ ๋ฐ์ํ๋ค๋ ์ ์์
์๋ง๋ ๋น์ ์ ์์ ์ ์ค ํ ๋ช ์ด gunicorn ์์ ์๊ฐ ์ค์ฌ์์๊ฒ ์๋ฆฌ์ง ๋ชปํ๋๋ก ์ฐจ๋จ ์์ ์ ์ํํ๊ณ ์์ ๊ฒ์ ๋๋ค. ๊ธด ์์ ์ด ์๋ ๊ฒฝ์ฐ ์ ์๊ธฐ ๋ฑ์ผ๋ก geven ์ค์ผ์ค๋ฌ๋ฅผ ์์๋ก ํธ๋ฆฌ๊ฑฐํด์ผ ํฉ๋๋ค. ๋๋ ํ ๋ค์ด๋ ์ค์ผ์ค๋ฌ๋ฅผ ๋ค์ ํธ์ถํ๋ ๋ชจ๋ ๊ฒ.
๋ฌธ์ ๋ฅผ ์ฌํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
@saabeilin ๋์ผ ^^
๋์ผํ ๋ด์ฉ์ด ํ์๋ฉ๋๋ค. ์์ฒญ์ ์ ๊ณตํ์ง ์๋ ๊ฒฝ์ฐ์๋ ์์ ์๊ฐ ์๊ฐ ์ด๊ณผ๋ฉ๋๋ค. ๋ด๊ฐ ํ ์ผ์ AWS ECS์์ ๋ด ์ปจํ ์ด๋๋ฅผ ์์ํ๋ ๊ฒ๋ฟ์ ๋๋ค.
[2017-06-27 20:41:56 +0000] [1] [DEBUG] Current configuration:
proxy_protocol: False
worker_connections: 1000
statsd_host: None
max_requests_jitter: 0
post_fork: <function post_fork at 0x7f6bbc3f1938>
errorlog: -
enable_stdio_inheritance: False
worker_class: sync
ssl_version: 2
suppress_ragged_eofs: True
syslog: False
syslog_facility: user
when_ready: <function when_ready at 0x7f6bbc3f1668>
pre_fork: <function pre_fork at 0x7f6bbc3f17d0>
cert_reqs: 0
preload_app: False
keepalive: 2
accesslog: -
group: 0
graceful_timeout: 30
do_handshake_on_connect: False
spew: False
workers: 4
proc_name: None
sendfile: None
pidfile: None
umask: 0
on_reload: <function on_reload at 0x7f6bbc3f1500>
pre_exec: <function pre_exec at 0x7f6bbc3f1ed8>
worker_tmp_dir: None
limit_request_fields: 100
pythonpath: None
on_exit: <function on_exit at 0x7f6bbc3f7758>
config: None
logconfig: None
check_config: False
statsd_prefix:
secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
reload_engine: auto
proxy_allow_ips: ['127.0.0.1']
pre_request: <function pre_request at 0x7f6bbc3f70c8>
post_request: <function post_request at 0x7f6bbc3f71b8>
forwarded_allow_ips: ['127.0.0.1']
worker_int: <function worker_int at 0x7f6bbc3f1c08>
raw_paste_global_conf: []
threads: 1
max_requests: 0
chdir: /opt/app
daemon: False
user: 0
limit_request_line: 4094
access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
certfile: None
on_starting: <function on_starting at 0x7f6bbc3f1398>
post_worker_init: <function post_worker_init at 0x7f6bbc3f1aa0>
child_exit: <function child_exit at 0x7f6bbc3f7320>
worker_exit: <function worker_exit at 0x7f6bbc3f7488>
paste: None
default_proc_name: app:app
syslog_addr: udp://localhost:514
syslog_prefix: None
ciphers: TLSv1
worker_abort: <function worker_abort at 0x7f6bbc3f1d70>
loglevel: DEBUG
bind: ['0.0.0.0:5005']
raw_env: []
initgroups: False
capture_output: False
reload: False
limit_request_field_size: 8190
nworkers_changed: <function nworkers_changed at 0x7f6bbc3f75f0>
timeout: 30
keyfile: None
ca_certs: None
tmp_upload_dir: None
backlog: 2048
logger_class: gunicorn.glogging.Logger
[2017-06-27 20:41:56 +0000] [1] [INFO] Starting gunicorn 19.7.1
[2017-06-27 20:41:56 +0000] [1] [DEBUG] Arbiter booted
[2017-06-27 20:41:56 +0000] [1] [INFO] Listening at: http://0.0.0.0:5005 (1)
[2017-06-27 20:41:56 +0000] [1] [INFO] Using worker: sync
[2017-06-27 20:41:56 +0000] [8] [INFO] Booting worker with pid: 8
[2017-06-27 20:41:57 +0000] [9] [INFO] Booting worker with pid: 9
[2017-06-27 20:41:57 +0000] [10] [INFO] Booting worker with pid: 10
[2017-06-27 20:41:57 +0000] [12] [INFO] Booting worker with pid: 12
[2017-06-27 20:41:57 +0000] [1] [DEBUG] 4 workers
[2017-06-27 20:42:15 +0000] [10] [DEBUG] Closing connection.
[2017-06-27 20:42:15 +0000] [8] [DEBUG] Closing connection.
[2017-06-27 20:42:45 +0000] [8] [DEBUG] Closing connection.
[2017-06-27 20:42:45 +0000] [10] [DEBUG] Closing connection.
[2017-06-27 20:42:46 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:9)
[2017-06-27 20:42:46 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:12)
[2017-06-27 20:42:46 +0000] [9] [INFO] Worker exiting (pid: 9)
[2017-06-27 20:42:46 +0000] [12] [INFO] Worker exiting (pid: 12)
[2017-06-27 20:42:46 +0000] [1] [DEBUG] 3 workers
[2017-06-27 20:42:46 +0000] [24] [INFO] Booting worker with pid: 24
[2017-06-27 20:42:46 +0000] [25] [INFO] Booting worker with pid: 25
[2017-06-27 20:42:46 +0000] [1] [DEBUG] 4 workers
๋ก์ปฌ์์ ์คํํ ๋๋ ๋ฐ์ํ์ง ์์ต๋๋ค. :-/
gevent
์์
์๋ก ์ ํํ๋ฉด ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ต๋๋ค. ยฏ\_(ใ)_/ยฏ
#1194์ ๋ณต์ ํ์ธ ๊ฒ ๊ฐ์์.
๋๋ ์ต๊ทผ์ ์ด๋ฐ ์ผ์ด ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋๋ ๊ฒ์ ๋ณด์๊ณ ๋์๊ฒ ๊ทธ๊ฒ์ ๋ ธํธ๋ถ์ ์ ์๊ธฐ ์ํ๋ก ๋ง๋๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ป์ ์ด๋ฉด ์ด๋ฐ ๋ฉ์์ง๊ฐ ์๋ฉ ๋ฌ๋ค. ์ด๊ฒ์ด ๋์์ด ๋ ์ง ํ์ ํ ์ ์์ง๋ง, ๋๋ ๊ทธ๊ฒ์ ์ธ๊ธํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค...
gunicorn --daemon --workers 2 --timeout 120 --bind 127.0.0.1:4000 --pid /var/run/mshc_admin.pid --user danilovskoe --group danilovskoe --chdir /home/danilovskoe/mshc2/src /flask/ --env MSHC_PRODUCTION=/etc/monit/mshc.config.py admin_ gunicorn:app
ํ์์์ 30์ด
์์ฒญ ๋ฐ๊ธฐ
์ฐ๋ถํฌ 16.04
ํ๋ผ์คํฌ 0.12.2
Python 3.6.3(๊ธฐ๋ณธ๊ฐ, 2017๋
10์ 4์ผ, 02:55:45)
[GCC 5.4.0 20160609] ๋ฆฌ๋
์ค์์
gunicorn(๋ฒ์ 19.7.1)
๊ณ ๋ฏผ์ ๋ง๋ฌ์ต๋๋ค.
์ฑ์ ์์ํ ์งํ์ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ์๋ง [CRITICAL] WORKER TIMEOUT
๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด,
[2018-01-02 16:38:03 +0800] [24355] [INFO] Starting gunicorn 19.7.1
[2018-01-02 16:38:03 +0800] [24355] [DEBUG] Arbiter booted
[2018-01-02 16:38:03 +0800] [24355] [INFO] Listening at: http://0.0.0.0:8080 (24355)
[2018-01-02 16:38:03 +0800] [24355] [INFO] Using worker: gevent
[2018-01-02 16:38:03 +0800] [24358] [INFO] Booting worker with pid: 24358
[2018-01-02 16:38:03 +0800] [24355] [DEBUG] 1 workers
[2018-01-02 16:38:10 +0800] [24358] [DEBUG] GET /v1/bj2/CC/uuid
[2018-01-02 16:38:10 +0800] [24358] [DEBUG] Closing connection.
[2018-01-02 16:38:41 +0800] [24355] [CRITICAL] WORKER TIMEOUT (pid:24358)
[2018-01-02 16:38:41 +0800] [24358] [INFO] Worker exiting (pid: 24358)
[2018-01-02 16:38:41 +0800] [24381] [INFO] Booting worker with pid: 24381
[2018-01-02 16:48:51 +0800] [24355] [CRITICAL] WORKER TIMEOUT (pid:24381)
[2018-01-02 16:48:51 +0800] [24381] [INFO] Worker exiting (pid: 24381)
[2018-01-02 16:48:51 +0800] [24703] [INFO] Booting worker with pid: 24703
[2018-01-02 16:48:51 +0800] [24703] [INFO] worker pid 24703 notify
[2018-01-02 16:48:51 +0800] [24703] [DEBUG] GET /v1/bj2/CC/uuid
[2018-01-02 16:48:51 +0800] [24703] [DEBUG] Closing connection.
CentOS: 6.7
Python: 3.6.3
Gevent: 1.2.2
Greenlet: 0.4.9
Gunicorn: 19.7.1
RUN CMD: gunicorn --worker-class gevent --log-level debug --bind 0.0.0.0:8080 app
์์
์ ํด๋์ค๋ฅผ eventlet
๋ก ์ ํํ์ ๋, ์ฆ,
gunicorn --worker-class eventlet --log-level debug --bind 0.0.0.0:8080 app
,
๊ด์ฐฎ์.
์๋ฆผ: ๋ด ์ฑ์ ๊ฐ์ ํธ์คํธ๋ ํด๋ผ์ฐ๋ ํธ์คํธ๊ฐ ์๋ ๋ฌผ๋ฆฌ์ ํธ์คํธ์์ ์คํ๋ฉ๋๋ค.
์ ๋ฐ์ดํธ:
๊ทธ๋์ ๋๋ ๊ทธ๊ฒ์ด gevent ๋๋ gevent ์์ ์์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
gevent๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ gevent๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ด ๋ฌธ์ ์ ๋ํ ๋ณด๊ณ ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ทผ๋ณธ ์์ธ์ ์๋ณํ ์ ์์ต๋๋ค. ์ผ๋ถ ๋ณด๊ณ ์๋ #1194์ ๊ฐ์ ์ ์์ง๋ง ๋ค๋ฅธ ๋ณด๊ณ ์๋ ๊ทธ๋ ์ง ์์ ์ ์์ต๋๋ค.
๋๊ตฌ๋ ์ง ์ฌํํ ์ ์๋ ์ต์ํ์ ์ฌ๋ก๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ฉด ๋์์ด ๋ ๊ฒ์ ๋๋ค.
ํ์คํ ๋์ผํ ๋ฌธ์ ์ธ์ง ํ์คํ์ง ์์ง๋ง ๋ค์ ์ค์ ์ผ๋ก Virtualbox๋ฅผ ์ฌ์ฉํ์ฌ 100% ์ฌํํ ์ ์์ต๋๋ค.
ํธ์คํธ: ์๋์ฐ 10
๊ฒ์คํธ: ์ฐ๋ถํฌ 16.04
์ ๋์ฝ: 19.7.1
๊ธฐ๋ณธ NAT ์ฐ๊ฒฐ์ ํตํด ํธ์คํธ์ ๊ฒ์คํธ ๊ฐ์ TCP:8000์ ์ ๋ฌํฉ๋๋ค. sync
์์
์๋ฅผ ์ฌ์ฉํ์ฌ ํธ์คํธ ์์ localhost:8000
์ ๋ํ ๋ชจ๋ ์์ฒญ์ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ๋ก๊ทธ์ ํ์ํ์ง๋ง ๋ด๊ฐ guest ์ ๋ํด ๋์ผํ ์์ฒญ์ ํ๋ฉด ๋ก๊ทธ๊ฐ ์ง์์ง๋๋ค. --worker-class eventlet
์ ํํ๋ฉด ์ถ์ ์ด ์ ๊ฑฐ๋ฉ๋๋ค.
Virtualbox๊ฐ ์์ ํ ๋ค๋ฅธ ์ฐจ์์ด๋ผ๋ ์ ์ ๊ฐ์ฌํ์ง๋ง ์์์ ์ค๋ช ํ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ๊ฒ ๋ค๋ฆฌ๊ณ ์ผ๊ด๋๊ฒ ์ฌํํ ์ ์์ต๋๋ค(์ ์ด๋ ์ ์๊ฒ๋).
๋๋ฆฐ ์ ๋ก๋์์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ณด๊ณ ์์ต๋๋ค. ์ ๋ก๋ํ๋ ๋์(Django ์ฌ์ดํธ๋ก) ์์ ์ ์๊ฐ ์ด๊ณผ์ ๋๋ฌํ๋ฉด ์ ๋ก๋๊ฐ ์ค๋จ๋ฉ๋๋ค.
@lordmauve ์์๋๋ ๋๊ธฐํ ์์ ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ. ๊ธด ์์ฒญ์ ์์ ์๋ฅผ ์ฐจ๋จํ๊ณ ๊ฒฐ๊ตญ ์ค์ฌ์๋ ์์ ์๋ฅผ ์ข ๋ฃํฉ๋๋ค. ๊ธด ์์ฒญ์ด ์ฑ๊ณตํ ๊ฒ์ผ๋ก ์์๋๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์ ์ ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ์ค๋ ๋๋ฅผ ์ฝ๋ ์ฌ๋์ ์ฌ์์ฐ์ ์ํด ์ต์ํ์ ์ผ์ด์ค๋ก ๋ค์ ์ฌ์ญ์์ค. ์ฌ๊ธฐ์์ ์ํํ ๊นจ๋ํ ์กฐ์ฌ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. AWS/ECS์ ๊ฒฝ์ฐ ๋์ด๋ ๊ตฌ์ฑ์ ํ ์คํธํ ์ ์์ ๋๊น์ง #1194๋ฅผ ์ด์ด ๋ก๋๋ค(https://github.com/benoitc/gunicorn/issues/1194#issuecomment-371250650).
์ฌ์ ํ ์ด ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋์ ์๊ฐ ์ด๊ณผ๋ฅผ ๋๋ฆฌ๊ณ ์์ ์ ํด๋์ค ์ ํ์ ๋ณ๊ฒฝํ๋ ๊ฒ ์ธ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฆฌ์์ค ๊ฐ์ฉ์ฑ์ ํ์ธํ์ญ์์ค.
Docker Swarm์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ค๊ณ ํ ๋ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ๋ฆฌ์์ค๋ฅผ ๋๋ฌด ๋ฎ๊ฒ ์ ํํ๊ณ ์์์ ๊นจ๋ฌ์์ต๋๋ค. ๋ฆฌ์์ค๋ฅผ ๋๋ฆฌ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์ฐ๋ฆฌ๊ฐ ์ฑ์ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@jseidou ์ค์ฌ์๊ฐ ์ด์ ๋ฐ์ํ๋ค๋ ์ ์์
์๋ง๋ ๋น์ ์ ์์ ์ ์ค ํ ๋ช ์ด gunicorn ์์ ์๊ฐ ์ค์ฌ์์๊ฒ ์๋ฆฌ์ง ๋ชปํ๋๋ก ์ฐจ๋จ ์์ ์ ์ํํ๊ณ ์์ ๊ฒ์ ๋๋ค. ๊ธด ์์ ์ด ์๋ ๊ฒฝ์ฐ ์ ์๊ธฐ ๋ฑ์ผ๋ก geven ์ค์ผ์ค๋ฌ๋ฅผ ์์๋ก ํธ๋ฆฌ๊ฑฐํด์ผ ํฉ๋๋ค. ๋๋ ํ ๋ค์ด๋ ์ค์ผ์ค๋ฌ๋ฅผ ๋ค์ ํธ์ถํ๋ ๋ชจ๋ ๊ฒ.
๋ฌธ์ ๋ฅผ ์ฌํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
@saabeilin ๋์ผ ^^
๊ฐ์ฌํฉ๋๋ค.
๋์๊ฒ ์ด๊ฒ์ ์ด์ ์ ํด๋ผ์ฐ๋ ์ ์ฅ์์์ ๋ค์ด๋ก๋ํ ํฐ ํ์ผ์ ์ ๊ณตํ ๋ ๋ฐ์ํฉ๋๋ค.
์์ฒญ ์ ํ์ผ์ด ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์์ ๋ก์ปฌ ๋์คํฌ๋ก ๊ฒ์๋ ๋ค์ ํด๋ผ์ด์ธํธ๋ก ์คํธ๋ฆผ ์ํธ ํด๋
๋ฉ๋๋ค. ํด๋ผ์ฐ๋ ์ ์ฅ์์์ ๋ค์ด๋ก๋ํ๋ฉด 10๋ถ ์ด์ ๊ฑธ๋ฆฌ๋๋ผ๋ ์ ๋๋ก ์๋ํฉ๋๋ค.
์์
์๊ฐ ๋์คํฌ์์ ํด๋ผ์ด์ธํธ๋ก ํ์ผ์ ์คํธ๋ฆผ ํด๋
ํ๊ธฐ ์์ํ๋ฉด ์ด ์ฐจ๋จ ์์
์ผ๋ก ์ธํด ์๊ฐ์ด ์ด๊ณผ๋๊ธฐ ๋๋ฌธ์ ์๋ฐฑ MB ํ์ ์ข
๋ฃ๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ์ ํ ์ด ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋์ ์๊ฐ ์ด๊ณผ๋ฅผ ๋๋ฆฌ๊ณ ์์ ์ ํด๋์ค ์ ํ์ ๋ณ๊ฒฝํ๋ ๊ฒ ์ธ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฆฌ์์ค ๊ฐ์ฉ์ฑ์ ํ์ธํ์ญ์์ค.
Docker Swarm์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ค๊ณ ํ ๋ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ๋ฆฌ์์ค๋ฅผ ๋๋ฌด ๋ฎ๊ฒ ์ ํํ๊ณ ์์์ ๊นจ๋ฌ์์ต๋๋ค. ๋ฆฌ์์ค๋ฅผ ๋๋ฆฌ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์ฐ๋ฆฌ๊ฐ ์ฑ์ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.