Prahu-Hub AWS Optimization

Completed
Completed

Completed

5
Cost Optimization

Phase 01: Implementasi Cloudflare proxying (for some compatible apps)

sebagian done (sebagian pending - butuh code change)

Scalability

Phase 03: Moving DB to Aurora

Scalability

Phase 04: Use specific users & limits for app+env+command/query

with max connections limit per user

Cost Optimization

Phase 01a: Opt-in to AWS Compute Optimizer

Cost Optimization

Disable MySQL Cloudwatch Logs for General Logs

In progress

1
Cost Optimization

Phase 02: Moving EC2 instances to Lightsail ap-southeast-1a

Up next

3
Cost Optimization

Phase 05: Cache busting for assets -> all using Cloudflare proxying

Cost Optimization

Phase 06: Cleanup

Scalability

Phase 07: Use dedicated DB connection for cron job worker

Future

2
Scalability

Analisis slow SQL query carirute > MasterScheduleAdvancePage.php > searchhargajual

From Mas Basyir:

itu ada case lagi, untuk req ajax lama, itu di halaman harga jual pak,
karena request ajax query nya lama, sehingga muncul itu, (MySQL User ... has exceeded the max_user_connections resource)
kadang sekitar 10-15 detik,
kadang nyampe 20 lebih

./mysite/code/MasterScheduleAdvancePage.php > tapi yang paling lambat itu yang function searchhargajual pak

Pertanyaan Hendy:

itu query yang 20 detik lebih, itu utk satu user/browser tab hanya satu query,, atau:

kalo berdasarkan asumsi yg saya lihat:
satu user/browser tab melakukan beberapa query sekaligus dan masing-masingnya bisa memakai > 20 detik query?

Rekomendasi Hendy:

  1. utk SQL query jangan langsung memasukkan parameter ke dalam query string. Ada risiko SQL injection vulnerability. Selalu gunakan DB::prepared_query -> https://api.silverstripe.org/3/DB.html#method_prepared_query

    Ini efeknya bukan dari sisi performance sih, tapi dari sisi security

  2. Analisis slow SQL query bersangkutan, coba apakah bisa direstruktur dan/atau menambahkan indeks.

  3. Bila ternyata slow SQL query masih tetap lama, maka proses diubah menjadi worker queue. Jadi:
    a. web UI saat search menambahkan job ke queue (bisa SQS), lalu menampilkan progress bar
    b. AJAX timer hanya mengecek status job (queued / in progress / completed / error)
    c. cron job akan mengambil queue, menjalankan query, dan menyimpan hasilnya di DB
    d. AJAX timer bila job sudah completed maka menampilkan hasilnya
    e. ada cron job yang menghapus hasil-hasil query yang melebihi retention (misal max retention 48 jam)

Utk ini, yang Hendy akan lakukan:

1. Analisis slow SQL query. Krn fungsi searchhargajual menggunakan foreach:
1.a. Mencoba menggabungkan foreach tersebut ke dalam satu query.
1.b. Mencoba membuat query di dalam foreach tersebut lebih cepat.

2. MengaktifkanĀ tracing.
2.a. Install ClickHouse + SigNoz
2.b. Mengaktifkan tracing utk fungsi searchhargajual, sehingga terlihat load breakdown per query
2.c. Ke depannya, tracing ini dapat digunakan (dan saya sarankan) untuk fitur2 lainnya di semua portfolio produk PH

Scalability

Activate tracing with ClickHouse + SigNoz