Kamis, 11 Juni 2020

Microservice dan Arsitektur Monolith


Monolith (Monolith architecture) adalah cara membangun aplikasi dengan memuat seluruh service/fitur pada 1 tempat/wadah dan cara ini sering kita gunakan.
Sebagai contoh kita membuat aplikasi dengan suatu bahasa dan framework tertentu (contoh: laravel, ci, asp, django dll). Saat proses pembuatan aplikasi kita membangun fitur/service AB, dan C pada 1 tempat yaitu didalam framework itu sendiri. Jadi kedepannya aplikasi ini akan semakin besar dan besar seiring dengan bertambahnya service DEF dst.
Gampangnya monolith itu semua fitur ditaruh di 1 tempat. semua ada disitu, mau membuat fitur apapun ya buatnya ditempat itu semua.
Lalu bagaimana dengan microservice? Kalau monolith menempatkan semua service pada 1 wadah, maka microservice kebalikannya. Cara ini memisah masing-masing service di tempat yang berbeda-beda. Jadi service AB dan C dipisah dan bisa saling terhubung satu sama lain.
Lalu kekurangan aplikasi monolitik itu apa sih?
  1. Ketika aplikasi menjadi besar (banyak yang akses) peforma akan menurun (kecuali punya banyak duit buat bayar server yang lebih bagus LOL)
  2. Ketika akan merubah teknologi pada aplikasi maka akan merubah secara keselutuhan aplikasi.
  3. Jika terjadi error pada salah satu fungsi maka akan mempengaruhi keselutuhan aplikasi.
Kelebihan
  1. Mudah dibangun
  2. Mudah di uji
  3. Mudah di deploy ke server atau cloud
Microservices berarti membagi aplikasi menjadi layanan yang lebih kecil dan saling terhubung tidak seperti aplikasi monolitik. Setiap microservice merupakan aplikasi kecil yang memiliki arsitektur heksagonal sendiri yang terdiri dari logika beserta berbagai adapternya (bahasa pemrograman, dll).
Pola arsitektur Microservice secara signifikan mempengaruhi hubungan antara aplikasi dan database. Alih-alih berbagi skema database tunggal dengan services lainnya, masing-masing services memiliki skema database tersendiri. Di satu sisi, pendekatan ini bertentangan dengan gagasan model data enterprise-wide. Selain itu, sering kali menghasilkan duplikasi beberapa data. Namun, memiliki skema database per service sangat penting jika ingin mendapatkan keuntungan dari layanan microservice. Masing-masing service memiliki database sendiri. Selain itu, services dapat menggunakan jenis database dan bahasa pemrograman yang paling sesuai dengan kebutuhannya.
Jadi intinya microservice yaitu membagi service ke bagian yang lebih kecil dimana service — service tersebut saling berhungan satu sama lain.Selain itu, dalam setiap services yang dibuat bisa menggunakan teknologi yang berbebeda.
Sedangkan untuk implementasi ke web, android, iOS dll tidak bisa secara langsung. Dimana kita harus membuat terlebih dahulu yang namanya API Gateway. API Gateway memiliki tugas seperti load balancing, caching, access controll , API metering, dan monitoring.
Kelebihan Microservice
  1. Aplikasi scalabale, secure dan reliable
  2. Setiap service berdiri sendiri
  3. Maintence-nya lebih mudah
  4. Tidak ada hambatan dalam menggunakan teknologi baru
  5. Setiap tim developer dapat mengembangkan setiap services-nya tanpa ada mengganngu services yang lain
Kekurangan
  1. Ketika satu entity pada database berubah maka setiap entity yang sama di setiap database service harus diubah
  2. Untuk beberapa kasus , sulit untuk menerapkan perubahan services jadi perlu perancangan yang matang.
  3. Deployment yang kompleks, perlu konfigurasi untuk menjalankan setiap services karena memiliki runtime yang berbebda, tidak seperti aplikasi monolitik tinggal upload , deploy dan beres.
  4. Perlu automation yang tinggi dalam melakukan deployment.

Minggu, 12 April 2020

Spesialisasi Mekanisme Cloud Computing

  • FAILOVER

Failover adalah mode operasional cadangan di mana fungsi komponen sistem (seperti  prosesor,server, jaringan, atau database, misalnya) diasumsikan oleh komponen sistem sekunder ketika komponen utama menjadi tidak tersedia baik karena kegagalan atau waktu henti yang dijadwalkan. Digunakan untuk membuat sistem lebih toleran terhadap kesalahan, failover biasanya merupakan bagian integral dari sistem mission-critical yang harus selalu tersedia.
  • HYPERVISOR

