Jumat, 18 November 2016

KONSEP CLOUD COMPUTING PERTEMUAN KE-6

NoSQL dan RDBMS


NoSQL (Not Only SQL)
NoSQL adalah sebuah konsep mengenai penyimpanan data non-relasional. Berbeda dengan model basis data relasional yang selama ini digunakan, NoSQL menggunakan beberapa metode yang berbeda-beda ( Wikipedia ). Metode ini bergantung dari jenis database yang digunakan. Karena NoSQL sendiri merupakan konsep database, dan pada implementasinya, banyak jenis-jenis dari NoSQL ini.

NoSQL sangat berguna pada data-data yang terus-menerus berkembang, dimana  data tersebut sangat kompleks sehingga sebuah database relational tidak lagi bisa mengakomodir. Salah satu bentuknya adalah ketika suatu data saling berhubungan satu sama lain, maka akan muncul proses duplikasi data. Dimana data saling memanggil ke beberapa permintaan, tambahan data baru, perubahan data, dan lain-lain dengan key yang sama. Karena faktor hubungan antar data yang sama terjadi terus-menerus, mendorong faktor redudansi data, data menjadi berlipat-lipat, dan pada akhirnya akan menyebabkan crash pada database berkonsep RDBMS.
Harus ada cara lain untuk menanggulangi masalah ini,  dan NoSQL lah solusinya. NoSQL menyederhanakan proses yang terjadi dalam sistem basis data relasional. Dimana hal-hal yang menyebabkan redudansi, dihilangkan sehingga trafik server akan seimbang. Penyederhanaan proses ini memungkinkan data direplikasi di banyak server secara mudah dan menjamin ketersediaan data.

Contoh nyata penjelasan diatas bisa teman-teman lihat pada situs jejaring sosial, FACEBOOK.COM. Pernahkah berfikir sebesar apa server penyimpanan facebook dengan anggota ribuan orang tersebut ?. Apabila teman-teman alim, mungkin tidak jadi masalah, tapi bagaimana jika ada yang narsis lalu sering upload foto setiap hari ?, bagaimana kalau setengah dari member facebook adalah orang-orang yang narsis ?, berapa besar ukuran yang dibutuhkan facebook pada servernya ?

RDBMS(Relational Database Management System)

Sebuah sistem manajemen basisdata relasional atau dalam bahasa Inggrisnya dikenal sebagai relational database management system (RDBMS) adalah sebuah program komputer (atau secara lebih tipikal adalah seperangkat program komputer) yang didisain untuk mengatur/memanajemen sebuah basisdata sebagai sekumpulan data yang disimpan secara terstruktur, dan melakukan operasi-operasi atas data atas permintaan penggunanya.

Contoh penggunaan DBMS ada banyak sekali dan dalam berbagai bidang kerja, misalnya akuntansi, manajemen sumber daya manusia, dan lain sebagainya. Meskipun pada awalnya DBMS hanya dimiliki oleh perusahaan-perusahaan berskala besar yang memiliki perangkat komputer yang sesuai dengan spesifikasi standar yang dibutuhkan (pada saat itu standar yang diminta dapat dikatakan sangat tinggi) untuk mendukung jumlah data yang besar, saat ini implementasinya sudah sangat banyak dan adaptatif dengan kebutuhan spesifikasi data yang rasional sehinggal dapat dimiliki dan diimplementasikan oleh segala kalangan sebagai bagian dari investasi perusahaan.
Tiga prinsip dalam RDBMS :

Data definition
Mendefinisikan jenis data yang akan dibuat (dapat berupa angka atau huruf), cara relasi data, validasi data dan lainnya.
Data Manipulation
Data yang telah dibuat dan didefinisikan tersebut akan dilakukan beberapa pengerjaan, seperti menyaring data, melakukan proses query, dsb.
Data Control
Bagian ini berkenaan dengan cara mengendalikan data, seperti siapa saja yang bisa melihat isi data, bagaimana data bisa digunakan oleh banyak user, dsb.
                                                    
    Implementasi NoSql (CRUD)
