Buat layanan Private CDN
https://indosystem.com/wp-content/uploads/2016/05/cdn-scenario-1.png 485 493 Dian Boyke Dian Boyke https://secure.gravatar.com/avatar/c9a775a9c29b76ec216f6fbfe8a2794d?s=96&d=mm&r=gPrivate CDN: Untuk yang belum pernah dengar CDN (Content Delivery Network) mungkin bisa dimulai dari penjelasan sederhana di blog ini.
Tujuan utama dari penggunaan CDN adalah untuk mempercepat loading halaman website. Waktu loading akan lebih cepat dikarenakan file-file statik (yang biasanya berukuran besar) akan di distribusikan oleh server atau node-node CDN. Server CDN tersebar luas di beberapa lokasi atau negara, dengan tujuan agar user yang sedang me-request halaman/file tertentu akan dilayani oleh server terdekat dengan user tersebut.
Beberapa pemain besar sebagai penyedia layanan CDN ini diantaranya adalah Cloudflare, Akamai, Edgecast, SwiftServer, Amazon Cloudfront, dan yang baru di release yakni Google Cloud CDN. Diantara mereka sudah ada yang berkolaborasi dengan pemain lokal seperti Telkom dan Indosat, dengan tujuan untuk menyebarkan node-node ke market lokal.
Skema pricingnya yang ditawarkan oleh mereka berbeda-beda, ada yang menghitung ukuran file yang di cache, Traffic In, Traffic Out, Cakupan area noode yang digunakan, dan fitur eksternal seperti DDOS protection, WAF, Image manipulation, dukungan SSL dan lain sebagainya.
Mengapa CDN?
Selain dari alasan performance seperti yang sudah dibahas sebelumnya, ada keuntungan lainnya yang bisa kita dapatkan dengan menggunakan CDN.
- Security: dengan menggunakan CDN maka Infrastruktur kita tidak akan ter-expose ke dunia luar. Akan membutuhkan waktu bagi hacker untuk melakukan scanning dan enumeration ke infrastrutur yang kita kelola.
- High Availability: dengan jumlah node yang berjumlah banyak akan membantu kita apabila terjadi lonjakan traffic, baik dikarenakan oleh DDOS atau karena ada event khusus yang terjadi di layanan website kita.
- Cost Effective: biaya yang digunakan untuk sewa link internasional (yang mahal) dapat dipangkas secara drastis, karena semua traffic akan dikelola oleh CDN. Dan tidak akan dikenakan biaya atas penggunaan jaringan internasional.
- High Scalability: salah satu fitur kelebihan dari CDN ini adalah dimungkinkannya kita melakukan balancing lintas datacenter, lebih efektif ketimbang menggunakan load balancer biasa.
Mari Bangun Private CDN
Dengan private CDN kita dapat memiliki kendali penuh terhadap semua fitur dan kapabilitasnya. Walaupun terlihat investasi resource tenaga ahli dan perangkat yang tidak sedikit, tetapi mari kita coba melalui pendekatan arsitektur yang efektif terlebih dahulu.
Ada dua skenario yang dapat kita gunakan sebagai alasan logis untuk mempertimbangkan menggunakan Private CDN.
Skenario pertama misalkan kita menggunakan Cloud di Amazon AWS atau DigitalOcean dimana lokasi yang terdekat dengan Indonesia adalah Singapore. Atau kita hosting datacenter di Indonesia tetapi menggunakan layanan Amazon S3 untuk menaruh file-file statik (image, photo, banner, javascript, css, font).
Sedangkan visitor kita kebanyakan meng-akses dari lokal Indonesia, yang artinya setiap mereka membuka website kita maka penggunaan traffic Internasional akan besar, yang berakibat lambatnya waktu download.
Tujuan utama dari aristektur CDN seperti ini adalah performance yang akan dirasakan oleh pengunjung web. Karena semua file-file statik yang diakses akan berasal dari jaringan lokal Indonesia.
Untuk skenario kedua, kita memiliki datacenter di Indonesia dan berlangganan link internet lokal dan internasional. Pengunjung website berasal dari dalam negeri dan ada pula yang dari luar negeri. Agar website kita dapat lancar diakses dari luar negeri maka kita perlu langganan bandwidth internasional yang besar, dan biaya langganannya tidak terbilang murah pula.
Dengan membangun node CDN di luar Indonesia, kita dapat memangkas biaya yang dialokasikan untuk sewa bandwidth internasional. Karena semua traffic internasional akan mengakses node tersebut, tanpa langsung ke server origin. Selain performance, tujuan lain dari arsitektur CDN seperti ini adalah penggunaan Cost yang efektif.
Untuk skenario pertama kita butuh membangun node CDN di dalam negeri, sebaliknya di skenario kedua kita harus membangunnya di luar negeri.
Routing dan Distribusi
Dua hal yang paling pokok yang diperlukan dalam membangun CDN adalah Routing dan Distribusi. Routing yang bertugas dalam memastikan user mendapatkan waktu akses yang paling cepat dari lokasi mereka berada. Ada dua pendekatan untuk mendapatkan routing terbaik ini, yakni menggunakan DNS server yang support Geo Location atau menggunakan solusi IP anycast.
Hal yang pokok berikutnya adalah pendistribusian konten, yakni memastikan setiap node memiliki versi konten yang sama dengan node yang lainnya. Untuk memenuhi kebutuhan distribusi ini kita dapat memperlakukan setiap node sebagai proxy terhadap server origin.
Routing
Server DNS yang mendukung GeoIP akan memberikan hasil translasi ke IP berbeda-beda, tergantung dari lokasi user yang merekues. User dari Indonesia akan mendapatkan IP yang berbeda dengan user dari Singapore, walaupun mencoba me-resolve domain yang sama.
Sebaliknya dengan IP any cast, user akan mendapatkan IP yang selalu sama meskipun di lokasi yang berbeda-beda. Tetapi user akan di routing secara network ke datacenter atau server yang terdekat. Jadi dengan IP any cast dimungkinkan untuk menggunakan IP yang sama walaupun di host / server/ datacenter yang berbeda.
Kedua metode diatas berfungsi untuk memastikan agaruser di arahkan ke node yang paling dekat dan mendapatkan routing terbaiknya (meminimalisir jumlah hop dari client ke server).
Distribusi
CDN membutuhkan mekanisme untuk mendistribusikan konten ke node-nodenya yang berjumlah banyak. Biasanya untuk kebutuhan ini digunakan metode proxy di node tersebut. Node-node tersebut bekerja tidak hanya melakukan routing ke server asal (origin), tetapi melakukan cache di setiap node tersebut.
Dengan melalukan caching di lokal node, traffic yang mengarah ke server origin dapat ditekan semaksimal mungkin. Sehingga dapat mengurangi serangan DDOS maupun anomali lonjakan trafic pada server origin.
Implementasi
Berikutnya kita akan berbicara lebih teknis mengenai cara implementasi CDN. Disini kita akan bicara ke hal yang paling sederhana tetapi sudah cukup untuk memulai menggunakan private CDN.
Tools yang digunakan adalah Bind (+GeoIP Support) yang bertugas untuk mengatur routing user, dan Nginx sebagai Proxy dalam mendistribusikan konten.
Bind9 + GeoIP Patch
Aplikasi DNS server ini sudah banyak digunakan secara luas dimana-mana. Untuk me-fungsikan Bind9 agar mendukung GeoIp maka kita perlu menginstall Bind9 tersebut secara manual, kemudian di patch untuk mengaktifkan kemampuan GeoIP.
Sedangkan untuk menggunakan fitur GeoIP di Bind9 ini dibutuhkan database IP-Location yang dapat di download di MaxMind. Di MaxMind ini tersedia database yang Free dan berbayar, dengan yang berbayar mereka menjanjikan database IP-Location yang lebih akurat dan ter-update. Database IP-Location ini dapat di download disini.
Cara instalasi Bind9 berikut patch GeoIP dan integrasi dengan database MaxMind dapat dilihat tutorial berikut:
*Saya capture tutorial instalasi dan konfigurasi dibawah dari website luar karena ingin cepat saja, sesuaikan nama file, link, konfigurasi dan direktori, dengan sistem dan kebutuhan masing-masing.
Dan untuk konfigurasi dapat dilihat dengan cara berikut:
Dari konfigurasi diatas kita sudah memisahkan zona IP dengan lokasi yang merekuesnya. Apabila kita lihat dari contoh diatas maka user yang berasal dari US dan Canada (country_US; country_CA) akan zone yang berbeda dengan user yang berasar dari Latin (country_AR; country_CL; country_BR).
Nginx (Sebagai Reverse Proxy)
Selain sebagai Webserver dan Loadbalancer, Nginx memiliki kemampuan sebagai Proxy (Forward dan Reverse). Dengan fitur reverse proxy yang dimilikinya, kita dapat gunakan Nginx untuk melakukan caching konten, dan bertugas sebagai distribusi konten juga.
Dengan menggunakan konfigurasi seperti dibawah ini kita sudah memperlakukan Nginx sebagai reverse proxy.
Dari konfigurasi diatas, Nginx akan me-cache semua request yang berasal dari server origin (111.111.111.111:8080). Sehingga apabila diterima request yang sama dari user yang berbeda, maka Nginx akan mengambil versi yang ada di cache lokal, tidak perlu ngambil ke server origin. Tentunya settingan ini dapat disesuikan dengan kebutuhan yang kita inginkan.
Kesimpulan
Ternyata dengan settingan yang sederhana seperti yang dicontohkan diatas, kita sudah dapat memiliki private CDN. Seperti yang sudah diutarakan diatas bahwa kebutuhan private CDN tidak serumit dan tidak harus menggunakan resource yang banyak atau besar.
Pahami desain Infrastruktur dan Aplikasi yang kita miliki, kemudian bandingkan dengan pola pengunjung yang datang ke website kita. Dari sini kita bisa dapat tentukan jenis CDN manakah yang paling sesuai dengan kita.
Mungkin kedepannya bisa kita padukan dengan Varnish, Naxsi, Filter_module, L3/L7 Firewall dan fitur lainnya, dengan tujuan Performance, Security, Availability, Cost ataupun Scalability, Kita sendiri yang tentukan!
Leave a Reply