Hypervisor adalah sebuah teknik virtualisasi yang memungkinkan beberapa operating system untuk berjalan bersamaan pada sebuah host. Dikatakan teknik virtualisasi karena OS yang ada bukanlah sebuah OS yang sesungguhnya, hanya sebuah virtual machine saja. Tugas dari hypervisor adalah untuk mengatur setiap operating system tersebut sesuai dengan gilirannya agar tidak mengganggu satu dengan yang lainnya. Terkadang, hypervisor juga disebut sebagai Virtual Machine Management (VMM), sesuai dengan tugasnya dalam mengatur beberapa virtual machine.
Pada setiap jenis komputer, seperti cluster computing, grid computing, PC ataupun mainframe, memiliki OS yang berbeda satu sama lain karena memiliki sistem yang juga berbeda. Setiap OS tersebut di desain sesuai dengan kebutuhan dari sistem masing masing. Untuk Hypervisor sendiri, didesain lebih mirip OS untuk mainframe dari pada Windows OS. Hal ini dikarenakan sebuah hypervisor, harus bisa mengatur beberapa sistem sekaligus, layaknya sebuah host melayani beberapa client pada mainframe.

Jenis Hypervisor

 
Secara umum Hypervisor di bagi menjadi 2 jenis yaitu: Baremetal Architectur yang
dikenal dengan hypervisor tipe 1 dan Hosted Architecture yang dikenal dengan hypervisor tipe 2 :

Hypervisor Type 1 (Baremetal Architecture)


Hypervisor tipe ini berjalan langsung diatas perangkat keras server, artinya tidak di perlukan sistem operasi lain untuk menjalankan hypervisor tipe 1 ini . dengan begitu hypervisor memiliki akses langsung ke hardware tanpa harus melewati OS.Contoh hypervisor tipe 1 adalah VMware ESXi. Kalau dilihat dari teknik virtualisasi yang digunakan, jenis satu ini adalah jenis hardware assisted.

Hypervisor Type 2 (Hosted Architecture)


Hypervisor tipe ini  berperan sebagai software untuk menjalankan dan mengatur virtual machine. Akses resource hardware yang dibutuhkan oleh virtual machine harus melewati OS.Contoh hypervisor tipe 2 adalah VMware Server. Berbeda dengan tipe 1, tipe 2 ini lebih cenderung ke OS assisted hypervisor (para virtualization) dan juga full virtualization. 


  • RESOURCE CLUSTER
Komputer cluster terdiri dari set komputer terhubung dengan kerja sama sehingga banyak hal tetapi dilihat sistemnya tunggal. Tidak seperti komputer jaringan, komputer cluster komputer memiliki setiap node set untuk melakukan tugas yang sama, dikendalikan dan dijadwal oleh perangkat lunak. Komponen cluster biasanya terhubung satu dengan yang lain melalui jaringan Local Arena Network (LAN) dengan setiap node komputer digunakan sebagai server berjalan sendiri dari sebuah sistem operasi. Dalam sebagian besar keadaan semua node menggunakan hardware yang sama dan sistem operasi yang sama, meskipun di beberapa setup yaitu mengunakan Sumber Daya Open Source Cluster Aplikasi (OSCAR), sistem operasi yang berbeda dapat digunakan pada setiap komputer dan harware yang berbeda.
Biasanya komputer cluster digunakan untuk meningkatkan kinerja dan ketersediaan satu komputer, sementara biasanya menjadi jauh lebih hemat biaya dari pada komputer tunggal kecepatan sebanding atau ketersediaannya. Komputer cluster muncul dari konvergensi dari sejumlah tren komputasi termasuk ketersediaan mikroprosesor murah, jaringan berkecepatan tinggi, dan perangkat lunak untuk kinerja tinggi komputasi terdistribusi. Mereka memiliki berbagai penerapan dan penyebaran, mulai dari kelompok usaha kecil dengan beberapa node untuk beberapa superkomputer tercepat di dunia seperti IBM Sequoia. Aplikasi yang bisa dilakukan namun, tetap terbatas, karena perangkat lunak harus tujuan-dibangun per tugas . Hal ini maka tidak mungkin untuk menggunakan cluster komputer untuk tugas-tugas komputasi kasual.
Adapun keuntungan dari cluster sendiri terutama dirancang dengan kinerja dalam pikiran, tetapi instalasi didasarkan pada banyak faktor lainnya toleransi kesalahan kemampuan untuk sistem untuk terus bekerja dengan node rusak juga memungkinkan untuk skalabilitas sederhana, dan dalam situasi kinerja tinggi, frekuensi rendah dari rutinitas perawatan, konsolidasi sumber daya klarifikasi diperlukan, dan manajemen terpusat.

