Skop dan gesaan
Ini ialah soalan reka bentuk yang lazim untuk peranan platform data, analitik masa nyata dan kejuruteraan data kanan. Andaikan kemuncak 50,000 peristiwa sesaat, sasaran kesegaran papan pemuka 60 saat dan laporan untuk hari sebelumnya perlu diserahkan pada 07:00. Temu duga ini menguji bila graf pelaksanaan yang dikongsi memaksa setiap pengguna mewarisi SLO yang paling ketat, dan cara kemajuan bebas serta kolam sumber mengurangkan gandingan (coupling).
Perkara yang dinilai oleh penemu duga
- Sama ada anda menukar "masa nyata" dan "tepat pada masanya" kepada SLO hujung ke hujung sebelum menamakan alatan.
- Sama ada anda membezakan cabang di dalam satu graf Beam, langganan bebas kepada satu sumber dan sumber pengiraan yang bebas sepenuhnya.
- Sama ada anda boleh menerangkan kompromi (trade-offs) antara bacaan pendua, kos, tekanan balik (backpressure), main semula, peristiwa lewat dan domain kegagalan.
- Sama ada anda menyediakan metrik, kenari, undur balik (rollback) dan penyesuaian yang membuktikan pemisahan itu meningkatkan hasil pengguna.
Soalan penjelasan untuk ditanya terlebih dahulu
Tanya sama ada 60 saat bermaksud kesegaran masa-peristiwa-ke-boleh-tanya (event-time-to-queryable freshness) atau hanya pendaman pemproses; sama ada laporan kewangan boleh mengisi semula (backfill) sekatan yang lewat; sama ada kedua-dua pengguna boleh berkongsi storan mentah tak boleh ubah; sama ada peristiwa memerlukan kesaksamaan penyewa atau keutamaan; apakah jaminan pendua, kehilangan dan susunan yang diperlukan; dan sama ada belanjawan lebih mengutamakan kos atau pendaman ekor papan pemuka. Jika laporan ialah T+1 tetapi papan pemuka mempunyai sasaran pendaman rendah yang ketat, pengasingan sudah pun menjadi pilihan lalai yang munasabah untuk dinilai.
Struktur jawapan 30 saat
Saya akan mencatat SLO hujung ke hujung, jaminan ketepatan dan sasaran pemulihan kedua-dua pengguna. Jika satu talian paip yang dikongsi mesti memenuhi sasaran 60 saat yang ketat, saya akan menetapkan garis dasar yang dikongsi, kemudian menggunakan langganan bebas untuk memisahkan kemajuan masa nyata dan kelompok (batch). Saya akan berkongsi penghuraian umum yang mahal, tetapi memisahkan pengiraan apabila tekanan sumber atau penyebaran kegagalan menjadi ketara. Setiap laluan mendapat metrik kesegaran, tunggakan, kelewatan, pendua dan penyiapan laporan tersendiri, manakala main semula serta suntikan kerosakan menentukan sama ada pengasingan tambahan berbaloi dengan kosnya.
Jawapan mendalam
1. Dapatkan struktur daripada SLO
Takrifkan SLO masa nyata sebagai p99 kesegaran masa-peristiwa-ke-boleh-tanya di bawah 60 saat. Takrifkan SLO kelompok sebagai melengkapkan peristiwa sah hari sebelumnya menjelang 07:00, dengan data lewat memasuki tetingkap pembaikan yang terikat. Panduan Dataflow Google menyatakan bahawa satu talian paip tunggal yang menyediakan SLO bercampur mesti memenuhi sasaran yang lebih ketat, yang membolehkan kerja berkeutamaan lebih rendah menggunakan kapasiti masa nyata. Belanjawan ralat, laluan amaran atau dasar penskalaan automatik yang berbeza ialah sebab kukuh untuk memisahkan laluan.
2. Bandingkan tiga topologi
Cabang dalam graf berguna untuk penyahkodan dikongsi dan penghalaan ringan. Apache Beam mendokumenkan bahawa pelbagai transformasi boleh membaca PCollection yang sama, tetapi setiap transformasi memproses input sekali lagi; transformasi berbilang output tunggal boleh memproses setiap elemen sekali untuk kerja biasa.
Langganan bebas kepada satu topik membolehkan pengguna masa nyata dan kelompok memiliki perakuan (acknowledgement), tunggakan dan kedudukan main semula yang berasingan. Panduan Dataflow Google menerangkan pelbagai talian paip yang menggunakan langganan berasingan supaya setiap tugas menarik dan memperakui secara bebas. Tugas yang bebas sepenuhnya juga mengasingkan CPU, memori, rentak keluaran dan domain kegagalan, dengan pertukaran kos bacaan pendua, pensirilan dan pemilikan operasi.
3. Reka bentuk laluan yang disyorkan
Kekalkan satu lapisan peristiwa mentah tak boleh ubah dan buat langganan masa nyata serta langganan kelompok daripada sumber yang sama. Tugas masa nyata melakukan pengagregatan ringan ke dalam stor hidangan pendaman rendah. Tugas kelompok membaca data yang disimpan mengikut tarikh peristiwa dan menulis jadual bersekat. Jika penghuraian umum melebihi 20% daripada jumlah CPU, normalkannya sekali semasa masuk (ingress) dan tulis peristiwa berversi ke lapisan mentah; jangan anggap kemajuan pengguna masa nyata sebagai bukti bahawa laluan kelompok telah melakukan komit.
raw-events
-> realtime-subscription -> stream-aggregate -> serving-store
-> batch-subscription or retained-raw -> daily-transform -> partitioned-lake4. Kendalikan tekanan balik, keutamaan dan kos
Beri laluan masa nyata had keserentakan dan amaran tunggakan tersendiri. Benarkan kelompok mengurangkan keserentakan apabila sumber masa nyata terhad, tetapi jangan letakkan kedua-duanya di belakang satu baris gilir tanpa batas. Jika dua pengiraan lengkap terlalu mahal, kongsi penyahkodan dan pendaratan mentah, kemudian asingkan peringkat hiliran. Apabila tunggakan masa nyata melebihi 60 saat, hentikan peluasan kapasiti kelompok dan pulihkan SLO masa nyata terlebih dahulu. Sandarkan bait input, CPU, usia tunggakan dan kos setiap sejuta peristiwa kepada setiap laluan berbanding membandingkan bilangan tugas.
5. Kendalikan kelewatan, main semula dan pemulihan
Gunakan tanda air (watermark) dan kelewatan dibenarkan yang terikat untuk tetingkap masa nyata. Hantar peristiwa di luar tetingkap ke baris gilir data lewat atau lapisan mentah, kemudian biarkan kelompok membaiki sekatan yang terjejas dengan penulisan berversi dan idempoten. Main semula daripada kedudukan sumber yang disimpan dengan membuat langganan baharu; jangan sekali-kali memundurkan kedudukan perakuan pengguna pengeluaran. Laluan kelompok sepatutnya masih boleh pulih daripada data mentah selepas kegagalan masa nyata berlaku. Jika storan mentah tidak tersedia, kedua-dua laluan memerlukan degradasi dan amaran yang jelas.
6. Biarkan eksperimen penerimaan membuat keputusan
Jalankan garis dasar dikongsi terlebih dahulu, kemudian dayakan sumber terasing untuk sebahagian kecil penyewa. Bandingkan kesegaran p50/p95/p99 papan pemuka, penyiapan laporan, usia tunggakan, kadar pendua, masa main semula, CPU, storan dan kos setiap sejuta peristiwa. Suntik lonjakan kelompok, mula semula pemproses, mesej pendua, sekatan lewat dan langganan dijeda. Jika pemisahan hanya meningkatkan pendaman pemproses tetapi menambah data pendua atau melebihi belanjawan kos, kekalkan pelan dikongsi dan optimumkan peringkat umum.
Contoh jawapan yang mantap
Saya akan mentakrifkan dua SLO hujung ke hujung terlebih dahulu: kesegaran p99 papan pemuka masa-peristiwa-ke-boleh-tanya di bawah 60 saat, dan laporan kewangan hari sebelumnya selesai menjelang 07:00 dengan tetingkap pembaikan data lewat yang terikat. Saya akan membina garis dasar yang dikongsi tetapi tidak sekali-kali berkongsi kedudukan perakuan antara masa nyata dan kelompok. Reka bentuk lalai saya ialah satu lapisan peristiwa mentah tak boleh ubah, dua langganan bebas dan dua tugas hiliran. Tugas masa nyata melaksanakan pengagregatan ringan; tugas kelompok membaca data yang disimpan mengikut tarikh peristiwa. Penghuraian umum boleh diberi versi sekali semasa masuk, manakala tugas penuh diasingkan hanya apabila sumber atau domain kegagalan memerlukannya. Setiap laluan memiliki metrik kesegaran, tunggakan, kelewatan, pendua, penyiapan laporan dan kos unit; main semula menggunakan langganan baharu dan kunci keidempotennan. Saya akan menyuntik lonjakan, mula semula dan peristiwa lewat untuk mengesahkan SLO. Jika pengasingan tidak meningkatkan hasil pengguna, saya akan mengekalkan pengiraan dikongsi dan mengoptimumkan peringkat umum.
Kesilapan lazim
- Gejala: Menyalin dua talian paip lengkap semata-mata kerana terdapat dua pengguna. Sebab ia gagal: Kos penghuraian umum dan pendaratan meningkat dua kali ganda tanpa menambah baik pengasingan. Pembetulan: Kongsi data mentah tak boleh ubah terlebih dahulu, kemudian asingkan pengiraan hiliran mengikut SLO.
- Gejala: Memacu kedua-dua pengguna dengan satu ofset global. Sebab ia gagal: Pengguna yang perlahan menyekat pengguna yang pantas dan main semula tidak boleh dilakukan secara bebas. Pembetulan: Gunakan langganan bebas atau kemajuan yang boleh disahkan secara bebas.
- Gejala: Hanya mengukur pendaman pemproses. Sebab ia gagal: Masa storan, pertanyaan dan penyegaran masih boleh melanggar sasaran pengguna. Pembetulan: Ukur kesegaran hujung ke hujung dan persentil.
- Gejala: Menulis peristiwa lewat terus ke dalam hasil langsung. Sebab ia gagal: Kiraan mungkin berulang atau laporan yang telah diterbitkan boleh berubah secara senyap. Pembetulan: Gunakan tanda air, tetingkap pembaikan, versi dan kunci keidempotennan.
- Gejala: Memundurkan pengguna pengeluaran untuk memainkan semula sejarah. Sebab ia gagal: Kemajuan dalam talian terganggu dan trafik boleh membiak. Pembetulan: Cipta langganan main semula terhad kadar daripada data yang disimpan.
Soalan susulan
Bagaimana jika kedua-dua laluan memerlukan pengiraan ciri yang mahal dan serupa?
Jadikan peringkat ciri itu berversi dan boleh dimainkan semula, daratkan outputnya sekali, dan biarkan kedua-dua laluan membacanya. Terima pengiraan pendua hanya apabila keadaan (state) mesti kekal dalam talian dan tidak boleh dikongsi. Bandingkan lapisan perantaraan yang dikongsi dengan pengiraan pendua menggunakan eksperimen CPU, pendaman dan ketekalan.
Adakah langganan bebas akan menggandakan kos input?
Ia menambah overhed bacaan dan perakuan, tetapi pendaratan tak boleh ubah, pemampatan, tetingkap pengekalan dan main semula atas permintaan boleh mengawalnya. Nilaikan kos setiap sejuta peristiwa bersama-sama dengan SLO masa nyata dan pengasingan kegagalan; kos storan sahaja tidak mencukupi.
Bolehkah kelompok meminjam kapasiti masa nyata apabila ia ketinggalan?
Gunakan kapasiti berkeutamaan rendah yang terikat dan boleh dituntut semula (preemptible) dengan pajakan serta penambakan automatik. Masa nyata mengekalkan had ketat dan metrik tunggakan bebas, supaya kapasiti yang dipinjam tidak boleh menolak p99 melebihi 60 saat.
Bagaimanakah anda membuktikan bahawa kedua-dua laluan akhirnya sepadan?
Bina set penyesuaian daripada versi peristiwa, kunci perniagaan dan sempadan masa yang sama. Bandingkan kiraan, amaun, rekod yang hilang, pendua dan pembetulan lewat. Jika output masa nyata adalah anggaran, takrifkan tetingkap penumpuan dan belanjawan perbezaan yang boleh dijelaskan berbanding menganggap satu jumlah yang sama sebagai bukti mutlak.