• Devops


compare to memcached

  • support persistant volume
    • RDB
    • AOF
  • support multiple data types
  • pub/sub


  • redis-cli: command line interface
  • redis-sentinel: cluster managing tool
  • redis-server: run server
  • redis-benchmark: stress testing
  • redis-check-aof: check AOF
  • redis-check-dump: check RDB


Use redis.conf. Docker official redis image not contain this file. Mount it yourself or through redis-server arguments.


  • String: get, set, mget, mset
  • Integer: incr, decr, setbit
  • List: lpush, lrange, lpop
  • Hash Map: hset, hget, hmset, hmget
  • Set: sadd, smember, sdiff, sinter, sunion

use docker

Before start

To connect a container, you need to know the name and the port, in the associated networks to be able to discover the service.

There is no DNS resolution in docker deault bridge network. In default network, you need to specify --link to connect the containers. The --link is a legacy feature.

Therefore, create a user-defined network is recommanded, it provide automatic DNS resolution.

Create a bridge newrok

Run a redis instance in user-defined network

Run a redis-cli connect to the redis instance


all commands are executed as a single isolated operation, serialized and executed sequentially
atomic: all failed or all succeed

  • MULTI: open a transaction and always return OK
  • EXEC: execute commands in transaction
  • DISCARD: flush commands and exit transaction
  • WATCH: check and set, if watched key changes, not execute


  • before EXEC: e.g. syntax error
  • after EXEC: e.g. value error

The pipeline discarding the transaction automatically if there was an error during the command queueing

… To be continued


  • Devops


Store and retrieve data in memory(not persistent) base on specific hash function.


  • Slab: allocate as many pages as the ones available

  • Page: a memory area of default 1MB which contains as many chunks

  • Chunk: minimum allocated space for a single item

  • LRU: least recently used list

ref: Journey to the centre of memcached

we could say that we would run out of memory when all the available pages are allocated to slabs

memcached is designed to evict old/unused items in order to store new ones

every item operation (get, set, update or remove) requires the item in question to be locked

memcached only tries to remove the first 5 items of the LRU — after that it simply gives up and answers with OOM (out of memory)

Read More »Memcached

IP Subnetting

  • Devops

Something you need to know first: Binary Odometer + 1 = + 1 = + 1 =

in reverse: – 1 =

Example 1 or with the mask

Binary Method

image alt

Quick Method

Figure out the subnets:

  1. network and host split in third octect
  2. subtract: 256 – 240 = 16, it means that network are incrementing in values of 16: 0, 16, 32, 48…
  3. 35 in the range of 32 and 48, so is on subnet; next subnet is

First subnet =

Next subnet =

Broadcast address = next subnet – 1

First host = Subnet + 1