Dalam sistem Beowulf, program aplikasi tidak pernah melihat node komputasi juga disebut komputer slave tetapi hanya berinteraksi dengan “Master” yang merupakan komputer tertentu menangani penjadwalan dan pengelolaan. Dalam implementasi hal ini memiliki dua antarmuka jaringan, satu yang berkomunikasi dengan jaringan Beowulf pribadi, yang lainnya untuk jaringan tujuan umum organisasi. komputer biasanya memiliki versi mereka sendiri dari sistem operasi yang sama, dan memori lokal dan hard disk ruang. Namun, jaringan swasta juga mungkin memiliki file server yang besar dan berbagi yang menyimpan data persisten global, diakses banyak oleh pengguna yang diperlukan.
Karena daya komputasi meningkat setiap generasi konsol game, penggunaan baru telah muncul di mana mereka repurposed ke Kinerja  komputasi tingkat tinggi (HPC) cluster. Beberapa contoh cluster konsol permainan yang cluster Sony PlayStation dan Xbox cluster Microsoft. Contoh lain dari produk permainan konsumen adalah Nvidia Tesla Supercomputer Personal workstation, yang menggunakan beberapa grafis akselerator prosesor chip. Selain konsol game, kartu grafis high-end juga dapat digunakan sebagai pengganti. Penggunaan kartu grafis (GPU atau lebih tepatnya mereka) untuk melakukan perhitungan untuk komputasi grid adalah jauh lebih ekonomis daripada menggunakan CPU, meskipun kurang tepat. Namun, bila menggunakan nilai presisi ganda, mereka menjadi seperti tepat untuk bekerja dengan sebagai CPU, dan masih jauh lebih murah (biaya pembelian).
Cluster komputer dijalankan pada komputer fisik terpisah dengan sistem operasi yang sama. Dengan munculnya virtualisasi, node cluster dapat berjalan pada komputer fisik terpisah dengan sistem operasi yang berbeda yang dicat di atas dengan lapisan virtual untuk terlihat mirip. Klarifikasi diperlukan cluster ini juga dapat virtualisasi pada berbagai konfigurasi pemeliharaan berlangsung. Contoh implementasi adalah Xen sebagai manajer virtualisasi dengan Linux-HA.
  • MULTI-DEVICE BROKER
Suatu layanan cloud individu mungkin perlu diakses oleh berbagai jenis konsumen layanan cloud, beberapa diantaranya mungkin tidak sesuai dengan kontrak layanan yang diterbitkan layanan cloud. komsumen layanan cloud yang berbeda dapat dibedakan oleh perangkat-perangkat keras hosting mereka san mungkin memiliki berbagai jenis persyaratan komunikasi. untuk mengatasi ketidakcocokan antara layanan cloud dan komsumsi layanan cloud dan konsumsi .layanan cloud yang berbeda, pemetaan logika perlu dibuat untuk mengubah (atau mengonversi) informasi yang dipertukarkan saat waktu berjalan.


Mekanisme pialang multi-perangkat digunakan untuk memfasilitasi transformasi data runtime sehingga membuat layanan cloud dapat diakses oleh berbagai program dan perangkat konsumen layanan cloud (Gambar 1).

Pialang multi-perangkat umumnya ada sebagai atau memasukkan komponen gateway, seperti:

-XML Gateway - mentransmisikan dan memvalidasi data XML
-Cloud Storage Gateway - mengubah protokol penyimpanan cloud dan mengkodekan perangkat penyimpanan untuk memfasilitasi transfer dan penyimpanan data
-Gateway Perangkat Seluler - mengubah protokol komunikasi yang digunakan oleh perangkat seluler.

Level-level di mana logika transformasi dapat dibuat meliputi:

protokol transportasi
protokol pengiriman pesan
protokol perangkat penyimpanan
skema data / model data

Misalnya, pialang multi-perangkat dapat berisi logika pemetaan yang mencakup protokol transport dan pesan untuk pengguna layanan cloud yang mengakses layanan cloud dengan perangkat mobile.


broker multi-perangkat berisi logika pemetaan yang diperlukan untuk mengubah pertukaran data antara layanan cloud dan berbagai jenis perangkat konsumen layanan cloud.
  • STATE MANAGEMENT DATABASE 
