<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dio Rizqi</title>
    <description>The latest articles on DEV Community by Dio Rizqi (@diorizqi).</description>
    <link>https://dev.to/diorizqi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2904076%2F432a33e6-8348-4170-8a5f-a6abc29e62a0.jpg</url>
      <title>DEV Community: Dio Rizqi</title>
      <link>https://dev.to/diorizqi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/diorizqi"/>
    <language>en</language>
    <item>
      <title>Rahasia Website Anti-Downtime</title>
      <dc:creator>Dio Rizqi</dc:creator>
      <pubDate>Tue, 04 Mar 2025 08:06:55 +0000</pubDate>
      <link>https://dev.to/diorizqi/rahasia-website-anti-downtime-4ejb</link>
      <guid>https://dev.to/diorizqi/rahasia-website-anti-downtime-4ejb</guid>
      <description>&lt;p&gt;Dalam infrastruktur modern, memastikan ketersediaan (availability) dan keandalan layanan adalah hal yang sangat penting. Teknik yang umum digunakan untuk meningkatkan performa dan scalability aplikasi adalah &lt;strong&gt;Load Balancing&lt;/strong&gt;. Ia bertugas untuk mendistribusikan traffic yang masuk ke beberapa server yang guna menghindari overload pada satu server. Dengan teknik load balancing, beban kerja akan dibagi secara merata kepada seluruh server. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Berikut beberapa manfaat load balancing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Meningkatkan ketersediaan (High Availability)&lt;/li&gt;
&lt;li&gt;Meningkatkan skalabilitas (Scalability)&lt;/li&gt;
&lt;li&gt;Mengoptimalkan kinerja aplikasi&lt;/li&gt;
&lt;li&gt;Menghindari downtime pada server&lt;/li&gt;
&lt;li&gt;Failover otomatis jika ada server yang gagal&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Apa bedanya arsitektur dengan dan tanpa load balancing?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2evuh6u050xo93kz8xr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2evuh6u050xo93kz8xr.png" alt="Image description" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perhatikan gambar diatas. Tanpa load balancing, semua request dari user masuk ke satu server saja. Namun jika menggunakan load balancing, request dari user akan dibagi ke beberapa server yang ada. &lt;strong&gt;Bagaimana semisal server mengalami kegagalan (tidak dapat menangani permintaan) ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tenang, jika menggunakan teknik load balancing proses failover akan dijalankan sehingga aplikasi tetap dapat diakses tanpa ada kendala. Lain halnya jika tanpa menggunakan load balancing, aplikasi akan down dan tidak dapat melayani request dari user. Lihat ilustrasi dibawah.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qldvgnng9qtuh5l5r1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qldvgnng9qtuh5l5r1c.png" alt="Image description" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Metode Load Balancing di NGINX
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Round Robin (default)
&lt;/h3&gt;