Alasan penggunaan model basis data NOSQL didasari oleh berbagai kebutuhan akan beberapa hal yaitu :
  1. Data Store (Penyimpanan Data) : Dimana data disimpan dalam ukuran dalam ukuran Exabyte. Sebuah Exabyte sama dengan satu milyar Gigabytes (GB) data. Menurut internet.com , jumlah tambahan data yang disimpan pada tahun 2010 adalah 1.000 exabyte hanya 4 tahun kemudian pada tahun 2014, jumlah data yang disimpan hampir mencapai 50.000 exabyte ,itu artinya terjadi peningkatan yang sangat luar biasa. Dengan kata lain, ada banyak data yang disimpan di dunian dan akan terus tumbuh.
  2. Interconnected Data (Data yang saling berhungan) : sehingga data diseluruh dunia menjadi terhubung. Pembuatan web didukung dengan adanya hyperlink, blog memiliki pingbacks dan setian system jaringan utama social memiliki tag yang mengaitkan sesuatu dengan yang lainya. System utama yang dibangun untuk saling berhubungan. 
  3. Complex Data structure (struktur data yang rumit) : dalam hal ini berarti NoSQL dapat dengan mudah menangani struktur hierarkis data bersarang . sedangkan SQL pada RDBMS, hal ini rumit dan sulit dilakukan, karena butuh beberapa table relasional dengan berbagai macam kunci. Selain itu, ada hubungan antara kinerja dengan kompleksitas data.
NoSQL memiliki banyak kelebihan , diantaranya adalah :
  1. Mudah digunakan pada convensional load-balanced cluster
  2. Data yang tetap (Persitent data) , tidak sekedar cache yang selalu diupdate  
  3. Dapat dilakukan pengukuran terhadap ketersediaan memory
  4. Tidak ada skema tetap dan memungkinkan migrasi skema tanpa downtime
  5. Memiliki system query sendiri
  6. Bersifat ACID (Atomicity, Consistency, Isolation, Durability)
Basis data NoSQL dapat dibagi menjadi 4 kategori dasar yaitu :
1). Key Values stores : adalah suatu hash table yang memiliki key unik dan pointer ke item tertentu data. Pemetaan ini biasanya diikuti oleh mekanisme cache untuk memaksimalkan kinerja. Contohnya pada Tokyo Cabinet, Redis, Voldemort, Oracle BDB. Jenis aplikasi yang dapat menggunakannya adalah Aplikasi Content Caching, sedangkan contoh penerapanya apikasinya adalah pada pembuatan forum software, dimana terdapat sebuah home profile page yang memiliki statistic apa yang telah dilakukan oleh user / penggunanya.
2). Column Family stores : adalah tempat yang digunakan untuk menyimpan dan memproses jumlah data yang sangat besar, yang tersebar di berbagai lokasi. Disini masih terdapat beberapa key, tapi untuk mengacu ke multiple column. Dalam hal ini BigTable (model dari Column Family NoSQL milik Google), baris diidentifikasikan oleh suatu baris key dengan data yang terurut dan disimpan oleh key tersebut.
3). Document Databases : diinpirasikan oleh Lotus Notes dan mirip dengan Key-Values Stores, model ini pada dasarnya merupakan dokumen yang menyimpan kumpulan Key-Values Collections. Dokumen yang semi terstruktur disimpan dalam format seperti JSON, contohnya adalah CouchDB dan MongoDB. Jenis aplikasi yang menggunakanya adalah Aplikasi Web.
4). Graph Databases : adalah suatu baris data yang dibangun oleh kumpulan node , relasi antara notes dan karakteristik node. Pada basis data ini tidak digunakan table yang terdiri dari baris dan kolom serta SQL yang kaku, tetapi memakai model graf yang dapat diterapkan di berbagai mesin. Contoh dari basis data graf (Graph Databases) adalah Neo4J, InfoGrid dan InfiniteGraph. Aplikasi yang menggunakannya biasanya aplikasi yang bersifat Social Networking seperti facebook dan twitter (Tim Perdue, 2013).
Gambar berikut adalah perbedaan cara kerja NoSQL dengan RDBMS dalam hal pendistribusian data :

