**無論是 CDN Content Delivery Network 或 GSLB Global Server Load Balance, 第一步靠的就是 DNS 面對不同的使用者導到不同的 IDC 去達成, 這個判斷不是埋在應用程式去判斷, 不然就是靠 Server 來判斷.
而現在判斷的方式也越來越容易做到了:
無論如何實作, 一定有一個前提, 就是要知道那個使用者來問, 或那個 DNS Server 來問, 然後我們算出最佳的 IDC 回應那個 IP, 而後那個 IDC 應該也是有自己的 SLB 與 Cluster.
所以一定有一個流程就是記錄那個 DNS (Table 1) 來我們 DNS Server 問這個 Domain Name 的 IP, 然後我們判斷出來後給他, 只是這個判斷可能須要一段時間, 若是用 GeoIP 來算就應該很快, 但這個就要先建一個 Table 2:
Table 1: DNS Server IP
Table 2: Geo IP (Country) vs IDC (Array)
當然也要有一個 IDC 列表去記錄那些 IDC, 這理論可以併在 Table 2, 也可以獨立 Tabel 3.
Table 3: IDC List (Array)
若是用 GeoIP 的話, 再怎樣查表速度應該很快, 甚至在某方面連 Table 1 都不須要, 若是用後面的方法, 計算可能須要數秒鐘, 雖然這很快, 但不代表使用者是可以接受的, 因此我們通常會給一個 Default IDC.
Parameter 1: Default IDC
這個 Default IDC 可以是用計算能力最高的, 或是最接近 Primary DB 的 IDC, 這個也不見得是在算之前, 也有可能是無法判斷的狀況用得上.
理論上每一個 IDC 須要去計算回應跟 DNS Server 之間的 IP Routing 或 Response Time/Hups, 這也可能是一個表也可能是一個 Array.
Table 4: IDC Echo Server List (Array)
然後理論上會有幾隻程式:
Program 1: DNS Server
Program 2: Decision Main Program
Program 3: Echo Daemon
通常在後台只要這三隻程式就很夠了, 接下來只是可能要再加一個 Process Control 去用 Batch 去維護這些 Table 的正確性與有效性, 所以通常須要有兩件事:
Parameter 2: Time To Live
Batch 1: Update Latest Result
Column 1: Lastest Update Time
而通常 Program 1 往往是可以用 MyDNS 來去改, 或者是在 SDB 上去加工, 一個是可以很獨立運作, 一個是可以跟 Bind 做結合.
這系統已經做過一次, 當時是部份用 C, 部份是用 Python 完成, 而採用的方式是 MyDNS Solution, 若我再寫一次的話我會採用 SDB 的方式吧.
有人問說為甚麼不放 Source Code 或 SQL Schema, 事實上一放就暴了, 若有興趣的再找我要吧.