DevOps

Docker - Compose 介紹 (上)

Docker-Compose 是一個可以用來定義且執行多個 Container 應用程式的工具

可以很簡單的透過 Compose 的 yaml 來設定你的container應用程式

並且透過一個指令,就可以建立及啟動所有yaml設定的應用程式

Compose 可以在產品、階段產品、開發或測試項目使用

在使用上大致可以區分為三個過程:

Continue Reading

Docker - 安裝 MySQL

MySQL 是一個廣泛被使用,開源的關聯式資料庫管理系統( relational database management system, RDBMS)

目前的MySQL執行效能不斷提升,可靠且易於使用,

因此經常被作為網路應用程式開發資料庫的首選.

其中包括 Facebook, Twitter, YouTube, Yahoo 等公司都有使用。

詳細說明可參考官網: www.mysql.com.

這裡將說明如何在 Docker 安裝即執行 MySQL 環境

Continue Reading

Docker - 執行 Nginx Webserver

執行 Nginx Container

-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 Reading

Docker - MAC安裝與執行 Hello World

Docker 在 Mac 環境可以直接透過 Install Docker for Mac 來安裝

前往 Docker for Mac 下載 Docker.dmg 執行安裝

檢查版本

透過下列方式來檢查 docker 版本,確定安裝完畢

docker --version

docker-compose --version

docker-machine --version

Continue Reading

Docker - Remove all images and container

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/

Continue Reading

Docker - 常用指令介紹

##【 Docker 】

關閉 Docker

docker-compose down

【 Container 】

建立container

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

Redis - PUBSUB、PUBLISH 介紹

Redis - PUBSUB、PUBLISH 介紹

PUBSUB

查詢訂閱狀態與發佈系統的狀態

> PUBSUB xxxchanne

PUBLISH

將訊息發送到指定的 channel

> PUBLISH xxxchanne "Message Say Hi"

Continue Reading

Redis - SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE 訂閱功能介紹

Redis - SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE 訂閱功能介紹

SUBSCRIBE 訂閱

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

使用 PSUBSCRIBE 訂閱一個或多個頻道時,可以透過一些模式,來訂閱

? : 表示任一字元

  • : 表示多個任意字元 [nnnn] : 表示在這其中任一字元

例如: H?llo 會包含 Hello, Hallo, Hbllo, Hcllo, ……. H*llo 會包含 Heeeeello, Hllo, Hxllo…… H[ae]llo 會包含 Hello, Hallo (但不包括 Hllo)

Continue Reading

Redis - pipeline 簡介

Redis - pipeline 簡介

Redis 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 ,可以透過拆分來完成減少單次大小

Pipeline 代理

通常為了讓Redis可以有更好的負載能力,都會在 Redis 前面外加一個代理,例如: Codis Pipeline 緩存默認10K,3.1則是1024,Jedis 緩存默認為 8192

Continue Reading

16 進位簡介

16 進位簡介

電腦世界處理的基礎是 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用:分隔

Continue Reading

ASCII 編碼說明

ASCII 編碼說明

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 編碼表

Continue Reading

資料傳輸方式

資料傳輸方式紀錄

資料傳輸常見Json, XML 的方式傳送,但這裡我們要說明的是在細節一點的格式傳輸方式

Byte 格式傳輸

一般各種格式的資料,傳輸前都必須轉為 byte 格式

例如,數字、字串… 轉為 byte ,再用 byte 格式傳送

FIX/Fast 資料格式傳輸

證券即時行情、各類統計資訊傳輸,都相當要求速度及品質

因此國內證交所即採用 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

前面提到的 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

MAC 與 Linux 安裝 composer 方式

這裡記錄幾種安裝composer的方式

  • 官方安裝方式說明
  • brew安裝方式

Composer 官方

透過下方幾個指令,安裝 composer.phar 到本機

Continue Reading

MAC 如何升級PHP版本

通常,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

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 暫存檔

在 windows 環境,可以透過批次檔方式一鑑清除暫存檔案,釋放空間

將下列內容儲存為 cleanner.bat

Continue Reading

MySQL - 取得十分鐘內、一小時內、一天內 的資料

MySQL 取得指定分鐘、指定小時或指定天數內的資料

方式介紹:

Continue Reading

Git 解決出現 warning: LF will be replaced by CRLF ... The file will have its original line endings in your working directory.

Git 解決出現 warning: LF will be replaced by CRLF … The file will have its original line endings in your working directory.

在 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 Reading

MySQL - 取得平均為 NULL 如何轉為0、以及計算總數方法

MySQL 取得平均級總數的方式,可以直接用現成的方法

AVG 以及 COUNT

這裡會另外再分享一個小技巧,說明如何將 AVG 取得結果為 NULL 如何轉為零

Continue Reading

MySQL - 取得目前時間、日期,日期加一個月,日期加一年

這裡記錄如何透過MySQL內建的函式來處理時間

非常實用,在處理會員延長有效期限

要延長一個月或一年等狀況,就能透過這些方式,很輕鬆的就將資料處理好。

Continue Reading

RTT 網路封包往返時間

RTT (Round Trip Time) 亦可稱為往返時間

指的是,網路封包從發送命令,列隊,命令被執行,往返結果 這一整個過程

客戶端與主機的地理位置距離,會影響資料傳輸所需的 RTT

以目前的網路基礎設施多採用光纖

Continue Reading