Suatu sistem atau perangkat lunak yang dirancang untuk mengelola suatu basis data dan menjalankan operasi terhadap data yang diminta banyak pengguna. Contoh tipikal SMBD adalah akuntansi, sumber daya manusia, dan sistem pendukung pelanggan, SMBD telah berkembang menjadi bagian standar di bagian pendukung (back office) suatu perusahaan, Contoh SMBD adalah Oracle, SQL server 2000/2003, Ms acces MYSQL,dan sebagainya. DBMS merupakan perangkat lunak yang dirancang untuk dapat melakukan utilisasi dan mengelola koleksi data dalam jumlah yang besar. DBMS juga dirancang untuk dapat melakukan manipulasi data secara lebih mudah. Sebelum adanya DBMS, data pada umumnya disimpan dalam bentuk flat file, yaitu file teks yang ada pada sistem operasi. Sampai sekarangpun masih ada aplikasi yang menyimpan data dalam bentuk flat secara langsung.
Menyimpan data dalam bentuk flat file mempunyai kelebihan dan kekurangan. Penyimpanan dalam bentuk ini akan mempunyai manfaat yang optimal jika ukuran filenya relatif kecil, seperti file o dari flat file, seperti bertambahnya kecepatan dalam pengolahan data. Namun metode ini masih memiliki banyak kelemahan, diantaranya adalah masalah manajemen dan keamanan data yang masih kurang. Penyimpanan data dalam bentuk DBMS mempunyai banyak manfaat dan kelebihan dibandingkan dengan penyimpanan dalam bentuk flat file atau spreadsheet, diantaranya:
1. Performa yang dapat dengan penyimpanan dalam bentuk DBMS cukup besar, sangat jauh berbeda dengan performance data yang disimpan dalam bentuk flat file. Disamping memiliki unjuk kerja yang lebih baik, juga akan didapatkan efisiensi penggunaan media penyimpanan dan memori
2. Integritas data lebih terjamin dengan penggunaan DBMS. Masalah redudansi sering terjadi dalam flat file. Redudansi adalah kejadian berulangnya data atau kumpulan data yang sama dalam sebuah database yang mengakibatkan pemborosan media penyimpanan.
3. Independensi. Perubahan struktur database dimungkinkan terjadi tanpa harus mengubah aplikasi yang mengaksesnya sehingga pembuatan antarmuka ke dalam data akan lebih mudah dengan penggunaan DBMS.
4. Sentralisasi. Data yang terpusat akan mempermudah pengelolaan database. kemudahan di dalam melakukan bagi pakai dengan DBMS dan juga kekonsistenan data yang diakses secara bersama-sama akan lebiih terjamin daripada data disimpan dalam bentuk file atau worksheet yang tersebar.
5. Keamanan. DBMS memiliki sistem keamanan yang lebih fleksibel daripada pengamanan pada file sistem operasi. Keamanan dalam DBMS akan memberikan keluwesan dalam pemberian hak

ROUTING

A. Basic Routing 
1. Buat folder baru dengan nama routing. 
2. Di dalam folder routing, tambahkan folder lib yang bisa diambil dari project sebelumnya. 
3. Buka tautan berikut di browser : https://unpkg.com/vue-router
4. Buat satu file baru di dalam folder lib, dengan nama vue-router.js 
5. Copy kan code dari tautan yang telah kita buka dan paste kan kedalam file vue-router.js. 


6. Kemudian tambahkan file baru di dalam folder routing, dengan nama route1.html, dan isikan dengan code berikut :



7. Kemudian tambahkan file baru di dalam folder routing, dengan nama ShirtsComponent.html, dan isikan dengan code berikut :



8. Kemudian tambahkan file baru di dalam folder routing, dengan nama ShirtComponent.html, dan isikan dengan code berikut :



9. Kemudian jalankan pada browser, maka akan tampil tampilan berikut :


10. Ketika kita klik Monday maka akan muncul data Monday.



11. Ketika kita klik kembali atau pilih menu selain shirt maka akan muncul alert sbb:




10. Ketika kita ganti id nya di luar data yang kita munculkan maka akan muncul alert data tidak di temukan .

Sabtu, 28 Maret 2020

Global Component, Local Component dan Mixins

1. Global Component
Mendaftarkan component secara global akan membuat component tersebut bisa digunakan oleh semua objek utama (root) Vue.
Buat file baru dengan nama GlobalComponent.ht lalu masukkan kode berikut:
<!DOCTYPE html>
<html>
<head>
    <title> Global Component </title>
    <script src="lib/vue.js"></script>
</head>
<body>
    <div id="app1">
        <h1>Object 1</h1>
        <global1></global1>
        <global2></global2>
    </div>
    <div id="app2">
        <h1>Object 2</h1>
        <global1></global1>
        <global3></global3>
    </div>
    <script type="text/javascript">
        Vue.component('global1',{
            template : '<h3>Component Global 1</h3>'
            
        })
        Vue.component('global2',{
            template : '<h3>Component Global 2</h3>'
            
        })
        Vue.component('global3',{
            template : '<h3>Component Global 3</h3>'
            
        })
        new Vue({ el :'#app1'})
        new Vue({ el :'#app2'})
    </script>
</body>
</html>
Dan kemudian jika sudah dijalankan akan seperti ini hasilnya:


2. Local Component
Simplenya adalah omponent diregister pada suatu objek Vue dan hanya bisa digunakan pada objek tersebut saja.
Buat file baru dengan nama LocalComponent.html dan masukkan kode dibawah:
<!DOCTYPE html>
<html>
<head>
    <title>Local Component</title>
    <script src="lib/vue.js"></script>
</head>
<body>
    <div id="app1">
        <h1>Object 1</h1>
        <global1></global1>
        <global2></global2>
    </div>
    <div id="app2">
        <h1>Object 2</h1>
        <global1></global1>
        <global3></global3>
    </div>
    <script type="text/javascript">
        var Global1 = {
            template : '<h3>Component 1</h3>'
            
        }
        var Global2 = {
            template : '<h3>Component 2</h3>'
            
        }
        var Global3 = {
            template : '<h3>Component 3</h3>'
            
        }
        new Vue({ el :'#app1',
            components: {
                'global1': Global1,
                'global2': Global2,
                'global3': Global3
            }
        })
        new Vue({ el :'#app2',
        })
    </script>
</body>
</html>
Dari kode diatas maka hasilnya seperti ini:
 Lalu jika kita register kode dibawah ini:
 components: {
                'global1': Global1,
                'global2': Global2,
                'global3': Global3
            }
Maka hasilnya akan seperti ini:
Perbedaannya adalah jika kita register kode yang baru saja ditambah maka object 2 tidak muncul. Berbeda dengan Global maka tidak perlu regis kode diatas tadi.

3. Mixins
Mixins merupakan cara pada Vue untuk mendefinisikan suatu kumpulan fungsi atau option yang akan digunakan pada aplikasi atau component tertentu. Ketika objek Vue atau component menggunakan mixins maka semua option dari mixin tersebut akan di digabungkan ke dalam component yang menggunakannya tersebut. 
Masukkan kode dibawah:
<!DOCTYPE html>
<html>
<head>
    <title>Mixin</title>
    <script src="lib/vue.js"></script>
</head>
<body>

        <div id='app'>
            Component Mixins
            
        </div>
    </div>
    
    <script type="text/javascript">
        var Mixins1 = {
            created: function(){
                this.hallooo()
            },
            methods:{
                hallooo:function(){
                    console.log('Halo Mixins')
                }
            }
            }
        var vm = new Vue({ 
            el :'#app',
            mixins: [
                Mixins1
            ]
        })
        
    </script>
</body>
</html>
Maka hasilnya akan seperti ini:




Jumat, 27 Maret 2020

Konsep Containerization

The ABC of Containerization - DevOps Implementation

Containerization adalah pendekatan dimana kita menjalankan multiple instances (containers) pada satu Operating System (OS) yang sama, dimana containers tersebut akan memiliki shared kernel.
Bisa juga disebut sebagai vitualisasi yang ringan. Karena hanya menyediakan kebutuhan minimum yang dibutuhkan sebuah aplikasi supaya bisa berjalan. Container merupakan virtual machine minimalis yang tidak berjalan pada hypervisor. Lalu apa saja yang ada di dalam container? Berikut ini yang ada dalam container :
1. Application
2. Binaries
3. Configuration File
4. Dependencies
5. Libraries

Bagaimana caranya bisa berjalan di environment yang berbeda? Containerization memungkinkan container untuk berjalan di environment yang berbeda dengan cara mengabstraksi sistem operasi dan infrastruktur fisik. Sebuah aplikasi yang dijadikan container berbagi kernel host operating system dengan container yang lain. Bagian sistem operasi yang dibagi itu bersifat “Read-only”. Biasanya, dalam satu container hanya terdapat satu buah service atau microservice.
Tentang kernel dan sitem operasi
Laptop, komputer, telepon, dll dibangun dengan menggunakan berbagai perangkat keras. Contohnya, CPU, kartu jaringan, memori, penyimpanan (SSD,HDD), dll. Semua orang tau hal itu, tapi bagaimana mereka berinteraksi satu sama lain. Interaksi itu dibantu dengan perangkat lunak yang disebut dengan kernel! Sebuah jembatan antara perangkat keras dan sistem operasi adalah kernel. Kernel inilah yang menjadwalkan untuk menjalankan sebuah proses, mengelola perangkat keras, menangani error, dll.
Selain itu, sistem operasi berguna untuk membantu proses booting dan mengelola ruang pengguna. Proses pengguna dijalankan pada ruang ini dan terus-menerus berinteraksi dengan kernel.

