BAB 2. LANDASAN TEORI
2.1. Linux
Linux merupakan salah satu teknologi terpenting pada abad ke dua puluh satu.
Selain dampak dari pertumbuhan internet, pengembangan Linux telah menjadi sebuah model yang menunjukkan bagaimana proyek yang dikolaborasikan bersama-sama dapat melampaui apa yang seperti perusahaan atau individu lakukan.
(Negus, 2012)
Gambar 2-1 Tux Logo sebagai maskot Linux
Sistem Linux modern saat ini telah berkembang lebih jauh dibandingkan dengan sistem UNIX pertama kali. Beberapa fitur yang biasa digunakan dalam Linux di antaranya:
1. Clustering. Linux dapat dikonfigurasi untuk bekerja di dalam sebuah cluster, sehingga beberapa sistem dapat terlihat sebagai suatu kesatuan sistem.
2. Virtualisasi. Virtualisasi digunakan untuk mengatur sumber daya dengan lebih efisien. Linux dapat menjalankan fungsi Host pada virtualisasi, sehingga sistem operasi lain seperti Microsoft Windows, BSD, maupun sistem Linux yang lainnya dapat dijalankan di atas Host tersebut.
3. Real-time computing. Linux dapat dikonfigurasi untuk proses komputasi secara Real-time, di mana proses dengan prioritas tinggi dapat mengharapkan kecepatan dan terprediksi.
4. Specialized Storage. Tidak hanya menyimpan data pada Harddisk komputer, varian dari penyimpanan lokal maupun jaringan tersedia di Linux, seperti iSCSI, Fibre Channel, dan Infiniband.
2.2. Python
Python merupakan bahasa pemrograman yang dapat digunakan secara efektif untuk membuat hampir segala jenis program yang tidak memerlukan akses langsung terhadap hardware komputer. Python memiliki beberapa kelebihan dibandingkan bahasa pemrograman lainnya, salah satunya mudah dipelajari karena memiliki bahasa yang relatif lebih simple. (Guttag, 2016)
Gambar 2-2 Logo Python
Sejak pertama kali diperkenalkan oleh Guido von Rossum pada tahun 1990, Python mengalami banyak perubahan. Dekade pertama sejak kelahirannya, masih sedikit yang menggunakan bahasa pemrograman Python. Hal tersebut mulai berubah ketika Python versi 2.0 diperkenalkan pada tahun 2000. Orang-orang mulai membangun libraries yang terintegrasi dengan Python dan melanjutkan ekosistem dari pengembangan Python.
Pada akhir tahun 2008 Python 3.0 dirilis. Versi ini dibuat untuk membersihkan ketidak-konsistenan pada rancangan Python versi 2 (dikenal sebagai Python 2.x).
Namun versi tersebut tidak kompatibel dengan versi sebelumnya, artinya program yang dirancang menggunakan Python versi sebelumnya tidak dapat berjalan jika diimplementasikan menggunakan Python versi 3.
2.3. Nginx
Berdasarkan hasil survey yang diadakan pada Oktober 2015, hampir 35 persen dari World Wide Web menggunakan Apache sebagai aplikasi web server. Namun, laporan yang sama menyebutkan bangkitnya kompetitor dalam beberapa tahun terakhir: Nginx, sebuah HTTP server yang berasal dari Rusia dan disebut “engine x”.
Gambar 2-3 Logo Nginx
Nginx pertama kali diperkenalkan pada tahun 2002 oleh Igor Sysoev, untuk menangani trafik tinggi website Rusia bernama Rambler yang sampai bulan September 2008 melayani 500 juta HTTP request setiap harinya. Saat ini Nginx banyak digunakan oleh banyak situs populer seperti Wikipedia, WordPress, Dropbox dan masih banyak lagi.
Beberapa aspek yang menjadikan Nginx lebih efisien dibandingkan dengan kompetitornya adalah karena kecepatannya. Dengan menggunakan asynchronous socket, Nginx tidak membuat proses baru sebanyak permintaan yang diterima. Satu proses per core mampu menangani ribuan koneksi. File konfigurasi lebih mudah dibaca dan dikustomisasi menggunakan Nginx dibandingkan web server lainnya.
Nginx memadukan kecepatan, efisiensi dan kekuatan untuk menjadikannya layanan web server yang sukses. (Nedelcu, 2015)
2.4. Postgresql
Postgresql adalah sebuah relational database Management system yang bersifat open source. Postgresql bermula dari sebuah proyek penelitian di University of California, Berkeley.
Gambar 2-4 Logo Postgresql
Postgresql memiliki fitur-fitur enterprise seperti SQL windowing function, kemampuan untuk membuat aggregate function dan memanfaatkannya ke dalam window constructs, common table and recursive common table expressions, dan replikasi streaming. Fitur-fitur tersebut jarang ditemukan pada database yang bersifat open source namun sudah menjadi hal umum pada versi terbaru dari proprietary database seperti Oracle, SQL Server dan DB2. (Obe & Hsu, 2014) 2.5. Redis
Redis merupakan sebuah key-value-based NoSQL datastore yang dibangun oleh Salvatore Sanfilippo dan diperkenalkan pada tahun 2009. Redis merupakan
akronim dari REmote Dictionary Server. Redis dapat dijalankan pada semua sistem Unix yang sudah sesuai dengan standar POSIX. (Das, 2015)
Gambar 2-5 Logo Redis
Beberapa keunggulan Redis sebagai key-value datastore antara lain:
1. Penambahan set data sangat cepat pada key-value datastores, dan Redis termasuk ke dalamnya.
2. Dengan Redis, semua data tersimpan dalam memori. Hal ini untuk memastikan pencarian data, sehingga kecepatan membaca menjadi lebih tinggi. Meskipun akan sangat baik jika semua keys dan values disimpan di dalam memori, terdapat kekurangannya. Permasalahan yang sering dihadapi adalah kebutuhan memori yang lebih tinggi. Redis mengatasi hal tersebut dengan mengenalkan virtual Memory. Virtual Memory akan menyimpan semua keys pada memori, namun menuliskan values yang terpakai sebelumnya ke dalam disk.
3. Penanganan kegagalan pada Redis bergantung terhadap topologi cluster.
Redis menggunakan topologi master-slave. Setiap data yang terdapat pada master, secara asinkronus tersalin ke slave. Jika master node mengalami kegagalan, salah satu dari slave dapat dijadikan perannya sebagai master menggunakan Redis sentinel.
4. Redis memiliki proses yang lebih ringkas untuk mencapai load balancing.
Master digunakan untuk menulis data, sedangkan slave digunakan untuk membaca data.
5. Redis memiliki client dalam Java, Python, dan Node.js yang menerapkan Redis Serialization Protocol (RESP).
2.6. Linux Container
Linux Container (LXC) diperkenalkan pada tahun 2008 termasuk dengan teknologi CGroups, kernel, namespaces, dan chroot untuk menyediakan layanan Container.
Container merupakan sebuah aplikasi yang dienkapsulasi. Jika dilihat dengan sekilas, Container merupakan sebuah jenis virtual machines (VM) yang lebih ringan. Namun Container memiliki beberapa keuntungan dibandingkan virtual machines dalam kasus tertentu, di antaranya:
1. Container berbagi sumber daya dengan sistem operasi Host, yang membuat Container menjadi lebih efisien. Container dapat dijalankan dan dihentikan dalam hitungan detik. Aplikasi yang berjalan di dalam Container hampir tidak mengalami jeda dibandingkan dengan aplikasi yang langsung berjalan pada Host.
2. Portabilitas Container memiliki potensi untuk mengatasi berbagai macam bugs yang disebabkan oleh perubahan pada sistem yang berjalan.
3. Karena Container menggunakan sumber daya yang sangat kecil, para pengembang dapat menjalankan banyak Container dalam waktu yang bersamaan.
Gambar 2-6 Logo Container
VM dan Container memiliki tujuan yang berbeda. VM diperuntukan untuk meniru environment secara keseluruhan, sedangkan Container diperuntukkan untuk membuat aplikasi menjadi portabel.
Perbedaan Container dan VM dapat dilihat pada gambar 2-7 dan 2-8. Gambar 2-8 menunjukkan tiga aplikasi berjalan pada VM terpisah pada satu Host.
Hypervisor dibutuhkan untuk membuat dan menjalankan VM, mengontrol akses yang terdapat pada sistem operasi di dalamnya. Setiap VM membutuhkan salinan penuh dari satu buah sistem operasi, aplikasi yang berjalan serta library pendukung.
Gambar 2-7 Tiga VM berjalan pada satu Host
Gambar 2-8 menunjukkan bagaimana tiga aplikasi dapat berjalan dalam sistem Container. Tidak seperti VM, Container yang sedang berjalan berbagi sumber daya dengan kernel pada Host. Aplikasi Y dan Z menggunakan library yang sama dan dapat berbagi data tanpa harus membuat salinan sementara. Container engine bertugas untuk menjalankan dan menghentikan Container sebagaimana fungsi Hypervisor pada VM. Namun, proses yang berjalan di dalam Container sama seperti proses yang berjalan pada Host dan tidak menimbulkan overheads yang berhubungan dengan Hypervisor.
Gambar 2-8 Tiga aplikasi berjalan pada satu Host
VM dan Container dapat digunakan untuk mengisolasi aplikasi satu dari aplikasi lainnya yang berjalan pada Host yang sama. VM memiliki tingkat isolasi yang lebih tinggi karena Hypervisor, sedangkan Container masih belum mendapat kepercayaan lebih dari sisi kemampuan isolasi. (Mouat, 2015)
Tabel 2.1 Perbandingan jenis-jenis virtualisasi
Kemampuan LXD setara dengan virtual machine. Meskipun masih banyak isu terkai stabilitas dari LXD terutama dari segi network configuration, disk dan multiprocessor performance. (Gupta & Gera, 2016, p. 1417)
2.7. Flask
Flask adalah sebuah web framework untuk bahasa pemrograman Python yang dirancang khusus untuk menyediakan layanan dan fungsi yang dibutuhkan untuk membuat sebuah aplikasi web. Tidak seperti web framework lainnya, khususnya yang menggunakan bahasa pemrograman yang berbeda, Flask tidak memiliki ekosistem pustaka yang digabungkan ke dalamnya seperti pelayanan formulir atau basis data. (Stouffer, 2015)
Gambar 2-9 Logo Flask
Beberapa fitur yang dimiliki Flask antara lain:
1. Sebagai server development dan debugger 2. Mendukung UniCode
3. Sebagai WSGI (Web Server Gateway Interface) 4. URL Routing
5. Request Dispatching 6. Secure Cookies 7. Sessions
8. Jinja2 Template 2.8. SQLAlchemy
SQLAlchemy merupakan sebuah library yang digunakan untuk berinteraksi dengan berbagai macam basis data. SQLAlchemy memungkinkan untuk membuat model data dan memanggil data dengan cara seperti class dan statements yang ada pada Python. SQLAlchemy diciptakan oleh Mike Bayer pada tahun 2005, dan telah digunakan oleh banyak perusahaan baik kecil maupun besar, dan dipertimbangkan
oleh banyak orang sebagai salah satu cara untuk bekerja dengan basis data pada Python.
SQLAlchemy juga menyediakan banyak fleksibilitas dengan menyisipkan dua jenis kegunaan: SQL Expression Language (umumnya disebut sebagai Core) dan ORM. Cara tersebut dapat digunakan secara terpisah maupun bersamaan tergantung dari kebutuhan. (Myers & Copeland, 2015)
2.9. TAHAPAN PENGEMBANGAN RPL
Waterfall model mengambil kegiatan proses dasar spesifikasi, pengembangan, validasi, dan evolusi serta mewakili kegiatan tersebut sebagai fase proses terpisah seperti spesifikasi persyaratan, perancangan perangkat lunak, implementasi, pengujian dan sebagainya. (Sommerville, 2012)
Berikut merupakan tahapan dalam model waterfall:
1. Requirements analysis and definition
Sistem layanan, kendala, dan tujuan ditetapkan melalui konsultasi dengan pengguna sistem, kebutuhan tersebut kemudian ditetapkan secara rinci dan berfungsi sebagai spesifikasi sistem.
2. System and software design
Proses desain sistem mengalokasikan persyaratan baik untuk sistem perangkat keras atau perangkat lunak dengan mendirikan sebuah arsitektur sistem secara keseluruhan. Desain perangkat lunak melibatkan identifikasi dan menggambarkan abstraksi sistem perangkat lunak yang mendasar.
3. Implementation and unit testing
Selama tahap ini, desain perangkat lunak disadari sebagai serangkaian program atau unit program. Unit testing memverifikasi bahwa setiap unit sesuai spesifikasi.
4. Integration and system testing
Unit program individu atau program diintegrasikan dan diuji sebagai sistem yang lengkap untuk memastikan bahwa persyaratan perangkat lunak dapat dipenuhi.
5. Operational and maintenance
Fase ini merupakan fase terpanjang. Sistem ini dipasang dan dimasukkan ke dalam penggunaan praktis. Pemeliharaan melibatkan koreksi kesalahan yang tidak ditemukan dalam tahap awal siklus, meningkatkan implementasi unit sistem dan peningkatan pelayanan sistem.
Gambar 2-10 Tahapan model waterfall