Parallel Computation

Parallelism Concept
Komputasi paralel merupakan salah satu teknik komputasi, dimana proses komputasinya dilakukan oleh beberapa resources ( komputer ) yang independen, secara bersamaan. Komputasi paralel biasanya diperlukan pada saat terjadinya pengolahan data dalam jumlah besar ( di industri keuangan, bioinformatika, dll ) atau dalam memenuhi proses komputasi yang sangat banyak. Selanjutnya, komputasi paralel ini juga dapat ditemui dalam kasus kalkulasi numerik dalam penyelesaian persamaan matematis di bidang fisika ( fisika komputasi ), kimia ( kimia komputasi ), dll. Dalam menyelesaikan suatu masalah, komputasi paralel memerlukan infrastruktur mesin paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel.          
Untuk itu diperlukan aneka perangkat lunak pendukung yang biasa disebut sebagai middleware yang berperan untuk mengatur distribusi pekerjaan antar node dalam satu mesin paralel. Selanjutnya pemakai harus membuat pemrograman paralel untuk merealisasikan komputasi. Tidak berarti dengan mesin paralel semua program yang dijalankan diatasnya otomatis akan diolah secara paralel. Pemrograman paralel adalah teknik pemrograman komputer yang memungkinkan eksekusi perintah / operasi secara bersamaan ( komputasi paralel ), baik dalam komputer dengan satu ( prosesor tunggal ) ataupun banyak ( prosesor ganda dengan mesin paralel ) CPU. Bila komputer yang digunakan secara bersamaan tersebut dilakukan oleh komputer-komputer terpisah yang terhubung dalam suatu jaringan komputer lebih sering istilah yang digunakan adalah sistem terdistribusi ( distributed computing ). Tujuan utama dari pemrograman paralel adalah untuk meningkatkan performa komputasi. Semakin banyak hal yang bisa dilakukan secara bersamaan ( dalam waktu yang sama ), semakin banyak pekerjaan yang bisa diselesaikan.
Analogi yang paling gampang adalah, bila anda dapat merebus air sambil memotong-motong bawang saat anda akan memasak, waktu yang anda butuhkan akan lebih sedikit dibandingkan bila anda mengerjakan hal tersebut secara berurutan ( serial ). Atau waktu yang anda butuhkan memotong bawang akan lebih sedikit jika anda kerjakan berdua. Performa dalam pemrograman paralel diukur dari berapa banyak peningkatan kecepatan ( speed up ) yang diperoleh dalam menggunakan tehnik paralel. Secara informal, bila anda memotong bawang sendirian membutuhkan waktu 1 jam dan dengan bantuan teman, berdua anda bisa melakukannya dalam 1/2 jam maka anda memperoleh peningkatan kecepatan sebanyak 2 kali.

Arsitektur paralel komputer
Menurut Klasifikasi Flynn’s :
·         SISD
Single Instruction – Single Data. Komputer jenis ini hanya memiliki satu prosesor ( single processor ). Dimana semua instruksi di eksekusi secara serial ( terurut satu demi satu ) dan memungkinkan adanya overlapping di setiap bagian instruksi dalam pelaksanaan eksekusi. Komputer ini adalah tipe komputer konvensional. Beberapa contoh komputer yang menggunakan model SISD adalah UNIVAC1, IBM 360, CDC 7600, Cray 1 dan PDP 1.
·         SIMD
Single Instruction – Multiple Data. Komputer jenis ini hanya dapat mengeksekusi satu instruksi dan memiliki lebih dari satu prosesor. Satu eksekusi dilakukan secara paralel pada data yang berbeda pada level lock-step. Komputer vektor adalah salah satu komputer paralel yang menggunakan arsitektur ini. Beberapa contoh komputer yang menggunakan model SIMD adalah ILLIAC IV, MasPar, Cray X-MP, Cray Y-MP, Thingking Machine CM-2 dan Cell Processor ( GPU ).
·         MISD
Multiple Instructions – Single Data. Belum ada perwujudan nyata dari komputer jenis ini kecuali dalam bentuk prototipe untuk penelitian. Teorinya komputer ini memiliki satu prosesor dan mengeksekusi beberapa instruksi secara paralel tetapi praktiknya tidak ada komputer yang dibangun dengan arsitektur ini karena sistemnya tidak mudah dipahami.
·         MIMD
Multiple Instructions – Multiple Data. Komputer jenis ini dapat mengeksekusi lebih dari satu instruksi secara paralel dengan lebih dari satu prosesor. Tipe komputer ini yang paling banyak digunakan untuk membangun komputer paralel, bahkan banyak supercomputer yang menerapkan arsitektur ini. Beberapa komputer yang menggunakan model MIMD adalah IBM POWER5, HP/Compaq AlphaServer, Intel IA32, AMD Opteron, Cray XT3 dan IBM BG/L.
Distributed Processing :
Mengerjakan semua proses pengolahan data secara bersama antara komputer pusat dengan beberapa komputer yang lebih kecil dan saling dihubungkan melalui jalur komunikasi. Setiap komputer tersebut memiliki prosesor mandiri sehingga mampu mengolah sebagian data secara terpisah, kemudian hasil pengolahan tadi digabungkan menjadi satu penyelesaian total. Jika salah satu prosesor mengalami kegagalan atau masalah yang lain akan mengambil alih tugasnya.