Pada gambar diatas terlihat bahwa dengan menggunakan NoSQL , data dapat didistribusikan dan secara otomatis melalui database nodes , sekaligus juga dapat mencatat data tersebut. Jika kita ingin mencatat dan menyimpan data ke 20 entitas pada suatu database cluster dengan 3 nodes maka mungkin saja data tersebut dicatat di semua nodes. Database tidak perlu melakukan singkronisasi antar node terlebih dahulu, juga tidak memerlukan 2 fase commit, dan client 1 dapat melihat perubahan pada node 1 sebelum client 2 selesai menulis ke 20 entias. Sedangkan pada RDBMS hal tersebut tidak dapat dilakukan.
Selain kemudahan dalam proses pendistribusian data , pada basis data NoSQL juga terdapat beberapa kelemahan – kelemahan , diantaranya :
1.      Pada basis data NoSQL sering terjadi data yang tidak konsisten , karena pada mayoritas basis data No SQL digunakan pada aplikasi yang harus menyimpan dan memproses banyak data dengan cepat seperti website jejaring social, mesin pencari dan lain sebagainya. Sebagai konsekuensi dari pilihan tersebut, NoSQL mengorbankan kemudahan untuk konsistensi data. Ketidakkonsistenan sebuah basis data dapat menyebabkan kesalahan yang sangat fatal dalam beberapa kasus. Sebagai contoh dalam sebuah aplikasi penjualan online seperti Amazon saat ada dua atau lebih pembeli yang melakukan transaksi pembelian pada barang yang sama, pada system basis data yang tidak konsisten akan mengijinkan kedua transaksi tersebut. Akibatnya, apabila stok barang yang bersangkutan hanya satu, maka salah satu pembeli akan dirugikan karena validasi transaksi dan pembayaran tetap berhasil, namun barang tidak tersedia. Meskipun aplikasi yang menggunakan basis data NoSQL dapat merekayasa konsistensi data melalui pemrograman, dengan cara membuat middleware layer ( solusi xiang [25] ) yang menggunakan algoritma hash untuk mempartisi dan mereplikasi data. Algoritma yang digunakan dapat memastikan konsistensi pada basis data NoSQL yang terpartisi pada beberapa node, bahkan mampu mengidentifikasi jika ada salah satu node server yang hilag (rusak atau tidak terhubung). Sayangnya solusi semacam ini juga mengakibatkan menurunnya performa server dan meningkatnya waktu pemrosesan query.
2.      NoSQL merupakan sebuah implementasi sub-optimal , karena menggunakan paradikma brute force untuk pemrosesan data, bukan menggunakan indexing yang lebih baik.
3.      Tidak menyediakan fitur yang sudah banyak digunakan oleh pengembang yang menggunakan basis data relasional.
4.      Tidak kompatibel dengan perangkat – perangkat yang sudah biasa digunakan oleh pengguna.
5.      Masih sedikitnya tenaga professional yang benar – benar memahami konsep basis data NoSQL (non relasional) , karena konsep basis data ini relative masih baru jika dibandingkan dengan basis data relasional yang sudah berjalan berpuluh – puluh tahun.
Konsep utama dari penerapan NoSQL adalah bagaimana mengatasi jumlah data yang sangat besar dan ledakan data dalam aplikasi web sebagai paradikma baru dalam penerapan basis data. Permasalahan dalam RDBMS mengenai skalabilitas dan partisi data , dapat diatasi menggunakan NoSQL , NoSQL memiliki beberapa keunggulan seperti basis data non-relasional (meliputi hierarki, graph dan basis data object oriented) , mapreduce yang diambil dari fungsi pemrograman diterapkan untuk menghasilkan data set yang besar, schema free yang memungkinkan dimana tidak terdapat table, kolom, kunci primer dan sekunder, join dan relasi. Horizontal scallingyang memungkinkan basis data untuk dijalankan di beberapa server untuk meningkatkan penyimpanan dan peningkatan waktu akses untuk mengatasi permasalahan banyaknya data.
NoSQL merupakan alternatif dari RDBMS dalam hal pendistribusian data , bukan penanganan masalah secara keseluruhan terutama transaksi yang tinggi dan bersifat sensitif, NoSQL tidak menerapkan konsistensi dan integritas data , hal ini membuat programmer harus bekerja ekstra untuk mengatasinya dari sisi pemrograman.

    Mengenal MongoDB
