ការដំឡើងកម្មវិធី Kafka Trillion-Message របស់ Walmart: ការធ្វើមាត្រដ្ឋានបញ្ហាប្រឈម និងដំណោះស្រាយ
Walmart ដំណើរការការដាក់ពង្រាយ Apache Kafka ដ៏ធំដែលដំណើរការសាររាប់ពាន់លានជារៀងរាល់ថ្ងៃជាមួយនឹងភាពអាចរកបាន 99.99% ។ ការរៀបចំដ៏រឹងមាំនេះគាំទ្រដល់ប្រតិបត្តិការសំខាន់ៗដូចជា ចលនាទិន្នន័យ សេវាកម្មមីក្រូដែលជំរុញដោយព្រឹត្តិការណ៍ និងការផ្សាយការវិភាគលើបរិស្ថានពពកឯកជន និងសាធារណៈ។ ទោះជាយ៉ាងណាក៏ដោយ ការគ្រប់គ្រង Kafka នៅមាត្រដ្ឋានរបស់ Walmart បង្ហាញពីបញ្ហាប្រឈមពិសេស រួមទាំងការដោះស្រាយការកើនឡើងនៃចរាចរណ៍ និងការគាំទ្រកម្មវិធីអ្នកប្រើប្រាស់ច្រើនភាសា ខណៈពេលដែលរក្សាបាននូវភាពជឿជាក់ខ្ពស់ និងប្រសិទ្ធភាពនៃការចំណាយ។
លោតទៅ
បញ្ហាប្រឈមសំខាន់ៗ
1. តុល្យភាពអ្នកប្រើប្រាស់ឡើងវិញ
តុល្យភាពអ្នកប្រើប្រាស់នៅក្នុង Kafka កើតឡើងនៅពេលដែ បញ្ជីទូរសារ លចំនួនករណីអ្នកប្រើប្រាស់នៅក្នុងក្រុមផ្លាស់ប្តូរ។ គន្លឹះទូទៅរួមមានការដាក់ឱ្យប្រើប្រាស់ Kubernetes ការចាប់ផ្តើមឡើងវិញ ការវិលជុំ ឬការធ្វើមាត្រដ្ឋានដោយស្វ័យប្រវត្តិ។ លើសពីនេះ បញ្ហាដូចជាការខកខានចង្វាក់បេះដូង (ដោយសារតែការផ្អាក JVM ឬការប្រមូលសំរាម) ឬការពន្យារពេលក្នុងការដំណើរការបណ្តុំអាចបណ្តាលឱ្យឈ្មួញកណ្តាលសន្មត់ថាអ្នកប្រើប្រាស់មិនឆ្លើយតប ដែលជំរុញឱ្យមានតុល្យភាពឡើងវិញ។
ខណៈពេលដែលការធ្វើឱ្យមានតុល្យភាពឡើងវិញធានាសូម្បីតែការចែកចាយភាគថាស វារំខានដល់ប្រតិបត្តិការ និងបន្ថែមភាពយឺតយ៉ាវ ជាពិសេសនៅក្នុងបរិយាកាសពាណិជ្ជកម្មអេឡិចត្រូនិចដែលមានល្បឿនលឿនរបស់ Walmart ។
2. សារថ្នាំពុល
“ថ្នាំពុល” សំដៅលើសារដែលបណ្តាលឱ្យអតិថិជនបរាជ័យម្តងហើយម្តងទៀត ជាញឹកញាប់ដោយសារតែទិន្នន័យមិនត្រឹមត្រូវ មាតិកាដែលមិនរំពឹងទុក ឬកំហុសនៅក្នុងលេខកូដអ្នកប្រើប្រាស់។ វាបង្កើតរង្វិលជុំដែលអ្នកប្រើប្រាស់ទាញយកម្តងហើយម្តងទៀត ហើយបរាជ័យក្នុងដំណើរការសារ រារាំងដំណើរការសម្រាប់សារផ្សេងទៀតនៅក្នុងភាគថាស។
3. ការកំណត់មាត្រដ្ឋាន និងការចំណាយ
ម៉ូដែលដែលមានមូលដ្ឋានលើភាគ 7 កម្មវិធីជំនួយលក់ឆ្លង និងលក់បន្តល្អបំផុតសម្រាប់ woocommerce ថាសរបស់ Kafka ភ្ជាប់ចំនួនភាគថាសយ៉ាងតឹងរឹងទៅនឹងចំនួនអតិបរមានៃអ្នកប្រើប្រាស់ដែលអាចអានស្របគ្នា។ ការពង្រីកករណីអ្នកប្រើប្រាស់ទាមទារការបង្កើនភាគថាស ដែលនាំឱ្យមានបញ្ហាប្រឈម៖
- ឈ្មួញកណ្តាល Kafka មានដែនកំណត់លើចំនួនភាគថាស ហើយលើសពីនេះ តម្រូវឱ្យឈ្មួញកណ្តាលដែលមានតម្លៃថ្លៃជាង។
- ការបន្ថែមភាគថាសពាក់ព័ន្ធនឹងកា ការដំឡើងកម្មវិធី រសម្របសម្រួលក្នុងចំណោមក្រុមជាច្រើន ការបង្កើតផ្នែកលើសនៅក្នុងអង្គការធំៗដូចជា Walmart ជាដើម។
- ភាគថាសកាន់តែច្រើនបង្កើនការប្រើប្រាស់ធនធាន ជំរុញការចំណាយ។
សេវាប្រូកស៊ីសារ (MPS)
ដើម្បីដោះស្រាយបញ្ហាប្រឈមទាំងនេះ Walmart បានបង្កើត សេវា Message Proxy Service (MPS) ដែលកាត់បន្ថយការប្រើប្រាស់សារ Kafka ពីដែនកំណត់ផ្អែកលើភាគថាសរបស់វា។
របៀបដែល MPS ដំណើរការ
MPS ដើរតួជាអន្តរការីរវាងកម្មវិធី Kafka និងអ្នកប្រើប្រាស់ អានសារពីភាគថាស Kafka ហើយដាក់វានៅក្នុងជួរក្នុងអង្គចងចាំ។ លេខអាហ្សង់ទីន កម្មវិធីអ្នកប្រើប្រាស់បន្ទាប់មកទៅយកសារទាំងនេះតាមរយៈ REST APIs ដែលអនុញ្ញាតឱ្យធ្វើមាត្រដ្ឋានអ្នកប្រើប្រាស់ដោយឯករាជ្យដោយមិនបង្កើនភាគថាស Kafka។
សមាសធាតុនៃ MPS
- Reader Thread
អានសារពី Kafka ហើយដាក់វានៅក្នុងជួរដែលមានព្រំដែន (PendingQueue)។ ប្រសិនបើជួរពេញ នោះខ្សែនឹងផ្អាក ដើម្បីការពារការផ្ទុកលើសចំណុះនៃអង្គចងចាំ។ - PendingQueue
សតិបណ្ដោះអាសន្នដែលមានព្រំដែនដែលអនុញ្ញាតឱ្យដំណើរការអសមកាល ដែលអនុញ្ញាតឱ្យខ្សែស្រឡាយអ្នកអានដំណើរការក្នុងល្បឿន Kafka និងខ្សែស្រឡាយអ្នកសរសេរតាមល្បឿនរបស់ពួកគេ។ - Order Iterator
ធានានូវដំណើរការតាមលំដាប់នៃសារដោយប្រើសោដូចគ្នា ដោយការពារការដោះស្រាយសារបែបនេះក្នុងពេលដំណាលគ្នា។ - Writer Threads
ខ្សែស្រឡាយទាំងនេះទាញយកសារពី PendingQueue ហើយបញ្ជូនវាទៅអ្នកប្រើប្រាស់តាមរយៈ HTTP POST ។ ការចែកចាយដែលបរាជ័យត្រូវបានសាកល្បងឡើងវិញ ឬផ្លាស់ទីទៅ Dead Letter Queue (DLQ) សម្រាប់ការវិភាគបន្ថែម។ - អុហ្វសិត Commit Thread
តាមកាលកំណត់ ធ្វើការទូទាត់សារដែលបានដំណើរ ការដំឡើងកម្មវិធី ការទៅ Kafka ដោយធានាថាគ្មានការចម្លង ឬបាត់បង់សារក្នុងករណីចាប់ផ្តើមសេវាឡើងវិញ។ - Consumer Service REST API
កំណត់ទម្រង់ API សម្រាប់កម្មវិធីអ្នកប្រើប្រាស់ រួមទាំងរបៀបដែលពួកគេឆ្លើយតបទៅនឹងសំណើ HTTP និងគ្រប់គ្រងការបរាជ័យ។
អត្ថប្រយោជន៍របស់ MPS
- ធ្វើឱ្យប្រសើរឡើងនូវតុល្យភាព
MPS កាត់បន្ថយភាពញឹកញាប់នៃតុល្យភាពឡើងវិញដោយរក្សាការស្ទង់មតិ Kafka ស្ថិរភាពតាមរយៈ PendingQueue របស់វា។ វាញែកការប្រើប្រាស់សារចេញពីការធ្វើមាត្រដ្ឋានកម្មវិធីអ្នកប្រើប្រាស់ កាត់បន្ថយការរំខាន។ - ការគ្រប់គ្រងប្រកបដោយប្រសិទ្ធភាពនៃសារថ្នាំពុល
កម្មវិធីអ្នកប្រើប្រាស់អាចរកឃើញសារដែលមានបញ្ហា និងជូនដំណឹងដល់ MPS ដែលបញ្ជូនពួកគេទៅកាន់ DLQ ដោយធានាថាសារដែលនៅសល់ត្រូវបានដំណើរការយ៉ាងរលូន។ - ការសន្សំថ្លៃដើម និងលទ្ធភាពធ្វើមាត្រដ្ឋាន
- សេវាអ្នកប្រើប្រាស់គ្មានរដ្ឋ ៖ កម្មវិធីអាចធ្វើមាត្រដ្ឋានយ៉ាងស្វាហាប់ជាមួយ Kubernetes ដោយផ្អែកលើតម្រូវការ ដោយមិនចាំបាច់បែងចែកធនធានជាមុន។
- Kafka Optimization : ចង្កោម Kafka ត្រូវបានធ្វើមាត្រដ្ឋានដោយផ្អែកលើការបញ្ជូនជាជាងការរាប់ភាគថាស ដោយកាត់បន្ថយតម្លៃហេដ្ឋារចនាសម្ព័ន្ធ។
- ប្រតិបត្តិការសាមញ្ញ
REST ទំនាក់ទំនងរវាង MPS និងសេវា ការដំឡើងកម្មវិធី កម្មអតិថិជនធានាភាពឆបគ្នាជាមួយភាសាកម្មវិធី និងក្របខ័ណ្ឌផ្សេងៗ លើកកម្ពស់ភាពបត់បែន។
ការពិចារណាបន្ថែម
- តុល្យភាពឡើងវិញនៅក្នុង MPS
MPS ខ្លួនវាដំណើរការជាអ្នកប្រើប្រាស់ Kafka និងជាកម្មវត្ថុនៃការធ្វើឱ្យមានតុល្យភាពឡើងវិញ។ ទោះជាយ៉ាងណាក៏ដោយ ការរចនារបស់វា អនុលោមតាមលក្ខណៈនេះយ៉ាងប្រណិត ជាមួយនឹង PendingQueue ដើរតួជាទ្រនាប់ក្នុងអំឡុងពេលអន្តរកាល។ - REST ធៀបនឹងពិធីការផ្សេងទៀត
REST ត្រូវបានជ្រើសរើសលើពិធីការដូចជា gRPC សម្រាប់ភាពសាមញ្ញ និងភាពឆបគ្នាយ៉ាងទូលំទូលាយ ទោះបីជាវាមានតម្លៃខ្ពស់ជាងក៏ដោយ។ - ការបង្កើនភាពស្មុគស្មាញ
ការណែនាំ MPS បន្ថែមស្រទាប់អន្តរការី ដែលទាមទារធនធានបន្ថែមសម្រាប់ការត្រួតពិនិត្យ និងថែទាំ។ ទោះជាយ៉ាងណាក៏ដោយអត្ថប្រយោជន៍របស់វាលើសពីភាពស្មុគស្មាញបន្ថែម។.