GeoLite2 替代方案:託管 GeoIP API 選項
GeoLite2 替代方案是指任何其他的 IP 地理定位資料來源,主要的選擇在於自行執行下載的資料庫,或是呼叫託管的 GeoIP API。兩者沒有哪一種絕對較好;正確的選擇取決於你願意承擔多少營運工作、需要哪些欄位,以及處理多少流量。
GeoLite2 提供什麼,以及執行它的成本
GeoLite2 是 MaxMind 發布的一系列免費 IP 資料庫,以可下載的檔案形式散布,你可以透過讀取器函式庫在本機查詢。本機查詢極為快速,也不會增加網路往返,對於高用量、對延遲敏感的路徑來說是真正的優勢。然而,使用它所附帶的義務很容易被低估:你要在授權協議下,以帳號與授權金鑰下載檔案,必須依排程保持更新,並且要負責把檔案分送到每個需要它的環境。
摩擦大多出在最後這一點。容器需要把資料庫內建,或在啟動時擷取。無伺服器與邊緣執行環境可能有大小或檔案系統的限制,使得數 MB 的檔案處理起來很不方便。過期的檔案會悄悄地回傳過時的答案,因為應用程式中沒有任何機制會警告你資料已經是幾個月前的。請直接向供應商確認目前的授權條款與更新要求,因為它們可能變動,而供應商才是權威來源。
若想更深入了解這項決策,自架資料庫與 API 的比較一文更詳細地比較了這兩種模式。
託管 API 帶來的改變
使用託管 API 時,下載、剖析、更新與提供資料都由供應商處理,而你針對每個位址發出一次 HTTP 請求。這免去了部署負擔,也意味著你的答案會隨供應商的資料更新而更新。代價是每次查詢都要多一次網路呼叫、依賴他人的可用性,以及速率限制或配額。針對重複位址快取結果可以緩和大部分成本,而且值得為這個呼叫加上較短的逾時與備援行為,讓服務中斷時能平順降級,而不是讓註冊流程壞掉。
託管服務也往往提供位置以外的更多內容。如果你真正的目標是判斷是否該信任某個請求,那麼國家與城市只是其中一部分。ipto 的 IP 查詢會回傳 country、city、asn、org 與 currency_code,以及 is_vpn、is_tor、is_abuser、is_datacenter 和 bogon 旗標(附帶 bogon_type)。威脅情資來源每 6 小時更新一次,IP 與 ASN 資料集每日更新。免費方案為每天 1,000 次請求,無需註冊。它不偵測住宅代理,而且和所有 IP 地理定位來源一樣,在國家層級準確,在城市層級則是近似值。
如何公平地比較各選項
- 你實際需要的欄位。如果你只需要國家代碼,幾乎任何來源都行。如果你需要 ASN、組織、VPN 或濫用訊號,請確認哪些有包含,以及它們多久更新一次。
- 準確度宣稱。對行銷文案中引用的任何百分比都要保持謹慎。準確度取決於地區、位址類型與所採用的定義,而且不同來源在城市層級的結果差異很大。請用你已知真實位置的位址樣本進行測試。國家與城市準確度的比較一文說明了原因。
- 更新頻率。詢問資料多久重建一次,以及你是否能控制變更何時送達。
- 延遲與部署位置。本機檔案沒有延遲;API 則取決於距離與快取。
- 授權與資料處理。閱讀有關再散布、署名,以及你送出的位址會被如何處理的條款。
- 退場路徑。把查詢放在你自己的小型介面之後,這樣日後切換來源時就不必更動業務程式碼。
用你自己的資料試用託管 API
成本最低的評估方式,是從日誌中取出一天份的真實位址,比較你目前的資料庫與一兩個候選方案的答案。你可以將單一位址貼到 IP whois 查詢,查看區塊背後的註冊紀錄,並使用 ASN 查詢確認某個令人意外的位址屬於哪個網路。對於看起來不對勁的位址,IP 轉公司查詢會根據 RDAP 與 ASN 資料,給出附帶信賴度評分的組織推測,這往往能解釋奇怪的位置,例如位於另一個城市的行動電信業者或企業閘道。API 文件涵蓋了可用於腳本化比較的端點。
若想要更廣泛的概覽,請參閱最佳免費 IP 地理定位 API。總結來說,本機資料庫在原始查詢速度與離線使用上勝出,託管 API 在資料新鮮度與投入心力上勝出,而許多團隊兩者並用:熱點路徑使用本機查詢,對少數需要更豐富資訊的請求則使用 API 做擴充。