MongoDB merupakan sebuah sistem basis data yang berbasis dokumen (Document Oriented Database). Konsep ini sangat membingungkan kalo kita terbiasa dengan RDMS.MongoDB tidak ada yang namanya tabel, kolom dan baris. Dalam MongoDB yang ada hanyalah koleksi (collection – bisa dianggap Table) dan dokumen (document – bisa dianggap row). Koleksi dalam MongoDB bisa kita anggap sebuah Folder (Directory) dan Dokumen bisa kita anggap berkas (File) dalam Folder (Koleksi) tersebut.
Pada MongoDb kita tidak mengenal istilah RELASI karena kita befikir dalam kerangka dokumen. semua yang kita butuhkan diletakkan didalam sebuah dokumen.

KELEBIHAN MongoDB
MongoDB merupakan sistem basis data yang menggunakan konsep key-value, artinya setiap dokumen dalam MongoDB pasti memiliki key. Hal ini berbeda dalam RDMBS yang kita bisa tidak menggunakan primary key ketika membuat sebuah tabel. Sehingga walaupun kita membuat sebuah dokumen tanpa menggunakan primary key, tapi secara otomatis MongoDB memberinya sebuah key. Penggunaan konsep key-value sangat berperan penting, karena hal ini membuat MongoDB menjadi sistem basis data yang sangat cepat jika dibandingkan dengan non key-value seperti RDBMS.
MongoDB mendukung replikasi, selain itu konfigurasi replikasi pada MongoDB sangatlah mudah jika dibandingkan sistem basis data RDBMS (IMHO). Hal ini membuat pemilik sistem yang memiliki traffic membaca tinggi (seperti portal berita, forum dan blog) akan sangat terbantu ketika sistemnya akan menggunakan replikasi.
Selain replikasi, MongoDB juga mendukung sharding. Jika Anda pernah melakukan sharding di RDBMS yang sangat berdarah-darah  , maka akan sangat kagum dengan sharding di MongoDB. Kapan kita menggunakan sharding? Saat Anda memiliki website yang sudah sangat besar jumlah penggunanya, datanya mencapat jutaan giga byte. Anda dapat menggunakan sharding, misal membasis basis data Anda menjadi per regional.
Salah satu kelebihan MongoDB lainnya adalah, MongoDB mendukung model pemrograman MapReduce, sebuah konsep yang sangat fenomenal yang pernah dikeluarkan oleh Google dan saat ini banyak diimplementasikan seperti pada Apache Hadoop.
MongoDB memiliki banyak sekali kelebihan yang diantaranya, yaitu:
1. Sangat bagus untuk data list produk, karena MongoDB bisa melakukan searching lebih cepat ketimbang MySql
2. Kita tidak perlu membuat struktur tabel, kita hanya perlu melakukan proses insert maka MongoDB akan otomatis membuatkan struktur tabelnya
3. Proses CRUD (Create, Update, Delete) terasa sangat ringan (waktu saya mencobanya menggunakan PHP)

