Nginx: Block traffic by country and bypass traffic for whitelist

21 August 2017

由於我們的服務都是由n台API Server + 各個client (Android, iOS, HTML5)所組成,然後我們的服務在某些國家是不開放的,所以勢必得做到block by country,然後又要有白名單機制;做法有很多種,但都大同小異,譬如說用iptables, nginx,然後搭配一些IP to country module(ip2location, GeoIP)去阻擋,這篇就會使用Nginx + GeoIP來阻擋。



1. Check Nginx version


首先先看看你安裝的Nginx是否有支援geoip這功能,如果有grep東西出來就代表有支援。

$ nginx -V 2>&1 | tr ' ' '\n' | grep geoip
--with-http_geoip_module


read more »


fluentd + Amazon S3 installation

08 August 2017


1. What’s fluentd?


fluentd是一個用來搜集data的open source,以及可以對搜集來的data進行簡單的分析, 甚至可以把搜集來的data再foward出去mongodb, Elasticsearch, S3, GCP…etc.

因為我們的API有好多台,在管理log時非常不方便,必須ssh進去每一台看,或者scp出來,這方法實在太落後, 因此最近才把fluentd整進來,我們應用的情景如下:

  • 安裝一台Log Server (儲存所有API上的log)
  • 每一台API Server都裝有fluentd,並且把本地的log foward to Log Server
  • 把本地的Log上傳至S3備份


read more »


What's MySQL partition

11 June 2017

最近在面試幾個candidate,都說自己有MySQL tuning的經驗, 但進一步問下去,發現連MySQL怎麼用BTree放index,或者怎麼使用partition or sharding都不了解,所以打算來寫一系列的MySQL文章,這篇就先挑簡單的partition來寫。


1. What’s Partition and Why?


簡單說,Partition是將你的table,根據你的配置去divide成好幾個part;最重要的是,資料都是在同一個DB裡面,這對application來說,可以無感的使用它,卻又享有它的優點。

那麼為何要用partition呢?partition的優點在於:

  • Partition Pruning:基於已經知道資料在哪個partition的條件下,讓你的SQL operation變快,這包含了select, insert, update ,delete
  • 刪除資料:當你的table很大時,刪除是非常耗時的一件工作,有了partition以後,你可以直接drop該partition,且時間上可以快上非常多。


read more »