Teknologi Docker
Ini adalah salah satu teknologi container yang paling banyak digunakan. Bahkan, ketika orang merujuk ke kontainer, mereka kebanyakan memahami yang dimaksud itu Docker. Selain Docker, ada beberapa teknologi container open source seperti rkt oleh CoreOS. Juga, perusahaan besar telah membangun mesin container mereka sendiri. Misalnya, lmctfy oleh Google.
Jadi Docker sekarang menjadi standar industri dalam hal kontainerisasi. Bagaimana ini dibangun? Pada cgroups dan namespacing yang disediakan oleh kernel Linux dan Windows.
Lapisan Docker:
Docker container terdiri dari berbagai lapisan. Ini termasuk images dan binari yang dikemas ke dalam satu paket. Base image memiliki sistem operasi container. OS image dan OS host dapat berbeda atau sama. Bagaimana OS containernya? Itu dalam bentuk image. Jika Anda membandingkan OS image dengan OS host, ada perbedaan! OS host adalah sistem operasi penuh, sedangkan OS image tidak penuh. Image hanyalah sistem file dan binari untuk OS. Sementara, OS lengkap termasuk sistem file, binari, dan Kernel.
Ada beberapa image di atas base image. Mereka bersama-sama membuat sebagian dari container. Pengaturannya agak dinamis. Misalnya, di atas base image, ada image yang berisi dependensi apt-get. Di atas itu, mungkin ada image yang berisi aplikasi biner. Tetapi bagian yang paling menarik adalah, jika ada dua container dengan lapisan image 1,2,3 dan 1,2,4 maka anda hanya perlu menyimpan satu salinan dari setiap image! Secara lokal maupun di repositori. Ini adalah cara sistem file Docker beroperasi.
Docker dimuat dengan banyak fitur keren seperti:
(1) Copy on write.
(2) Volumes.
(3) Docker daemon.
(4) Version controlled repositories and more.

Apa yang diperlukan untuk container?
Proses isolasi hanyalah salah satu sifat contaianer. Namun terlepas dari itu, ada banyak properti bermanfaat lainnya.

(1) Container berfungsi sebagai unit mandiri. Ini berarti dapat berjalan di mana saja. Pada setiap instances, containernya persis sama. OS host tidak masalah. Itu bisa CentOS, Ubuntu, MacOS atau non UNIX seperti Windows. Singkatnya, container yang dibangun di sistem anda juga dapat bekerja di server perusahaan!
(2) Orang dapat menganggap container sebagai unit standar atau komputer. Secara umum, dikatakan bahwa setiap kontainer menjalankan server web tunggal, satu basis data dari database, dll. Jadi untuk menskalakan aplikasi, seseorang dapat dengan mudah skala jumlah kontainer.
(3) Container adalah alat terbaik untuk menerapkan arsitektur layanan mikro. Masing-masing microservice adalah seperangkat container yang bekerja sama. Sebagai contoh, dimungkinkan untuk mengimplementasikan layanan mikro Redis dengan container master tunggal dan beberapa container slave. Arsitektur microservice memiliki banyak keunggulan dibandingkan dengan pendekatan monolitik atau tradisional.

Kelebihan dan kekukangan container
Kelebihan:
(1) Menjalankan container tidak menggunakan banyak sumber daya. Jadi seseorang dapat menambahkan lebih banyak beban kerja komputasi pada server yang sama.
(2) Dibandingkan dengan mesin virtual, ukuran rata-rata suatu container berada dalam kisaran puluhan atau ratusan MB, sedangkan mesin virtual mengkonsumsi beberapa gigabytes. Server dapat menampung lebih banyak kontainer.
(3) Kontainer cepat! Membuat container hanya membutuhkan beberapa detik. Waktu respons cepat ketika menyangkut aktivitas pengguna. Kontainer membantu mengurangi waktu yang dibutuhkan untuk pengembangan, pengujian, dan penyebaran.
(4) Menemukan kesalahan dan menyelesaikannya mudah dengan container. Mengapa? Karena tidak ada perbedaan antara menjalankan aplikasi secara lokal atau pada server uji.

Kekurangan:
(1) Keamanan adalah masalah dengan virtualisasi berbasis container dibandingkan dengan mesin virtual tradisional. Dalam container, Kernel dan komponen lain dari sistem operasi host dibagikan. Mereka memiliki akses root! Jadi container kurang terisolasi satu sama lain. Secara keseluruhan, itu tergantung pada jenis aplikasi dan modifikasi.
(2) Ada kurang fleksibilitas dalam sistem operasi. Jika Anda ingin menjalankan kontainer dengan sistem operasi yang berbeda, Anda harus memulai server baru.

Contoh Studi Kasus Implementasi dari Containerization
IMPLEMENTASI DOCKER UNTUK PENGELOLAAN BANYAK APLIKASI WEB
(Studi Kasus : Jurusan Teknik Informatika UNESA)

