Topik temu duga representatif

Temu Duga Kejuruteraan Data: Bilakah Anda Patut Menggunakan Pemprosesan Kelompok, Kelompok Mikro, atau Strim?

DataSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Sebuah platform e-dagang menerima peristiwa pesanan pada tahap puncak sebanyak 20,000 sesaat, dengan lonjakan singkat sehingga 10 kali ganda kadar tersebut. Anomali inventori memerlukan amaran dalam masa 10 saat, papan pemuka operasi mesti dikemas kini dalam masa 5 minit, dan kewangan menutup akaun pada keesokan harinya dengan penyesuaian yang boleh dijalankan semula (rerunnable). Kira-kira 2% peristiwa tiba lewat, sehingga 6 jam. Bagaimanakah anda memilih pemprosesan kelompok, kelompok mikro, atau strim berterusan untuk setiap kes penggunaan dan mengesahkan ketepatan, main semula (replay), kos, dan migrasi?

Masalah dan Skop

Sebuah platform e-dagang menulis peristiwa pesanan ke log boleh dimainkan semula yang tahan lama dan mengekalkan data mentah yang tidak boleh diubah (immutable). Kadar stabil tidak dinyatakan; tahap puncak ialah 20,000 peristiwa sesaat, dengan lonjakan promosi singkat sehingga sepuluh kali ganda kadar tersebut. Anomali inventori memerlukan amaran dalam masa 10 saat selepas penciptaan peristiwa. Papan pemuka operasi mesti dikemas kini dalam masa 5 minit. Kewangan menutup akaun pada keesokan harinya dan memerlukan hari perniagaan yang sama boleh dijalankan semula dan disesuaikan. Kira-kira 2% peristiwa adalah lewat, sehingga 6 jam.

Kadar tersebut, pengganda lonjakan, peratusan lewat, dan batas masa ialah andaian masalah, bukannya tuntutan prestasi tentang sesuatu enjin. Andaikan setiap peristiwa mempunyai event_id, order_id, event_time, dan versi skema yang stabil. Kewangan menggunakan hari perniagaan dalam zon masa yang eksplisit. Pasukan data yang terdiri daripada empat orang telah mengendalikan gudang data dan penjadual dengan andal tetapi belum mempunyai operasi sedia panggil (on-call) yang matang untuk tugas penstriman berkeadaan (stateful).

Masalah ini tidak memerlukan satu mod pemprosesan untuk ketiga-tiga pengguna data. Matlamatnya adalah untuk mendapatkan reka bentuk terkecil yang mencukupi daripada batas masa tindakan, kelengkapan hasil, pemulihan, dan kos penyelenggaraan. Ini tergolong dalam data kerana terasnya ialah semantik pemprosesan, kesegaran (freshness), dan pertukaran kompromi kualiti data dan bukannya seni bina platform merentas domain.

Perkara yang Dinilai oleh Penemu Duga

Isyarat pertama ialah sama ada calon bekerja secara ke belakang daripada tindakan perniagaan berguna yang terakhir dan bukannya memilih penstriman secara lalai selepas melihat barisan gilir mesej. Sumber tanpa batas hanya menyatakan bahawa data terus tiba. Ia tidak memerlukan setiap hasil hiliran memproses satu rekod pada satu masa. Kewangan hari berikutnya boleh membaca tangkapan foto (snapshot) terhad daripada log yang sama dan memperoleh kebolehulangan yang lebih mudah daripada pemprosesan kelompok.

Isyarat kedua ialah memisahkan kependaman pemprosesan daripada kependaman tindakan. Enjin mungkin mengira dalam masa 500 milisaat, tetapi sinki yang disegarkan setiap 5 minit menghalang papan pemuka peringkat saat. Jawapan yang kukuh membahagikan belanjawan penyerapan (ingestion), barisan gilir, pengiraan, penulisan, penyegaran cache, dan penghantaran amaran secara berasingan, kemudian mengukur setiap segmen.

Isyarat ketiga ialah sempadan ketepatan yang tepat. Pemprosesan tepat-sekali (exactly-once) dalam enjin penstriman tidak membuktikan bahawa data lewat adalah lengkap, dan ia tidak melindungi kesan sampingan luaran secara automatik. Tugas kelompok yang boleh dijalankan semula juga tidak selamat secara automatik. Tanpa julat input yang ditakrifkan, kunci perniagaan, versi tangkapan foto, dan penerbitan atomik, larian semula boleh menduplikasi atau mencampurkan takrifan.

