Sorting algorithm adalah algoritma yang efisien dalam melakukan pengurutan elemen – elemen ke dalam urutan tertentu. Sorting algorithm mempermudah pengurutan data nilai – nilai array dalam berbagai cara dalam database. Sorting algorithm merupakan bagian penting dalam pengaturan data sehingga efisiensi mereka selalu menjadi tolak ukur. Efisiensi sorting algorithm lebih terlihat dalam mengurutkan data yang ukurannya beragam dan dalam jumlah yang besar (Sareen, 2013, p. 522).
2.2.17. Web 3.0
Web 3.0 merupakan era baru dari fase evolusi web. Web 3.0 memberikan suatu pengalaman baru dalam web, yang disebut sebagai 'web pintar'. Web 3.0 menggunakan teknologi-teknologi seperti Semantic Natural Language untuk mencari dan menerima informasi dari web. Data dapat berkomunikasi lintas aplikasi untuk memberikan pengalaman yang lebih canggih, sehingga interaksi manusia dengan komputer dapat menjadi real-time. Tidak hanya Semantic Natural Language, web 3.0 juga menggunakan teknologi-teknologi lainnya seperti, data mining, microformats, artificial intelligence, dan lain-lain (Waldbillig, 2012).
2.2.18. WebRTC
WebRTC bersifat gratis, open project yang memungkinkan web browser mempunyai kemampuan Real-Time Communications (RTC) melalui JavaScript API yang sederhana (WebRTC, Home, 2013).
WebRTC menawarkan kemampuan kepada web developers untuk mengembangkan aplikasi multimedia yang realtime yang kaya fitur (sebagai contoh: video chat) di web, tanpa memerlukan plugin. Ini bertujuan untuk membangun platform RTC yang kuat yang bekerja di beberapa web browser dan di beberapa platform (WebRTC, General Overview, 2013).
Sejauh ini hanya di dukung oleh browser Chrome dan Firefox. Proses komunikasi ini dilakukan dengan cara peer-to-peer antar browser dimana masing-masing pengguna terhubung dengan menggunakan URL unik (Dutton, Getting Started with WebRTC, 2013).
WebRTC menggunakan RTCPeerConnection untuk melakukan streaming data antar browser (peer to peer), namun di sini dibutuhkan sebuah mekanisme untuk mengoordinasi komunikasi dan pesan kontrol, sebuah proses yang kita kenal dengan signaling. Metode signaling dan protokolnya tidak ditentukan oleh WebRTC, sehingga developer wajib membuat sendiri proses signaling-nya. Pertukaran informasi lewat signaling harus diselesaikan sebelum streaming peer-to-peer dapat dilakukan (Dutton, Getting Started with WebRTC, 2013).
Signaling digunakan untuk bertukar tiga jenis informasi yaitu : • Session Control Messages :
Untuk membuka dan menutup komunikasi serta melaporkan error (Dutton, Getting Started with WebRTC, 2013).
• Network Configuration :
Memberitahu berapa IP address komputer dan port yang digunakan (Dutton, Getting Started with WebRTC, 2013).
• Media Capabilites : Codecs
dan resolusi apa yang dapat dijalankan browser dan bagaimana cara berkomunikasi dengan browser (Dutton, Getting Started with WebRTC, 2013).
Untuk menjaga keamanan data, WebRTC memiliki beberapa fitur yaitu :
• Implementasi WebRTC menggunakan secure protocols (Dutton, Getting Started with WebRTC, 2013).
• Enkripsi diwajibkan untuk seluruh komponen WebRTC termasuk mekanisme signaling (Dutton, Getting Started with WebRTC, 2013).
• WebRTC bukan sebuah plugin melainkan sebuah komponen yang berjalan dalam browser sandbox dan tidak dalam proses terpisah, komponen tidak membutuhkan instalasi terpisah dan di-update ketika browser melakukan update (Dutton, Getting Started with WebRTC, 2013).
• Akses kamera dan microphone dilakukan secara eksplisit dan ketika kamera atau microphone dijalankan terlihat dengan jelas di layar (Dutton, Getting Started with WebRTC, 2013).
Infrastruktur WebRTC sendiri menggunakan arsitektur JSEP (JavaScript Session Establishment Protocol). Dalam arsitektur ini data signaling disimpan dalam sebuah server khusus , bukan dalam browser. Tujuannya untuk menghindari hilangnya data setiap kali halaman dimuat ulang. Untuk berkomunikasi peer-to-peer dalam JSEP dibutuhkan proses offer dan answer antar kedua belah pihak dalam bentuk Session Description Protocol format (SDP) (Dutton, WebRTC in the real world : STUN, TURN and signaling, 2013).
Gambar 2.6 Arsitektur JSEP
Dalam melakukan koneksi, pertama kali WebRTC melakukan metadata signaling menggunakan server penengah. Ketika session telah terbuat proses koneksi dilakukan secara langsung dengan peer-to-peer. Secara sederhana, jika didunia ini setiap komputer memiliki alamat unik maka proses pertukaran data antar komputer dapat dilakukan secara langsung tanpa bantuan penengah.
Gambar 2.7 A World Without NATs and Firewalls
Namun kenyataannya kebanyakan perangkat berada di belakang satu atau lebih lapisan NAT, beberapa memiliki perangkat lunak antivirus yang memblokir port dan protokol tertentu, dan banyak juga yang berada di belakang proxy beserta firewall. Oleh karenanya aplikasi WebRTC menggunakan framework ICE (Interactive Connectivity Establishment) untuk mengatasi kompleksitas dunia networking.
Berikut gambaran proses yang dilakukan ICE untuk menemukan peers. Pertama-tama ICE mencari jalan terbaik untuk berhubungan dengan peers dengan cara mencoba semua kemungkinan dengan paralel dan memilih pilihan terbaik. ICE pertama kali mencoba membuat koneksi dengan alamat host yang didapat dari OS dan Network Card. Jika gagal berarti komputer host berada dibelakang NAT, maka ICE mencoba mengambil address eksternal dengan STUN server, dan jika gagal juga traffic diarahkan lewat TURN Relay Server. Dengan kata lain (Dutton, WebRTC in the real world : STUN, TURN and signaling, 2013) :
• Sebuah STUN server digunakan untuk mendapatkan alamat network eksternal
• TURN server digunakan untuk menyampaikan traffic jika koneksi peer-to-peer gagal.
Setiap TURN Server mendukung STUN, sebuah TURN Server merupakan STUN Server yang dilengkapi dengan fungsionalitas relay data secara builtin. Cara kerja STUN dan TRUN (Dutton, WebRTC in the real world : STUN, TURN and signaling, 2013) :
1. STUN
NAT menyediakan IP Address yang digunakan untuk jaringan lokal, namun alamat ini tidak dapat digunakan secara eksternal. Tanpa alamat publik, tidak ada jalan bagi WebRTC peers untuk berkomunikasi. Untuk memecahkan masalah ini WebRTC menggunakan STUN.
STUN Server dijalankan di jaringan internet dan memiliki satu tugas sederhana yaitu mengecek IP:port address dari request yang masuk (dari aplikasi di belakang NAT) lalu mengirimkan alamatnya kembali sebagai respon. Dengan kata lain, aplikasi menggunakan STUN server untuk mencari IP:Port dari perspektif publik. Proses ini memungkinkan WebRTC peer untuk mendapatkan alamat akses host publik lalu mengirimkannya ke target atau peer lainnya dengan mekanisme signaling (Dutton, WebRTC in the real world : STUN, TURN and signaling, 2013).
Gambar 2.9 Using STUN Servers to Get Public IP:Port Addresses
2. TURN
RTCPeerConnection mencoba membuat koneksi langsung antar peer melalui UDP. Jika gagal maka maka RTCPeerConnection mengalihkan ke TCP. Jika cara tersebut masih gagal, Server TURN dapat digunakan sebagai alternatif untuk berhubungan.
TURN Server memiliki alamat publik, sehingga dapat dihubungi oleh peer walaupun mereka berada di belakang firewall atau proxy. TURN server memiliki sebuah tugas sederhana yaitu untuk menyampaikan stream. Namun tidak seperti STUN server, mereka membutuhkan bandwidth yang lebih besar (Dutton, WebRTC in the real world : STUN, TURN and signaling, 2013).
Gambar 2.10 The Full Monty: STUN, TURN and Signaling
Diagram menunjukkan TURN berjalan ketika STUN gagal, sehingga masing-masing peer menggunakan sebuah TURN server untuk saling terhubung (Dutton, WebRTC in the real world : STUN, TURN and signaling, 2013).
2.2.19. CodeIgniter
CodeIgniter adalah sebuah perangkat Application Development Framework yang digunakan untuk membangun web menggunakan PHP. CodeIgniter memudahkan programer untuk membangun web lebih cepat karena programer tidak perlu menulis code dari awal. Programer dapat membangun web dengan cara menggunakan library yang telah ada untuk mengerjakan tugas – tugas yang biasa diperlukan, tampilan UI yang sederhana dan menggunakan struktur yang logic untuk mengakses library. CodeIgniter memungkinkan programmer bisa fokus dan kreatif pada proyek pengembangan aplikasinya dengan meminimalkan jumlah kode yang dibutuhkan untuk tugas yang diberikan (EllisLab, 2013).
2.2.20. Cassandra
Apache Cassandra adalah NoSQL database berskala besar dan open source. Cassandra sangat cocok untuk mengatur data yang besar baik terstruktur, semi terstruktur, maupun tidak terstruktur di data center dan cloud. Cassandra memberikan ketersediaan terus menerus, skalabilitas linier dan operasi yang mudah melalui banyak melalui banyak server tanpa suatu kesalahan, bersamaan dengan data model dinamis yang kuat dan didesain untuk fleksibilitas maksimal dan waktu respons yang cepat.
Gambar 2.11 Cassandra Ring
Cassandra menggunakan arsitektur “masterless” yang berarti semua node mempunyai kedudukan yang sama. Cassandra menyediakan distribusi data otomatis ke seluruh node yang terdapat dalam cluster database.
Casssandra menyediakan replikasi built-in dan dapat disesuaikan, yang menyimpan salinan data di seluruh node yang dalam cluster cassandra. Hal ini berarti jika ada cluster yang mati, maka satu atau lebih salinan data dapat diambil dari mesin cluster lainnya. Replikasinya bisa diatur pada satu data center, banyak data center, dan cloud.
Cassandra menyediakan pengembangan secara skalabilitas linier, yang berarti kapasitas dapat ditambahkan dengan mudah dengan cara menambahkan node baru secara online (DataStax, 2013).