Iya mas setuju, sebenernya jangan terfokus pada spec besar atau kecil sebuah server. teknis dan prakteknya nya juga jangan dilupakan. ijin menambahkan mas, mungkin ada kawan2 yg belum maksud dari horizontal scaling ini supaya bisa di riset lebih lanjut, Jadi ini arahnya harusnya load balance / load distribution ke beberapa server, dibawah ini kemungkinan yg bisa jadi pertimbangan: 1. CDN, ini lebih ke static asset (image, video, js, css) yg di pindah ke server yg berbeda sehingga traffic / bandwidth ke main server bisa dikurangi. 2. Load balance ke beberapa server, di web server (nginx / apache) sudah ada, bisa di praktekkan 3. Subdomain, ini cara paling primitif dan paling mudah, buat beberapa subdomain untuk beberapa server web, sedangkan databasenya tetep ke arah 1 server. misal kelas a, b, c masing2 memiliki subdomainnya, jadi traffic akan lebih tertata. dan masih ada lainnya juga, tergantung bagaimana kondisi database dan aplikasinya, jadi masih ada kemungkinan juga di bagian aplikasinya yg di optimalkan Mungkin itu tambahan dari saya. salam
kalau ngomongin lelet jangan lupa code logic yang kita buat kadang kurang efisien, dulu ketika saya kuliah sering saya buat code yang gak efisien terutama ketika looping atau lainnya, apalagi waktu itu juga belum kenal problem N+1. Tapi setelah saya belajar sedikit tentang low level programming dari situ agak paham dan sampai saat ini pelan-pelan memperbaiki efisiensi logic code saya.
jika masalahnya di aplikasinya, maka ini bisa diatasi tanpa kompleksitas horizontal scalling. pertama kita perlu pahami yg dijelaskan pak eko tadi, horizontal scalling hanya menjalankan 16 server laravel di 16 core. kita bisa mencapai ini dengan menjalankan 16 proses independen di laravelnya di 16 core. well php secara default hanya berjalan di 1 core. ingat pakai multiple worker thread itu tidak sama dengan pakai multicore. pertama kita perlu memahami bedanya thread dan core. simplenya, cpu dipecah jadi 6 core misalnya. thread adalah pecahan dari core nya lagi, 1 core bisa dipecah jadi banyak thread, jadi simplenya thread anaknya core. kalau kamu pakai 10 worker thread, itu akan tetap cuma pakai 1 core karena php defaultnya cuma jalan di 1 core. biar kamu bisa pakai ke 16 corenya, kamu perlu membuat multiple proses independen yg berdiri sendiri. 1 server diserahkan ke 1 core. sehingga akan ada 16 proses di aplikasi laravel kamu kalau spek cpu 16 core. hal ini setara dengan horizontal scalling. 16 proses ini akan melayani request secara bersamaan, secara paralel dan independen layaknya horizontal scalling. berbeda kalau tanpa mengaktifkan 16 proses independen, alias defaultnya 1 core terus bikin 10 worker thread, itu hanya akan ada 1 pengeksekusi karena hanya ada 1 core, 1 core ini akan mengeksekusi tugas-tugas di thread secara bergantian, gampangnya buat visualisasi ibarat core ini pelayan, dan thread ini meja makan, defaultnya laravel 1 core dan misal kamu pakai 10 worker thread, akan ada 1 pelayan dan 10 meja makan, 1 pelayan ini harus melayani melayani 10 meja makan secara bergantian dan dijeda jeda, di meja ke 1 dilayani dulu sampai dagingnya makan, lalu pindah ke meja 2 dilayani sampai minumannya jadi dulu, lalu pindah ke meja 3 begitu seterusnya lalu nanti balik ke meja 1 lagi terus meja 2 lagi begitu seterusnya sampai semuanya selesai, dan ini diatur oleh algoritma penjadwalan di phpnya karena tiap bahasa memiliki algoritma penjadwalan yang berbeda. berbeda kalau punya 16 proses independen di 16 core, akan ada 16 pelayan melayani 16 meja makan juga, 1 pelayan melayani 1 meja makan, sehingga lebih cepat selesai tugasnya. jadi kalau benar masalahnya di aplikasinya, masalahnya adalah belum bisa menggunakan 16 core, cuma 1 yg dipake. coba pakai php swoole di laravelnya, disana ada fiturnya buat bikin proses independen yg diberikan ke tiap core cpunya, biar semua core cpunya kebagian kerja, ga hanya 1 core aja yg kerja menyelesaikan tugas para worker thread. terus nanti di tiap corenya bikin worker threadnya sesuai experiment jumlah yg paling optimal berapa, kadang kebanyakan malah makin lemot
Besar banget om resource ny. Saya buat aplikasi pilkada dengan jumlah user (relawan) 2500. Saya buat dengan laravel 11. Spesifikasi VPS ny RAM 4GB dan CPU 1 Core. Alhamdulillah lancar pada saat rekapitulasi per tps
menurut saya agak beda kasusnya dengan ujian online bang. Kalau ujian online, usernya pasti masuk dan mengerjakan barengan beda dengan aplikasi pilkada yang ngaksesnya ga barengan. apalagi ujian online itu pas masuk pertama past banyak yang dicek, misal user, token, jadwal ujian udah masuk apa belum, dan lain sebagainya.
@@AdamKurniawan setuju bg. Semakin besar aplikasi yg kita buat maka kita akan terus belajar. Kita harus terus belajar dan update teknologi itu sangat penting
Betul, kalau moodle beban query sangat tinggi karena relasi table nya kompleks, sepertinya karena terintegrasi juga ke fitur fitur LMS lainnya. Padahal desain exam nya juga sudah sangat complicated. Dia support banyak format item soal, ada analisis butir soal otomatis banyak ngerecord berbagai data dan log. Belum sistem enkripsinya.. kalau mau di optimasi lumayan cape. Kalau concurrent usernya besar mungkin lebih murah develop sendiri.
terima kasih banyak pak sudah dijawab pertanyaan saya. oh ya sebagain tambahan informasi, aplikasi itu menggunakan php 7.2, mysql 8, untuk vps menggunakan digitalocean region singapure, dan menggunakan konsep SAS. cpu 16 itu sebenernya dibutuhkan saat test dibuka saja, jadi pada waktu siswa mencoba masuk ke aplikasi dan memulai sesi tes. setelah tes berjalan kira-kira 2 menit, maka sudah normal kembali, persentase CPU kembali ke 20%. kemudian untuk ram 32GB itu juga terpakai 4GB, harus memilih 32 GB karena paket dari DO nya. jangan dibully ya teman-teman 😅
@@AryAlmazari paling aman bang dipakai aja fitur load balancer di DO Dan dimanage pakai IaC kaya terraform jadi kalaupun ada dipakai sewaktu ujian pun akan aman karena sudah terhandle, (DO belum punya fitur autoscaling)
jadi saya sudah bisa membayangkan ribetnya untuk nyiapin server buat estimasi seberapa banyak user yang diperlukan, dan tentu saja stress test untuk mendapatkan data yang terbaik
@@muhammadrafli5900 aplikasinya belum stateless bang, masih nyimpen file di local storage, local memory, dan termasuk session juga masih driver local... jadi punya PR banyak ini untuk bisa multiserver dan pakai load balancer.
@@AryAlmazari pake jmeter aja, dibuat scenario testnya, misal buka homepage, login, load ujian, submit ujian, scoring, nanti keliatan misal pakai berapa vuser, berapa lama testnya, nanti ada reportnya dari jmeter brp TPS, response time, dan di server nya keliatan jg apakah sudah sesuai dgn utilisasinya,
Betul sekali Kang, saya punya sistem ujian online yang diakses belasan ribu user memang worker nya nggak butuh yang tinggi-tinggi banget, tapi memang butuh spek database yang cukup tinggi.
kalau saya pribadi, jika terpaksa menggunakan laravel.. saya paksakan laravel nya dijadikan backend API ketimbang monolit mvc. jadi concern analisis nya bisa dibedakan apakah di backend atau frontend problem nya
bener emang banyakin vm terus setup LB. tapi akan percuma kalau server db data sudah gede. mungkin prakteknya kalau sudah sampe 1rb user realtime, dan db sudah sampe > 100GB bahkan TB. dibuat 2 vm buat handle db, perlu di setting replicate. dialihin query2 untuk readonly ke db replicate, query2 untuk rewrite ke db primary.
@@bungkoes5223 maaf menurut opini saya, query utk 1000 user gk gede bang, apalagi klo cmn buat soal ujian hehe 🙏 saya aja bulk insert 10jt record, 1k an per batch, pake 8 core cpu masih super kenceng pake php + MySQL, saya masih yakin klo problemnya ada di aplikasinya bukan teknologinya. Tp kan kita gk tau yak aplikasinya gimana, hanya penanya yg tau wkwk
1. Cek dulu penggunaan resource di database. berapa CPU usage dan Ram Usage nya. Siapa tau memang spesifikasi DB nya yang terlalu kecil untuk transaksi data dengan jumlah data yang ada saat ini. 2. Jika memang spesifikasi database sesuai, coba di cek lagi optimasi querynya. Coba hit endpoint yang diduga bermasalah. Lalu di breakdown operasi di endpoint tersebut. supaya terlihat, operasi mana saja yang bermasalah. Siapa tau anda menemukan `n+1` query problem atau meload data dengan jumlah yang terlalu besar dalam satu endpoint.
iya bang db server nya yang gampang lemot, kalo source query nya gak optimal (N+1, dll). Cara paling gampang untuk optimasi (setelah indexing, dll), yaitu nge-enable "Cache" di database, bener2 cuma enable doang, secara query sama aja, tapi DB bakal ngambil otomatis cache dari query yg dimaksud, selama gak ada perubahan data, jika ada perubahan data DB otomatis nge flush dan cache ulang. Ini lumayan ngaruh buat showing2 data (select), secara teknikal implementasi juga effortless ga perlu maintain kapan harus flush kapan harus cache secara manual di code kita
"No silver bullet" ketika berurusan dengan high traffic, tidak cukup hanya dengan naikin server. secara garis besar adalah clustering,load balancing,cache. dan ingat itu tidak untuk dilakukan oleh seorang diri :D
bisa dicoba FrankenPHP atau sejenisnya pak, atau openswoole, laravel terbaru dah mendukung. tapi emang kendalanya disitu frameworknya dah out of date banget si. wkwk
banyak hal yang menjadi tanya sebenarnya tentang 16 core terpakai saat penggunaan awal (mas Ary udah komen dibawah). tapi saya suka cara mas eko jelasin kemungkin yang bisa terjadi, dan cara penanganan nya. ilmu baru daging semua. makasih mas.
bang mungkin yang ditanyakan itu kasus ujian online itu memang banyak banget nyimpen data di session memang makan banyak resourse di PHP,. mungkin akan lebih efektif dibuat temporary table untuk nyimpen session
Numpang nyatet: Untuk PHP, Ruby, Redis yg single thread processing. Drpd v scaling, better h scaling. H scaling = memperbanyak VM dgn spec low/standard. Gak butuh high performance processing seperti ML processing.
kasus, tech stack, jumlah user, dan projectnya persis dengan saya. Awal2 saya juga lemot sampai pake 16gb ram, akhirnya saya optimasi query dan indexing databasenya, alhasil sekarang 4gb aja udah lancar jaya no lemot2 club
Kalau pakai Laravel udah ada octane bisa mode swoole/frankenphp, set worker gausah repot bikin vm. Troubleshoot performa juga inspek dulu kodenya, jangan langsung masuk infra atau langsung tunjuk tangan ke bahasa program. Masalah gabakal selesai hanya karena ganti bahasa, gada "magic" nya, tetap butuh logika app yang bagus. Bisa dicek bagian mana yang cpu-intensif, coba di uji pakai bot dengan load tester. Nanti disesuaikan codenya logic mana yang butuh cpu, apakah bagian crypto di hashing (kemungkinan besar kalau login banyak terus algonya berat) , apakah ada lock saat request, request nya udah di rate limit belum, request ke database delay lama atau bentar. Logika app secara keseluruhan lah karena gw liatnya manual itu. Bener seperti kata pzn, apps quiz harusnya ga berat, toh cuman request simpel isinya kecuali masukin teknologi berat yang butuh cpu secara intensif. 1000 user secara bersamaan untuk app sederhana seperti quiz itu kategori kecil banget. Toh kalau pakai platform basis php kyk chamilo atau moodle enteng aja handle ribuan user.
nambahin dikit, utk ujian, submit data / jawaban jgn langsung semua jawaban dikirim dalam sekali request, bakal makan memory yg lumayan. mending tiap soal.
pengalaman saya soal ujian online secara bersamaan dengan user lebih dari 1000 user, cpu 8 core dan 12GB RAM udah bisa jalan lancar (masih dalam 1 server), saya sendiri pake php native gak pake framework... server pake NGINX dan PHP 8.x, saran saya silahkan optimize database dan optimize code dan code query yang di codingnannya. ini sangat berpengaruh. moga membantu
di sy jg aplikasi cbt pakai php vanilla, msh versi 5 php nya 😂 jmlh pengakses concurrent sekitar 600an dikasih server awalnya 4 core sampai sekarang jadi 24 core dg ram 32 GB.. kalau dipantau penggunaan resources server, ini ngga kepake semua.. ram maksimal kepake 4 gb, cpu jg anteng di bawah 10% meski load lagi berat.. tp di awal peserta login selalu berat.. setelah ditelurusi masalahnya bukan di server ataupun php nya tp access point nya yg ngga kuat ngehanle request segitu banyak dalam sekali waktu.. krn berat hanya di awal, kalau sudah berjalan sekitar 20 menit mulai normal.. jadi kalau server sudah gede, aplikasi sudah dioptimasi tp tetep lambar harus dicek jg infrastruktur jaringannya
menunggu pembahasan optimalisasi database kang, soalnya si aplikasi saya memang yg bikin lemot di database. sampe harus restart mysql nya supaya bisa jalan webnya
Kalau terbiasa pakai nginx dan php-fpm coba aja pakai scripted optimasi pakai centminmod, kami pernah buat ujian seklolah dengan 1 core 2gb ram bisa 250an siswa, setelah ke centminmod
menurut gue langkah pertama yg harus dilakukan ialah cek dimana letak bottlenecknya, apakah di db, logic atau kl ujiannya banyak gambar/ ilustrasi bisa jadi bottlenecknya di bandwidth,
PHP itu blocking language, memang tdk cocok untuk async task. tapi bisa coba pakai swoole dulu. saya curiga untuk static assets (gambar, video, audio) di serve di server yang sama, jadi akan sangat lemot processing dynamic data nya
lavarel bikin mudah kerja, tapi entah kenapa saya jarang pakai framework, gara2 dulu pernah ngalamin project pakai framework boros resource jadi bgg gimana scalabilitynya.. akhirnya pakai php native biar mudah di skala horizontal.. bisa mbikin beberapa server vps murahan, bisa share bandwidthnya terutama file2 kontennya
Framework itu tujuannya supaya lebih mudah saat harus bekerja sama dengan team, atau serah terima kerjaan ke dev lain, plus menghemat waktu kerja dan file yang lebih terstruktur. Kalo pake native, yah hanya anda dan tuhan yang paham code anda wkwkwkw, bakal butuh waktu lebih lama bagi orang lain untuk memahaminya
Database butuh spek gedhe karena trafik paling gedhe kesitu ketimbang sisi appnya. Itu enaknya dibuat microservices, cuman invest dan kerumitannya diawal.
Saya punya kasus serupa, ujian online MAU sekitar 16K dan setiap hari ujian dikerjakan sekitar 15 judul dengan user yang aktif sekitar 5K. Saya menggunakan laravel untuk backendnya dan frontendnya hanya menggunakan blade. total pengeluaran untuk server perbulan 1.8jt dengan konfigurasi 6 nodes (2vcpu+2GB ram), 3 nodes untuk cluster database dan 3 nodes untuk backend server dan redis sentinel. Semua cache dan session diarahkan ke redis, untuk backend di buat clustering dengan swarm beserta load balancernya. Laravelnya sendiri sudah berjalan di atas franken, jadi kalau memang perlu sampe 16 core di lihat dulu, usage di nodes tersebut apakah terpakai semua, atau malah lebih banyak core yang unused, atau malah ramnya cuma kepake 4GB. Karna untuk konfigurasi saya semua berjalan di angka 60% total kapasitas nodesnya
@@hafizhfadhlurrohman1760 3 node database itu gimana model pembagiannya bang? Pakai model sharding atau gimana ya bang, atau read write dibedakan node nya?
Jangan pakai mysql yg community, pakai yg versi enterprise pasti kenceng. Trus yg kedua solusi mirroring db (horizontal scaling) bikin slave db sebanyak banyaknya. Insya allah anteng tuh aplikasi. Dan saran saja, mulai tinggalkan laravel or framework php , beralih ke java quarkus. Dijamin makin stabil aplikasinya.
jangan pakai db mysql yg udh dibeli perusahaan, pakai postgresql yg lebih op dari mysql, kalau masih kurang pakai nosql db, tapi gk bakal kurang karena postgre bisa handle sangat sangat tinggi, skill sql programmernya yg ngaruh paling banyak
laravel 6 sebenernya bagus the good old days😊, mungkin yg berat di sisi db dan file2 coba d pisah aja vm db dan vm untuk file atau gunakan minio atau s3
kalo pengalaman saya dulu untuk aplikasi presensi yang lambat ketika jam presensi itu di solve dengan connection pool. jadi api migrasi dari php ke node js. cuman kalo sekarang mungkin bisa dicoba pake frankenphp
Hehehe, buat saya mah, kalau coding sekalian aja yg pure PHP. Kalau sudah expert baru pakai framework for speed. Tapi karena keburu ngiler sama proyek dan duitnya, akibatnya pre-made app pun terpaksa dipakai apalagi dah kena duit. Hehehe. Cara mudah memang vertical scaling. But,, did nothing... Tapi dimaklumi sih... semua orang butuh. Tapi quality code juga perlu. Selamat menikmati... Salam dari old-school guy.. Pure PHP
Bang, di db mysql itu ada bisa menyimpan query (view). Di script PHP juga kita bisa membuat query. Pertanyaannya mana yg lebih cepat, dan apa rekomendasi abang dalam membuat query untuk view ini, membuatnya di mysql yg disimpan menjadi view kemudian view tsb yg dipanggil di script php, atau query tsb langsung dibuat di script PHP. Terimakasih.
agakny yg nanya bkn programmer nya, tp mgkin smcm atasan dr si programmer. si programmer ngibulin atasannya klo utk akses 1000 user perlu nambah PC sbnyk 16 dgn spek 32gb ram . itu alesann si programmer aja kepengen dpt pc baru yg yahud . biar diACC sama atasannya. begitu yg sy tangkap 😊
Yang bikin lama biasanya sih database, biasanya saling tunggu pertransaksi, gw pernah pegang 15 server dengan spek sama malah ada yg 32 core dengan memory besar pun, lemot klo struktu databasenya juga ga bener, coba cek aja databasenya di optimasi lagi, mungkin ada atribut yg aktif.
ini mah jumlah koneksinya dibatasi kalau saling tunggu dibagian databasenya, harusnya max connection ga dibatasi, terus setting minimum connection yang harus tetap aktif di pool 20 misal (tergantung spek) tapi maxnya jangan dibatasi. saling tunggu juga bisa melibatkan backend, ga hanya di database. yaitu saling tunggu io tersedia, cara atasinya dengan pakai async biar si thread/worker yang menangani requestnya ini ga perlu nunggu hasilnya jadi, langsung pindah menangani request yang lain terus nanti balik lagi kalau udah selesai
Ada yang kurang dimention kang, kalo mau bisa horizontal scaling, si aplikasi mesti stateless.. I assume, aplikasi ujian online ini pake session sebagai backbone untuk autentikasinya.
PHP lebih impactnya ke memory, kalau CPU nya yg naik kemungkinan DB nya. Kalau laravel nya jadul bisa kemungkinan MySQL nya jg jadul. Antara DB nya belum ada indexing atau masih pakai engine yang table locking atau malah keduanya. Coba fokus ke optimasi DB deh.
@@traingame8985 bruhhh cpu usage tinggi di laravel akan disebabkan 1. proses interpret/menterjemahkan kode php ke instruksi (php ga punya jit, jadi proses ini dilakukan terus menerus) 2. garbage collector semakin banyak kode php yg perlu diinterpret (kode2 di librarynya) dan semakin banyak object-object yg perlu dihandle, semakin tinggi cpu usagenya
Mungkin ada yang sama dgn kasus saya, pakai 4 core web ujian hanya +- 500 user online cpu full ternyata penyebabnya service mysql yang berat, solusinya saya cek log sql mana yang sleepnya lama lalau di optimasi nambahin index N semua jadi normal 1000 userpun ga nyampe 10% cpunya rata2
Sebagai pelaku usaha sekarang pun make full laravel , karena alasannya ya gampang aja + saya juga baru paham laravel ,dan sekarang memorynya skrang udah tembus 400GB , karena kebetulan transaksi masuk perbulannya 50k - 150k Transaksi, krna banyak reseller yg konek api , Jujur sih agak khawatir juga lama lama kwkwkw . Saya juga kepikiran mau migrasi dari laravel tapi masih perencanaan , kira kira bisa minta saran rekomendasi untuk saya seperti front end , backend , dll ? Terima kasih moga rezekinya lancar
backend go, java, kotlin, .net, rust bagus. sepengalaman aku ke 4 itu yg performanya tinggi jauh dari php. kalau lu paham rust pakai rust karena memudahkan banget ini bahasa, mantain bakal enak, jarang banget nyentuh debugger, tanpa garbage collector. kalau paham go pakai go. kalau mau java springboot mending springboot yang versi kotlin dah lebih enak dari java, kalau .net juga udah bagus. untuk frontend svelte, vue, react. lu cari tau dulu sebaiknya bottlenecknya itu dimana baru tentuin keputusannya
Saya kurang mengerti dengan istilah CPU yang dimaksud oleh Pak Eko. Sepengetahuan saya, CPU adalah singkatan dari Central Processing Unit, yang mencakup beberapa komponen seperti prosesor, RAM, dll. Pertanyaan saya: 1. Apa yang dimaksud dengan core dalam konteks CPU? Apakah ini berkaitan dengan kecepatan (misalnya GHz)? 2. Ketika disebutkan 0.1 core CPU, apakah itu berarti 100 MHz atau 0.1 GHz? Mohon penjelasannya.
@@egipebriyawan1455 maksudnya cpu itu yang ada di vps mas, yang biasa di gunain. Makanya, pas pak Eko bilang, 0.1 cpu, 0.5 cpu, berarti spesifikasi vpsnya seharusnya 1gb 1cpu, udah sesimpel itu. Kalo misalnya kasus 1000 user online tapi butuh 13 cpu, berarti, 12x lipat apa yang pak Eko bilang
menurut saya ini hubungannya sama docker / kubernetes. 1. Contoh di laptop: 1 real cpu bisa punya 4 real core 8 thread. di linux, docker, ini dianggap 8 core atau biasanya kelihatan 800% cpu yang tersedia. 2. Kalau disebutkan resource limit aplikasi hanya boleh pakai 1 core, artinya dari 8 core / 800% yang tersedia dia maksimal pakai 1 core / 100% cpu Kalau disebutkan 0.1 core, artinya dari 8 core / 800% cpu yang tersedia dia maksimal pakai 0.1 core / 10% cpu
wah ini sama kaya saya, cm saya berjalan di windows. client sya ga mau pake linux, di linux aman sampe 500lbih, di windows KO di 200 - 250.. saya pake slim dan php74. barus secara vertikal sya scaling
Saya juga punya kesulitan di soal Ujian Bang. Kasusnya mirip ini. 1500 siswa akses bersamaan dan bikin lemot. Database MySQL-nya sangat tinggi sampai 200%, kadang sampai 400%. Pas siswa membuka halaman ujiannya cuma muter2 aja. Saya kurang paham cara mengoptimalkannya, mungkin bisa dibantu jawab ini. Beberapa hal yang sudah saya lakukan untuk soal ujian dan jawaban saya sendirikan. Jadi jawaban siswa akan tersimpan ke redis, nanti setelah ujian selesai baru disimpan ke mysql. Ini cukup mengurangi beban MySQL. Mungkin ada cara yang lebih baik, mohon petunjuknya.
simplenya jalanin multiple server php, lalu pakai load balancer di depannya, load balancer ini akan menyebarkan traffic ke server-server php yang ada, ada banyak algoritmanya, ada round robin yang menyebarkan secara merata ke semua server, ada weightened round robin sama kayak round robin tapi server yang speknya lebih besar dari yang lain diberi beban request lebih banyak dari server yang speknya lebih kecil, least response time yaitu memilih server yang waktu responsenya paling cepat diberi beban lebih banyak, random yaitu disebarkan secara random (gk efektif karena gk mempertimbangkan faktor-faktor), dll. lalu servernya itu pada akses database, databasenya bisa 1 atau bisa juga dibuat multiple instance kalau bottlenecknya juga ada di database
saya bmembuat sistem RS ERP dari front sampai BAck (akunting) dipakai 300 user per RS dan satu server ada 5 RS..konsepnya SAS aplikasi di Cloud..pake PHP aman aman aja..tapi mmg native..
Saya lbh sreg bikin aplikasi dgn framework yg saya bikin sendiri (sdh 17thn saya pake ini) Jd gk perlu banyak resource Pernah nyoba sesekali bikin pake framework yg sdh ada kok malah lambat, atau saya yg katrok ?
@labkitadev Iya. Tapi sebagai developer harus juga mengikuti update yg sudah disediakan. Misal update ke versi laravel terbaru keuntungannya yaitu banyak package laravel terbaru yg bisa memudahkan untuk membangun aplikasi lebih efisien
bantu jawab bang, secara garis besar akan berkurang. tapi tetap tidak harus ada optimasi kalau pingin hasilnya bisa optimal. karena terbentur di nature nya teknologi itu segitu2 aja. jadi kudu dioptimasi untuk bisa capai performa tertentu. contoh gampangnya, kita ambil di motor aja ibarat motor honda supra x lama yg 100cc dengan supra x baru 125cc jelas performa beda dan pastinya yg baru punya performa yang baik. tapi peningkatan ini apakah bisa sesignifikan untuk dapat melaju di 200 km/h ? jawabannya jelas tidak bisa dengan kondisi standart, harus ada optimasi diberbagai sektor. kurang lebih seperti itu sih bang
js lebih bagus sih bang untuk performanya kalau di banding dgn php, tp ada masalah yg cukup krusial. add on nya buset banyak banget. gak ada framework yg fullstack dan ready to use. mesti kudu install ini dan itu. belum lagi kalau ada update di dependecy yg dipake, bisa2 muncul error padahal sebelumnya lancar2 aja. ibarat kata banyak pilihan itu baik, tp kalau terlalu banyak dan terus2an berubah itu malah bikin pusing. belum lagi gorengan dari influencer js yang bilang ini itu lebih baik dari ini itu yg lain. ini yg bikin males aja pake js. pusing sendiri jadinya
Rate limit secara default-nya per user IP. Jd selagi penggunaan 1 user ini wajar seharusnya tidak kena. Itu pun default di route api, di route web seharusnya ga ada.
@@sidiqaldi nah tp fokusnya bukan di rate limit lg hrsnya. Krn secara performance nya jg blm bener. Rate limit memang perlu tp kl secara app blm mumpuni, dipasang rate limit pun ga jadi pengaruh.
@@sidiqaldi diroute web ada ko manfaatkan middleware throttle, test install Laravel Breeze, saya user php native yang migrasi ke Laravel, Laravel ini framework yang super duper lengkap, minus nya ya user awam banyak yang tidak memanfaatkan fitur2nya, sehingga framework tsb menjadi boomerang GURU Terbaik adalah dokumentasi
@@maulanasatyaadi karena yang pakai dikit, coba sini aku tes webnya. java 1 core aja bisa lebih dari itu, lah itu 8 core cuma 10k wkwkwk gk efisien banget mubazir resource :((
Yang saya perhatiin selama ini. Rata-rata ujian online itu pada menggunakan PHP baik native ato pun framework. Dan sering bermasalah saat digunakan secara bersamaan. Krn komunitas dan contoh PHP byk bertebaran dimana2 kali yah. Adakah rekomendasi framework yang bisa handle banyak concurrensy spt Ujian online ini dgn catatan kita ga butuh banyak spec hardware yg tinggi ? Yang saya tau cuman Golang sbg backendnya. Tapi utk frontendnya adakah rekomendasi ? Terima kasih
Di sisi frontendnya harusnya nggak ada masalah ya pake framework modern apapun (e.g. VueJS, React) kalo pake hardware modern, soalnya backend kan yang ngelakuin heavy lifting.
Iya mas setuju, sebenernya jangan terfokus pada spec besar atau kecil sebuah server. teknis dan prakteknya nya juga jangan dilupakan.
ijin menambahkan mas, mungkin ada kawan2 yg belum maksud dari horizontal scaling ini supaya bisa di riset lebih lanjut,
Jadi ini arahnya harusnya load balance / load distribution ke beberapa server, dibawah ini kemungkinan yg bisa jadi pertimbangan:
1. CDN, ini lebih ke static asset (image, video, js, css) yg di pindah ke server yg berbeda sehingga traffic / bandwidth ke main server bisa dikurangi.
2. Load balance ke beberapa server, di web server (nginx / apache) sudah ada, bisa di praktekkan
3. Subdomain, ini cara paling primitif dan paling mudah, buat beberapa subdomain untuk beberapa server web, sedangkan databasenya tetep ke arah 1 server. misal kelas a, b, c masing2 memiliki subdomainnya, jadi traffic akan lebih tertata.
dan masih ada lainnya juga, tergantung bagaimana kondisi database dan aplikasinya, jadi masih ada kemungkinan juga di bagian aplikasinya yg di optimalkan
Mungkin itu tambahan dari saya. salam
@@DHUTAPRATAMA mantap pak terimakasih pencerahannya 🙏
kalau ngomongin lelet jangan lupa code logic yang kita buat kadang kurang efisien, dulu ketika saya kuliah sering saya buat code yang gak efisien terutama ketika looping atau lainnya, apalagi waktu itu juga belum kenal problem N+1. Tapi setelah saya belajar sedikit tentang low level programming dari situ agak paham dan sampai saat ini pelan-pelan memperbaiki efisiensi logic code saya.
betul sekali
jika masalahnya di aplikasinya, maka ini bisa diatasi tanpa kompleksitas horizontal scalling. pertama kita perlu pahami yg dijelaskan pak eko tadi, horizontal scalling hanya menjalankan 16 server laravel di 16 core. kita bisa mencapai ini dengan menjalankan 16 proses independen di laravelnya di 16 core. well php secara default hanya berjalan di 1 core. ingat pakai multiple worker thread itu tidak sama dengan pakai multicore. pertama kita perlu memahami bedanya thread dan core. simplenya, cpu dipecah jadi 6 core misalnya. thread adalah pecahan dari core nya lagi, 1 core bisa dipecah jadi banyak thread, jadi simplenya thread anaknya core. kalau kamu pakai 10 worker thread, itu akan tetap cuma pakai 1 core karena php defaultnya cuma jalan di 1 core. biar kamu bisa pakai ke 16 corenya, kamu perlu membuat multiple proses independen yg berdiri sendiri. 1 server diserahkan ke 1 core. sehingga akan ada 16 proses di aplikasi laravel kamu kalau spek cpu 16 core. hal ini setara dengan horizontal scalling. 16 proses ini akan melayani request secara bersamaan, secara paralel dan independen layaknya horizontal scalling. berbeda kalau tanpa mengaktifkan 16 proses independen, alias defaultnya 1 core terus bikin 10 worker thread, itu hanya akan ada 1 pengeksekusi karena hanya ada 1 core, 1 core ini akan mengeksekusi tugas-tugas di thread secara bergantian, gampangnya buat visualisasi ibarat core ini pelayan, dan thread ini meja makan, defaultnya laravel 1 core dan misal kamu pakai 10 worker thread, akan ada 1 pelayan dan 10 meja makan, 1 pelayan ini harus melayani melayani 10 meja makan secara bergantian dan dijeda jeda, di meja ke 1 dilayani dulu sampai dagingnya makan, lalu pindah ke meja 2 dilayani sampai minumannya jadi dulu, lalu pindah ke meja 3 begitu seterusnya lalu nanti balik ke meja 1 lagi terus meja 2 lagi begitu seterusnya sampai semuanya selesai, dan ini diatur oleh algoritma penjadwalan di phpnya karena tiap bahasa memiliki algoritma penjadwalan yang berbeda. berbeda kalau punya 16 proses independen di 16 core, akan ada 16 pelayan melayani 16 meja makan juga, 1 pelayan melayani 1 meja makan, sehingga lebih cepat selesai tugasnya. jadi kalau benar masalahnya di aplikasinya, masalahnya adalah belum bisa menggunakan 16 core, cuma 1 yg dipake. coba pakai php swoole di laravelnya, disana ada fiturnya buat bikin proses independen yg diberikan ke tiap core cpunya, biar semua core cpunya kebagian kerja, ga hanya 1 core aja yg kerja menyelesaikan tugas para worker thread. terus nanti di tiap corenya bikin worker threadnya sesuai experiment jumlah yg paling optimal berapa, kadang kebanyakan malah makin lemot
@@shining_cross kalo pake bahasa "defaultnya", apakah bisa disetting supaya laravel bisa multi core tanpa horizontal scaling?
Besar banget om resource ny.
Saya buat aplikasi pilkada dengan jumlah user (relawan) 2500. Saya buat dengan laravel 11. Spesifikasi VPS ny RAM 4GB dan CPU 1 Core.
Alhamdulillah lancar pada saat rekapitulasi per tps
menurut saya agak beda kasusnya dengan ujian online bang. Kalau ujian online, usernya pasti masuk dan mengerjakan barengan beda dengan aplikasi pilkada yang ngaksesnya ga barengan. apalagi ujian online itu pas masuk pertama past banyak yang dicek, misal user, token, jadwal ujian udah masuk apa belum, dan lain sebagainya.
@@AdamKurniawan betul, pengguna moodle pasti udh tau requirementnya seperti apa, pasti tinggi
@@AdamKurniawan setuju bg.
Semakin besar aplikasi yg kita buat maka kita akan terus belajar.
Kita harus terus belajar dan update teknologi itu sangat penting
Betul, kalau moodle beban query sangat tinggi karena relasi table nya kompleks, sepertinya karena terintegrasi juga ke fitur fitur LMS lainnya. Padahal desain exam nya juga sudah sangat complicated. Dia support banyak format item soal, ada analisis butir soal otomatis banyak ngerecord berbagai data dan log. Belum sistem enkripsinya.. kalau mau di optimasi lumayan cape. Kalau concurrent usernya besar mungkin lebih murah develop sendiri.
cobain Pake Js lebih mentep bang,auto candu
terima kasih banyak pak sudah dijawab pertanyaan saya.
oh ya sebagain tambahan informasi, aplikasi itu menggunakan php 7.2, mysql 8, untuk vps menggunakan digitalocean region singapure, dan menggunakan konsep SAS.
cpu 16 itu sebenernya dibutuhkan saat test dibuka saja, jadi pada waktu siswa mencoba masuk ke aplikasi dan memulai sesi tes. setelah tes berjalan kira-kira 2 menit, maka sudah normal kembali, persentase CPU kembali ke 20%.
kemudian untuk ram 32GB itu juga terpakai 4GB, harus memilih 32 GB karena paket dari DO nya.
jangan dibully ya teman-teman 😅
@@AryAlmazari paling aman bang dipakai aja fitur load balancer di DO
Dan dimanage pakai IaC kaya terraform jadi kalaupun ada dipakai sewaktu ujian pun akan aman karena sudah terhandle, (DO belum punya fitur autoscaling)
jadi saya sudah bisa membayangkan ribetnya untuk nyiapin server buat estimasi seberapa banyak user yang diperlukan, dan tentu saja stress test untuk mendapatkan data yang terbaik
@@muhammadrafli5900 aplikasinya belum stateless bang, masih nyimpen file di local storage, local memory, dan termasuk session juga masih driver local... jadi punya PR banyak ini untuk bisa multiserver dan pakai load balancer.
@@muhammadrafli5900 ajarin cara bikin stress testnya bang 🤩
@@AryAlmazari pake jmeter aja, dibuat scenario testnya, misal buka homepage, login, load ujian, submit ujian, scoring,
nanti keliatan misal pakai berapa vuser, berapa lama testnya, nanti ada reportnya dari jmeter brp TPS, response time, dan di server nya keliatan jg apakah sudah sesuai dgn utilisasinya,
Betul sekali Kang, saya punya sistem ujian online yang diakses belasan ribu user memang worker nya nggak butuh yang tinggi-tinggi banget, tapi memang butuh spek database yang cukup tinggi.
Jadi, prediksi saya 16 CPU itu sebenarnya dimanfaatkan oleh databasenya. Mungkin yang nanya, server aplikasi dan database di satu tempat yang sama.
Kalau boleh tahu jenis database dan spek yang mas Adam gunakan apa mas?
@@AdamKurniawan php nya bos
@@AdamKurniawan LMS pake CI?
@@ade_ridwan mysql bang, Saat ujian berlangsung 30 core CPU 28 GB RAM, selesai ujian dikurangi lagi.
Oooo begitu ya ternyata, saya baru tau. Benar benar ilmu baru nih. Tapi masalahnya, biasanya itu antara server aplikasi dan database itu jadi satu pak
1. round robin
2. object storage
3. query optimation seperti indexing
4. pecah service jadi beberapa microservice
5. implementasi queuing
kalau saya pribadi, jika terpaksa menggunakan laravel.. saya paksakan laravel nya dijadikan backend API ketimbang monolit mvc. jadi concern analisis nya bisa dibedakan apakah di backend atau frontend problem nya
bener emang banyakin vm terus setup LB.
tapi akan percuma kalau server db data sudah gede.
mungkin prakteknya kalau sudah sampe 1rb user realtime, dan db sudah sampe > 100GB bahkan TB.
dibuat 2 vm buat handle db, perlu di setting replicate.
dialihin query2 untuk readonly ke db replicate, query2 untuk rewrite ke db primary.
Masalah terbesar bukan di php nya, tp di mysql nya. Penyakit mysql klo datanya udah gede, langsung lemot dia. 😢
@@bungkoes5223 maaf menurut opini saya, query utk 1000 user gk gede bang, apalagi klo cmn buat soal ujian hehe 🙏 saya aja bulk insert 10jt record, 1k an per batch, pake 8 core cpu masih super kenceng pake php + MySQL, saya masih yakin klo problemnya ada di aplikasinya bukan teknologinya. Tp kan kita gk tau yak aplikasinya gimana, hanya penanya yg tau wkwk
tergantung bang, coba di optimize dulu database dan querynya
@@HeryKismis iya betul, tergantung model databasenya juga, dan itu tergantung dari system aplikasi bagaimana dia bekerja, contoh aplikasi cbt.
1. Cek dulu penggunaan resource di database. berapa CPU usage dan Ram Usage nya. Siapa tau memang spesifikasi DB nya yang terlalu kecil untuk transaksi data dengan jumlah data yang ada saat ini.
2. Jika memang spesifikasi database sesuai, coba di cek lagi optimasi querynya. Coba hit endpoint yang diduga bermasalah. Lalu di breakdown operasi di endpoint tersebut. supaya terlihat, operasi mana saja yang bermasalah. Siapa tau anda menemukan `n+1` query problem atau meload data dengan jumlah yang terlalu besar dalam satu endpoint.
Mantaab. Ilmu baru nih. Terimakasih Om
iya bang db server nya yang gampang lemot, kalo source query nya gak optimal (N+1, dll). Cara paling gampang untuk optimasi (setelah indexing, dll), yaitu nge-enable "Cache" di database, bener2 cuma enable doang, secara query sama aja, tapi DB bakal ngambil otomatis cache dari query yg dimaksud, selama gak ada perubahan data, jika ada perubahan data DB otomatis nge flush dan cache ulang.
Ini lumayan ngaruh buat showing2 data (select), secara teknikal implementasi juga effortless ga perlu maintain kapan harus flush kapan harus cache secara manual di code kita
"No silver bullet" ketika berurusan dengan high traffic, tidak cukup hanya dengan naikin server. secara garis besar adalah clustering,load balancing,cache. dan ingat itu tidak untuk dilakukan oleh seorang diri :D
bisa dicoba FrankenPHP atau sejenisnya pak, atau openswoole, laravel terbaru dah mendukung. tapi emang kendalanya disitu frameworknya dah out of date banget si. wkwk
Padahal PZN di video sblm ini udh bahas benchmark Frankenphp worker mode yg luar biasa kenceng.. 😁
Runtime Swoole dengan Hyperf framework nya , atau Runtime roadrunner dengan Spiral framework nya. Dua duanya battle tested dan production ready ~~~
@@budipriyatno5853 keskip keknya saya pak 😀🙏
@@hexantra frankedphp udah production ready belum ya
@@masiwangs sepertinya sih belum, soalnya dia baru dan dapet inspirasi dari roadrunner (makannya runtime franken dibangun diatas go)
seriusan ini bikin saya tidak insomnia lagi.. makasih mas Eko
banyak hal yang menjadi tanya sebenarnya tentang 16 core terpakai saat penggunaan awal (mas Ary udah komen dibawah). tapi saya suka cara mas eko jelasin kemungkin yang bisa terjadi, dan cara penanganan nya. ilmu baru daging semua.
makasih mas.
bang mungkin yang ditanyakan itu kasus ujian online itu memang banyak banget nyimpen data di session memang makan banyak resourse di PHP,. mungkin akan lebih efektif dibuat temporary table untuk nyimpen session
Numpang nyatet:
Untuk PHP, Ruby, Redis yg single thread processing.
Drpd v scaling, better h scaling.
H scaling = memperbanyak VM dgn spec low/standard.
Gak butuh high performance processing seperti ML processing.
kasus, tech stack, jumlah user, dan projectnya persis dengan saya. Awal2 saya juga lemot sampai pake 16gb ram, akhirnya saya optimasi query dan indexing databasenya, alhasil sekarang 4gb aja udah lancar jaya no lemot2 club
Kalau pakai Laravel udah ada octane bisa mode swoole/frankenphp, set worker gausah repot bikin vm.
Troubleshoot performa juga inspek dulu kodenya, jangan langsung masuk infra atau langsung tunjuk tangan ke bahasa program. Masalah gabakal selesai hanya karena ganti bahasa, gada "magic" nya, tetap butuh logika app yang bagus.
Bisa dicek bagian mana yang cpu-intensif, coba di uji pakai bot dengan load tester. Nanti disesuaikan codenya logic mana yang butuh cpu, apakah bagian crypto di hashing (kemungkinan besar kalau login banyak terus algonya berat) , apakah ada lock saat request, request nya udah di rate limit belum, request ke database delay lama atau bentar. Logika app secara keseluruhan lah karena gw liatnya manual itu.
Bener seperti kata pzn, apps quiz harusnya ga berat, toh cuman request simpel isinya kecuali masukin teknologi berat yang butuh cpu secara intensif.
1000 user secara bersamaan untuk app sederhana seperti quiz itu kategori kecil banget. Toh kalau pakai platform basis php kyk chamilo atau moodle enteng aja handle ribuan user.
Swoole is the best 😂
nambahin dikit, utk ujian, submit data / jawaban jgn langsung semua jawaban dikirim dalam sekali request, bakal makan memory yg lumayan. mending tiap soal.
iya betul ini, kalo langsung di compute semua soal2nya di BE bakal lemot
bagus insightnya pak, hal-hal kek gini kadang sering dilupain klo pas analisis sistem
pengalaman saya soal ujian online secara bersamaan dengan user lebih dari 1000 user, cpu 8 core dan 12GB RAM udah bisa jalan lancar (masih dalam 1 server), saya sendiri pake php native gak pake framework... server pake NGINX dan PHP 8.x, saran saya silahkan optimize database dan optimize code dan code query yang di codingnannya. ini sangat berpengaruh. moga membantu
di sy jg aplikasi cbt pakai php vanilla, msh versi 5 php nya 😂
jmlh pengakses concurrent sekitar 600an dikasih server awalnya 4 core sampai sekarang jadi 24 core dg ram 32 GB.. kalau dipantau penggunaan resources server, ini ngga kepake semua.. ram maksimal kepake 4 gb, cpu jg anteng di bawah 10% meski load lagi berat.. tp di awal peserta login selalu berat.. setelah ditelurusi masalahnya bukan di server ataupun php nya tp access point nya yg ngga kuat ngehanle request segitu banyak dalam sekali waktu.. krn berat hanya di awal, kalau sudah berjalan sekitar 20 menit mulai normal..
jadi kalau server sudah gede, aplikasi sudah dioptimasi tp tetep lambar harus dicek jg infrastruktur jaringannya
menunggu pembahasan optimalisasi database kang, soalnya si aplikasi saya memang yg bikin lemot di database. sampe harus restart mysql nya supaya bisa jalan webnya
bisa jadi karena pake file based session, makanya cpu nya tinggi
bisa sekalian aja diganti ke redis
Kalau terbiasa pakai nginx dan php-fpm coba aja pakai scripted optimasi pakai centminmod, kami pernah buat ujian seklolah dengan 1 core 2gb ram bisa 250an siswa, setelah ke centminmod
Mantap oom, jadi tercerahkan maklum programmer karbitan jadinya nggak mikirin optimasi dsb 🤭
menurut gue langkah pertama yg harus dilakukan ialah cek dimana letak bottlenecknya, apakah di db, logic atau kl ujiannya banyak gambar/ ilustrasi bisa jadi bottlenecknya di bandwidth,
PHP itu blocking language, memang tdk cocok untuk async task. tapi bisa coba pakai swoole dulu. saya curiga untuk static assets (gambar, video, audio) di serve di server yang sama, jadi akan sangat lemot processing dynamic data nya
lavarel bikin mudah kerja, tapi entah kenapa saya jarang pakai framework, gara2 dulu pernah ngalamin project pakai framework boros resource jadi bgg gimana scalabilitynya..
akhirnya pakai php native biar mudah di skala horizontal..
bisa mbikin beberapa server vps murahan, bisa share bandwidthnya terutama file2 kontennya
Framework itu tujuannya supaya lebih mudah saat harus bekerja sama dengan team, atau serah terima kerjaan ke dev lain, plus menghemat waktu kerja dan file yang lebih terstruktur. Kalo pake native, yah hanya anda dan tuhan yang paham code anda wkwkwkw, bakal butuh waktu lebih lama bagi orang lain untuk memahaminya
Database butuh spek gedhe karena trafik paling gedhe kesitu ketimbang sisi appnya. Itu enaknya dibuat microservices, cuman invest dan kerumitannya diawal.
yup, technical debt yang semakin menggelembung, pas pecah gak nerima
Saya punya kasus serupa, ujian online MAU sekitar 16K dan setiap hari ujian dikerjakan sekitar 15 judul dengan user yang aktif sekitar 5K. Saya menggunakan laravel untuk backendnya dan frontendnya hanya menggunakan blade. total pengeluaran untuk server perbulan 1.8jt dengan konfigurasi 6 nodes (2vcpu+2GB ram), 3 nodes untuk cluster database dan 3 nodes untuk backend server dan redis sentinel. Semua cache dan session diarahkan ke redis, untuk backend di buat clustering dengan swarm beserta load balancernya. Laravelnya sendiri sudah berjalan di atas franken, jadi kalau memang perlu sampe 16 core di lihat dulu, usage di nodes tersebut apakah terpakai semua, atau malah lebih banyak core yang unused, atau malah ramnya cuma kepake 4GB. Karna untuk konfigurasi saya semua berjalan di angka 60% total kapasitas nodesnya
untuk buat 3 node cluster itu tutorialnya namanya apa ya
@@jenilutfifauzi8849 cluster node untuk backend saya pake docker swarm, untuk cluster database pake patroni, etcd, dan postgresql
@@hafizhfadhlurrohman1760 3 node database itu gimana model pembagiannya bang? Pakai model sharding atau gimana ya bang, atau read write dibedakan node nya?
Minta kontak bang
boleh minta kontak bang?
terimakasih pak ilmunya
Tiba tiba banget muncul notif😂
pak tadi sempet mention aplikasi nya pak eko dg resource yang dipake sangat kecil. kalau boleh tw stack tech nya apa ya pak ?
Jangan pakai mysql yg community, pakai yg versi enterprise pasti kenceng. Trus yg kedua solusi mirroring db (horizontal scaling) bikin slave db sebanyak banyaknya. Insya allah anteng tuh aplikasi. Dan saran saja, mulai tinggalkan laravel or framework php , beralih ke java quarkus. Dijamin makin stabil aplikasinya.
jangan pakai db mysql yg udh dibeli perusahaan, pakai postgresql yg lebih op dari mysql, kalau masih kurang pakai nosql db, tapi gk bakal kurang karena postgre bisa handle sangat sangat tinggi, skill sql programmernya yg ngaruh paling banyak
kalau pakai laravel octane atau frankenPHP apakah masalah seperti ini bisa terselesaikan pak?
laravel 6 sebenernya bagus the good old days😊, mungkin yg berat di sisi db dan file2 coba d pisah aja vm db dan vm untuk file atau gunakan minio atau s3
thanks pak!
ditunggu scaling databasenya
mantap kang
kalo pengalaman saya dulu untuk aplikasi presensi yang lambat ketika jam presensi itu di solve dengan connection pool. jadi api migrasi dari php ke node js. cuman kalo sekarang mungkin bisa dicoba pake frankenphp
untuk db presensi saya lakukan partisi juga
@@hafiznugraha3063 maaf, kalo boleh tau itu sekitaran brp user? dan habis brp CPU & ram?
sangat setuju, btw tools untuk nulis idenya itu menggunakan apa mas?
Hehehe, buat saya mah, kalau coding sekalian aja yg pure PHP. Kalau sudah expert baru pakai framework for speed. Tapi karena keburu ngiler sama proyek dan duitnya, akibatnya pre-made app pun terpaksa dipakai apalagi dah kena duit. Hehehe. Cara mudah memang vertical scaling. But,, did nothing... Tapi dimaklumi sih... semua orang butuh. Tapi quality code juga perlu. Selamat menikmati... Salam dari old-school guy.. Pure PHP
Salam kenal dr pengguna notepad 😂
@@kaoskaosdistro wkwkwkw. Notepad+++ plus plus plus style 😂
Bang, di db mysql itu ada bisa menyimpan query (view). Di script PHP juga kita bisa membuat query. Pertanyaannya mana yg lebih cepat, dan apa rekomendasi abang dalam membuat query untuk view ini, membuatnya di mysql yg disimpan menjadi view kemudian view tsb yg dipanggil di script php, atau query tsb langsung dibuat di script PHP. Terimakasih.
pasang tracing biar tau bottlenecknya dimana. profiling juga. haiyaaa.
jadi pointnya bukan PHP yang membuat aplikasinya jadi lambat ya ? , tetapi kemungkinan di sisi database nya ..
sekarang ada frankenphp, itu berasa cepet bgt, enginenya dari caddy yang dibuild dari go
Worker / Thread mungkin bisa ditambahin.
agakny yg nanya bkn programmer nya, tp mgkin smcm atasan dr si programmer. si programmer ngibulin atasannya klo utk akses 1000 user perlu nambah PC sbnyk 16 dgn spek 32gb ram . itu alesann si programmer aja kepengen dpt pc baru yg yahud . biar diACC sama atasannya. begitu yg sy tangkap 😊
Ayo lah yg punya pengalaman jadi operator sekolah , bagi tips untuk spek ujian sekolah nya biar bisa Mandiri gak sewa pihak ke-2 ataupun 3.
Yang bikin lama biasanya sih database, biasanya saling tunggu pertransaksi, gw pernah pegang 15 server dengan spek sama malah ada yg 32 core dengan memory besar pun, lemot klo struktu databasenya juga ga bener, coba cek aja databasenya di optimasi lagi, mungkin ada atribut yg aktif.
ini mah jumlah koneksinya dibatasi kalau saling tunggu dibagian databasenya, harusnya max connection ga dibatasi, terus setting minimum connection yang harus tetap aktif di pool 20 misal (tergantung spek) tapi maxnya jangan dibatasi. saling tunggu juga bisa melibatkan backend, ga hanya di database. yaitu saling tunggu io tersedia, cara atasinya dengan pakai async biar si thread/worker yang menangani requestnya ini ga perlu nunggu hasilnya jadi, langsung pindah menangani request yang lain terus nanti balik lagi kalau udah selesai
itu dimana ya dapat pembahasannya,penasaran 13:53
Ada yang kurang dimention kang, kalo mau bisa horizontal scaling, si aplikasi mesti stateless.. I assume, aplikasi ujian online ini pake session sebagai backbone untuk autentikasinya.
sip
PHP lebih impactnya ke memory, kalau CPU nya yg naik kemungkinan DB nya.
Kalau laravel nya jadul bisa kemungkinan MySQL nya jg jadul.
Antara DB nya belum ada indexing atau masih pakai engine yang table locking atau malah keduanya.
Coba fokus ke optimasi DB deh.
tapi garbage collector php makan cpu gedhe ga kalau handle alokasi data yang banyak? misal ribuan data kompleks banyak referensi 🤔🤔
@@shining_cross trgntung caseny yg sprti ap dlu mas
@@traingame8985 bruhhh cpu usage tinggi di laravel akan disebabkan
1. proses interpret/menterjemahkan kode php ke instruksi (php ga punya jit, jadi proses ini dilakukan terus menerus)
2. garbage collector
semakin banyak kode php yg perlu diinterpret (kode2 di librarynya) dan semakin banyak object-object yg perlu dihandle, semakin tinggi cpu usagenya
sepertinya dia sudah melakukan indexing, bahkan dia sudah di bantu redis . , kemungkinan juga strucutre query nya dll ..
12:39 itu GIL (global interpreter lock) di python mas. Saya kurang tahu kalau di ruby juga ada.
di ruby ada, di python ada juga ya
@@ProgrammerZamanNow Di python ada tapi ada rencana mau di remove di waktu dekat.
Mungkin ada yang sama dgn kasus saya, pakai 4 core web ujian hanya +- 500 user online cpu full ternyata penyebabnya service mysql yang berat, solusinya saya cek log sql mana yang sleepnya lama lalau di optimasi nambahin index N semua jadi normal 1000 userpun ga nyampe 10% cpunya rata2
11:00
Disinilah butuhnya pengetahuan SRE, supaya gk hanya bisa buat aja 😂
Mas mohon pengarahan nya,ini saya ingin jadi backend developer,bahasa yang dipilih sebaiknya php atau JavaScript mas?
c# net core
Keduanya hampir mirip, kalo sudah bisa salah satunya bakal mudah memahami keduanya
@@soifant8227 kalo backend python worth it ga bg?
JSHT 😊
pernah kejadian profiling karena cpu lasung mentok, ketemu lib yang makan cpu tinggi contohnya bcrypt
nah, trus cara analisa aplikasi kita gmna pak ? databasenya kah ? phpnya kah atau mungkin ada kendala yang lain
Sebagai pelaku usaha sekarang pun make full laravel , karena alasannya ya gampang aja + saya juga baru paham laravel ,dan sekarang memorynya skrang udah tembus 400GB , karena kebetulan transaksi masuk perbulannya 50k - 150k Transaksi, krna banyak reseller yg konek api , Jujur sih agak khawatir juga lama lama kwkwkw . Saya juga kepikiran mau migrasi dari laravel tapi masih perencanaan , kira kira bisa minta saran rekomendasi untuk saya seperti front end , backend , dll ? Terima kasih moga rezekinya lancar
1 bulan 150k, berarti 1 hari cuma 30k tapi perlu 400gb ram?????? what de hellll
backend go, java, kotlin, .net, rust bagus. sepengalaman aku ke 4 itu yg performanya tinggi jauh dari php. kalau lu paham rust pakai rust karena memudahkan banget ini bahasa, mantain bakal enak, jarang banget nyentuh debugger, tanpa garbage collector. kalau paham go pakai go. kalau mau java springboot mending springboot yang versi kotlin dah lebih enak dari java, kalau .net juga udah bagus. untuk frontend svelte, vue, react. lu cari tau dulu sebaiknya bottlenecknya itu dimana baru tentuin keputusannya
jadi kalo misal kita punya server/vm kecil2 yng banyak namun diakses dengan 1 domain itu topologinya jadinya seperti apa ?
Bagi saya php bisa di optimalkan pada skala besar contoh adalah facebook
Saya kurang mengerti dengan istilah CPU yang dimaksud oleh Pak Eko. Sepengetahuan saya, CPU adalah singkatan dari Central Processing Unit, yang mencakup beberapa komponen seperti prosesor, RAM, dll.
Pertanyaan saya:
1. Apa yang dimaksud dengan core dalam konteks CPU? Apakah ini berkaitan dengan kecepatan (misalnya GHz)?
2. Ketika disebutkan 0.1 core CPU, apakah itu berarti 100 MHz atau 0.1 GHz? Mohon penjelasannya.
@@egipebriyawan1455 maksudnya cpu itu yang ada di vps mas, yang biasa di gunain.
Makanya, pas pak Eko bilang, 0.1 cpu, 0.5 cpu, berarti spesifikasi vpsnya seharusnya 1gb 1cpu, udah sesimpel itu.
Kalo misalnya kasus 1000 user online tapi butuh 13 cpu, berarti, 12x lipat apa yang pak Eko bilang
coba cari: CPU vs vCPU vs Core vs Thread
menurut saya ini hubungannya sama docker / kubernetes.
1. Contoh di laptop: 1 real cpu bisa punya 4 real core 8 thread. di linux, docker, ini dianggap 8 core atau biasanya kelihatan 800% cpu yang tersedia.
2. Kalau disebutkan resource limit aplikasi hanya boleh pakai 1 core, artinya dari 8 core / 800% yang tersedia dia maksimal pakai 1 core / 100% cpu
Kalau disebutkan 0.1 core, artinya dari 8 core / 800% cpu yang tersedia dia maksimal pakai 0.1 core / 10% cpu
wah ini sama kaya saya, cm saya berjalan di windows.
client sya ga mau pake linux, di linux aman sampe 500lbih, di windows KO di 200 - 250..
saya pake slim dan php74.
barus secara vertikal sya scaling
Saya juga punya kesulitan di soal Ujian Bang. Kasusnya mirip ini. 1500 siswa akses bersamaan dan bikin lemot. Database MySQL-nya sangat tinggi sampai 200%, kadang sampai 400%. Pas siswa membuka halaman ujiannya cuma muter2 aja. Saya kurang paham cara mengoptimalkannya, mungkin bisa dibantu jawab ini.
Beberapa hal yang sudah saya lakukan untuk soal ujian dan jawaban saya sendirikan. Jadi jawaban siswa akan tersimpan ke redis, nanti setelah ujian selesai baru disimpan ke mysql. Ini cukup mengurangi beban MySQL. Mungkin ada cara yang lebih baik, mohon petunjuknya.
@@muhasabahtafakur indexing adalah kunci
Trus cara orkestrasi masing2 vm itu gmana ya?
Kok bisa bagi2 beban kerjaan
Pake apakah?
Kayanya itu kena DDOS atau ada hal yang ngga wajar, solusi memang harus update versi secara rutin tiap ada peningkatan
Saya pake vps 4 core ram 8gb muat 2300 user diakses secara bersamaan
Tergantung manage nya gimana
Maksudnya nambahin node workernya gimana bang, nyatuin requestnya gmna ya ke db blm kebayang
simplenya jalanin multiple server php, lalu pakai load balancer di depannya, load balancer ini akan menyebarkan traffic ke server-server php yang ada, ada banyak algoritmanya, ada round robin yang menyebarkan secara merata ke semua server, ada weightened round robin sama kayak round robin tapi server yang speknya lebih besar dari yang lain diberi beban request lebih banyak dari server yang speknya lebih kecil, least response time yaitu memilih server yang waktu responsenya paling cepat diberi beban lebih banyak, random yaitu disebarkan secara random (gk efektif karena gk mempertimbangkan faktor-faktor), dll. lalu servernya itu pada akses database, databasenya bisa 1 atau bisa juga dibuat multiple instance kalau bottlenecknya juga ada di database
Hmm, sepertinya mas Eko pernah menjawab pertanyaan serupa. Atau aku nonton di tempat lain ya, pertanyaannya dejavu wkwk
Sepertinya ada yg salah itu. Saya pakai laravel dengan spek 4Gb RAM, Core 2 untuk user puluhan ribu aman2 aja.
Jadi kalo horizontal itu dibanyakin aplikasi web servernya ya. Tapi tetap mengarah ke 1 database. Apakah benar seperti itu?
database juga bisa dibanyakin, asal spek hardwarenya kuat handle banyak database instance
saya bmembuat sistem RS ERP dari front sampai BAck (akunting) dipakai 300 user per RS dan satu server ada 5 RS..konsepnya SAS aplikasi di Cloud..pake PHP aman aman aja..tapi mmg native..
Saya lbh sreg bikin aplikasi dgn framework yg saya bikin sendiri (sdh 17thn saya pake ini)
Jd gk perlu banyak resource
Pernah nyoba sesekali bikin pake framework yg sdh ada kok malah lambat, atau saya yg katrok ?
yang penting posisi anda gak disingkirkan sama yang muda2 karena diagggap menghambat gak mau update, aman aman saja hehehe
Tapi jujur sih masih banyak perusahaan atau instansi yg teknologi development-nya gak update seperti kasus ini masih pakek laravel 6
laravel 6 masih bagus kok
@labkitadev Iya. Tapi sebagai developer harus juga mengikuti update yg sudah disediakan. Misal update ke versi laravel terbaru keuntungannya yaitu banyak package laravel terbaru yg bisa memudahkan untuk membangun aplikasi lebih efisien
Untuk horizontal scalling mysql, cara sinkronkan mysql antar vm gimana caranya pak?
ada yang namana replikasi database. Metodenya bermacam-macam. Tinggal pilih yang palig memungkinkan digunakan.
kenapa ga pake apache aja kalo php lebih compatible dibanding nginx yg mesti pake module buat jalanin php
Dalam praktiknya justru nginx+fpm malah lebih kecil penggunaan resourcenya.
intinya bottleneck ya pak, tapi ibarat banyakin pintu pembayaran tol, pas exit jadi 1 lagi, yaitu ke database😁
kl seandainya pakai laravel 11 ( terbaru) sama phpnya yg baru juga apa permasalahannya msh sama atau agak berkurang pak?
bantu jawab bang, secara garis besar akan berkurang.
tapi tetap tidak harus ada optimasi kalau pingin hasilnya bisa optimal.
karena terbentur di nature nya teknologi itu segitu2 aja. jadi kudu dioptimasi untuk bisa capai performa tertentu.
contoh gampangnya, kita ambil di motor aja
ibarat motor honda supra x lama yg 100cc dengan supra x baru 125cc jelas performa beda dan pastinya yg baru punya performa yang baik.
tapi peningkatan ini apakah bisa sesignifikan untuk dapat melaju di 200 km/h ?
jawabannya jelas tidak bisa dengan kondisi standart, harus ada optimasi diberbagai sektor.
kurang lebih seperti itu sih bang
@@pungkilham8863 thanks bg
Aplikasi catatannya pake apa bang ?
Kalo dalam kasus ini, apa penggunnan bahasa javascript lebih bagus bang?
js lebih bagus sih bang untuk performanya kalau di banding dgn php, tp ada masalah yg cukup krusial.
add on nya buset banyak banget. gak ada framework yg fullstack dan ready to use.
mesti kudu install ini dan itu.
belum lagi kalau ada update di dependecy yg dipake, bisa2 muncul error padahal sebelumnya lancar2 aja.
ibarat kata banyak pilihan itu baik, tp kalau terlalu banyak dan terus2an berubah itu malah bikin pusing.
belum lagi gorengan dari influencer js yang bilang ini itu lebih baik dari ini itu yg lain.
ini yg bikin males aja pake js. pusing sendiri jadinya
Kalau ga salah laravel itu ada fitur rate limiter dan default nya 60req/menit.
kl di rate limit kasian usernya dong, bisa kena too many request akhirnya jadi ga bs akses, malah timbul masalah baru. cmiiw
Rate limit secara default-nya per user IP. Jd selagi penggunaan 1 user ini wajar seharusnya tidak kena. Itu pun default di route api, di route web seharusnya ga ada.
@@sidiqaldi nah tp fokusnya bukan di rate limit lg hrsnya. Krn secara performance nya jg blm bener. Rate limit memang perlu tp kl secara app blm mumpuni, dipasang rate limit pun ga jadi pengaruh.
@@sidiqaldi diroute web ada ko manfaatkan middleware throttle, test install Laravel Breeze, saya user php native yang migrasi ke Laravel, Laravel ini framework yang super duper lengkap, minus nya ya user awam banyak yang tidak memanfaatkan fitur2nya, sehingga framework tsb menjadi boomerang GURU Terbaik adalah dokumentasi
kalo vps nya sambil dipakai mining kripto bisa aja si
@@apisagakalau full kinerja cpu nya di batasi
Kependekan mas videonya , lagi butuh obat tidur alami padahal😅
Database connection pooling?
saya juga masih pakai lara6
Pakai node cuma pakai 8 core dengan optimasi bisa handle 10k user 😁
kurang banget itu mah :( go, rust, java, c#, kotlin bisa jauh berkali lipat dari itu
@@shining_cross tapi nyatanya bisa tanpa lag sedikitpun hehe
@@maulanasatyaadi karena yang pakai dikit, coba sini aku tes webnya. java 1 core aja bisa lebih dari itu, lah itu 8 core cuma 10k wkwkwk gk efisien banget mubazir resource :((
Wih upload malem 😅
bikin video emang biasanya malem
Cara misahin antrian ke masing² cpu itu bagaimana?
pake loadbalancer si nginx itu tadi
oh salah nangkep saya, harusnya antrian ke masing2 instance bukan cpu yaa
coba pakai opcache...
woilah konten ramah gorengan cuoookkk
Yang saya perhatiin selama ini. Rata-rata ujian online itu pada menggunakan PHP baik native ato pun framework. Dan sering bermasalah saat digunakan secara bersamaan.
Krn komunitas dan contoh PHP byk bertebaran dimana2 kali yah.
Adakah rekomendasi framework yang bisa handle banyak concurrensy spt Ujian online ini dgn catatan kita ga butuh banyak spec hardware yg tinggi ?
Yang saya tau cuman Golang sbg backendnya. Tapi utk frontendnya adakah rekomendasi ?
Terima kasih
Di sisi frontendnya harusnya nggak ada masalah ya pake framework modern apapun (e.g. VueJS, React) kalo pake hardware modern, soalnya backend kan yang ngelakuin heavy lifting.
Pake golang aja buat backend lebih mumpuni
@@programmerjowo utk FE nya bebas dari Javascript ya mas ?
@MrKeliv pake react aja biar computasi di client
@@programmerjowo Lagi belajar Remix sih. Trima kasih usulnya
Jgn pake laravel pake phalcon mau 100.000 user cm 1 server dell R720 pake nginx PHP phalcon
ada yg lebih lemot mas,server nya pake internet 10mbps,diakses ribuan user luar :-)
knp ngga pada migrasi aja ke orm , dan framewok yang cepet