Akhir sekali, penemu duga menguji pertimbangan operasi. Penstriman berterusan memerlukan kapasiti yang berterusan, pemulihan tunggakan (backlog), keadaan (state), titik semak (checkpoints), penggunaan selamat, dan pemilikan on-call. Jika kelompok mikro memenuhi batas masa 5 minit dengan andal, keadaan rekod demi rekod menambah mod kegagalan tanpa mengubah keputusan. Sebaliknya, pemprosesan kelompok setiap jam memusnahkan nilai amaran 10 saat yang sebenarnya mencetuskan penambahan stok atau henti jualan.

Soalan untuk Dijelaskan Sebelum Menjawab

  • Di manakah batas masa bermula dan berakhir? Di sini ia bermula apabila sistem sumber melakukan komit peristiwa dan berakhir apabila amaran tiba atau hasil pertanyaan kelihatan. Janji yang berakhir pada penyerapan gudang data mengabaikan kelewatan sinki dan cache.
  • Adakah amaran 10 saat mencetuskan tindakan automatik? Perubahan inventori automatik, henti jualan, atau pemberitahuan memerlukan penyahduplikasian, keidempotensian, dan audit. Amaran pemerhatian boleh bertolak ansur dengan lebih banyak positif palsu atau pendua.
  • Adakah papan pemuka 5 minit merupakan anggaran atau nombor yang lengkap? Kelompok mikro sudah memadai untuk anggaran yang boleh disemak semula dengan masa "setakat" (as of). Jika setiap paparan mesti menyertakan ekor data lewat 6 jam, keperluan kesegaran 5 minit dan kelengkapan akan bercanggah dan kontrak produk mesti diubah.
  • Bilakah kewangan membekukan penutupan, dan bolehkah ia membuat pelarasan kemudian? Menghasilkan draf hari berikutnya diikuti dengan entri pelarasan berbeza daripada menunggu enam jam sebelum pembekuan. Jawapannya menentukan batas masa (cutoff) kelompok dan protokol semakan semula.
  • Bolehkah ketiga-tiga kegunaan berkongsi lapisan mentah dan takrifan transformasi? Mereka boleh berkongsi peristiwa yang dinormalkan, kunci perniagaan, dan lekapan ujian (test fixtures). Menyalin penapis, zon masa, dan peraturan jumlah secara berasingan akhirnya akan mewujudkan hanyutan (drift) antara kelompok dan strim.
  • Bolehkah pasukan mengendalikan strim berkeadaan sepanjang masa? Tanpa amaran tunggakan, latihan pemulihan titik semak, dan penggunaan yang selamat, penstriman berterusan harus dihadkan kepada laluan terkecil yang benar-benar memerlukan tindakan peringkat saat.

Jawapan 30 Saat

“Saya akan membahagikan pengguna data mengikut batas masa tindakan perniagaan dan bukannya menggunakan satu mod pada sumber data. Laluan anomali inventori 10 saat menggunakan penstriman berterusan. Papan pemuka operasi 5 minit menggunakan kelompok mikro satu atau dua minit, meninggalkan belanjawan untuk penulisan dan penyegaran cache. Kewangan hari berikutnya menggunakan tangkapan foto hari perniagaan dalam kelompok dan kekal sebagai sumber penyesuaian. Ketiga-tiganya berkongsi peristiwa mentah yang tidak boleh diubah, peraturan penormalan, dan kunci perniagaan.

Hasil penstriman ialah paparan yang boleh disemak semula, bukan dakwaan bahawa data lewat adalah lengkap. Tindakan luaran adalah idempoten mengikut versi peristiwa dan peraturan. Sebelum penukaran rasmi (cutover), saya memainkan semula sejarah yang sama melalui laluan kelompok, kelompok mikro, dan strim, membandingkan kiraan, jumlah, dan kependaman ekor (tail latency) secara bayangan, serta mendayakan tindakan hanya untuk laluan peringkat saat. Peraturannya adalah untuk memilih mod paling mudah yang memenuhi SLO tindakan dan yang pemulihannya menumpu (converges).”

Perbincangan Mendalam Langkah demi Langkah

