2015年8月11日 星期二

maxmind geoip 的兩三事 (country)

我這邊需要偵測 country 的 API ,看一看,就 maxmind 比較知名,沒比較其它家,就先入手了。maxmind 的 geoip 在 linux 下可以直接安裝免費版本
sudo apt-get install
  geoip-bin  // command line 指令
  php5-geoip  // 整合在 php5 functions 中
  geoip-database  // 免費版的 ip database

maxmind 有提供 geoip 的免費 library,當然也有付費版本。查看一下免費版的條款,一來要放上他們的連結,二來商業只能使用一年。 所以我不考慮就直接買了,50USD,更新一次要 24USD,那就一年更新一次吧!雖然我買了,但在買之前,只查得到付費版的準確率「只有」99.8%,跟 cloudfront 的準確率是一樣的。


免費版和付費版準確率的差異:

我從 access log 中挖了 90 萬個不重覆 IPV4,使用 geoip2 (v2) 來測試,結果如下:
測試 IP 數:907818
免費版 查不到:3240
付費版 查不到:3228
免費版和新版不一致:1682

以官方的說法付費版的準確度到 99.8% ,由上面的測試結果來計算,免費版的準確度則到 99.6%。

另外有 2.5% 的使用者是 IPV6 ,我也測一下
測試 IP 數:23548
免費版 查不到:5
付費版 查不到:5
免費版和新版不一致:0

看來 ipv6  的免費和付費版本是一模一樣的。

速度效能:

它分為 v1 和 v2 ,v1 的資料庫是 .dat , v2  的資料庫是 .mmdb。php 的 v1 直接裝 php5-geoip 即可,v2 需使用 php composer 來載入,但速度慢到很誇張,要手動裝 php extension ,速度就會變很快了。
前幾天簡單用 ab 測一下速度,那時沒有記,這是大概的數字,越高效能越好:
php5 v1:300
php5 v2 (沒 extension):30
php5 v2 (有 extension):300
php5 v2 (透過 shell_exec):105

因為 v2 還有分,command line 和 php extension,command line 比較好裝,php extension ,還要安裝 php5-dev  (要多 19 個套件),然後產生 maxmind.so 再去改 php.ini。怕之後重裝機器會有困難,所以遲疑了很久才決定使用 php5 extension

結論:

  • 付費版的 v2  的 DB (*.mmdb) 有 2.3MB;免費版的 2.0MB,但測出來的結果免費版本的準確度其實蠻高的。不過使用者最好付費。
  • v1 比較好安裝;v2 要用 composer ,加裝 extension 很麻煩。
  • v1  的 php function 只能用 ipv4 ,ipv6 要透過 command line: geoiplookup6()
  • ipv6 目前台灣很少人用,但國外應該是越來越多,因為 v4 都被用完了。猜測之後 v6 應該也會有比較明顯的付費差異,因為 IPV6 會有很多稀有地區的 IP
  • v2 使用時記得要 try catch,不然連 127.0.0.1 都會發生 Error