तुरंत उपयोग के लिए तैयार हल्का लेकिन तेज़ user behavior/event collector (rust) open source
(github.com/lee-lou2)अगर आपको user behavior या event collection की ज़रूरत है, तो इसे एक बार ज़रूर आज़माएँ (प्लीज़🙏) — यक़ीनन संतुष्ट होंगे!
मैंने Rust का उपयोग करके एक ऐसा web server विकसित किया है जो हल्का होने के साथ तेज़ी से data collection कर सकता है.
कोड सरल है, इसलिए Rust से ज़्यादा परिचित न होने वाले लोग भी आसानी से कोड बदलने जैसी customization कर सकते हैं (ज़रूरत हो तो मैं कुछ हिस्सों में खुद भी मदद कर सकता हूँ 🥳)
यह event collector इस तरह implement किया गया है:
तकनीकी स्पेक
- विकास भाषा : rust(axum)
- स्टोरेज : event storage (OpenSearch), pending data storage (Sqlite3)
आगे चलकर दूसरे storage भी इस्तेमाल किए जा सकें, इसके लिए support जोड़ने की योजना है.
सिस्टम संरचना
API के प्रकार
- GET /ping : health check
- POST /events : event collection
collected data
- Headers में शामिल token की user information
- Headers में शामिल device/app information
- Body में शामिल event की detailed information
सिर्फ schema बदलकर इसे आसानी से modify किया जा सकता है 👍
तकनीकी विवरण
बेसिक संरचना (सरल विवरण)
- 1 लाख channels : request से आए events को consumer तक पहुँचाने का काम; अगर 1 लाख channels सभी भर जाएँ, तो events को database में pending के रूप में save किया जाता है
- 10 threads + consumer : channel से events लेकर 1000-1000 के batch में या 10 सेकंड तक जमा हुए events को OpenSearch में store करते हैं
- 1 scheduler : pending database में stored events को तय interval पर फिर से लाकर channel में भेजता है
data creation request(http)
- http api का उपयोग करके data creation request
- request मिलते ही उसे channel में भेजा जाता है; अगर channel भरे हों तो pending database में save किया जाता है
event consumer (10 lightweight threads)
- channel से मिले events को 1000-1000 के batch में OpenSearch bulk insert request के रूप में भेजना
- अगर 1000 events जमा न हों, तो 10 सेकंड के अंतराल पर जमा हुए events को OpenSearch में bulk insert करना
- OpenSearch registration fail होने पर pending database में save करना
pending event registration (Sqlite3)
- channel भर जाने या OpenSearch registration error होने पर pending database में save करना
scheduler
- pending database में जमा events को तय interval पर query करके channel में भेजना
- आगे चलकर लगातार जमा होने वाले events या data issues की वजह से OpenSearch में save न हो पाने वाले events के लिए अलग handling जोड़ने की योजना है
channel की संख्या या lightweight threads की संख्या deployment environment के resources या OpenSearch के प्रकार के अनुसार समायोजित करनी होगी 💪
मैं अभी Rust सीखने के 2~3 महीने के चरण में हूँ, इसलिए syntax थोड़ा अटपटा हो सकता है; इसे लगातार बेहतर बनाता रहूँगा.
कृपया बहुत रुचि दिखाइए, और तरह-तरह का feedback भी दीजिए~~~
धन्यवाद 🙇♂️
1 टिप्पणियां
सिस्टम संरचना चार्ट : https://github.com/lee-lou2/rust-events/blob/main/docs/flowchart.png