Pengantar Thread Programming
Threading / Thread adalah sebuah alur kontrol dari sebuah proses. Konsep threading adalah menjalankan 2 proses ( proses yang sama atau proses yang berbeda ) dalam satu waktu. Contohnya sebuah web browser mempunyai thread untuk menampilkan gambar atau tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari network. Threading dibagi menjadi 2 :
·         Static Threading
Teknik ini biasa digunakan untuk komputer dengan chip multiprocessors dan jenis komputer shared-memory lainnya. Teknik ini memungkinkan thread berbagi memori yang tersedia, menggunakan program counter dan mengeksekusi program secara independen. Sistem operasi menempatkan satu thread pada prosesor dan menukarnya dengan thread lain yang hendak menggunakan prosesor itu.
·         Dynamic Multithreading
Teknik ini merupakan pengembangan dari teknik sebelumnya yang bertujuan untuk kemudahan karena dengannya programmer tidak harus pusing dengan protokol komunikasi, load balancing, dan kerumitan lain yang ada pada static threading. Concurrency platform ini menyediakan scheduler yang melakukan load balacing secara otomatis. Walaupun platformnya masih dalam pengembangan namun secara umum mendukung dua fitur : nested parallelism dan parallel loops.
Pengantar Massage Passing dan OpenMP
Message Passing Interface (MPI)
Massage Passing merupkan suatu teknik bagaimana mengatur suatu alur komunikasi messaging terhadap proses pada system. Message passing dalam ilmu komputer adalah suatu bentuk komunikasi yang digunakan dalam komputasi paralel , pemrograman-berorientasi objek , dan komunikasi interprocess . Dalam model ini, proses atau benda dapat mengirim dan menerima pesan yang terdiri dari nol atau lebih byte, struktur data yang kompleks, atau bahkan segmen kode ke proses lainnya dan dapat melakukan sinkronisasi. Objek didistribusikan dan metode sistem remote doa seperti ONC RPC , CORBA , Java RMI , DCOM , SOAP , . NET Remoting , CTO , QNX Neutrino RTOS , OpenBinder , D-Bus , Unison RTOS dan serupa pesan lewat sistem.Paradigma Message passing yaitu :
  1. Banyak contoh dari paradigma sekuensial dipertimbangkan bersama-sama.
  2. Programmer membayangkan beberapa prosesor, masing-masing dengan memori, dan menulis sebuah program untuk berjalan pada setiap prosesor.
  3. Proses berkomunikasi dengan mengirimkan pesan satu sama lain

MPI ini merupakan standard yang dikembangkan untuk membuat aplikasi pengirim pesan secara portable. Sebuah komputasi paralel terdiri dari sejumlah proses, dimana masing-masing bekerja pada beberapa data lokal. Setiap proses mempunyai variabel lokal, dan tidak ada mekanismesuatu proses yang bisa mengakses secara langsung memori yang lain. Pembagian data antar  proses dilakukan dengan message passing, yaitu dengan mengirim dan menerima pesan antar  proses. MPI menyediakan fungsi-fungsi untuk menukarkan antar pesan. Kegunaan MPI yang lain :
·         menulis kode paralel secara portable
·         mendapatkan performa yang tinggi dalam pemrograman paralel
·         menghadapi permasalahan yang melibatkan hubungan data irregular atau dinamis yang tidak  begitu cocok dengan model data paralel.
OpenMP
OpenMP merupakan API yang mendukung multi-platform berbagi memori multiprocessing pemrograman C , C + + , dan Fortran , pada kebanyakan arsitektur prosesor dan system operasi , termasuk Solaris , AIX , HP-UX , GNU / Linux , Mac OS X , dan Windows platform. Ini terdiri dari satu set perintah kompiler, rutinitas library, dan variable lingkungan yang mempengaruhi perilaku run-time. OpenMP dikelola oleh nirlaba teknologi konsorsium OpenMP Arsitektur Review Board (ARB atau OpenMP), bersama-sama didefinisikan oleh sekelompok perangkat keras komputer utama dan vendor perangkat lunak, termasuk AMD , IBM , Intel , Cray , HP , Fujitsu , Nvidia , NEC , Microsoft , Texas Instruments , Oracle Corporation , dan banyak lagi.
Pengantar Pemrograman CUDA GPU
GPU ( Graphical Processing Unit ) awalnya adalah sebuah prosesor yang berfungsi khusus untuk melakukan rendering pada kartu grafik saja, tetapi seiring dengan semakin meningkatnya kebutuhan rendering, terutama untuk mendekati waktu proses yang realtime, maka meningkat pula kemampuan prosesor grafik tersebut. akselerasi peningkatan teknologi GPU ini lebih cepat daripada peningkatan teknologi prosesor sesungguhnya ( CPU ), dan pada akhirnya GPU menjadi General Purpose, yang artinya tidak lagi hanya untuk melakukan rendering saja melainkan bisa untuk proses komputasi secara umum.
Penggunaan Multi GPU dapat mempercepat waktu proses dalam mengeksekusi program karena arsitekturnya yang natively parallel. Selain itu Peningkatan performa yang terjadi tidak hanya berdasarkan kecepatan hardware GPU saja, tetapi faktor yang lebih penting adalah cara membuat kode program yang benarbenar bisa efektif berjalan pada Multi GPU.
CUDA merupakan teknologi anyar dari produsen kartu grafis Nvidia, dan mungkin belum banyak digunakan orang secara umum. Kartu grafis lebih banyak digunakan untuk menjalankan aplikasi game, namun dengan teknologi CUDA ini kartu grafis dapat digunakan lebih optimal ketika menjalankan sebuah software aplikasi. Fungsi kartu grafis Nvidia digunakan untuk membantu Processor (CPU) dalam melakukan kalkulasi dalam proses data.
CUDA merupakan singkatan dari Compute Unified Device Architecture, didefinisikan sebagai sebuah arsitektur komputer parallel, dikembangkan oleh Nvidia. Teknologi ini dapat digunakan untuk menjalankan proses pengolahan gambar, video, rendering 3D, dan lain sebagainya. VGA – VGA dari Nvidia yang sudah menggunakan teknologi CUDA antara lain : Nvidia GeForce GTX 280, GTX 260,9800 GX2, 9800 GTX+,9800 GTX,9800 GT,9600 GSO, 9600 GT,9500 GT,9400 GT,9400 mGPU,9300 mGPU,8800 Ultra,8800 GTX,8800 GTS,8800 GT,8800 GS,8600 GTS,8600 GT,8500 GT,8400 GS, 8300 mGPU, 8200 mGPU, 8100 mGPU, dan seri sejenis untuk kelas mobile ( VGA notebook ).
Singkatnya, CUDA dapat memberikan proses dengan pendekatan bahasa C, sehingga programmer atau pengembang software dapat lebih cepat menyelesaikan perhitungan yang komplek. Bukan hanya aplikasi seperti teknologi ilmu pengetahuan yang spesifik. CUDA sekarang bisa dimanfaatkan untuk aplikasi multimedia. Misalnya meng-edit film dan melakukan filter gambar. Sebagai contoh dengan aplikasi multimedia, sudah mengunakan teknologi CUDA. Software TMPGenc 4.0 misalnya membuat aplikasi editing dengan mengambil sebagian proces dari GPU dan CPU. VGA yang dapat memanfaatkan CUDA hanya versi 8000 atau lebih tinggi.