Bahasa MongoDb
MongoDB tidak menggunakan bahasa yang biasa digunakan RDBMS (SQL atau PL/SQL). MongoDB menggunakan bahasa BSON, dimana BSON merupakan singkatan dari Binary JSON. Jika Anda terbiasa menggunakan JavaScript, pasti tidak akan terlalu sulit menggunakan MongoDB.


KONSEP CLOUD COMPUTING PERTEMUAN KE-5

LAYANAN CLOUD COMPUTING

Cloud Computing atau komputasi awan merupakan kombinasi pemanfaatan teknologi komputer dengan pengembangan berbasis internet. Sebutan cloud sendiri merupakan sebuah istilah yang diberikan pada teknologi jaringan internet.
Pada teknlogi komputasi berbasis awan semua data berada dan disimpan di server internet, begitu juga dengan aplikasi ataupun software yang pada umumnya dibutuhkan pengguna semuanya berada di komputer server. Sehingga kita tidak perlu melakukan instalasi pada server. Tetapi pengguna harus terhubung ke internet untuk bisa mengakses dan menjalankan aplikasi yang berada di server tersebut.
Dengan kata lain pengguna bisa saja hanya menyediakan sebuah komputer dan perangkat jaringan internet untuk bisa terhubung ke server internet dan menyimpan data di komputer server tanpa harus menyediakan hard-disk yang berkapasitas besar pada komputernya sendiri untuk menyimpan datanya, begitu juga dengan program aplikasi katakanlah seperti Microsoft Office, Excel dan lain sebagainya pengguna bisa menjalankan aplikasi tersebut di server internet sehingga tidak perlu repot-repot untuk menginstal aplikasi tersebut di komputernya sendiri. Dengan Kata lain kita tidak perlu investasi server berbentuk fisik, kita tidak perlu maintain hardware server.
Berdasarkan jenis layanan-nya, Cloud Computing dibagi menjadi berikut ini:
Dibawah ini kita bahas, masing-masing jenis layanan Cloud Computing:

Software as a Service (SaaS)
Adalah salah satu layanan dari Cloud Computing dimana kita tinggal memakai software (perangkat lunak) yang telah disediakan. User hanya tahu bahwa perangkat lunak bisa berjalan dan bisa digunakan dengan baik. Contoh: layanan email publik (Gmail, YahooMail, Hotmail, dsb), social network (Facebook, Twitter, dsb) instant messaging (Yahoo Messenger, Skype, GTalk, dsb) dan masih banyak lagi yang lain.  Dalam perkembangan-nya, banyak perangkat lunak yang dulu hanya kita bisa nikmati dengan menginstall aplikasi tersebut di komputer kita (on-premise) mulai sekarang bisa kita nikmati lewat Cloud Computing. Keuntungan-nya, kita tidak perlu membeli lisensi dan tinggal terkoneksi ke internet untuk memakai-nya. Contoh: Microsoft Office yang sekarang kita bisa nikmati lewat Office 365, Adobe Suite yang bisa kita nikmati lewat Adobe Creative Cloud, dsb.

Platform as a Service (PaaS)
Adalah layanan dari Cloud Computing kalau kita analogikan dimana kita menyewa “rumah” berikut lingkungan-nya (sistem operasi, network, database engine, framework aplikasi, dll), untuk menjalankan aplikasi yang kita buat. Kita tidak perlu pusing untuk menyiapkan “rumah” dan memelihara “rumah” tersebut. Yang penting aplikasi yang kita buat bisa berjalan dengan baik di “rumah” tersebut. Untuk pemeliharaan “rumah” ini menjadi tanggung jawab dari penyedia layanan. Sebagai analogi, misal-nya kita sewa kamar hotel, kita tinggal tidur di kamar yang sudah kita sewa, tanpa peduli bagaimana “perawatan” dari kamar dan lingkungan-nya. Yang penting, kita bisa nyaman tinggal di kamar itu, jika suatu saat kita dibuat tidak nyaman, tinggal cabut dan pindah ke hotel lain yang lebih bagus layanan-nya. Contoh penyedia layanan PaaS ini adalah: Amazon Web Service, Windows Azure,  bahkan tradisional hosting-pun merupakan contoh dari PaaS. Keuntungan dari PaaS adalah kita sebagai pengembang bisa fokus pada aplikasi yang kita buat, tidak perlu memikirkan operasional dari “rumah” untuk aplikasi yang kita buat.

