Cara Membangun Arsitektur Berketersediaan Tinggi

Ada 3 hal penting yang perlu diperhatikan untuk membuat arsitektur berketersediaan tinggi, yaitu elastisitas, skalabilitas, dan pemantauan. Maksud dari elastisitas adalah kemampuan untuk memperbanyak dan mempersedikit sumber daya karena adanya perbedaan lalu lintas. Di AWS terdapat 3 jenis elastisitas, yaitu berdasarkan waktu, volume, dan perkiraan. Sedangkan pemantauan merupakan sebuah hal yang dilakukan secara reaktif dengan tujuan resource utilization, application performance, dan security.

Salah satu alat pemantauan adalah AWS cost explorer untuk memberikan wawasan penggunaan layanan dan biaya, melihat data hingga 13 bulan ke belakang, dan melakukan forecasting. Untuk melakukan sebuah pengendalian secara otomatis hasil pemantauan dapat menggunakan layanan CloudWatch. Selain itu CloudWatch juga dapat melakukan pengumpulan dan pelacakan metrik. CloudWatch bekerja dengan merespon faktor metrics, logs, alarms, events, rules, dan target.

Metrik adalah data tentang kinerja sistem. Di dalam sistem tersebut pasti akan terjadi kegiatan-kegiatan tertentu, nah kegiatan itu dicatat dalam file log. Kejadian yang dibaca dari file log tersebut kemudian diatur sehingga berbentuk kalimat matematika tertentu. Jika pada kondisi tertentu terjadi sesuai statement maka alarm akan memberitahukan bahkan dapat melakukan tindakan. Tindakan yang dilakukan oleh alarm akan diberitakan dalam bentuk event, misalnya telah melakukan pembuatan instance baru atau instance berubah status menjadi running. Event tersebut diproses oleh target namun sebelum event diarahkan ke target perlu dicocokan dengan rules.

Untuk mencatat log pemanggilan API digunakan Amazon CloudTrail yang akan memberikan informasi identitas pemanggil, waktu pemanggilan, IP address pemanggil, parameter permintaan, dan elemen respons yang diberikan. Dari data-data tersebut CloudTrail dapat memberikan analisis keamanan, pelacakan perubahan sumber daya, dan audit compliance. Perlu dicatat bahwa CloudTrail berjalan pada basis region.

Catatan penting untuk CloudWatch Logs bahwa di sana terdapat vitur VPC flow log yang mencatat lalu lintas IP address. Kegunaannya adalah dapat menangkap secara detail data aliran di jaringan VPC bahkan hingga tingkat subnet atau ENI dan dapat disimpan di CloudWatch atau S3. Biasanya data itu digunakan untuk memecahkan masalah konektivitas, menguji akses jaringan, memantau lalu lintas, dan mendeteksi hingga menyelidiki insiden keamanan.

Auto scaling terintegrasi dengan ELB atau elastic load balancer yang dapat menghubungkan beberapa ELB. Jika auto scaling akan menambah instance maka ia akan memulai dari availability zone yang memiliki instance paling sedikit, namun jika itu mengalami kegagalan maka ia akan terus melakukan pembuatan instance hingga berhasil. Di AWS fitur auto scaling dapat dilakukan dengan 3 cara, yaitu scheduled (berdasar waktu atau hari), dynamic (berdasar CPU utilization), dan predictive (berdasar machine learning).

Amazon EC2 autoscaling dapat melakukan opsi pembelian auto scaling group atau ASG. Karena jenis instance ada 3 jenis, yaitu on-demand, spot, dan reserved maka jenis ASG ada 2, yaitu fleet tunggal dan fleet campuran. Dengan melakukan fleet campuran itu bisa menghemat biaya komputasi hingga 90%. Ada 4 jenis konfigurasi dalam ASG, yaitu harga spot instance maksimum, strategi alokasi spot instance, basis on-demand, dan persentase on-demand di atas basis. Ada beberapa poin penting dalam auto scaling, seperti:

  1. Menggabungkan beberapa jenis auto scaling
  2. Bantuan scaling menggunakan step scaling
  3. Scaling menggunakan 2 atau lebih metrik
  4. Lakukan scale out lebih awal dan cepat
  5. Lakukan scale in secara bertahap
  6. Gunakan life cycle hooks
Adakalanya pelanggan mengakses database yang telah kita ijinkan. Namun, lagi-lagi jika traffic begitu besar maka perlu dilakukan scaling. Dalam hal ini dapat dilakukan horizontal scaling untuk database. Fitur yang digunakan disebut read replica, seperti namanya dia hanya akan mereplikasi database yang dibaca oleh pelanggan. Selain mereplikasi database tersebut akan ditempatkan di region yang lebih dekat sehingga akan menurunkan latensi. Amazon RDS, MySQL, PostgreSQL, dan MariaDB memiliki hingga 5 read replica, sedangkan Amazon Aurora memiliki hingga 15 read replica. 