&lt;p&gt;Request akan didistribusikan secara bergantian ke setiap server secara merata.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;upstream webapp {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Least Connections
&lt;/h3&gt;

&lt;p&gt;Request akan didistribusikan ke server yang memiliki jumlah koneksi aktif paling sedikit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. IP Hash
&lt;/h3&gt;

&lt;p&gt;Request dengan IP tertentu akan selalu diarahkan ke server yang sama.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;upstream myapp1 {
        ip_hash;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Weighted Round Robin
&lt;/h3&gt;

&lt;p&gt;Sama seperti &lt;strong&gt;Round Robin&lt;/strong&gt;, bedanya server memiliki bobot tertentu. Cocok jika ada server dengan spesifikasi lebih tinggi.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implementasi Load Balancing
&lt;/h2&gt;

&lt;p&gt;Untuk menerapkan load balancing, dibutuhkan setidaknya 3 server berbeda. Server pertama sebagai load balancer nya, sedangkan server kedua dan ketiga berisi aplikasi website kita. Di implementasi nyata, server tersebut dapat terletak di lokasi yang berbeda-beda. &lt;/p&gt;

&lt;p&gt;Agar lebih simpel dan hemat resource, saya akan mendemonstrasikan menggunakan 1 VPS dan beberapa docker container serta NGINX sebagai load balancer. Nantinya VPS akan bertindak sebagai load balancer lalu docker container berisi aplikasi website.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Persiapan Server
&lt;/h3&gt;

&lt;p&gt;Sebelum mulai, pastikan Anda memiliki:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPS dengan sistem operasi Ubuntu&lt;/li&gt;
&lt;li&gt;Docker terinstall&lt;/li&gt;
&lt;li&gt;NGINX terinstall&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Untuk menginstall docker di ubuntu, silakan lihat panduan di &lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;link berikut&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Jika tidak memiliki VPS, bisa menggunakan Virtual Machine sebagai alternatif&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Menjalankan Web Server dengan Docker Container
&lt;/h3&gt;

&lt;p&gt;Buat 3 container NGINX sebagai web server yang berisi aplikasi website kita.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --name server-1 -d -p 3001:80 nginx
docker run --name server-2 -d -p 3002:80 nginx
docker run --name server-3 -d -p 3003:80 nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;docker run&lt;/code&gt; : menjalankan kontainer baru&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--name server-1&lt;/code&gt; : opsi untuk memberikan nama pada kontainer&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-d&lt;/code&gt; : menjalankan kontainer di background (detached)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-p 3001:80&lt;/code&gt; : untuk memetakan port 80 di kontainer menjadi port 3001 di host. Untuk mengaksesnya menggunakan &lt;code&gt;http://localhost:3001&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;nginx&lt;/code&gt; : nama image yang digunakan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setelah perintah diatas dijalankan di terminal, maka kontainer akan terbuat. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4eilkp2qh5jjqiohoz8i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4eilkp2qh5jjqiohoz8i.png" alt="Image description" width="800" height="50"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jika diakses di browser, maka akan tampak seperti ini:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpd6xsfkgkvbk34emad65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpd6xsfkgkvbk34emad65.png" alt="Image description" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Namun ketiga server tersebut tampilannya masih sama, yaitu welcome page dari NGINX. Agar nantinya dapat mudah untuk melihat server mana yang sedang menangani request, saya akan merubah tampilan website nya.&lt;/p&gt;

&lt;p&gt;Masuk ke terminal tiap kontainer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec -it server-1 /bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Timpa page yang telah ada sebelumnya dengan text SERVER 1 (sederhana saja, cukup untuk mengidentifikasi server mana yang digunakan)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "&amp;lt;h1&amp;gt;&amp;lt;b&amp;gt;SERVER 1&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;" &amp;gt; /usr/share/nginx/html/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika sudah, sekarang tampilan website menjadi seperti ini:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuelwk9nwrib6ogqh8imz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuelwk9nwrib6ogqh8imz.png" alt="Image description" width="739" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Untuk keluar dari terminal kontainer, gunakan perintah &lt;code&gt;exit&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lakukan langkah-langkah diatas pada ketiga kontainer yang sudah dibuat tadi&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Konfigurasi NGINX sebagai Load Balancer
&lt;/h3&gt;

&lt;p&gt;Kita akan mengatur NGINX sebagai load balancer untuk mendistribusikan request ke beberapa server tadi.&lt;/p&gt;

&lt;p&gt;Hapus dahulu konfigurasi default di &lt;code&gt;sites-enabled&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rm /etc/nginx/sites-enabled/default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buat konfigurasi baru, beri nama &lt;code&gt;load-balancer&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano /etc/nginx/sites-available/load-balancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Masukkan konfigurasi dibawah:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;upstream webapp {
        server localhost:3001;
        server localhost:3002;
        server localhost:3003;
}

log_format custom "$upstream_addr";

server {
        listen 80;
        server_name server1.nodev.web.id;
        access_log /var/log/nginx/load-balancer.log custom;

        location / {
                proxy_pass http://webapp;
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;upstream app&lt;/code&gt; : berisi list server yang didaftarkan pada load balancer&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;log_format custom&lt;/code&gt; : membuat format logging baru bernama custom&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"$upstream_addr"&lt;/code&gt; : menampilkan address server upstream pada logging&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;listen 80&lt;/code&gt; : server menerima request pada port 80&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;server_name&lt;/code&gt; : alamat host, karena saya sudah pointing domain jadi saya mengunakan nama domain&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;access_log /var/log/nginx/load-balancer.log custom&lt;/code&gt; : menerapkan logging akses pada path tersebut dan menggunakan format custom&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;location /&lt;/code&gt; : mengatur request yang memiliki path /&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;proxy_pass http://app&lt;/code&gt; : meneruskan request yang diterima NGINX ke server lain, disini akan diteruskan ke upstream server bernama webapp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setelah itu simpan dengan Ctrl + X dan Ctrl + Y&lt;/p&gt;

&lt;p&gt;Tes konfigurasi untuk memastikan tidak ada yang salah&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nginx -t
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buat symbolic link dari direktori sites-available ke sites-enabled&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ln -s /etc/nginx/sites-available/load-balancer /etc/nginx/sites-enabled/load-balancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart nginx&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Pengujian
&lt;/h3&gt;

&lt;p&gt;Sekarang coba akses server load balancer melalui browser lalu coba refresh berulang kali, setiap request akan diarahkan ke salah satu server secara bergantian.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/dtilcxqrx/image/upload/v1741070798/article/preview-lb.gif" rel="noopener noreferrer"&gt;Preview GIF&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyl13vrexiu5ux9ukdiu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyl13vrexiu5ux9ukdiu.png" alt="Image description" width="587" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnuaoazmfz0pflgcc4qh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnuaoazmfz0pflgcc4qh.png" alt="Image description" width="496" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqm6oxnzdypb293a8mq0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqm6oxnzdypb293a8mq0w.png" alt="Image description" width="493" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lihat akses log, web server yang menangani request yaitu container tadi dan berbeda-beda.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tail -f /var/log/nginx/load-balancer.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqrf9psmtwseym2284qs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqrf9psmtwseym2284qs.png" alt="Image description" width="628" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coba dengan mematikan salah satu container&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker stop server-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hasilnya, load balancer hanya akan mendistribusikan request ke server yang aktif, yaitu 2 dan 3.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Far84x11vg9bomrftx1nz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Far84x11vg9bomrftx1nz.png" alt="Image description" width="610" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Anda dapat mencoba menguji dengan menggunakan metode yang berbeda&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Dengan menerapkan Load Balancing menggunakan NGINX, kita dapat mendistribusikan beban kerja ke beberapa server sehingga meningkatkan kinerja, keandalan, dan skalabilitas sistem. Pada eksperimen ini, kita menggunakan Docker untuk mensimulasikan beberapa server backend, yang memungkinkan kita memahami bagaimana Load Balancing bekerja secara praktis.&lt;/p&gt;

&lt;p&gt;Implementasi ini juga bisa diperluas dengan menambahkan lebih banyak server backend, menerapkan health check serta monitoring. Selain NGINX, ada juga beberapa load balancer lain seperti HAProxy, Traefik, serta layanan AWS ELB, ALB, dan NLB.&lt;/p&gt;

&lt;p&gt;Semoga bermanfaat!😊&lt;/p&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>docker</category>
      <category>nginx</category>
    </item>
    <item>
      <title>Claude vs. GPT: Model Mana yang Lebih Powerfull untuk Generate UI?</title>
      <dc:creator>Dio Rizqi</dc:creator>
      <pubDate>Fri, 28 Feb 2025 18:45:43 +0000</pubDate>
      <link>https://dev.to/diorizqi/claude-vs-gpt-model-mana-yang-lebih-powerfull-untuk-generate-ui-289j</link>
      <guid>https://dev.to/diorizqi/claude-vs-gpt-model-mana-yang-lebih-powerfull-untuk-generate-ui-289j</guid>
      <description>&lt;p&gt;Dalam dunia coding, tidak dapat dipungkiri bahwa setiap programmer atau developer pasti menggunakan AI dalam pekerjaannya. Saya pun juga demikian. Saya sering menggunakan AI untuk code completion, rekomendasi fitur, dan analisis kode. Setiap model AI memiliki keunggulan tersendiri, dan hal ini membuat saya tertarik untuk melakukan eksperimen dengan membandingkan berbagai model AI yang tersedia di GitHub Copilot.&lt;/p&gt;

&lt;p&gt;Karena saya lebih sering bekerja di backend, saya memanfaatkan AI untuk membuat bagian frontend/UI agar lebih praktis. Selain itu, saya juga ingin melihat sejauh mana AI mampu menghasilkan desain yang baik tanpa banyak intervensi dari saya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa Itu GitHub Copilot?
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot adalah AI-powered code assistant yang dapat membantu dalam pembuatan kode secara otomatis. Saat ini, GitHub Copilot menyediakan beberapa model AI yang dapat digunakan oleh para developer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgea2xmxznd36xvh53ose.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgea2xmxznd36xvh53ose.png" alt="Image description" width="326" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Eksperimen: Membandingkan Hasil Generate AI
&lt;/h2&gt;

&lt;p&gt;Dalam eksperimen ini, saya ingin mengetahui model mana yang dapat menghasilkan landing page terbaik dengan prompt minimal. Hasil yang ditampilkan murni berasal dari AI tanpa ada modifikasi dari saya.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt yang Digunakan:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a modern landing page with HTML and Tailwind CSS. Include a navbar, hero, about, services, testimonials, CTA, and footer. Keep it responsive and visually appealing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mengapa tidak menggunakan prompt yang lebih detail dan terstruktur? Awalnya saya ingin melakukannya, tetapi sering kali respons yang diberikan terkena limit sehingga kode yang dihasilkan tidak lengkap.&lt;/p&gt;

&lt;p&gt;Sebelum memulai, Anda dapat membaca &lt;a href="https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat#ai-models-for-copilot-chat-1" rel="noopener noreferrer"&gt;penjelasan mengenai tiap model AI yang tersedia di GitHub Copilot.&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Hasil Eksperimen
&lt;/h2&gt;

&lt;p&gt;Berikut adalah hasil yang dihasilkan oleh berbagai model AI. Urutan nomor merepresentasikan tingkat kualitas hasil yang diberikan.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Claude 3.7 Sonnet Thinking
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvd0ocaovhy6483xahhyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvd0ocaovhy6483xahhyp.png" alt="Image description" width="800" height="1470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Landing page yang dihasilkan sangat bagus, responsif, dan tidak ada komponen yang berantakan.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Claude 3.7 Sonnet
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uqjjfi96ln5q359m081.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uqjjfi96ln5q359m081.png" alt="Image description" width="800" height="1519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tampilan lebih simpel dibandingkan yang pertama, tetapi sudah cukup bagus. Responsif, namun beberapa komponen perlu diperbaiki untuk tampilan mobile.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Gemini 2.0 Flash
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fianajq0120tpz4rfcjm7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fianajq0120tpz4rfcjm7.png" alt="Image description" width="800" height="806"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tidak ada gambar dummy dan belum sepenuhnya responsif.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Claude 3.5 Sonnet
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2yhwk4rrgbh5txgqd73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2yhwk4rrgbh5txgqd73.png" alt="Image description" width="800" height="818"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tampilan sangat simpel, belum sepenuhnya responsif, dan tidak memiliki hamburger button.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5. o3-mini
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2ojf8ajfbi8ncja2ytx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2ojf8ajfbi8ncja2ytx.png" alt="Image description" width="800" height="758"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Saat generate, link CDN Tailwind mengalami error. Tampilannya cukup baik, tidak ada gambar dummy, dan sudah responsif.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6. GPT-4o
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusfba2zvbhngbxr2z915.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusfba2zvbhngbxr2z915.png" alt="Image description" width="800" height="1032"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tampilan sedikit berbeda, tidak ada gambar dummy, sudah responsif, namun hamburger button tidak berfungsi.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  7. o1
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwixvgqhi56xpumig192d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwixvgqhi56xpumig192d.png" alt="Image description" width="800" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Saat generate, link CDN Tailwind mengalami error, kurang responsif, dan tampilan kurang menarik.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Dari eksperimen ini, model Claude 3.7 Sonnet Thinking memberikan hasil terbaik dengan desain yang lebih rapi dan responsif. Namun, hasil ini tidak dapat dijadikan patokan utama karena performa AI sangat bergantung pada prompt yang diberikan. Selain itu, setiap model AI dikembangkan dengan keunggulan yang berbeda-beda.&lt;/p&gt;

&lt;p&gt;Terlepas dari hasil yang diberikan oleh AI, kita tetap perlu melakukan review dan perbaikan terhadap kode yang dihasilkan agar sesuai dengan kebutuhan.&lt;/p&gt;

&lt;p&gt;Source code dari seluruh website yang dihasilkan dalam eksperimen ini dapat diakses di &lt;a href="https://gist.github.com/diorizqi404/419130aebec6036554e238e03a7efe48" rel="noopener noreferrer"&gt;link berikut&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