Rujukan :


Quantum Computing


Quantum Computing
Dalam bahasa Indonesia yaitu komputer kuantum, merupakan komputer yang memanfaatkan fenomena-fenomena dari mekanika quantum, seperti quantum superposition dan quantum entanglement, yang digunakan untuk pengoperasian data.

Teori tentang komputer kuantum ini pertama kali dicetuskan oleh fisikawan dari Argonne National Laboratory sekitar 20 tahun lalu. Paul Benioff merupakan orang pertama yang mengaplikasikan teori fisika kuantum pada dunia komputer di tahun 1981.

Komputer yang biasa kita gunakan sehari-hari merupakan komputer digital. Komputer digital sangat berbeda dengan komputer kuantum yang super itu. Komputer digital bekerja dengan bantuan microprocessor yang berbentuk chip kecil yang tersusun dari banyak transistor. Microprocessor biasanya lebih dikenal dengan istilah Central Processing Unit (CPU) dan merupakan ‘jantung’nya komputer. Microprocessor yang pertama adalah Intel 4004 yang diperkenalkan pada tahun 1971. Komputer pertama ini cuma bisa melakukan perhitungan penjumlahan dan pengurangan saja. Memory komputer menggunakan sistem binaryatau sistem angka basis 2 (0 dan 1) yang dikenal sebagai BIT (singkatan dari Binary digIT).

Perhitungan jumlah data pada komputasi klasik dihitung dengan bit, sedangkan perhitungan jumlah data pada komputer kuantum dilakukan dengan qubit. Prinsip dasar komputer kuantum adalah bahwa sifat kuantum dari partikel dapat digunakan untuk mewakili data dan struktur data, dan bahwa mekanika kuantum dapat digunakan untuk melakukan operasi dengan data ini. Dalam hal ini untuk mengembangkan komputer dengan sistem kuantum diperlukan suatu logika baru yang sesuai dengan prinsip kuantum.

Quantum entanglement
Quantum entanglement  adalah bagian dari fenomena quantum mechanical yang menyatakan bahwa dua atau lebih objek dapat digambarkan mempunyai hubungan dengan objek lainnya walaupun objek tersebut berdiri sendiri dan terpisah dengan objek lainnya. Quantum entanglement merupakan salah satu konsep yang membuat Einstein mengkritisi teori Quantum mechanical. Einstein menunjukkan kelemahan teori Quantum Mechanical yang menggunakan entanglement merupakan sesuatu yang “spooky action at a distance” karena Einstein tidak mempercayai bahwa Quantum particles dapat mempengaruhi partikel lainnya melebihi kecepatan cahaya. Namun, beberapa tahun kemudian, ilmuwan John Bell membuktikan bahwa “spooky action at a distance” dapat dibuktikan bahwa entanglement dapat terjadi pada partikel-partikel yang sangat kecil.
Penggunaan quantum entanglement saat ini diimplementasikan dalam berbagai bidang salah satunya adalah pengiriman pesan-pesan rahasia yang sulit untuk di-enkripsi dan pembuatan komputer yang mempunyai performa yang sangat cepat.