Langkah 1: Tulis tiga kontrak hasil

Tentukan kunci, batas masa, kelengkapan, dan tingkah laku semakan semula bagi setiap output sebelum memilih Spark, Flink, atau produk lain.

KegunaanKunci hasilBatas masa keterlihatanKelengkapan dan semakan semulaMod yang disyorkan
Anomali inventoriitem, versi peraturan, tetingkap masa10 saatboleh disemak semula dengan pantas; tindakan idempotenstrim berterusan
Papan pemuka operasimetrik, dimensi, tetingkap5 minittunjukkan masa as-of; data lewat menggantikan versikelompok mikro 1–2 minit
Penutupan kewanganhari perniagaan, akaun, mata wanghari berikutnyakira semula tangkapan foto beku; laras percanggahankelompok

Satu peristiwa boleh memenuhi tiga kontrak yang berbeza. Barisan gilir mesej ialah pengangkutan input dan tidak boleh memaksa ketiga-tiga baris ke dalam mod pelaksanaan yang sama.

Langkah 2: Peruntukkan belanjawan tindakan hujung ke hujung

Belanjawan pertama yang boleh diuji untuk amaran 10 saat mungkin memperuntukkan 2 saat setiap satu untuk komit sumber dan pengangkutan, barisan gilir, pengiraan, tindakan sinki dan peraturan, serta penghantaran amaran. Ujian beban mesti menggantikan peruntukan sementara tersebut, tetapi jumlahnya tidak boleh melebihi batas masa perniagaan. Rekodkan p95, p99, dan umur tunggakan maksimum untuk setiap segmen. Masa pengendali sahaja menyembunyikan sinki yang perlahan.

Papan pemuka 5 minit boleh memulakan kelompok mikro setiap 1 atau 2 minit. Dengan hirisan 2 minit, masa menunggu jadual adalah kira-kira 2 minit pada tahap paling teruk, pengiraan dan penulisan menerima 1 minit setiap satu, dan penyegaran cache menerima minit terakhir. Jika lonjakan sepuluh kali ganda mendorong pengiraan melebihi belanjawan, tingkatkan keselarian (parallelism) terlebih dahulu, pendekkan hirisan, atau tangguhkan dimensi bernilai rendah. Masa larian purata tidak membuktikan SLO ekor.

Kewangan dikekang oleh kebolehulangan dan takrifan yang dibekukan, bukan kependaman minimum. Kelompok membaca tangkapan foto eksplisit atau julat ofset, menulis hasil ke kawasan pementasan yang dilabelkan dengan run_id, mengesahkannya, dan menerbitkannya secara atomik. Mengulangi input dan versi peraturan yang sama sepatutnya menghasilkan keputusan yang sama.

Langkah 3: Kongsi fakta tanpa mewujudkan hutang pelaksanaan berganda

Peristiwa mentah mula-mula memasuki log yang boleh dimainkan semula atau storan objek dengan muatan asal, versi skema, masa penyerapan, dan kedudukan sumber. Lapisan penormalan mengendalikan evolusi skema, zon masa, unit jumlah, status pembatalan, dan kunci perniagaan secara konsisten. Setiap mod pelaksanaan membaca selepas sempadan tersebut.

Fakta yang dikongsi tidak memerlukan perkongsian kod baris demi baris antara tiga enjin. Sempadan yang lebih berguna ialah kontrak data yang dikongsi, lekapan keemasan (golden fixtures), dan peraturan deterministik. Jika kelompok dan strim mesti melaksanakan logik tetingkap secara berasingan, jalankan ujian kesetaraan ke atas lekapan yang sama. Kewangan boleh mengekalkan pemeriksaan bebas yang lebih kukuh; penggunaan semula kod tidak sepatutnya menghapuskan kawalan.

Langkah 4: Reka bentuk pendua, data lewat, dan kesan sampingan secara berasingan

Strim inventori menyahduplikasi mengikut event_id, mengira tetingkap masa peristiwa yang pendek, dan mengeluarkan versi peraturan dan hasil. Henti jualan, penambahan stok, atau pemberitahuan menggunakan kunci keidempotensian tindakan yang stabil. Titik semak yang berjaya tidak membuktikan bahawa panggilan HTTP luaran berlaku sekali sahaja, jadi percubaan semula mesti mengenali tindakan yang telah dilakukan.