Infrastructure as a Service (IaaS)
Adalah layanan dari Cloud Computing dimana kita bisa “menyewa” infrastruktur IT (komputasi, storage, memory, network dsb). Kita bisa definisikan berapa besar-nya unit komputasi (CPU), penyimpanan data (storage) , memory (RAM), bandwith, dan konfigurasi lain-nya yang akan kita sewa. Mudah-nya, IaaS ini adalah menyewa komputer virtual yang masih kosong, dimana setelah komputer ini disewa kita bisa menggunakan-nya terserah dari kebutuhan kita. Kita bisa install sistem operasi dan aplikasi apapun diatas-nya. Contoh penyedia layanan IaaS ini adalah: Amazon EC2, Windows Azure (soon), TelkomCloud, BizNetCloud, dsb. Keuntungan dari IaaS ini adalah kita tidak perlu membeli komputer fisik, dan konfigurasi komputer virtual tersebut bisa kita rubah (scale up/scale down) dengan mudah. Sebagai contoh, saat komputer virtual tersebut sudah kelebihan beban, kita bisa tambahkan CPU, RAM, Storage dsb dengan segera.

Web Services
Seperti yang dijelaskan sebelumnya bahwa cloud computing sebagai aplikasi-aplikasi yang dapat diakses melalui internet sebagai servis-servis, maka konsumen bisa secara spesifik meminta servis-servis cloud melalui web browser atau web services.
Web service bukan merupakan aplikasi yang dapat berinteraksi secara langsung dengan user. Melainkan web service memberikan kemampuan untuk berkomunikasi dengan aplikasi lain yang prosesnya dibutuhkan oleh user secara tidak langsung. Proses yang digunakan oleh web service untuk berkomunikasi dengan aplikasi lainnya menggunakan teknologi internet. Dalam menghubungkannya web service menggunakan sebuah message yang dapat dipahami oleh bahasa pemrograman yaitu Extensible Markup Language (XML).
Web services dapat dilihat sebagai sebuah cara mendesain interaksi yang fleksibel lintas aplikasi-aplikasi dan lintas batas-batas yang tegas. Terminologi web services menunjukkan sekelompok teknologi yang memperkenankan proses-proses bisnis atau informasi untuk diakses melalui internet. Web services didesain untuk mendukung interaksi antar aplikasi. Teknologi ini memperkenankan aplikasi-aplikasi berkomunikasi tanpa bantuan manusia.

SOA (Service Oriented Architecture)
(service oriented architecture, arsitektur berorientasi layanan) adalah suatu gaya arsitektur sistem yang membuat dan menggunakan proses bisnis dalam bentuk paket layanan sepanjang siklus hidupnya. SOA juga mendefinisikan dan menentukan arsitektur teknologi informasi (TI) yang dapat menunjang berbagai aplikasi untuk saling bertukar data dan berpartisipasi dalam proses bisnis. Fungsi-fungsi ini tidak terikat dengan sistem operasi dan bahasa pemrograman yang mendasari aplikasi-aplikasi tersebut.
SOA membagi fungsi-fungsi menjadi unit-unit yang berbeda (layanan), yang dapat didistribusikan melalui suatu jaringan dan dikombinasikan serta digunakan ulang untuk membentuk aplikasi bisnis. Layanan-layanan ini saling berkomunikasi dengan mempertukarkan data antar mereka atau dengan mengkoordinasikan aktivitas antara dua atau lebih layanan. Konsep SOA sering dianggap didasari atau berkembang dari konsep-konsep yang lebih lama dari komputasi terdistribusi dan pemrograman modular.