Sistem web hosting modern, di dalam setiap servernya, mengelola banyak aplikasi web. Teknologi virtual machine dimanfaatkan untuk menyelesaikan masalah heterogenitas (perbedaan versi library atau tool dari beberapa aplikasi web). Peningkatan jumlah aplikasi web yang harus dihosting harus diikuti dengan peningkatan kualitas ataupun kuantitas sumber daya, terlebih saat hadirnya kebutuhan high availability dari layanan web tersebut. Teknik kontainerisasi (virtualisasi berbasis container) hadir sebagai solusi dan menjadi trend saat ini. Docker adalah salah satu software yang mengadopsi teknik kontainerisasi dan semakin banyak diterapkan di dalam lingkungan web hostingTulisan ini mencoba untuk melakukan kajian literatur terhadap teknologi virtualisasi di atas, baik virtual machine
maupun container dan kemudian merangkum perbandingannya. Arsitektur container di dalam Docker merupakan fokus dari tulisan ini, termasuk perkembangan dan keunggulan dari Docker yang sudah diteliti dan diimplementasikan dalam dua tahun terakhir. Docker memudahkan proses deployment (penyebaran) aplikasi web beserta software pendukung seperti web server, database server, dependensi dan environment lain ke server. Dapat kemudahan dengan proses deployment (penyebaran) aplikasi web beserta software pendukung seperti web server, database server, dependensi dan environment lain ke server. Memberikan solusi pada banyak Aplikasi web yang membutuhkan Docker untuk bereksperimen atau mendukung mahasiswa yang ingin melakukan tugas akhir dengan berbagai topik.

Minggu, 22 Maret 2020

Vue Js Form Data & Binding

1. Handling Submit Form & Validation
Buat file dengan nama form.html dan tambah kode berikut:
<!DOCTYPE html>
<html>
<head>
    <title>Form Data</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/
4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTN
h0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <script type="text/javascript" src="lib/vue.js"></script>

</head>
Sampai disini adalah untuk memasukkan bootstrap kedalamnya.

<body>
    <div class="col pt-3">
                <h2 class="font-weight-bold"> Input The Data </h2>
                <hr>
            </div>
        <div id="app" class="container">
            <form class = "form-control"ref="formBook" @submit.prevent="submitForm($event)"
            action="" method="post" id="myForm">
            <p v-if="errors.length">
                    <b>Oops Something is wrong!</b>
                <ul>
                    <li v-for="error in errors">{{ error }}</li>
                </ul>
            </p>
            <hr>
            <div class="row">
                <div class="col">
                    <label>Name Of Product :</label>
                    <input class = "form-control" type="text" v-model="nama" ref="nama"/>
                    <br>
                </div>
                <div class="col">
                    <label>Description :</label>
                     <textarea class="form-control" v-model="description"></textarea>
                </div>
            </div>
            <div class="row">
                <div class="col">
                    <label>Brand :</label>
                    <input class = "form-control" type="text" v-model="merk">
                </div>
                <div class="col">
                    <label>Price :</label>
                    <input class = "form-control" type="number" v-model.number="price">
                </div>
            </div>
                <div class="row">
                    <div class="col">
                        <label>Categories:</label>
                        <select multiple class"form-control"  v-model="categories" multiple>
                            <option v-for="option in options" :value="option.value">
                            {{ option.text }}
                            </option>
                        </select>
                    </div>
                </div>
            <div class="row">
                <div class="col">
                    <label>Picture :</label>
                    <input  name="gambar" ref="gambar" type="file" class="form-control-file">
                    <br>
                    <input type="submit" value="Submit" class="btn btn-primary">
                </div>
            </div>
            <br>
            </form>
        </div>
        <script type="text/javascript">
                var vm = new Vue({
                el: '#app',
                data: {
                    nama: '',
                    description: '',
                    merk: '',
                    price: 0,
                    categories: [],
                    options: [
                            { text: 'Shirt'value: '01' },
                            { text: 'T-Shirt'value: '02' },
                            { text: 'Jacket 'value: '03' },
                            { text: 'Hoodie 'value: '04' },
                            { text: 'Pants 'value: '05' },
                            { text: 'Accesories 'value: '06' }
                            ],
                    errors: []
                        },
                    methods: 
                    {
                        submitForm(event){
                            this.errors = []
                            // kode validasi
                            if(this.nama.length < 3){
                                this.errors.push('Input the name more than 2 char')
                                this.$refs.nama.select()
                            }
                            if(this.description.length > 500){
                                this.errors.push('Description max is 500 char!')
                                this.$refs.description.select()
                            }
                            if(this.merk.length < 3){
                                this.errors.push('Input the brand more than 2 char')
                                this.$refs.merk.select()
                            }
                            if(this.price < 0){
                                this.errors.push('No minus on price')
                                this.$refs.price.select()
                            }
                            if(this.categories.length === 0){
                                this.errors.push('Choose minimal 1 category')
                                this.$refs.categories.focus()
                            }
                            // kode status informasi
                            if(this.errors.length === 0 ){
                            // persiapkan data
                                let formData = new FormData()
                                let gambar = this.$refs.gambar.files[0]
                                formData.append('nama'this.nama)
                                formData.append('description'this.description)
                                formData.append('merk'this.merk)
                                formData.append('price'this.price)
                                formData.append('categories'this.categories)
                                formData.append("gambar"gambar)
                                // kirim data ke server
                                let xhttp = new XMLHttpRequest() // create objek XMLHttp
                                // definisikan fungsi ketika terjadi perubahan state
                                xhttp.onreadystatechange = function() {
                                // state ini menunjukkan data terkirim dan diterima server dengan baik
                                if (this.readyState == 4 && this.status == 200) {
                                // respon text dari server
                                console.log(this.responseText)
                                    }
                            }
                            // sesuaikan dengan lokasi file proses.php
                            xhttp.open("POST""http://localhost/proses.php"true)
                        // kirim objek formData
                            xhttp.send(formData)
                        }
                    }
                    }
                    })
        </script>