Kelompok mikro operasi membaca julat ofset sumber separuh terbuka yang tetap dan menggantikan tetingkap sasaran berversi dan bukannya menambah satu lagi jumlah. Peristiwa lewat memasuki kelompok kemudian dan menaikkan versi hasil. Papan pemuka menunjukkan masa "as of", menjadikannya jelas bahawa kesegaran 5 minit tidak bermakna ekor data 6 jam adalah lengkap.

Kelompok kewangan membaca input beku selepas waktu pemotongan yang dipersetujui. Peristiwa terkemudian memasuki larian pelarasan yang mengekalkan larian asal, julat input, versi peraturan, dan kelulusan percanggahan. Pemprosesan strim tepat-sekali boleh menghalang penduaan hasil pemprosesan yang dikekalkan dalam beberapa sempadan, tetapi ia tidak membuktikan kelengkapan dengan kehadiran data lewat atau meluas secara automatik kepada kesan sampingan luaran.

Langkah 5: Jadikan kapasiti dan kos boleh dihasilkan semula

Tahap puncak yang dinyatakan ialah 20,000 peristiwa sesaat, jadi lonjakan sepuluh kali ganda ialah 200,000 sesaat. Jika peristiwa yang dinormalkan diilustrasikan sebagai 1 KiB, penyerapan puncak adalah kira-kira 195 MiB sesaat. Ini adalah anggaran kapasiti sahaja; saiz pengeluaran mesti mengiranya semula daripada taburan saiz termampat dan tidak termampat.

Penstriman berterusan memerlukan kapasiti berterusan untuk kedua-dua trafik puncak dan pemulihan tunggakan. Kegagalan selama sepuluh minit pada 20,000 peristiwa sesaat menghasilkan 12 juta peristiwa beratur. Jika kapasiti yang dipulihkan hanya bersamaan dengan input semasa, tunggakan tidak akan pernah selesai. Kelompok mikro mesti menyelesaikan satu hirisan sebelum hirisan seterusnya tiba. Kelompok boleh menumpukan sumber dalam tempoh yang lebih murah, tetapi kelompok yang sangat kecil dan kerap menjadikan overhed permulaan, komit, dan fail kecil dominan.

Perbandingan ini merangkumi pengiraan berterusan, storan keadaan dan titik semak, penulisan sinki, imbasan, kerja on-call, dan kerumitan penggunaan. Caj awan sahaja mengabaikan kos pasukan empat orang yang mengekalkan tiga pelaksanaan yang serupa. Reka bentuk yang disyorkan mengehadkan penstriman berterusan kepada amaran inventori, mengelakkan keadaan sepanjang masa untuk kewangan dan papan pemuka.

Langkah 6: Berhijrah dengan main semula bayangan dan bukannya satu penukaran terus

Bekukan segmen sejarah yang merangkumi trafik biasa, lonjakan sepuluh kali ganda, pendua, ketidakteraturan susunan, dan ekor kelewatan 6 jam. Gunakan hasil kelompok lama sebagai garis dasar sementara tugas kelompok mikro dan strim baharu berjalan dalam mod bayangan tanpa mencetuskan tindakan inventori. Bandingkan kiraan, jumlah, versi, dan sejarah semakan lewat untuk setiap kunci perniagaan, dan jelaskan setiap percanggahan.

Tingkatkan pendedahan secara berperingkat: tulis jadual bayangan sahaja, buka papan pemuka dalaman, kemudian benarkan amaran strim mencetuskan tindakan yang boleh diterbalikkan. Suntikan kerosakan (fault injection) meliputi ranap sebelum dan selepas titik semak, masa tamat sinki, sekatan partisi, perubahan skema, dan pengejaran tunggakan. Metrik penerimaan termasuk p99 hujung ke hujung, umur tunggakan maksimum, masa penyiapan kelompok mikro, kadar semakan lewat, kiraan tindakan pendua, perbezaan jumlah kelompok-strim, dan masa pemulihan.

Tentukan juga kriteria keluar. Jika kelompok mikro berulang kali terlepas 5 minit, periksa penjadualan, kecondongan (skew), sinki, dan kapasiti lonjakan sebelum mempertimbangkan penstriman berterusan. Jika amaran 10 saat tidak lagi memacu tindakan, turunkan tarafnya kepada kelompok mikro untuk mengurangkan kos on-call. Mod pemprosesan ialah pilihan perniagaan yang boleh disahkan, bukan identiti kekal.

