Firebase Realtime Database (Web)

25 August 2017

最近要替我們的服務加一個類似公告的服務,想了好幾個solution,譬如說在我們既有的API Server上加一隻API,讓前端獲取目前最新的公告, 但這麼做的缺點就是前端得用pulling or long pulling的方式,不管哪個方式對Server來說都是一種負擔,再加上把公告的獲取放在API Server的話,又得處理zero downtime的問題,基於以上的原因,所以打算使用Firebase realtime database
Firebase realtime database是一個即時的資料庫,當你更改任一個在database的值時,會立即的同步到各個已經連結到資料庫上的client上面,傳統作法是得讓client自己定期去DB query,而Firebase會主動的讓各個client知道,然後目前已經支援非常多種client了,像是普遍的iOS, Android,而我這篇是選擇使用Web,我可以在前端頁面上,使用JavaScript與Firebase realtime database做一個連結。


read more »


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 »