Pengoperasian Data Qubit
Qubit merupakan kuantum bit , mitra dalam komputasi kuantum dengan digit biner atau bit dari komputasi klasik. Sama seperti sedikit adalah unit dasar informasi dalam komputer klasik, qubit adalah unit dasar informasi dalam komputer kuantum . Dalam komputer kuantum, sejumlah partikel elemental seperti elektron atau foton dapat digunakan (dalam praktek, keberhasilan juga telah dicapai dengan ion), baik dengan biaya mereka atau polarisasi bertindak sebagai representasi dari 0 dan / atau 1. Setiap partikel-partikel ini dikenal sebagai qubit, sifat dan perilaku partikel-partikel ini (seperti yang diungkapkan dalam teori kuantum ) membentuk dasar dari komputasi kuantum. Dua aspek yang paling relevan fisika kuantum adalah prinsip superposisi dan Entanglement
Superposisi, pikirkan qubit sebagai elektron dalam medan magnet. Spin elektron mungkin baik sejalan dengan bidang, yang dikenal sebagai spin-up, atau sebaliknya ke lapangan, yang dikenal sebagai keadaan spin-down. Mengubah spin elektron dari satu keadaan ke keadaan lain dicapai dengan menggunakan pulsa energi, seperti dari Laser - katakanlah kita menggunakan 1 unit energi laser. Tapi bagaimana kalau kita hanya menggunakan setengah unit energi laser dan benar-benar mengisolasi partikel dari segala pengaruh eksternal? Menurut hukum kuantum, partikel kemudian memasuki superposisi negara, di mana ia berperilaku seolah-olah itu di kedua negara secara bersamaan. Setiap qubit dimanfaatkan bisa mengambil superposisi dari kedua 0 dan 1. Dengan demikian, jumlah perhitungan bahwa komputer kuantum dapat melakukan adalah 2 ^ n, dimana n adalah jumlah qubit yang digunakan. Sebuah komputer kuantum terdiri dari 500 qubit akan memiliki potensi untuk melakukan 2 ^ 500 perhitungan dalam satu langkah. Ini adalah jumlah yang mengagumkan - 2 ^ 500 adalah atom jauh lebih dari yang ada di alam semesta (ini pemrosesan paralel benar - komputer klasik saat ini, bahkan disebut prosesor paralel, masih hanya benar-benar melakukan satu hal pada suatu waktu: hanya ada dua atau lebih dari mereka melakukannya). Tapi bagaimana partikel-partikel ini akan berinteraksi satu sama lain? Mereka akan melakukannya melalui belitan kuantum.
Untuk memanipulasi sebuah qubit, maka menggunakan Quantum Gates (Gerbang Kuantum). Cara kerjanya yaitu sebuah gerbang kuantum bekerja mirip dengan gerbang logika klasik. Gerbang logika klasik mengambil bit sebagai input, mengevaluasi dan memproses input dan menghasilkan bit baru sebagai output.

Quantum Gates
Quantum Gates / Gerbang Quantum merupakan sebuah aturan logika / gerbang logika yang berlaku pada quantum computing. Prinsip kerja dari quantum gates hampir sama dengan gerbang logika pada komputer digital. Jika pada komputer digital terdapat beberapa operasi logika seperti AND, OR, NOT, pada quantum computing gerbang quantum terdiri dari beberapa bilangan qubits, sehingga quantum gates lebih susah untuk dihitung daripada gerang logika pada komputer digital.
Algoritma Shor
Algoritma yang ditemukan oleh Peter Shor pada tahun 1995. Dengan menggunakan algoritma ini, sebuah komputer kuantum dapat memecahkan sebuah kode rahasia yang saat ini secara umum digunakan untuk mengamankan pengiriman data. Kode yang disebut kode RSA ini, jika disandikan melalui kode RSA, data yang dikirimkan akan aman karena kode RSA tidak dapat dipecahkan dalam waktu yang singkat. Selain itu, pemecahan kode RSA membutuhkan kerja ribuan komputer secara paralel sehingga kerja pemecahan ini tidaklah efektif.
Algoritma Shor bergantung pada hasil dari teori bilangan. Hasil ini adalah: fungsi periodik. Dalam konteks algoritma Shor, n akan menjadi bilangan yang akan difaktorkan. Jika dua bilangan tersebut adalah coprime itu berarti bahwa pembagi umumnya adalah 1. Perhitungan fungsi ini untuk jumlah eksponensial, dari itu akan mengambil waktu eksponensial pada komputer klasik. Algoritma Shor memanfaatkan paralelisme kuantum untuk melakukan jumlah eksponensial operasi dalam satu langkah.

https://sukasayurasem.wordpress.com/2013/06/28/quantum-entanglement/
https://djuneardy.blogspot.co.id/2015/04/quantum-computing-entanglement.html
https://yuliatwn.wordpress.com/2016/04/26/498/
http://chairul-integrity.blogspot.co.id/2016/04/pengoperasian-data-qubit-quantum-gates.html
http://alghieofary.blogspot.co.id




Modern Computation

Komputasi Cloud