Interoperabilitas
Interoperabilitas adalah kapabilitas dari suatu produk atau sistem -- yang antar mukanya diungkapkan sepenuhnya -- untuk berinteraksi dan berfungsi dengan produk atau sistem lain, kini atau di masa mendatang, tanpa batasan akses atau implementasi.
Interoperabilitas merupakan kemampuan berbagai ragam sistem untuk bekerja sama dan kemampuan sebuah sistem untuk bekerja atau digunakan oleh sistem lain (Merriam Webster).
Interoperabilitas adalah sebuah kooperasi antar obyek yang berbeda untuk memungkinkan terjadinya pertukaran data/informasi diantara mereka. Model interoperabilitas bisa dalam bentuk kaku (tightly) atau bebas (loosely).
Jadi Interoperabilitas adalah dimana suatu kemampuan berbagai ragam sistem atau aplikasi untuk bekerja sama dan bisa berinteraksi dengan aplikasi lainnya yang berbeda untuk memungkinkan terjadinya pertukaran data/informasi melalui suatu protokol yang disetujui bersama, lewat bermacam-macam jalur komunikasi, biasanya lewat network TCP/IP dan protokol HTTP dengan memanfaatkan file XML.
Karakteristik Interoperabilitas berdasarkan level;
  Level hardware: bagaimana perbedaan karakteristik (fisis, elektronis) komponen-komponen hardware dijembatani dalam rangka mewujudkan suatu fungsi/tujuan tertentu
                 Contoh: interaksi antara CPU – RAM – disk à interoperabilitas diwujudkan dengan cache dan buffer

Level network: bagaimana perbedaan hardware+OS bisa dijembatani, sehingga dua komputer yang berbeda bisa saling berkomunikasi
                   Pendekatan: protokol, standarisasi

Level software: bagaimana menjembatani perbedaan format data dan bahasa pemrograman
                    Interoperabilitas data
                    Interoperabilitas komunikasi aktif

Komposabilitas
Komposabilitas bila suatu metode desain memungkinkan komponen-komponen desain (reusable) yang ada untuk dipasang ke dalam sebuah sistem baru, maka metode desain akan menghasilkan suatu solusi modular yang tidak berulang.

REST
REST (REpresentational State Transfer) adalah suatu arsitektur metode komunikasi yang sering diterapkan dalam pengembangan layanan berbasis web.
Arsitektur REST, yang umumnya dijalankan via HTTP (Hypertext Transfer Protocol), melibatkan proses pembacaan laman web tertentu yang memuat sebuah file XML atau JSON. File inilah yang menguraikan dan memuat konten yang hendak disajikan. Setelah melalui sebuah proses definisi tertentu, konsumen akan bisa mengakses antarmuka aplikasi yang dimaksudkan.
Kekhasan REST terletak pada interaksi antara klien dan server yang difasilitasi oleh sejumlah tipe operasional (verba) dan Universal Resource Identifiers (URIs) yang unik bagi tiap-tiap sumberdaya. Masing-masing verba – GET, POST, PUT dan DELETE – memiliki makna operasional khusus untuk menghindari ambiguitas.
REST kerap dipergunakan dalam mobile application, situs web jejaring sosial, mashup tools, dan automated business processes.
Arsitektur REST yang decoupled (terpisah) serta beban komunikasi yang ringan antara produsen dan konsumen membuatnya populer di dunia cloud-based API, seperti yang disajikan oleh Amazon, Microsoft, dan Google.
Layanan berbasis web yang menggunakan arsitektur REST semacam itu dinamakan RESTful APIs (Application Programming Interfaces) atau REST APIs.

