• Netflix ने VoD और Gaming जैसे विविध क्षेत्रों में विस्तार करते हुए यह महसूस किया कि बड़े पैमाने के समय-आधारित डेटा (petabyte स्तर) को millisecond स्तर की latency में store और process करने की क्षमता बेहद महत्वपूर्ण है.
  • Key-Value abstraction और Data Gateway platform के आधार पर TimeSeries abstraction विकसित किया गया, जो विभिन्न use case में समयानुक्रमिक event data को कुशलतापूर्वक store और query करने का समाधान देता है.

चुनौतियाँ

  • Netflix में user interaction, asset exposure, और जटिल microservice network activity जैसे स्रोतों से लगातार समय-आधारित डेटा उत्पन्न होता है और उपयोग में आता है.
  • इस डेटा का प्रभावी प्रबंधन करना user experience और system reliability सुनिश्चित करने के लिए महत्वपूर्ण है.
  • मुख्य चुनौतियाँ:
    • उच्च throughput: प्रति सेकंड अधिकतम 1 करोड़ write को संभालते हुए high availability बनाए रखनी होती है.
    • बड़े dataset पर efficient query: petabyte स्तर का डेटा store करते हुए primary key read का परिणाम low millisecond latency में लौटाना, और कई secondary attribute के आधार पर search व aggregation को support करना आवश्यक है.
    • global read और write: दुनिया में कहीं से भी read और write operation को support करना, साथ ही configurable consistency model देना.
    • configurable संरचना: single-tenant या multi-tenant data store में dataset को partition करने की क्षमता देना.
    • burst traffic handling: नए content release या regional disaster recovery के समय होने वाले traffic spike को संभालना.
    • cost efficiency: long-term retention को optimize करते हुए infrastructure cost को न्यूनतम रखना.

TimeSeries abstraction

  • data partitioning: विशिष्ट time partitioning strategy और event bucket approach का उपयोग करके burst workload को कुशलता से संभाला जाता है और query को सरल बनाया जाता है.
  • flexible storage: इसे Apache Cassandra और Elasticsearch जैसे विभिन्न storage backend के साथ integrate करने के लिए डिज़ाइन किया गया है.
  • configurability: हर dataset के लिए कई configurable option उपलब्ध हैं, जिससे अलग-अलग use case के अनुसार अनुकूलन संभव होता है.
  • scalability: horizontal और vertical scaling को support करता है, ताकि Netflix के user base और service बढ़ने के साथ throughput और data volume भी संभाले जा सकें.
  • shard infrastructure: Data Gateway Platform का उपयोग करके आवश्यक access और traffic isolation के साथ single-tenant और/या multi-tenant infrastructure deploy किया जा सकता है.

डेटा मॉडल

  • यह एक विशिष्ट event data model का पालन करता है, जो event data को encapsulate करके efficient query को संभव बनाता है.
  • event item: event item वह key-value pair है जिसका उपयोग user किसी विशेष event का डेटा store करने के लिए करता है. उदाहरण: {"device_type": "ios"}
  • event: event एक या अधिक event item से बना structured collection है. event किसी निश्चित समय पर घटित होता है और client-generated timestamp तथा event identifier (जैसे UUID) से पहचाना जाता है. event_time और event_id का संयोजन event के unique idempotency key का हिस्सा बनता है, जिससे user request को सुरक्षित रूप से retry कर सकता है
  • time series ID: time_series_id एक या अधिक event का समूह है, जो dataset की retention अवधि के दौरान घटित होते हैं. उदाहरण के लिए, device_id किसी विशेष device पर retention अवधि के दौरान हुए सभी event को store करता है. सभी event immutable होते हैं और TimeSeries service किसी दिए गए time series ID में केवल event append करती है
  • namespace: namespace, time series ID और event data का संग्रह है, जो पूरे TimeSeries dataset का प्रतिनिधित्व करता है. user प्रत्येक use case के लिए एक या अधिक namespace बना सकता है. abstraction namespace स्तर पर विभिन्न configurable option लागू करता है

API

  • WriteEventRecordsSync: यह endpoint event batch को write करता है और durability confirmation वापस client को भेजता है. इसका उपयोग तब किया जाता है जब user durability guarantee चाहता है
  • WriteEventRecords: यह ऊपर वाले endpoint का fire-and-forget version है. यह durability confirmation के बिना event batch को queue में डालता है. इसका उपयोग logging या tracing जैसे मामलों में किया जाता है, जहाँ user throughput को अधिक महत्व देता है और थोड़ा data loss स्वीकार कर सकता है
  • ReadEventRecords: namespace, timeSeriesId, timeInterval, और optional eventFilters के संयोजन के आधार पर यह endpoint सभी matching event को event_time के आधार पर descending order में low millisecond latency के साथ लौटाता है
  • SearchEventRecords: search criteria और time interval दिए जाने पर यह endpoint सभी matching event लौटाता है. ऐसे use case eventual consistent read के लिए उपयुक्त होते हैं
  • AggregateEventRecords: search criteria और aggregation mode (जैसे DistinctAggregation) दिए जाने पर यह endpoint दिए गए time interval में निर्दिष्ट aggregation करता है. Search endpoint की तरह, यहाँ भी user eventual consistency और संभवतः अधिक latency (seconds स्तर) स्वीकार कर सकता है