Scaling secara vertikal dapat dilakukan dengan menggunakan Amazon RDS API atau beberapa klik pada console. Scaling dengan menggunakan Amazon RDS akan melalui waktu downtime. Jika hendak melakukan scaling namun tanpa melalui waktu downtime dapat digunakan layanan Amazon Aurora Serverless. Di dalam Aurora terdapat 2 jenis instance, yaitu primary DB instance (mendukung operasi read/write) dan aurora replica (mendukung operasi read). Untuk dapat mempertahan ketersediaan yang tinggi sebaiknya Aurora dipasangkan di availability zone yang berbeda.

Saat Aurora replica mengalami failover atau kegagalan Amazon RDS dapat mempromosikan instance dengan prioritas tertinggi. Jika Aurora replica mengalami prioritas yang sama maka Amazon RDS akan memilih yang memiliki kapasitas terbesar, dan jika Aurora replica mengalami prioritas dan size yang sama maka Amazon RDS akan memilih secara acak. Nah, untuk melakukan auto scaling digunakan layanan Aurora Serverless. Perhitungan yang dilakukan adalah menurut pengguanan ACU atau Aurora Capacity Unit.

Jika sebelumnya dibahas tentang ketersediaan yang tinggi dalam hal pembacaan maka adakalanya perlu melakukan writing. Nah, untuk meningkatkan ketersediaan tersebut digunakan teknik sharding. Teknik tersebut memanfaatkan beberapa server database. Amazon RDS dapat digunakan untuk membagi database backend. Caranya dengan menginstal perangkat lunak sharding (ex. server MySQL) kemudian digabungkan dengan spider storage engine pada Amazon EC2 instance.

Amazon DynamoDB dapat digunakan untuk membuat tabel baru. Perlu diingat bahwa Amazon DynamoDB merupakan database non relasioal. Saat tabel baru dibuat maka DynamoDB secara default akan mengaktifkan auto scaling. Biaya untuk fitur auto scaling di DynamoDB sudah termasuk dalam penggunaan layanan DynamoDB. Arsitektur yang akan dibangun adalah seperti gambar di bawah:

Sumber: anonim