Contoh Jawapan yang Kukuh

“Saya memisahkan input tanpa batas daripada mod pemprosesannya. Pengguna-pengguna ini mempunyai batas masa tindakan yang berbeza, jadi saya tidak akan memaksa kesemuanya ke dalam penstriman demi keseragaman teknikal. Anomali inventori benar-benar mesti bertindak dalam masa 10 saat, jadi saya menggunakan strim berterusan, memperuntukkan belanjawan merentas sumber, barisan gilir, pengiraan, penulisan, dan penghantaran, serta menjadikan setiap tindakan idempoten mengikut event_id dan versi peraturan. Papan pemuka operasi hanya memerlukan 5 minit, jadi saya mulakan dengan kelompok mikro satu atau dua minit yang menggantikan hasil mengikut tetingkap dan versi serta mendedahkan masa as-of. Penutupan kewangan membaca tangkapan foto hari perniagaan beku dalam kelompok, mementaskan mengikut run_id, mengesahkan, kemudian menerbitkan secara atomik; data lewat memasuki larian pelarasan.

Ketiga-tiga laluan berkongsi peristiwa mentah yang boleh dimainkan semula, kontrak ternormal, dan lekapan keemasan, manakala kewangan mengekalkan kawalan bebas. Pada 20,000 peristiwa sesaat dengan lonjakan singkat sepuluh kali ganda, saya menguji penyerapan 200,000 sesaat dan nisbah mengejar selepas kegagalan, bukan sekadar keadaan stabil. Titik semak strim tidak menggantikan keidempotensian tindakan luaran, dan pemprosesan tepat-sekali tidak membuktikan bahawa ekor kelewatan 6 jam adalah lengkap.

Untuk migrasi, saya memainkan semula sejarah yang sama dan membandingkan hasil peringkat kunci dan semakan daripada laluan kelompok, kelompok mikro, dan strim dalam jadual bayangan. Penstriman berterusan bermula dengan amaran pemerhatian. Ia mencetuskan tindakan automatik hanya selepas p99 berada di bawah 10 saat, tindakan pendua adalah sifar, dan tunggakan dibersihkan dalam sasarannya. Peraturan keputusan saya adalah untuk memilih mod paling mudah yang memenuhi batas masa tindakan, kelengkapan, dan kontrak pemulihan. Kependaman yang lebih rendah hanya berbaloi dengan kos keadaan dan on-call apabila ia mengubah keputusan perniagaan.”

Kesilapan Biasa

  • Memindahkan segala-galanya kepada penstriman kerana Kafka wujud → input berterusan tidak menjadikan setiap hasil perlu diproses rekod demi rekod, jadi kewangan dan papan pemuka mewarisi kos keadaan dan operasi tanpa faedah → pilih mengikut batas masa tindakan pengguna.
  • Hanya mengatakan bahawa penstriman mempunyai kependaman rendah → sinki, cache, dan penghantaran pemberitahuan boleh menggunakan keseluruhan belanjawan → ukur laluan hujung ke hujung dan setiap ekor kependaman.
  • Memanggil paparan 5 minit sebagai muktamad → peristiwa masih boleh tiba sehingga 6 jam lewat → tentukan semantik anggaran, semakan semula, pembekuan, dan pelarasan.
  • Menganggap titik semak sebagai tindakan luaran tepat-sekali → percubaan semula boleh mengulangi panggilan inventori atau pemberitahuan → gunakan kunci keidempotensian tindakan, rekod audit, dan ujian main semula.
  • Menambah (append) jumlah baharu daripada setiap kelompok mikro → tetingkap yang sama dikira berulang kali → gantikan secara atomik mengikut tetingkap dan versi atau tentukan protokol retractable-delta.
  • Menyalin peraturan perniagaan ke dalam kelompok dan strim secara berasingan → takrifan zon masa, pembatalan, dan jumlah akan hanyut (drift) → kongsi kontrak dan lekapan, kemudian bandingkan pada peringkat kunci.
  • Menentukan saiz kapasiti hanya untuk input yang stabil → lonjakan sepuluh kali ganda dan tunggakan kegagalan tidak dapat diselesaikan dalam batas masa → uji tahap puncak, kadar pemulihan bersih, dan kapasiti sinki secara bersama.
  • Mendayakan tindakan sebenar pada penggunaan pertama → percanggahan semantik secara langsung mengubah inventori → tulis secara bayangan dan perhatikan amaran sebelum mendayakan tindakan boleh balik secara beransur-ansur.