</body>
</html>
Kode diatas adalah kode tampilan formKode v-if=”errors.length” adalah untuk memeriksa apakah ada yangg tidak sesuai dengan ketentuan atau error. Jika ada maka akan lanjut ke this.errors dan akan muncul alert sesuai dengan errornya.
Misal, errornya adalah kita lupa memasukkan nama dari produknya maka akan muncul "Input the name more than 2 char"

Setelah itu buat 1 file baru yang bernama proses.php dan masukkan kode dibawah ini:
<?php
// untuk mencegah error akibat CORS
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
echo "SIMULASI KIRIM DATA FORM <hr>";
// menampilkan data yang dikirimkan dengan method post
print_r($_POST);
print_r($_FILES['gambar']);
Kode ini untuk menerima data yang dikirim dari form. Dan kemudian tampilannya akan seperti ini pada browser:
Dan kemudian untuk contoh error akan seperti dibawah ini:



2. Input Binding
Buat file dengan nama binding.html kemudian masukkan kode dibawah:
<!DOCTYPE html>
<html>
<head>
    <title> Form BInding </title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, 
shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/
css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E2
63XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <script type="text/javascript" src="lib/vue.js"></script>
</head>
Sama seperti yang input tadi, ini juga adalah untuk memasukkan bootstrap.
Lalu masukkan lagi kode ini dibawahnya:
<body>
    <div id"app" class ="container">
        <div class="row">
            <div class="col pt-3">
                <h2 class="font-weight-bold"> Binding </h2>
                <hr>
            </div>
        </div>
        <form>
             kategori : <input type="text" name="kategori" v-model="kategori" 
placeholder="pilih kategori di bawah">
            <hr>
            <input type="radio" id="baju" value="baju" v-model="kategori">
            <label for="baju">baju</label>
            <br>
            <input type="radio" id="celana" value="celana" v-model="kategori">
            <label for="two">celana</label>
            <hr>
            <span> Pilih warna nya : </span>
            <br>
            <input type="checkbox" id="merah" value="merah" v-model="checked">
            <label for="jack">merah </label>
            <input type="checkbox" id="kuning" value="kuning" v-model="checked">
            <label for="john">kuning</label>
            <input type="checkbox" id="hijau" value="hijau" v-model="checked">
            <label for="mike">hijau</label>
            <hr>
            <select v-model="selected">
              <option disabled value="">pilih salah satu</option>
              <option> jearsey </option>
              <option> Katun </option>
              <option> Jeans </option>
            </select>
            <hr>
            <textarea v-model="deskrip" placeholder="Tambahkan Deskripsi Baju">
</textarea>
            <hr>
            <h2 class="font-weight-bold"> Hasil Binding </h2>
            <span>Kategori text : {{ kategori }}</span>
            <br>
            <span> fitur radio button : {{ kategori }}</span>
            <br>
            <label for="checkbox">fitur check box :{{ checked }}</label>
            <br>
            <span>fitur select : {{ selected }}</span>
            <br>
            <span>Deskripsi Baju: {{ deskrip }}
            </span>
        </form>
    </div>
    <script type="text/javascript">
        var vmnew Vue({
            el:'#app',
            data : {
                kategori:"",
                checked:[],
                selected:"",
                deskrip:""
            }
        })
    </script>
</body>
</html>
Kode ini untuk tampilan binding pada browser.
Terdapat fitur input text, radio button, check box dan selected dalam kode diatas.
Dan tampilan dari kode diatas adalah:
Kemudian jika kita masukkan data maka akan seperti dibawah ini: 

Data yang ada diatas terikat ke data yang ada dibawah sehingga hasilnya yang dibawah dipengaruhi dari yang di atasnya.