Docker - Compose 介紹 (上)
Docker-Compose 是一個可以用來定義且執行多個 Container 應用程式的工具
可以很簡單的透過 Compose 的 yaml 來設定你的container應用程式
並且透過一個指令,就可以建立及啟動所有yaml設定的應用程式
Compose 可以在產品、階段產品、開發或測試項目使用
在使用上大致可以區分為三個過程:
Continue ReadingDocker-Compose 是一個可以用來定義且執行多個 Container 應用程式的工具
可以很簡單的透過 Compose 的 yaml 來設定你的container應用程式
並且透過一個指令,就可以建立及啟動所有yaml設定的應用程式
Compose 可以在產品、階段產品、開發或測試項目使用
在使用上大致可以區分為三個過程:
Continue ReadingMySQL 是一個廣泛被使用,開源的關聯式資料庫管理系統( relational database management system, RDBMS)
目前的MySQL執行效能不斷提升,可靠且易於使用,
因此經常被作為網路應用程式開發資料庫的首選.
其中包括 Facebook, Twitter, YouTube, Yahoo 等公司都有使用。
詳細說明可參考官網: www.mysql.com.
這裡將說明如何在 Docker 安裝即執行 MySQL 環境
Continue Reading-d 表示在背景( Detached )執行,Docker 預設前景( foreground )執行
-p 表示將本機 8080 port 的來源轉發到 container 的 80 port
–name 表示為 container 的名稱
–rm 表示當 exit container 時,會移除 container( incompatible with -d )
docker run -d -p 80:80 --name mywebserver nginx
//if need custom port (ex 3000) can do like this
docker run -d -p 3000:80 --name mywebserver nginx
由於 local 還沒有 nginx 的 image,因此Docker 會先執行檢查及下載 nginx image
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
...下載安裝
Status: Downloaded newer image for nginx:latest
安裝完畢之後,就會直接對 nginx image 進行 instance 為 nginx container,並執行
Continue ReadingDocker 在 Mac 環境可以直接透過 Install Docker for Mac 來安裝
前往 Docker for Mac 下載 Docker.dmg 執行安裝
透過下列方式來檢查 docker 版本,確定安裝完畢
docker --version
docker-compose --version
docker-machine --version
Delete all docker containers
docker rm $(docker ps -a -q)
Delete one containers by name
docker rm mycontainername
Delete all docker images
docker rmi $(docker images -q)
Delete images by name
docker rmi images_name
Check Image and containers
//all container (include un-run container)
docker ps -a
//on running container
docker ps
//all images
docker images
Remove Laradock file
rm -rf laradock/
##【 Docker 】
docker-compose down
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
OPTION:
-d 表示在背景( Detached )執行,Docker 預設前景( foreground )執行
-p 表示將本機 8080 port 的來源轉發到 container 的 80 port
–name 表示為 container 的名稱
–rm 表示當 exit container 時,會移除 container( incompatible with -d )
Continue Reading查詢訂閱狀態與發佈系統的狀態
> PUBSUB xxxchanne
將訊息發送到指定的 channel
> PUBLISH xxxchanne "Message Say Hi"
Subscribe 允許 client 端訂閱一個或多個 channels
> SUBSCRIBE channel [channel ...]
當 client 端 subscribe 某個 channels 之後,
除了subscribe相關指令(subscribe, psubscribe, unsubscribe, punsubscribe ),
一律不允許使用其他 commands
> SUBSCRIBE xxxchannel
Reading messages...(press Ctrl-C to quit)
1) "subscribe"
2) "xxxchannel"
3) (integer) 1
1) "message"
2) "xxxchannel"
3) "a"
使用 PSUBSCRIBE 訂閱一個或多個頻道時,可以透過一些模式,來訂閱
? : 表示任一字元
例如: H?llo 會包含 Hello, Hallo, Hbllo, Hcllo, ……. H*llo 會包含 Heeeeello, Hllo, Hxllo…… H[ae]llo 會包含 Hello, Hallo (但不包括 Hllo)
Continue ReadingRedis client 每次發送一筆 command 都會經過 發送命令> 命令列隊(排隊)> 執行 > 返回結果 ,這期間所需要的時間,就稱為RTT(Round Trip Time, 往返時間)
Redis 通常可以執行在微秒等級,但是在不同網路環境,就會因網路本身的傳輸限制而有所差異,因此才有Redis 性能瓶頸就是網路 一說
pipeline 可以將多筆資料同時發送出去,
如果不使用 pipelining,每一個command 從訪問資料結構、取得回覆,看起來耗費的流量都非常小,
但對於 socket I/O 而言,每個訪問都執行一次comman,占用的效能成本就相當大
當使用 pipelining,可以將多個指令組成一次發送出去,讓系統只需讀取一次 read(),並且將多個回覆內容也組成一次輸出 write()
雖然 pipeline 可以減少 RTT,減少IO調用次數
但是直接發送 command 只需要 Redis server 端處理,
透過 pipeline 則需要 server 端-client端 共同實現
因此仍須注意 pipeline 大小,是否會超過 Client端的緩存限制,若超過則緩存刷新或直接發送,可能會發生無法預期的問題
通常對於過大的 pipeline ,可以透過拆分來完成減少單次大小
通常為了讓Redis可以有更好的負載能力,都會在 Redis 前面外加一個代理,例如: Codis Pipeline 緩存默認10K,3.1則是1024,Jedis 緩存默認為 8192
Continue Reading電腦世界處理的基礎是 0 跟 1,我們稱之為二進位(binary)
二進位可以在組成十進位 0~9
不同的系統或程式對於十六進位都有不同的描述方式,但是基本概念如下:
十六進位則是由 09 AF 組成
十六進位剛好是 4^2 ,轉二進位相當容易
例如: 二進位 01011110101101010010 可直接轉十六進位 5EB52
另外是 Byte 共 8 Bit
其中將 4 個 Bit 剛好可儲存一個16進位
各種場合帶入16進位方式
環境 | 格式 | 備註 |
---|---|---|
URL | %hex | |
XML,XHTML | &#xhex | |
HTML,CSS | #hex | 6位,用於表示顏色 |
Unicode | U+hex | 6位,表示字符編碼 |
MIME | =hex | |
Modula-2 | #hex | |
Smalltalk,ALGOL 68 | 16rhex | |
Common Lisp | #xhex或#16rhex | |
IPv6 | 8個hex用:分隔 |
ASCII(American Standard Code for Information Interchange,美國標準資訊交換碼)是由美國國家標準局(ANSI)訂定的字元標準
並且已經被國際標準組織(ISO)公認為國際標準,現今多數語系編碼都會都會參考 ASCII 的格式
接下來介紹如何從2進位轉10進位來取得參照值
1 Byte = 8 Bit
每一個 Bit 都可以存取一個二進位 (即 0, 1)
可以試想,1Byte提供了8個空間 [][][][][][][][]
,每一個空間都可以塞一個2進位值,例如: [0][0][0][0][0][0][0][0]
接下來,計算從2進位轉10進位方式:
例如 n 表示為 0或1
[2^7n]+[2^6n]+[2^5n]+[2^4n]+[2^3n]+[2^2n]+[2^1n]+[2^0n]
其 [0][0][0][0][0][0][0][1] 就可以計算程 [2^70]+[2^60]+[2^50]+[2^40]+[2^30]+[2^20]+[2^10]+[2^01] = 1 其 [0][0][0][0][0][0][1][0] 就可以計算程 [2^70]+[2^60]+[2^50]+[2^40]+[2^30]+[2^20]+[2^11]+[2^00] = 2 其 [0][0][0][0][0][0][1][1] 就可以計算程 [2^70]+[2^60]+[2^50]+[2^40]+[2^30]+[2^20]+[2^11]+[2^01] = 3
根據這些每一個10進位狀態,可以對應到一個字母
可直接參考下方 ASCII 編碼表
資料傳輸常見Json, XML 的方式傳送,但這裡我們要說明的是在細節一點的格式傳輸方式
一般各種格式的資料,傳輸前都必須轉為 byte 格式
例如,數字、字串… 轉為 byte ,再用 byte 格式傳送
證券即時行情、各類統計資訊傳輸,都相當要求速度及品質
因此國內證交所即採用 FIX(Financial Information eXchange) 傳輸協定搭配FAST資料流壓縮技術,來達到一定的效率
例如,證交所資料伺服器(MDS, Market Data Server) 主要負責Fix/Fast資料處理
處理後會透過內網分送到不同 VM DAP-RT (Data Access Point Real-Time)
每一個界接資訊的用戶,都可以連線到專屬的 DAP-RT
FIX 基本格式為 Tag=Value Tag=Value….
FIX 雖然可讀性高,但是純字串格式傳輸效能並不好
因此,會再將此字串透過 FAST 壓縮成二進位,提升資料傳輸速度
除此外,FAST 資料格式會在第一個 bit 作為判別是否還有其他資料(1:有, 0:結束)
前面提到的 byte 轉換方式,可以結合FIX 的格式來建立資料
將FIX字串轉換為 byte 格式,接著就可以透過 Socket…各種方式將資料傳送出去
//傳送byte資料
string transferData = "001=Adam 002=0999888777 003=Male 004=Tw";
byte[] buff = Encoding.Default.GetBytes(transferData);
接收方 byte 格式資料後,可將轉換為字串 在依照兩方溝通的FIX對照方式,參照資料意義
Continue Reading通常,MACOS Sierra都會預設安裝PHP5.6版本
這裡針對升級到更高階PHP版本流程進行說明:
可以透過brew 或者 curl 兩種方式來安裝 Brew
brew update && brew upgrade
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew unlink php56
brew install php72
(如果要從7.1升級到7.2,作法如下:)
brew tap homebrew/homebrew-php
brew unlink php71
brew install php72
brew install php72-xdebug
在這過程中,如果php5.6不是透過 brew 安裝,很可能會發生錯誤
這時仍可以繼續透過 CRUL的方式來安裝
curl -s http://php-osx.liip.ch/install.sh | bash -s 7.2
安裝完畢後,可以透過下方語法檢查PHP版本
php -v
如果還無法取得到PHP7版本,可以透過輸入下面的指令來更新路徑,來取得正確版本
vim ~/.profile
# 將下面這行加入~/.profile 最後一行
export PATH=/usr/local/php5/bin:$PATH
# 離開後,接著執行
source ~/.profile
上方的路徑,可能要依照你的環境來進行調整 如果上方指令仍無法運作,最後可以再試試這個方式
export PATH="$(brew — prefix homebrew/php/php72)/bin:$PATH"
祝安裝順利,也別忘了幫我按個讚
Continue Reading在 windows,git add 可能會出現 LF will be replaced by CRLF 錯誤訊息
warning: LF will be replaced by CRLF ... The file will have its original line endings in your working directory.
原因是因為 windows 所使用的換行符號是 CRLF
Git 會在提交的時候為了將換行符號統一,將 CRLF 轉換為 LF,並且會在偵測到需轉換時,會提出警示訊息
若不希望出現此錯誤警示,不要將 CRLF轉換為LF,則可以執行以下指令:
rm -rf .git
git config --global core.autocrlf false
git init
git add .
但原則上,不建議將這個動作關閉
Continue ReadingRTT (Round Trip Time) 亦可稱為往返時間
指的是,網路封包從發送命令,列隊,命令被執行,往返結果 這一整個過程
客戶端與主機的地理位置距離,會影響資料傳輸所需的 RTT
以目前的網路基礎設施多採用光纖
Continue Reading