Soalan Susulan dan Jawapan

Soalan Susulan 1: Mengapa tidak menggunakan penstriman berterusan untuk papan pemuka 5 minit?

Jika kelompok mikro satu atau dua minit selesai dengan andal di bawah keadaan puncak dan pemulihan, dengan penulisan akhir dan penyegaran cache masih dalam masa 5 minit, penstriman berterusan tidak mengubah keputusan operasi. Ia menambah keadaan jangka panjang, titik semak, pemulihan tunggakan, dan kos penggunaan. Jika batas masa kemudiannya menjadi 30 saat, atau penjadualan dan permulaan menggunakan sebahagian besar belanjawan kelompok mikro, mainkan semula sejarah yang sama untuk membandingkan penstriman berterusan. Bukti terhadap SLO, bukan label "masa nyata", yang mencetuskan peningkatan tersebut.

Soalan Susulan 2: Bolehkah satu strim menghasilkan amaran, papan pemuka, dan keputusan kewangan?

Ia boleh, tetapi satu titik semak, perubahan skema, atau tetingkap yang rosak tidak boleh menyekat ketiga-tiga kegunaan. Amaran boleh membaca strim yang dinormalkan dan mengekalkan keadaan pendek, papan pemuka boleh membaca agregat berversi, dan kewangan masih boleh mengira semula daripada sejarah tidak boleh ubah pada tangkapan foto beku. Kongsi input dan takrifan sambil mengasingkan penggunaan dan domain kegagalan. Gabungkan unit masa jalan hanya selepas membuktikan bahawa kesan kegagalan, isian semula (backfill), dan audit kekal boleh diterima.

Soalan Susulan 3: Adakah pemprosesan tepat-sekali menjadikan output strim sesuai untuk penutupan kewangan?

Label itu sahaja tidak mencukupi. Semantik pemprosesan boleh mengelakkan output yang dikomit daripada menduplikasi pada percubaan semula, tetapi ia tidak menjamin bahawa rekod lewat telah tiba dan tidak meliputi kesan sampingan secara automatik. Kewangan masih memerlukan julat input yang dibekukan, versi peraturan, larian boleh ulang, kekangan lejar, dan kelulusan percanggahan. Output strim boleh menjadi anggaran awal. Ia menjadi input penutupan hanya jika kawalan audit tersebut turut dipenuhi dan penyesuaian jangka panjang membuktikan kesetaraannya.

Soalan Susulan 4: Bagaimanakah anda membuktikan pemulihan daripada lonjakan sepuluh kali ganda?

Rekodkan tempoh lonjakan dan tempoh kegagalan, kira peristiwa beratur, dan ukur kadar penyaliran bersih (net drain rate). Jika input semasa ialah 20,000 sesaat dan pengguna memproses 30,000 sesaat, penyaliran bersih hanya 10,000 sesaat; 12 juta peristiwa beratur mengambil masa kira-kira 20 minit. Penerimaan juga memerhatikan kependaman amaran hujung ke hujung, had sinki, pertumbuhan keadaan, dan kelewatan penskalaan automatik. Nombor pemprosesan puncak tanpa matematik pemulihan bersih menyembunyikan pelanggaran batas ekor panjang.

Soalan Susulan 5: Bilakah penstriman berterusan patut diturunkan taraf kepada kelompok mikro?

Turunkan taraf apabila perniagaan tidak lagi bertindak ke atas output peringkat saat, kelompok mikro memenuhi batas masa baharu, atau kos on-call dan keadaan penstriman secara berterusan melebihi kerugian yang dicegahnya. Mula-mula laksanakan kelompok mikro secara bayangan dan bandingkan hasil serta kependaman. Kemudian lumpuhkan tindakan sebenar sambil mengekalkan input yang boleh dimainkan semula dan tetingkap gulung balik (rollback). Teruskan memantau semakan lewat dan masa penyiapan puncak selepas perubahan supaya penjimatan kos tidak menyembunyikan data lapuk.

Sumber awam

Soalan berkaitan