Langkah dalam membangun arsitektur sesuai gambar di atas:

  1. Semua kegiatan dilakukan di halaman EC2, sehingga masuk lebih dulu ke EC2 melalui AWS Management Console
  2. Load Balancing
    • Pada panel navigasi pilih menu Load Balancer
    • Klik tombol Create Load Balancer, karena ada 4 jenis load balancer maka pilih yang Application Load Balancer
    • Beri nama load balancer dengan app-lb
    • Scroll ke bawah hingga menemukan Network Mapping, pilih VPC default dan pilih 2 availability zone (ap-southeast-1a dan ap-southeast-1b), pemilihan tersebut dilakukan untuk memudahkan latihan
    • Tambahkan tag dengan konfigurasi:
      • Key : Name
      • Value : App Load Balancer
    • Ke panel navigasi Security Group pilih Create a new security group dan gunakan konfigurasi:
      • Security group name : Load-Balancer-SG
      • Description : Load Balancer Security Group
      • Inbound rules 
        • Type: HTTP
        • Source: Anywhere
    • Masih di panel navigasi Security Group, scroll ke bagian bawah dan klik tombol Create security group, kemudian kembali lagi ke tab load balancer dan klik refresh pada security groups, pilih nama security group yang tadi dibuat, jangan lupa untuk menghilangkan (x) security group default
    • Pada bagian Listeners and routing, buka listener HTTP:80, lalu klik Create target group, berikan nama app-target-group, lalu klik next
    • Pada bagian Register targets, lewati saja karena belum dibuat instance
    • Klik tombol Create target group
    • Balik lagi ke tab Load balancer, pada bagian Listener klik ikon refresh dan pilih nama target group yang telah dibuat sebelumnya
    • Klik tombol Create load balancer, kemudian tunggu hingga load balancer selesai dibuat, untuk meninjau dan memastikan bahwa load balancer telah sesuai konfigurasi dapat klik tombol View load balancer
    • Load balancer telah berhasil dibuat!
  3. Network & Security
    • Masuk ke halaman EC2 melalui AWS Management Console, pada panel navigasi pilih Security Groups, kemudian klik tombol Create security group dan gunakan konfigurasi:
      • Security group name : app-security-group-server
      • Description : Allow SSH dan HTTP
      • VPC : default
    • Pada bagian Inbound rules, buat 2 rule dengan konfigurasi
      • HTTP
        • Type : HTTP
        • Source : Anywhere
      • SSH
        • Type : SSH
        • Source : Anywhere
    • Pada bagian Tags-optional, gunakan konfigurasi:
      • Key : Name
      • Value : Allow SSH dan HTTP
    • Klik tombol Create security group
    • Pada panel navigasi pilih Auto Scaling Group dan klik tombol Create Auto Scaling group
    • Berikan nama app-auto-scaling-group, pada bagian tulisan Create a launch template dan gunakan konfigurasi:
      • Launch template name : app-launch-template
      • Template version description : Launch Template untuk App Server
    • Ceklis pada Provide guidance...
    • Pada bagian Amazon Machine Image pilih Amazon Linux 2 AMI
    • Pada bagian Instance type pilih t2.micro
    • Pada bagian Key pair buat key pair dengan konfigurasi:
      • Key pair name : app-server
      • File format : .pem
    • Klik tombol Create key pair dan simpan di folder yang mudah diingat
    • Pada bagian Network Setting gunakan konfigurasi:
      • Networking platform : Virtual Private Cloud (VPC)
      • Security groups : app-security-group-server
    • Pada bagian Advanced details, kemudian pilih User data dan pada box isikan:
      • #! /bin/bash
      • yum install httpd -y
      • systemctl start httpd
      • systemctl enable httpd
    • Klik tombol Create launch template
  4. Auto Scaling
    • Kembali ke tab Auto Scaling di bagian Launch template, klik ikon refresh lalu pilih app-launch-template
    • Scroll ke bagian bawah dan klik tombol Next
    • Pada bagian 2 Configure setting pilih pada bagian Network gunakan konfigurasi:
      • VPC : default
      • Subnets : ap-southeast-1a dan ap-southeast-1b (karena 2 availability zone)
    • Klik tombol next
    • Pada bagian Load balancing-optional pilih Attach to an existing load balancer
    • Pada bagian Attach to an existing load balancer gunakan konfigurasi:
      • Pilih Choose from Application...
      • Pada bagian Load balancer target groups pilih app-target-group
    • Pada bagian Group size - optional gunakan konfigurasi:
      • Desired capacity : 2
      • Minimum capacity : 2
      • Maximum capacity : 2
    • Karena tidak membuat notifikasi maka bisa langsung klik tombol Next
    • Pada bagian tag tambahkan tag dengan konfigurasi:
      • Key : Name
      • Value : AutoScaling EC2
    • Klik tombol next
    • Pastikan konfigurasi telah benar seluruhnya, kemudian klik tombol Create Auto Scaling group
    • Seharusnya auto scaling telah berhasil dibuat!
  5. Load Balancing
    • Masih di Amazon EC2, pada panel navigasi pilih Load Balancers, pilih app-lb dan salin DNS name-nya, kemudian pastekan di browser (ex. chrome)
    • Pastikan muncul halaman test page
    • Lakukan SSH (buka cmd, arahkan ke folder key pair dan gunakan syntax untuk SSH)
    • Jika telah berhasil arahkan command prompt ke folder /var/www/html/ dengan syntax:
      • cd /var/www/html/
    • Buatlah suatu html sederhana bernama index.html dengan syntax:
      • sudo nano index.html
    • Di dalam file tersebut ketik:
      • <h1>Ini adalah instance 1</h1>
    • Jika sudah simpan dengan tekan tombol CTRL + X > Y > Enter
    • Keluar dengan syntax:
      • Exit
    • Lakukan hal yang sama pada instance ke 2:
      • Lakukan SSH
      • Instal, nyalakan, dan aktifkan httpd
      • Buat file index.html di folder /var/www/html/ dengan isi 'ini adalah instance 2'
      • Keluar dari instance tersebut
    • Konfigurasi instance telah berhasil!
    • Masuk ke Load Balancers > app-lb, salin kembali DNS name-nya dan paste di browser
    • Lakukan refresh berulang pada browser, jika konfigurasi berhasil maka kadang akan muncul 'ini adalah instance 1' dan kadang muncul 'ini adalah instance 2'
    • Untuk memeriksa kesehatan yang dilakukan load balancer masuk ke Target Groups, lalu klik nama app-target-group
    • Buka tab Targets dan perhatikan status-nya, jika berstatus Health maka instance tersebut baik-baik saja
    • Sekarang akan dilakukan pengujian auto scaling, pada panel navigasi pilih menu Instances, ceklis salah satu instance, kemudian pada tombol Instance state klik dan pilih Terminate Instance untuk mengakhiri instance tersebut
    • Pastikan Instance telah berstatus Terminated, kemudian lakukan refresh berulang hingga muncul instance baru yang merupakan hasil auto scaling
    • Jika semua proses telah berhasil maka arsitektur berketersediaan tinggi telah berhasil dibuat!

Jangan lupa melakukan clean up semua sumber daya seperti EC2 instance, load balancer, auto scaling group, dan lainnya untuk menghindari tagihan.




ref:
https://aws.amazon.com/

Komentar