Cloud Computing? pasti banyak dari para pembaca yang sudah sering dengar kata tersebut, atau jika belum pernah dengar, mungkin pernah dengar istilah dalam bahasa Indonesia-nya, yaitu “Komputasi Awan”. Ada banyak sudut pandang untuk menjelaskan apa itu Cloud Computing.
Tentu kita semua adalah para pemakai listrik dalam kehidupan sehari-hari. Untuk bisa menikmati listrik, kita tidak perlu mendirikan infrastruktur pembangkit listrik sendiri kan? yang perlu kita lakukan adalah mendaftar ke PLN, dan kita tinggal bayar biaya listrik berdasarkan jumlah penggunaan kita tiap bulan. Saat kita butuh daya tambahan karena suatu tujuan khusus (misal-nya kita ada acara nikahan), kita tinggal bilang ke PLN untuk tambah daya, dan suatu saat nanti ketika ingin turun daya lagi, kita tinggal bilang juga ke PLN. Bisa dikatakan penambahan daya listrik ini sifat-nya ELASTIS dan (harus-nya) bisa dilakukan segera.
Ketika memakai layanan listrik dari PLN, kita tidak perlu pusing untuk memikirkan bagaimana PLN memenuhi kebutuhan listrik kita, bagaimana ketika mereka ada kerusakan alat, bagaimana proses perawatan alat-alat tersebut, dsb. Inti-nya kita cukup tahu bahwa kita bisa menikmati listrik dan berkewajiban membayar biaya tersebut tiap bulan, sedangkan PLN sendiri berkewajiban untuk memenuhi kebutuhan kita berdasarkan level layanan mereka.
Nah, analogi PLN diatas, adalah sedikit gambaran Cloud Computing, dimana Cloud Computing ini bertugas untuk memberikan layanan dan kita adalah user/pemakai dari layanan tersebut. Kita tidak perlu pusing memikirkan bagaimana mereka (penyedia layananan Cloud Computing) menyedikan layanan tersebut, yang penting mereka bisa memberikan standar layanan sesuai dengan apa yang kita butuhkan. Untuk biaya layanan kita tinggal bayar berdasarkan pemakaian. Saat kita butuh tambahan layanan, kita bisa meminta segera penambahan layanan tersebut, dan juga sebalik-nya (ELASTIS).
Berdasarkan jenis layanan-nya, Cloud Computing dibagi menjadi berikut ini:
1.     Software as a Service (SaaS)
2.     Platform as a Service (PaaS)
3.     Infrastructure as a Service (IaaS)
Dibawah ini kita bahas, masing-masing jenis layanan diatas:
  • Software as a Service (SaaS) adalah layanan dari Cloud Computing dimana kita tinggal memakai software(perangkat lunak) yang telah disediakan. Kita cukup 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 (YahooMessenger, 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 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 dimana kita menyewa “rumah” berikut lingkungan-nya (sistem operasi, network, databbase 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 ServiceWindows 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), TelkomCloudBizNetCloud, 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.

Komputasi Grid

Komputasi Grid adalah penggunaan sumber daya yang melibatkan banyak komputer yang terdistribusi dan terpisah secara geografis untuk memecahkan persoalan komputasi dalam skala besar.
Grid computing merupakan cabang dari distributed computing.Grid komputer memiliki perbedaan yang lebih menonjol dan di terapakan pada sisi infrastruktur dari penyelesaian suatu proses. Grid computing adalah suatu bentuk cluster (gabungan) komputer-komputer yang cenderung tak terikat batasan geografi. Di sisi lain, cluster selalu diimplementasikan dalam satu tempat dengan menggabungkan banyak komputer lewat jaringan.

Ide awal komputasi grid dimulai dengan adanya distributed computing, yaitu mempelajari penggunaan komputer terkoordinasi yang secara fisik terpisah atau terdistribusi. Sistem terdistribusi membutuhkan aplikasi yang berbeda dengan sistem terpusat. Kemudian berkembang lagi menjadi parallel computing yang merupakan teknik komputasi secara bersamaan dengan memanfaatkan beberapa komputer secara bersamaan.

Grid computing menawarkan solusi komputasi yang murah, yaitu dengan memanfaatkan sumber daya yang tersebar dan heterogen serta pengaksesan yang mudah dari mana saja. Globus Toolkit adalah sekumpulan perangkat lunak dan pustaka pembuatan lingkungan komputasi grid yang bersifat open-source. Dengan adanya lingkungan komputasi grid ini diharapkan mempermudah dan mengoptimalkan eksekusi program-program yang menggunakan pustaka paralel. Dan Indonesia sudah menggunakan sistem Grid dan diberi nama InGrid (Inherent Grid). Sistem komputasi grid mulai beroperasi pada bulam Maret 2007 dan terus dikembangkan sampai saat ini. InGrid ini menghubungkan beberapa perguruan tinggi negeri dan swasta yang tersebar di seluruh Indonesia dan beberapa instansi pemerintahan seperti Badan Meteorologi dan Geofisika.

KONSEP GRID COMPUTING

Beberapa konsep dasar dari grid computing :
1.     Sumber daya dikelola dan dikendalikan secara lokal.
2.     Sumber daya berbeda dapat mempunyai kebijakan dan mekanisme berbeda, mencakup Sumber daya komputasi dikelola oleh sistem batch berbeda, Sistem storage berbeda pada node berbeda, Kebijakan berbeda dipercayakan kepada user yang sama pada sumber daya berbeda pada Grid.
3.     Sifat alami dinamis: Sumber daya dan pengguna dapat sering berubah
4.     Lingkungan kolaboratif bagi e-community (komunitas elektronik, di internet)
5.     Tiga hal yang di-,sharing dalam sebuah sistem grid, antara lain : Resource, Network dan Proses. Kegunaan / layanan dari sistem grid sendiri adalah untuk melakukan high throughput computing dibidang penelitian, ataupun proses komputasi lain yang memerlukan banyak resource komputer. 

Virtualisasi

APA ITU VIRTUALISASI
Virtualisasi bisa diartikan sebagai pembuatan suatu bentuk atau versi virtual dari sesuatu yang bersifat fisik, misalnya sistem operasi,  perangkat storage/penyimpanan data atau sumber daya jaringan.
Virtualisasi bisa diimplementasikan kedalam berbagai bentuk, antara lain (Harry Sufehmi, Pengenalan Virtualisasi, 20090607) :
1.     Network Virtualization : VLAN, Virtual IP (untclustering), Multilink
2.     Memory Virtualization : pooling memory dari node-node di cluster
3.     Grid Computing : banyak komputer = satu
4.     Application Virtualization : Dosemu, Wine
5.     Storage Virtualization : RAID, LVM
6.     Platform Virtualization : virtual computer
Pembahasan kali ini akan menitikberatkan pada materi platform virtualization alias virtualisasi komputer dan sistem operasi.
KEUNTUNGAN PENGGUNAAN VIRTUALISASI
1.     Pengurangan Biaya Investasi Hardware. Investasi hardware dapat ditekan lebih rendah karena virtualisasi hanya mendayagunakan kapasitas yang sudah ada. Tak perlu ada penambahan perangkat komputer, server dan pheriperal secara fisik. Kalaupun ada penambahan kapasitas harddisk dan memori, itu lebih ditujukan untuk mendukung stabilitas kerja komputer induk, yang jika dihitung secara finansial, masih jauh lebih hemat dibandingkan investasi hardware baru.
2.     Kemudahan Backup & Recovery. Server-server yang dijalankan didalam sebuah mesin virtual dapat disimpan dalam 1 buah image yang berisi seluruh konfigurasi sistem. Jika satu saat server tersebut crash, kita tidak perlu melakukan instalasi dan konfigurasi ulang. Cukup mengambil salinan image yang sudah disimpan, merestore data hasil backup terakhir dan server berjalan seperti sedia kala. Hemat waktu, tenaga dan sumber daya.
3.     Kemudahan Deployment. Server virtual dapat dikloning sebanyak mungkin dan dapat dijalankan pada mesin lain dengan mengubah sedikit konfigurasi. Mengurangi beban kerja para staff IT dan mempercepat proses implementasi suatu sistem
4.     Mengurangi Panas. Berkurangnya jumlah perangkat otomatis mengurangi panasnya ruang server/data center. Ini akan berimbas pada pengurangan biaya pendinginan/AC dan pada akhirnya mengurangi biaya penggunaan listrik
5.     Mengurangi Biaya Space. Semakin sedikit jumlah server berarti semakin sedikit pula ruang untuk menyimpan perangkat. Jika server ditempatkan pada suatu co-location server/data center, ini akan berimbas pada pengurangan biaya sewa
6.     Kemudahan Maintenance & Pengelolaan. Jumlah server yang lebih sedikit otomatis akan mengurangi waktu dan biaya untuk mengelola. Jumlah server yang lebih sedikit juga berarti lebih sedikit jumlah server yang harus ditangani
7.     Standarisasi Hardware. Virtualisasi melakukan emulasi dan enkapsulasi hardware sehingga proses pengenalan dan pemindahan suatu spesifikasi hardware tertentu tidak menjadi masalah. Sistem tidak perlu melakukan deteksi ulang hardware sebagaimana instalasi pada sistem/komputer fisik
8.     Kemudahan Replacement. Proses penggantian dan upgrade spesifikasi server lebih mudah dilakukan. Jika server induk sudah overload dan spesifikasinya tidak mencukupi lagi, kita bisa dengan mudah melakukan upgrade spesifikasi atau memindahkan virtual machine ke server lain yang lebih powerful
KERUGIAN PENGGUNAAN VIRTUALISASI
1.     Satu Pusat Masalah. Virtualisasi bisa dianalogikan dengan menempatkan semua telur didalam 1 keranjang. Ini artinya jika server induk bermasalah, semua sistem virtual machine didalamnya tidak bisa digunakan. Hal ini bisa diantisipasi dengan menyediakan fasilitas backup secara otomatis dan periodik atau dengan menerapkan prinsip fail over/clustering
2.     Spesifikasi Hardware. Virtualisasi membutuhkan spesifikasi server yang lebih tinggi untuk menjalankan server induk dan mesin virtual didalamnya
3.     Satu Pusat Serangan. Penempatan semua server dalam satu komputer akan menjadikannya sebagai target serangan. Jika hacker mampu menerobos masuk kedalam sistem induk, ada kemungkinan ia mampu menyusup kedalam server- server virtual dengan cara menggunakan informasi yang ada pada server induk


Distibuted Computation dalam Cloud Computing
Komputasi Terdistribusi merupakan salah satu tujuan dari Cloud Computing, karena menawarkan pengaksesan sumber daya secara parallel, para pengguna juga bisa memanfaatkannya secara bersamaan (tidak harus menunggu dalam antrian untuk mendapatkan pelayanan), terdiri dari banyak sistem sehingga jika salah satu sistem crash, sistem lain tidak akan terpengaruh, dapat menghemat biaya operasional karena tidak membutuhkan sumber daya (resourches).
Kegiatan ini merupakan kumpulan beberapa computer yang terhubung untuk melakukan pendistribusian, seperti mengirim dan menerima data serta melakukan interaksi lain antar computer yang dimana membutuhkan sebuah jaringan agar computer satu dan lainnya bisa saling berhubung dan melakukan interaksi. Hal ini semua dilakukan dengan cloud computing yang seperti kita ketahui memberikan layanan dimana informasinya disimpan di server secara permanen dan disimpan di computer client secara temporary.
Distribusi komputasi ini memiliki definisi mempelajari penggunaan terkoordinasi dari computer secara fisik terpisah atau terdistribusi. Pada distributed computing ini, program dipisah menjadi beberapa bagian yang dijalankan secara bersamaan pada banyak computer yang terhubung melalui jaringan internet.

Implementasi Distribusi Komputasi Awan
Ada tiga poin utama yang diperlukan dalam implementasi cloud computing, yaitu :

1.     Komputer Front End
Komputer front end merupakan sebuah media tatap muka yang digunakan untuk melakukan interaksi dengan data yang ada dalam sebuah sistem. Biasanya merupakan komputer desktop biasa. Front-end lebih mengarah kepada sebuah layanan umum yang memungkinkan semua orang dapat menerima atau memberikan informasi kepada banyak proses yang dilakukan.

2.     Komputer Back End
Komputer back end dalam skala besar biasanya berupa server komputer yang dilengkapi dengan data center dalam penyimpanan besar. Pada umumnya komputer back end harus mempunyai kinerja yang tinggi, karena harus melayani hingga ribuan permintaan data.

3.     Penghubung antara keduanya

Penghubung keduanya bisa berupa jaringan LAN atau internet.

Map Reduce

MapReduce adalah model pemrograman rilisan Google yang ditujukan untuk memproses data berukuran raksasa secara terdistribusi dan paralel dalam cluster yang terdiri atas ribuan komputer. Dalam memproses data, secara garis besar MapReduce dapat dibagi dalam dua proses yaitu proses Map dan proses Reduce. Kedua jenis proses ini didistribusikan atau dibagi-bagikan ke setiap komputer dalam suatu cluster (kelompok komputer yang salih terhubung) dan berjalan secara paralel tanpa saling bergantung satu dengan yang lainnya. Proses Map bertugas untuk mengumpulkan informasi dari potongan-potongan data yang terdistribusi dalam tiap komputer dalam cluster. Hasilnya diserahkan kepada proses Reduce untuk diproses lebih lanjut. Hasil proses Reduce merupakan hasil akhir yang dikirim ke pengguna.

Desain dan Struktur, MapReduce itu sederhana.
Dari definisinya, MapReduce mungkin terkesan sangat ribet. Untuk memproses sebuah data raksasa, data itu harus dipotong-potong kemudian dibagi-bagikan ke tiap komputer dalam suatu cluster. Lalu proses Map dan proses Reduce pun harus dibagi-bagikan ke tiap komputer dan dijalankan secara paralel. Terus hasil akhirnya juga disimpan secara terdistribusi. Benar-benar terkesan merepotkan.
Beruntunglah, MapReduce telah didesain sangat sederhana alias simple. Untuk menggunakan MapReduce, seorang programer cukup membuat dua program yaitu program yang memuat kalkulasi atau prosedur yang akan dilakukan oleh proses Map dan Reduce. Jadi tidak perlu pusing memikirkan bagaimana memotong-motong data untuk dibagi-bagikan kepada tiap komputer, dan memprosesnya secara paralel kemudian mengumpulkannya kembali. Semua proses ini akan dikerjakan secara otomatis oleh MapReduce yang dijalankan diatas Google File System (Gambar 1).





Gambar 1. Map dan Reduce

Program yang memuat kalkulasi yang akan dilakukan dalam proses Map disebut Fungsi Map, dan yang memuat kalkulasi yang akan dikerjakan oleh proses Reduce disebut Fungsi Reduce. Jadi, seorang programmer yang akan menjalankan MapReduce harus membuat program Fungsi Map dan Fungsi Reduce.
Fungsi Map bertugas untuk membaca input dalam bentuk pasangan Key/Value, lalu menghasilkan output berupa pasangan Key/Value juga. Pasangan Key/Value hasil fungsi Map ini disebut pasangan Key/Value intermediate. Kemudian, fungsi Reduce akan membaca pasangan Key/Value intermediate hasil fungsi Map, dan menggabungkan atau mengelompokkannya berdasarkan Key tersebut. Lain katanya, tiap Value yang memiliki Key yang sama akan digabungkan dalam satu kelompok. Fungsi Reduce juga menghasilkan output berupa pasangan Key/Value.
Untuk memperdalam pemahaman, mari kita simak satu contoh. Taruhlah kita akan membuat program MapReduce untuk menghitung jumlah tiap kata dalam beberapa file teks yang berukuran besar (Gambar 2). Dalam program ini, fungsi Map dan fungsi Reduce dapat didefinisikan sebagai berikut:

      map(String key, String value):
            //key : nama file teks.
            //value: isi file teks tersebut.
            for each word W in value:
                  emitIntermediate(W,"1");
      reduce(String key, Iterator values):
            //key : sebuah kata.
            //values : daftar yang berisi hasil hitungan.
            int result = 0;
            for each v in values:
                  result+=ParseInt(v);
            emit(AsString(result)); 

Hasil akhir  dari program ini adalah jumlah dari tiap kata yang terdapat dalam file teks yang dimasukkan sebagai input program ini.




Gambar 2. Menghitung jumlah tiap kata dalam suatu dokumen.

Menjalankan Contoh Program MapReduce
Untuk lebih jelasnya lagi, kita bisa menjalankan langsung program ini di PC kita sendiri. Tetapi, bukan dengan software MapReduce milik Google. Sampai saat ini Google tidak pernah mendistribusikan software MapReduce miliknya. Namun demikian, Apache telah merilis software open source yang dikenal dengan nama Hadoop untuk mengebangkan dan menjalankan aplikasi MapReduce. Secara garis besar Hadoop terdiri atas HDFS (Hadoop Distributed File System) dan Hadoop MapReduce. HDFS adalah versi open source-nya GFS (Google File System), dan Hadoop MapReduce adalah versi open source dari Google MapReduce.
Ada tiga cara untuk menjalankan aplikasi MapReduce dengan menggunakan Hadoop, yaitu:

 1. Dengan menggunakan Hadoop mode Standalone pada 1 PC Windows.
 2. Dengan menggunakan Hadoop mode Pseudo-Distributed pada 1 PC Linux. 
 3. Dengan menggunakan Hadoop mode Terdistribusi Penuh pada beberapa PC Linux.

NoSQL Database

Berbeda dengan SQL Database, dari namanya saja sudah bisa ditebak bahwa nosql database adalah kebalikan dari sql database. Tidak relational / tanpa relation. Database nosql atau yang biasa disebut NoSQL database / cloud database merupakan penyimpanan data / database yang tidak terstruktur.
Nosql database tidak seperti sql database yang menggunakan tabel dalam penyusunan datanya, nosql database menggabungkan semua database tidak membedakan jenis2nya dan tanpa karakteristik umum. Tapi nosql database ini memiliki kecepatan yang super cepat dibanding dengan sql database, pencariannya lebih terfokus. Nosql sebetulnya tidak 100% menyimpan data dengan cara tidak terstruktur, terkadang ada miripnya dengan sql database dengan sedikit susunan pada saat2 tertentu.
Bedanya nosql database ini menyusun bagian didalam bagian lainnya (subset). Jadi setiap bagian akan memiliki beberapa bagian lagi didalamnya. Nosql ini cocok dan biasa digunakan untuk penyimpanan aplikasi atau data yang sangat besar. Karena dengan menggunakan nosql data dapat diakses dengan sangat fleksibel dan sangat sedikit kemungkinan error ketika mengakses banyak data dengan format yang berbeda-beda.

Pengelompokan database noSQL
Secara umum, database noSQL dibagi menurut format penyimpanan dokmentnya . Berikut ini adalah pengelompokan database noSQL berdasarkan model (penyimpanan) datanya
1.    Document Database contohnya MongoDB, seiap satu object data disimpan dalam satu dokumen. Dokumen sendiri bisa terdiri dari key-value, dan value sendiri bisa berupa array atau key-value bertingkat.
2.    Graph , Format penyimpanan data dalam struktur graph. Format ini sering dipakai untuk data yang saling berhubungan seperti jejaring social. Contoh database noSQL dengan format ini adalah Neo4J dan FlockDB. FlockDB dipakai oleh twitter.
3.    Key – Value,  contoh database jenis ini adalah Apache Cassandra.
4.    Object Database. Format database yang disimpan dalam object object, Object disini sama dengan pengertian object di Pemrograman beroreintasi object , Contoh databasenya adalah Db4o.
5.    Tipe lainnya adalah tabular, tuple store dan berbagai jenis lain yang tidak terlalu populer.

Kelebihan NoSQL di banding Relasional Database
1.    NoSQL bisa menampung data yang terstruktur, semi terstruktur dan tidak terstuktur secara efesien dalam skala besar (big data/cloud).
2.    Menggunakan OOP dalam pengaksesan atau manipulasi datanya.
3.    NoSQL tidak mengenal schema tabel yang kaku dengan format data yang kaku. NoSQL sangat cocok untuk data yang tidak terstruktur, istilah singkat untuk fitur ini adalah Dynamic Schema.
4.    Autosharding, istilah sederhananya, jika database noSQL di jalankandi cluster server (multiple server) maka data akan tersebar secara otomatis dan merata keseluruh server.
Kekurangan dari database NoSQL sendiri , minimal bagi saya adalah Hostingnya mahal. beberapa layanan di luar negeri mencharge biaya 100-200USD untuk hosting database noSQL. Selain itu, saya belum pernah menemukan hosting Cpanel yang mendukung database MongoDB atau database noSQL lainnya.
Selain itu, karena bervariasinya produk dan format penyimpanan, berpindah antar satu produk database ke produk noSQL lainnya perlu waktu untuk belajar. Contohnya ketika anda pindah dari MongoDB ke Cassandra, maka anda harus belajar lagi dari awal, berbeda dengan database RDMS.


http://www.cloudindonesia.or.id/apa-itu-cloud-computing.html
http://febbri-grunge.blogspot.co.id/2015/06/komputasi-grid-grid-computing.html
https://www.excellent.co.id/product-services/vmware/keuntungan-teknologi-virtualisasi-cloud-computing/
https://www.candra.web.id/pengantar-database-nosql-dan-mongodb/
http://www.teknologi-bigdata.com/2013/02/mapreduce-besar-dan-powerful-tapi-tidak.html