storage layer

  • TimeSeries का storage layer base data store और optional index data store से मिलकर बना है.
  • Apache Cassandra को high-throughput scenario में durability सुनिश्चित करने वाले data store के रूप में प्राथमिकता दी जाती है.
  • Elasticsearch को indexing के लिए data store के रूप में प्राथमिकता दी जाती है.

base data store

  • Apache Cassandra का उपयोग करके TimeSeries use case को संभाला जाता है.
  • Temporal Partitioning के माध्यम से डेटा प्रबंधन किया जाता है, जिसमें time interval के आधार पर डेटा को chunk में विभाजित किया जाता है
    • time slice: retention period से संबंधित Cassandra table के रूप में map होता है
    • time bucket: time slice के भीतर विशेष time range query optimization के लिए डेटा को फिर से partition किया जाता है
    • event bucket: कम समय में एक time series पर बड़े write को संभालने के लिए time bucket को फिर से partition किया जाता है
  • data table वास्तविक event data store करती है, जबकि metadata table namespace-विशिष्ट time slice configuration store करती है

index data store

  • non-primary key attribute के माध्यम से secondary access pattern को support करने के लिए डेटा को Elasticsearch में index किया जाता है.
  • user namespace के अनुसार search और aggregation के लिए attribute की सूची configure कर सकता है.

control plane

  • data plane read/write operation को संभालता है, जबकि control plane namespace behavior के सभी पहलुओं को configure करता है
  • data plane, TimeSeries control stack से संचार करता है, जो आगे Data Gateway control plane के साथ interact करता है
  • namespace configuration के माध्यम से विभिन्न पहलुओं को लचीले ढंग से समायोजित किया जा सकता है (जैसे time partitioning, buffering, consistency, retention आदि)

namespace configuration

  • service की flexibility दिखाने वाले configuration snippet के माध्यम से namespace-स्तर पर कई चीज़ें समायोजित की जा सकती हैं.

infrastructure provisioning

  • विभिन्न parameter को ध्यान में रखते हुए automated provisioning workflow के जरिए optimal setting निकाली जाती है.
  • system पहले initial infrastructure provision करता है और उसके बाद user workload के अनुसार scale करता है.

scalability

  • initial provisioning के समय usage prediction सीमित होती है, इसलिए बाद में tuning की आवश्यकता पड़ती है
  • horizontal scaling: TimeSeries server instance traffic demand के अनुसार अपने-आप scale out और scale in होते हैं.
  • vertical scaling: TimeSeries server instance या storage instance को vertically scale करके बड़ा CPU, RAM और/या attached storage capacity प्राप्त की जा सकती है.
  • disk scaling: EBS जोड़कर डेटा store किया जा सकता है, और जब disk storage किसी निश्चित threshold तक पहुँचती है, तो EBS volume को expand किया जाता है.
  • data repartitioning के जरिए over-partitioned या under-partitioned dataset को समायोजित किया जाता है

design principles

  • event idempotency: सभी mutation endpoint में idempotency built-in है, ताकि user request को सुरक्षित रूप से retry कर सके.
  • SLO-based hedging: अलग-अलग endpoint के लिए service level objective (SLO) target assign किए जाते हैं ताकि performance सुनिश्चित हो सके.
  • partial return: यदि client latency के प्रति sensitive है, तो वह partial result set स्वीकार कर सकता है.
  • adaptive pagination: जब service layer यह निर्धारित करती है कि time series dataset dense है, तो fan-out factor को dynamically adjust किया जाता है.
  • limited write window: डेटा को जितनी जल्दी हो सके immutable state में लाया जाता है, ताकि optimization लागू किए जा सकें.
  • write buffering: burst workload को संभालने के लिए event को कम समय के लिए merge करके load को समान रूप से distribute किया जाता है.
  • dynamic compaction: डेटा immutable होने के बाद read performance optimize करने के लिए compaction strategy का उपयोग किया जाता है.

वास्तविक प्रदर्शन

  • यह service low millisecond latency में डेटा record कर सकती है और stable point-read latency बनाए रखती है.

Netflix में Time Series का उपयोग

