發表文章

目前顯示的是 11月, 2018的文章

[Docker] docker-compose 如何與已存在的 container 網路互通

情況提要: 主機內已經有個使用 docker run 起的 mysql container (network是用bridge) 這時候因需求要用 docker-compose 起一個 wordpress 但要讓 wordpress container 可以與 mysql 網路互通該怎麼做? 由於剛好 mysql container 是的 network mode 是 bridge 可以透過將 wordpress 的 network mode 也設成 bridge 並且多設定 external_links 來達成目的 我的wp_compose.yml: version: '3' services: wp: image: wordpress restart: on-failure # HOST:CONTAINER ports: - "11111:80" dns: 8.8.8.8 ulimits: nproc: 65535 nofile: soft: 60000 hard: 60000 environment: WORDPRESS_DB_HOST: 172.17.0.2 WORDPRESS_DB_USER: cms_wp WORDPRESS_DB_PASSWORD: "xxxxx" WORDPRESS_DB_NAME: cms_wp external_links: - mysql network_mode: bridge

Node.js 淺談筆記

Embarrassingly parallel 透過 manager process 分配工作給 replica process 經典代表: php 看起來很美好, 但有些問題 在做 CPU 密集的工作或是跟IO相關的工作時 該 replica process 就會整個 idle CPU如果一直在做 context switch 其實也會造成延遲 所以並不是說 worker process 開得越多越好 所以通常都會開核心數的 2 ~ 4 倍的 worker process 來達到充份利用CPU 例如: 4 核心可能會需要開 8 ~ 16 個 worker process 超過這個範圍, 效能不會增加, 反而會下降 因為都會浪費時間在 context switch 上 Node.js 也是類似的方式, 但跟PHP不同的是 Node.js 本身在執行Javascript的部分是單執行緒(single thread), 透過 event queue 來壓榨單顆核心的效能 如果每個 process 都是單執行緒, 那就開核心數個 process ex: 4 核心就開 4 個 process, 透過這種方法把所有核心榨乾 但是還是有缺點 1. 沒有共享記憶體 (shared memory) 2. 如果有用 connection pool 的機制, connection pool 數會是一般的核心數倍 ex: node.js 連接 redis 時假設 connection pool 數是設定 20條 connections 4 cores 就會有 20*4 條 connections 有可能會造成很多 idle connections 像是 postgresql 每條 connection 都是一個 process 彼此透過 shared memory 如果某個 process 掛掉了, 不會影響到其他 process Node.js 也是有類似的好處 一個 process 掛了不影響到其他 process (Node.js 每個 process有自己的 event queue & connection pool) Java, Golang 每個 process 會開很多個 thread