Last host = Broadcast – 1


  • Class A subnetting ( support 1677214 (2^24) host per network, that way too much
  • Class B subnetting ( support 16382 (2^16) host per network, that way too much
  • Class C subnetting ( support 254 (2^8) host, more likely we subnet down to at least 254 hosts or even further

If you subnetting a network only has 2 hosts, you can subnet with ( or CIDR as /31

Network, host number

  • Networks: 2^(network bits)
    • one allocate for the subnet
    • one allocate for the broadcast
  • Hosts: 2^(host bits) – 2

Subnetting to be short

  1. “stealing” or “taking away” bits from the host portion of an address, and
  2. allocating those bits to network portion

Example 2

Origin network need at least 30 subnets as many hosts as possible


  1. draw the line with /18 to split network and host
  2. 2^5 > 30, need 5 subnet bit, draw the line to split subnet and host
  3. network/subnet portion is 8+8+7=23 bits, host portion is 32-23=9 bits
  • First subnet:
  • Second subnet:
  • Last subnet:

使用 Cloud Build 搭配 Helm 改善雲端部署

  • Devops

管理 Kubernetes 的服務時常有一些困擾:

  1. 須根據環境 (staging, production…) 去套用不同的設定及環境變數,整合不易
  2. secret 常是手動新增,如 cloudsql-proxy 的憑證,時間久了常忘記該 secret 是幹麻用的,及整個服務重新部署也會卡在這個手動步驟

使用 Helm 可以幫助我們管理這些部署檔案:

  1. 一鍵部署、移除
  2. 可根據不同的環境採用不同變數,有幾種可行的作法
  3. 可根據彈性的判斷式生成設定檔
  4. chart 的版本控制 (Release)


  1. 有個叢集
  2. Client 端安裝 Helm , Server 端安裝 Tiller
  3. 叢集有 RBAC ,可以關閉 RBAC ,或給 Tiller 權限:
    • helm init預設使用的服務帳戶是default
    • 叢集的default服務帳戶綁定cluster-admin叢集角色

Helm 有提供 dependency 的功能,可以透過以下指令來部署全部的 subchart:

但這裡會有一個問題,即部署時沒辦法指定 subchart 要吃哪個 value file ,因若你的 chart 參數是分成,一旦 chart 打包成 package ,package 在使用時只能吃 values.yaml

下個版本可能提供相對應的作法,請參考相關 issue

透過 Cloud Build 部署

透過helm create建立並設定完 chart 後,希望能在 Cloud Build 的流程透過 helm 部署,這邊選用 cloud-builer-community 提供的helm映像檔

  1. Build 該映像檔並推至專案的 Container Registry
  2. 參考 example 來新增流程,如helm installhelm upgrade
  3. 若 RBAC 是啟用的狀態,須要給 Cloud Build 操作叢集的權限
    • Cloud Build 的服務帳戶綁定roles/container.admin角色及cluster-admin叢集角色,請參考相關指令

IP Addressing

  • Devops
tags: ccna

IP Addressing

  • layer 3 logical address assigned by an administrator(MAC built in NIC)
  • used to identify specific devices on a network
  • every device on the internet has a unique IP Address

Street Analogy

  • network address portion
    • identifies a specific network
    • routers route traffic via routing tables, is based on network address(Network ID), not ip address
  • host address portion
    • identifies a specific endpoint on a network
    • we can use a protocal such as ARP to find the host


  • connectionless protocal: no sessions formd when transmitted, no status info
  • packets treated independently
    • may take different paths: load balancing, bandwidth, hopcount
  • hierarchical addressing sturture
  • best effort delivery
  • format
    • 32 bit with 4 octets
    • like DHL or FedEx routing parcel based on an address


  • Unicast Traffic
    • A
      • start with binary 0
      • range from 0(00000000).0.0.0 to 127(01111111).255.255.255
      • exceptions:
        • 127 is reserved for loopback:
        • 0 network is reserved for default network:
      • actual range from to
      • portions
        • first 1 octets: Networks
        • last 3 octests: Hosts
    • B
      • start with binary 10
      • range from 128(10000000).0.0.0 to 191(10111111).255.255.255
      • portions
        • first 2 octets: Networks
        • last 2 octests: Hosts
    • C
      • start with binary 110
      • range from 192(11000000).0.0.0 to 223(11011111).255.255.255
      • portions
        • first 3 octets: Networks
        • last 1 octests: Hosts
  • Multicast
    • D
      • start with binary 111
  • reserved for other purposes
    • E
      • start with binary 1111

These classes replaced by Classless Inter-Domain Routing(CIDR) in 1993

Read More »IP Addressing

OSI Model

  • Devops
tags: ccna

OSI Model

  • By International Organization of Standard


  • Split development/role: hide developer from lower layer
  • Quicker development


You need to remember both the name and the layer number

  • Layer7: Application
  • Layer6: Presentation
  • Layer5: Session
  • Layer4: Transport
  • Layer3: Network
  • Layer2: DataLink
  • Layer1: Physical

Trick: All People Sleeping Through Networking Don’t Pass

Network Engineer: Focus on 1, 2, 3, 4 Layers
Web Developer: Focus on 5, 6, 7 Layers

Read More »OSI Model