Cloud Stack
CloudStack merupakan platform software yang mengumpulkan sumberdaya-sumberdaya komputasi menjadi sebuah Cloud IaaS (infrastructure as a service). Bayangkanlah Amazon EC2 yang dapat diinstall di data center pribadi kita.


Service Offering - mirip Amazon EC2

Dengan CloudStack, kita bisa memberikan layanan cloud ke user kita.. Mereka dapat melaunch Server sesuai keinginan asalkan masih di batas kuota dan kapasitas sistem.



Pilihan Template VM

Sebenarnya komponen utama CloudStack adalah aplikasi web berbasis Java yang melakukan provisioning ke software hypervisor berupa XenServer, VMWare, ataupun KVM. Sebuah Cluster dalam terminologi CloudStack adalah sekumpulan host yang dikendalikan oleh hypervisor yang seragam. 

Apa yang didapat dari CloudStack antara lain :
  • ·         Manajemen sentral berbasis web berfitur Ajax untuk VM-VM berbasis Xen, VMWare vSphere, ataupun KVM
  • ·         Repository tempat menyimpan template image VM yang dapat diintegrasikan dengan OpenStack Swift
  • ·         Konfigurasi offering VM : user dapat melaunch VM dengan memilih paket yang di dalamnya sudah terkonfigurasi ukuran memory, banyaknya CPU.
  • ·         Integrasi dengan Citrix Netscaler untuk Elastic load balancing dan Elastic IP
  • ·         Load balancing biasa dengan Virtual Router atau F5 BigIP
  • ·         Konfigurasi Firewall dan NAT untuk Virtual Router ataupun Jupiter SRX
  • ·         High Availability untuk VM yang dijalankan di CloudStack (Jika ada masalah dengan salah satu Host, CloudStack akan memboot VM tersebut di Host yang masih sehat dengan asumsi VM menggunakan virtual hard disk yang tersimpan di shared storage)
  • ·         Provisioning VLAN


Konsep Deployment Umum Cloudstack

CloudStack dideploy dengan menyediakan dua jenis storage, primary dan secondary. Secondary Storage digunakan untuk menyimpan template VM atau ISO sebagai image dasar pembuatan virtual machine. Primary storage digunakan untuk menyimpan data hard disk milik VM-VM. CloudStack sendiri menyimpan informasi di database MySQL. Dianjurkan untuk menyediakan 3 jalur jaringan pada semua host : jaringan publik internet, jaringan privat (LAN), dan jaringan khusus manajemen dan storage.

Salah satu konfigurasi deployment CloudStack

Aspek penting dalam high availability ialah moda failure yang disupport. Di dalam sistem di atas ada beberapa moda failure :
  • ·         Host Failure : kegagalan atau kerusakan pada host yang menjadi bagian dari Cluster
  • ·         Management Server Failure : kegagalan atau kerusakan pada server CloudStack
  • ·         Primary Storage Failure : kegagalan pada penyimpanan data utama (virtual hard disk)
  • ·         Secondary Storage Failure : kegagalan pada penyimpanan template atau ISO
  • ·         Management Server MySQL database failure : kegagalan pada database CloudStack


 Mekanisme host failure Failover pada CloudStack

Moda Failure yang ditangani oleh CloudStack ialah Host Failure. Secondary Storage failure ditangani oleh infrastruktur OpenStack Swift, yang menyimpan image secara rendundan pada cluster storagenya sendiri. Management Server Failure dapat ditangani dengan menjalankan CloudStack pada dua host yang diberi load-balancing. Mgmt Server MySQL database failure ditangani dengan memasang DRBD pada storage mysql atau mengkonfigurasi MySQL secara master-slave.

Digabungkan dengan High Availability Storage System (CloudStack tidak menyediakan layanan storage primary, hanya interface ke sistem storage berbasis iSCSI atau NFS) maka CloudStack dapat menjadi platform yang cukup robust untuk deployment sistem.