TimeSeries abstraction, Netflix की प्रमुख सेवाओं में महत्वपूर्ण भूमिका निभाती है. कुछ प्रभावशाली use case इस प्रकार हैं

  • tracing और insight: Netflix के सभी app और microservice में log tracing करके service-to-service communication को समझना, issue debugging में मदद करना, और support request का जवाब देना
  • user interaction tracking: video playback, search, content engagement जैसी लाखों user interaction को track करके Netflix के recommendation algorithm को real time में बेहतर बनाना और overall user experience सुधारने के लिए insight देना
  • feature rollout और performance analysis: नए product feature के rollout और performance को track करना, ताकि Netflix engineer माप सकें कि user feature के साथ कैसे interact कर रहे हैं, और भविष्य के सुधार के लिए data-driven decision ले सकें
  • asset impression tracking और optimization: asset exposure को track करके content और asset की efficient delivery सुनिश्चित करना, साथ ही optimization के लिए real-time feedback देना
  • billing और subscription management: billing और subscription management से संबंधित historical data store करना, ताकि transaction history की accuracy सुनिश्चित हो और customer service inquiry को support मिले

भविष्य के सुधार

use case के विकसित होने और abstraction को और अधिक cost-efficient बनाने की आवश्यकता बढ़ने के साथ, आने वाले महीनों में इस service में कई सुधार करने की योजना है. इनमें से कुछ इस प्रकार हैं

  • cost efficiency के लिए tiered storage: पुराने और कम access होने वाले डेटा को सस्ते object storage में स्थानांतरित करने का support, जहाँ first byte तक पहुँचने में अधिक समय लगता है, Netflix के लिए लाखों डॉलर की बचत कर सकता है
  • dynamic event bucketing: namespace provision करते समय कुछ हद तक static configuration रखने के बजाय, event stream होने पर key को real time में optimal size partition में विभाजित करने का support. इस रणनीति का बड़ा लाभ यह है कि यह partitioning की आवश्यकता न रखने वाले time_series_id को partition नहीं करके read amplification की कुल लागत कम करती है. साथ ही Cassandra 4.x में wide partition के data subset को पढ़ने में महत्वपूर्ण सुधार हैं, जिससे पूरे dataset को पहले से aggressively partition करने की आवश्यकता कम हो सकती है
  • caching: डेटा की immutability का उपयोग करके individual time range के लिए intelligent caching करना
  • count और अन्य aggregation: कुछ user सभी event data लाने के बजाय केवल किसी दिए गए time interval के event count में रुचि रखते हैं

निष्कर्ष

  • TimeSeries Abstraction, Netflix के online data infrastructure का एक महत्वपूर्ण घटक है, जो real-time और long-term decision making को support करता है.
  • जैसे-जैसे Netflix नए क्षेत्रों में विस्तार करता है, TimeSeries Abstraction platform का एक मुख्य तत्व बना रहेगा और streaming तथा उससे आगे की संभावनाओं का विस्तार करने में योगदान देगा

GN⁺ की राय

  • TimeSeries abstraction के माध्यम से scalability, flexibility और cost efficiency को एक साथ हासिल करके विशाल मात्रा के time series data को विश्वसनीय रूप से संभालने की Netflix की क्षमता प्रभावशाली है. खासकर time-based partitioning, write buffering, dynamic compaction जैसी data characteristic और access pattern के अनुरूप optimized तकनीकें ध्यान खींचती हैं
  • यह सिर्फ एक साधारण time series DB नहीं, बल्कि abstraction layer के जरिए Cassandra, Elasticsearch जैसे विभिन्न storage को लचीले ढंग से उपयोग करने, और workload की प्रकृति के अनुसार infrastructure provision और operate करने वाली control प्रणाली से युक्त है. abstraction के माध्यम से user जटिलता को छिपाकर डेटा पर ध्यान केंद्रित कर सकता है
  • वर्तमान में यह petabyte स्तर के डेटा को संभालते हुए प्रति सेकंड 1.5 करोड़ event process करने का प्रदर्शन दिखा रहा है, इसलिए high-performance time series data pipeline बनाने वाली कंपनियों के लिए यह एक उत्कृष्ट उदाहरण हो सकता है. खासकर बड़े पैमाने की सेवा के लिए केवल data volume और speed ही नहीं, बल्कि cost को भी समग्र रूप से ध्यान में रखना चाहिए
  • tracing, user behavior analysis, billing management जैसे Netflix business के मुख्य क्षेत्रों में इसका विविध उपयोग दिखाता है कि time series data, data-driven decision making और service innovation की प्रेरक शक्ति है. यह सिर्फ logging तक सीमित नहीं, बल्कि real-time recommendation जैसे ML/AI-आधारित service की नींव भी है
  • tiered storage, dynamic partitioning, aggregation operation जैसे भविष्य के सुधारों की योजना यह दिखाती है कि सिस्टम लगातार विकसित होने की दिशा में है. तेजी से बदलती business requirement का जवाब देने के लिए ऐसी निरंतर innovation आवश्यक होगी. उम्मीद है कि इस प्रक्रिया में संचित अनुभव open source आदि के माध्यम से साझा किया जाएगा

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.