कॉनकरन्ट आणि स्केलेबल ॲप्लिकेशन्स तयार करण्यासाठी ॲक्टर मॉडेलचा शोध घ्या. अर्लँग आणि अक्का अंमलबजावणी, त्यांचे फायदे आणि वास्तविक-जगातील समस्या सोडवण्यासाठी ते कसे वापरावे हे शिका. सॉफ्टवेअर डेव्हलपर्ससाठी एक जागतिक मार्गदर्शक.
ॲक्टर मॉडेल: अर्लँग आणि अक्कासह कॉनकरन्सी आणि स्केलेबिलिटी
सॉफ्टवेअर डेव्हलपमेंटच्या जगात, वाढत्या वर्कलोडला हाताळू शकणारे आणि कार्यक्षमतेने काम करणारे ॲप्लिकेशन्स तयार करणे हे एक सततचे आव्हान आहे. थ्रेड्स आणि लॉक्स सारखे कॉनकरन्सीसाठीचे पारंपरिक दृष्टिकोन त्वरीत गुंतागुंतीचे आणि त्रुटी-प्रवण बनू शकतात. ॲक्टर मॉडेल एक शक्तिशाली पर्याय देतो, जो कॉनकरन्ट आणि डिस्ट्रिब्युटेड सिस्टीम्स डिझाइन करण्याचा एक मजबूत आणि सुबक मार्ग प्रदान करतो. हा ब्लॉग पोस्ट ॲक्टर मॉडेल, त्याची तत्त्वे आणि दोन प्रमुख अंमलबजावणी: अर्लँग आणि अक्का यावर लक्ष केंद्रित करतो.
ॲक्टर मॉडेल म्हणजे काय?
ॲक्टर मॉडेल हे कॉनकरन्ट संगणनेचे (computation) एक गणितीय मॉडेल आहे. ते 'ॲक्टर्स'ला संगणनेचे मूलभूत एकक मानते. ॲक्टर्स हे स्वतंत्र घटक आहेत जे एकमेकांशी असिंक्रोनस मेसेज पासिंगद्वारे संवाद साधतात. हे मॉडेल शेअर्ड मेमरी आणि क्लिष्ट सिंक्रोनाइझेशन मेकॅनिझमची गरज दूर करून कॉनकरन्सी व्यवस्थापन सोपे करते.
ॲक्टर मॉडेलची मुख्य तत्त्वे:
- ॲक्टर्स: वैयक्तिक, स्वतंत्र घटक जे स्टेट (state) आणि बिहेवियर (behavior) एन्कॅप्सुलेट करतात.
- मेसेज पासिंग: ॲक्टर्स मेसेज पाठवून आणि स्वीकारून संवाद साधतात. मेसेज अपरिवर्तनीय (immutable) असतात.
- असिंक्रोनस कम्युनिकेशन: मेसेज असिंक्रोनसपणे पाठवले जातात, म्हणजे पाठवणारा प्रतिसादाची वाट पाहत नाही. हे नॉन-ब्लॉकिंग ऑपरेशन्स आणि उच्च कॉनकरन्सीला प्रोत्साहन देते.
- आयसोलेशन: ॲक्टर्सची स्वतःची खाजगी स्टेट असते आणि ते एकमेकांपासून वेगळे असतात. हे डेटा करप्शनला प्रतिबंधित करते आणि डीबगिंग सोपे करते.
- कॉनकरन्सी: हे मॉडेल स्वाभाविकपणे कॉनकरन्सीला सपोर्ट करते, कारण अनेक ॲक्टर्स एकाच वेळी मेसेजवर प्रक्रिया करू शकतात.
ॲक्टर मॉडेल विशेषतः डिस्ट्रिब्युटेड सिस्टीम्स तयार करण्यासाठी योग्य आहे, जिथे घटक वेगवेगळ्या मशीनवर असू शकतात आणि नेटवर्कवर संवाद साधू शकतात. हे फॉल्ट टॉलरन्ससाठी अंगभूत समर्थन प्रदान करते, कारण ॲक्टर्स एकमेकांवर नजर ठेवू शकतात आणि अयशस्वी झाल्यास रिकव्हर होऊ शकतात.
अرلँग: ॲक्टर मॉडेलचा एक प्रणेता
अرلँग ही एक प्रोग्रामिंग भाषा आणि रनटाइम एन्व्हायरनमेंट आहे जी विशेषतः अत्यंत कॉनकरन्ट आणि फॉल्ट-टॉलरन्ट सिस्टीम्स तयार करण्यासाठी डिझाइन केलेली आहे. १९८० च्या दशकात एरिक्सनमध्ये टेलिकॉम स्विचेसच्या मागण्या हाताळण्यासाठी ती विकसित केली गेली होती, ज्यांना अत्यंत विश्वसनीयता आणि मोठ्या संख्येने कॉनकरन्ट कनेक्शन्स हाताळण्याची क्षमता आवश्यक होती.
अرلँगची प्रमुख वैशिष्ट्ये:
- अंगभूत कॉनकरन्सी: अर्लँगचे कॉनकरन्सी मॉडेल थेट ॲक्टर मॉडेलवर आधारित आहे. ही भाषा सुरुवातीपासूनच कॉनकरन्ट प्रोग्रामिंगसाठी डिझाइन केलेली आहे.
- फॉल्ट टॉलरन्स: अर्लँगचे 'लेट इट क्रॅश' तत्वज्ञान आणि सुपरव्हिजन ट्रीजमुळे ती अपवादात्मकपणे मजबूत बनते. त्रुटी आढळल्यास प्रोसेस आपोआप रीस्टार्ट केल्या जाऊ शकतात.
- हॉट कोड स्वॅपिंग: अर्लँग चालू सिस्टीममध्ये व्यत्यय न आणता कोड अपडेट करण्याची परवानगी देतो. उच्च उपलब्धता आवश्यक असलेल्या सिस्टीम्ससाठी हे महत्त्वपूर्ण आहे.
- डिस्ट्रिब्युशन: अर्लँग अनेक नोड्सवर अखंडपणे काम करण्यासाठी डिझाइन केलेले आहे, ज्यामुळे डिस्ट्रिब्युटेड ॲप्लिकेशन्स तयार करणे सोपे होते.
- OTP (ओपन टेलिकॉम प्लॅटफॉर्म): OTP लायब्ररी आणि डिझाइन तत्त्वांचा एक संच प्रदान करते जे क्लिष्ट अर्लँग ॲप्लिकेशन्सचा विकास सोपे करते. यात सुपरवायझर्स, स्टेट मशीन्स आणि इतर उपयुक्त ॲबस्ट्रॅक्शन्सचा समावेश आहे.
अرلँग उदाहरण: एक साधा काउंटर ॲक्टर
चला अर्लँगमध्ये एका साध्या काउंटर ॲक्टरचे उदाहरण पाहूया. हा ॲक्टर 'इन्क्रिमेंट' आणि 'गेट' मेसेज स्वीकारेल आणि एक काउंट सांभाळेल.
-module(counter).
-export([start/0, increment/1, get/1]).
start() ->
spawn(?MODULE, loop, [0]).
increment(Pid) ->
Pid ! {increment}.
get(Pid) ->
Pid ! {get, self()}.
loop(Count) ->
receive
{increment} ->
io:format("Incrementing...~n"),
loop(Count + 1);
{get, Sender} ->
Sender ! Count,
loop(Count)
end.
या उदाहरणात:
start()
एक नवीन ॲक्टर (प्रोसेस) तयार करते आणि त्याचे स्टेट सुरू करते.increment(Pid)
ॲक्टरला एक इन्क्रिमेंट मेसेज पाठवते.get(Pid)
ॲक्टरला एक गेट मेसेज पाठवते आणि प्रतिसादासाठी पाठवणाऱ्याचा उल्लेख करते.loop(Count)
ही मुख्य लूप आहे, जी येणारे मेसेज हाताळते आणि काउंट अपडेट करते.
हे अर्लँग ॲक्टरमधील मेसेज पासिंग आणि स्टेट व्यवस्थापनाच्या मुख्य संकल्पना दर्शवते.
अرلँग वापरण्याचे फायदे:
- उच्च कॉनकरन्सी: अर्लँग प्रचंड संख्येने कॉनकरन्ट प्रोसेस हाताळू शकते.
- फॉल्ट टॉलरन्स: त्रुटी हाताळण्यासाठी आणि अपयशातून सावरण्यासाठी अंगभूत यंत्रणा.
- स्केलेबिलिटी: अनेक कोर आणि मशीनवर सहजपणे स्केल होते.
- विश्वसनीयता: उच्च उपलब्धता आणि अपटाइम आवश्यक असलेल्या सिस्टीम्ससाठी डिझाइन केलेले.
- सिद्ध ट्रॅक रेकॉर्ड: एरिक्सन, व्हॉट्सॲप (मूळतः) आणि इतर अनेक कंपन्यांद्वारे अत्यंत मागणी असलेल्या वर्कलोड्स हाताळण्यासाठी उत्पादनात वापरले जाते.
अرلँग वापरण्यातील आव्हाने:
- शिकण्याची प्रक्रिया: अर्लँगची सिंटॅक्स आणि प्रोग्रामिंग पॅराडाइम इतर अनेक लोकप्रिय भाषांपेक्षा वेगळी आहे.
- डीबगिंग: कॉनकरन्ट सिस्टीम्सचे डीबगिंग अधिक क्लिष्ट असू शकते.
- लायब्ररी: इकोसिस्टम प्रौढ असली तरी, त्यात इतर भाषांइतक्या लायब्ररी नसतील.
अक्का: JVM साठी ॲक्टर मॉडेल
अक्का हे जावा व्हर्च्युअल मशीन (JVM) वर कॉनकरन्ट, डिस्ट्रिब्युटेड आणि फॉल्ट-टॉलरन्ट ॲप्लिकेशन्स तयार करण्यासाठी एक टूलकिट आणि रनटाइम आहे. स्काला आणि जावामध्ये लिहिलेले, अक्का ॲक्टर मॉडेलची शक्ती जावा इकोसिस्टममध्ये आणते, ज्यामुळे ते विकासकांच्या विस्तृत श्रेणीसाठी उपलब्ध होते.
अक्काची प्रमुख वैशिष्ट्ये:
- ॲक्टर-आधारित कॉनकरन्सी: अक्का ॲक्टर मॉडेलची एक मजबूत आणि कार्यक्षम अंमलबजावणी प्रदान करते.
- असिंक्रोनस मेसेज पासिंग: ॲक्टर्स असिंक्रोनस मेसेज वापरून संवाद साधतात, ज्यामुळे नॉन-ब्लॉकिंग ऑपरेशन्स शक्य होतात.
- फॉल्ट टॉलरन्स: अक्का ॲक्टरच्या अपयशांचे व्यवस्थापन करण्यासाठी सुपरवायझर्स आणि फॉल्ट हँडलिंग स्ट्रॅटेजीज प्रदान करते.
- डिस्ट्रिब्युटेड सिस्टीम्स: अक्का अनेक नोड्सवर डिस्ट्रिब्युटेड ॲप्लिकेशन्स तयार करणे सोपे करते.
- परसिस्टन्स: अक्का परसिस्टन्स ॲक्टर्सना त्यांचे स्टेट एका टिकाऊ स्टोरेजमध्ये टिकवून ठेवण्यास सक्षम करते, ज्यामुळे डेटाची सुसंगतता सुनिश्चित होते.
- स्ट्रीम्स: अक्का स्ट्रीम्स डेटा स्ट्रीमवर प्रक्रिया करण्यासाठी एक रिॲक्टिव्ह स्ट्रीमिंग फ्रेमवर्क प्रदान करते.
- अंगभूत टेस्टिंग सपोर्ट: अक्का उत्कृष्ट टेस्टिंग क्षमता प्रदान करते, ज्यामुळे ॲक्टरचे वर्तन लिहिणे आणि सत्यापित करणे सोपे होते.
अक्का उदाहरण: एक साधा काउंटर ॲक्टर (स्काला)
येथे अक्का वापरून स्कालामध्ये लिहिलेले एक साधे काउंटर ॲक्टरचे उदाहरण आहे:
import akka.actor._
object CounterActor {
case object Increment
case object Get
case class CurrentCount(count: Int)
}
class CounterActor extends Actor {
import CounterActor._
var count = 0
def receive = {
case Increment =>
count += 1
println(s"Count incremented to: $count")
case Get =>
sender() ! CurrentCount(count)
}
}
object CounterApp extends App {
import CounterActor._
val system = ActorSystem("CounterSystem")
val counter = system.actorOf(Props[CounterActor], name = "counter")
counter ! Increment
counter ! Increment
counter ! Get
counter ! Get
Thread.sleep(1000)
system.terminate()
}
या उदाहरणात:
CounterActor
ॲक्टरचे वर्तन परिभाषित करते,Increment
आणिGet
मेसेज हाताळते.CounterApp
एकActorSystem
तयार करते, काउंटर ॲक्टरला इन्स्टँशिएट करते आणि त्याला मेसेज पाठवते.
अक्का वापरण्याचे फायदे:
- परिचितता: JVM वर तयार केलेले असल्यामुळे, ते जावा आणि स्काला डेव्हलपर्ससाठी सोपे आहे.
- मोठी इकोसिस्टम: लायब्ररी आणि टूल्सच्या विशाल जावा इकोसिस्टमचा फायदा घेते.
- लवचिकता: जावा आणि स्काला दोन्हीला सपोर्ट करते.
- मजबूत समुदाय: सक्रिय समुदाय आणि भरपूर संसाधने.
- उच्च परफॉर्मन्स: ॲक्टर मॉडेलची कार्यक्षम अंमलबजावणी.
- टेस्टिंग: ॲक्टर्ससाठी उत्कृष्ट टेस्टिंग सपोर्ट.
अक्का वापरण्यातील आव्हाने:
- गुंतागुंत: मोठ्या ॲप्लिकेशन्ससाठी यात प्राविण्य मिळवणे क्लिष्ट असू शकते.
- JVM ओव्हरहेड: नेटिव्ह अर्लँगच्या तुलनेत JVM ओव्हरहेड वाढवू शकते.
- ॲक्टर डिझाइन: ॲक्टर्स आणि त्यांच्या परस्परसंवादाचे काळजीपूर्वक डिझाइन आवश्यक आहे.
अرلँग आणि अक्का यांची तुलना
अرلँग आणि अक्का दोन्ही ॲक्टर मॉडेलची मजबूत अंमलबजावणी देतात. त्यांच्यापैकी निवड करणे प्रकल्पाच्या आवश्यकता आणि मर्यादांवर अवलंबून असते. आपला निर्णय घेण्यासाठी येथे एक तुलनात्मक तक्ता आहे:
वैशिष्ट्य | अرلँग | अक्का |
---|---|---|
प्रोग्रामिंग भाषा | अرلँग | स्काला/जावा |
प्लॅटफॉर्म | BEAM (अرلँग VM) | JVM |
कॉनकरन्सी | अंगभूत, ऑप्टिमाइझ केलेले | ॲक्टर मॉडेलची अंमलबजावणी |
फॉल्ट टॉलरन्स | उत्कृष्ट, "लेट इट क्रॅश" | मजबूत, सुपरवायझर्ससह |
डिस्ट्रिब्युशन | अंगभूत | मजबूत सपोर्ट |
इकोसिस्टम | प्रौढ, पण लहान | विस्तृत जावा इकोसिस्टम |
शिकण्याची प्रक्रिया | अधिक कठीण | मध्यम |
परफॉर्मन्स | कॉनकरन्सीसाठी अत्यंत ऑप्टिमाइझ केलेले | चांगले, परफॉर्मन्स JVM ट्युनिंगवर अवलंबून असतो |
अرلँग अनेकदा एक चांगला पर्याय असतो जर:
- तुम्हाला अत्यंत विश्वसनीयता आणि फॉल्ट टॉलरन्सची आवश्यकता असेल.
- तुम्ही अशी सिस्टीम तयार करत असाल जिथे कॉनकरन्सी ही प्राथमिक चिंता आहे.
- तुम्हाला मोठ्या संख्येने कॉनकरन्ट कनेक्शन्स हाताळण्याची आवश्यकता असेल.
- तुम्ही स्क्रॅचपासून एखादा प्रकल्प सुरू करत असाल आणि नवीन भाषा शिकण्यास तयार असाल.
अक्का अनेकदा एक चांगला पर्याय असतो जर:
- तुम्ही आधीपासून जावा किंवा स्कालाशी परिचित असाल.
- तुम्हाला विद्यमान जावा इकोसिस्टम आणि लायब्ररींचा फायदा घ्यायचा असेल.
- तुमच्या प्रकल्पाला अत्यंत फॉल्ट टॉलरन्सवर कमी भर देण्याची आवश्यकता असेल.
- तुम्हाला इतर जावा-आधारित सिस्टीम्ससह एकत्रित करण्याची आवश्यकता असेल.
ॲक्टर मॉडेलचे व्यावहारिक उपयोग
ॲक्टर मॉडेल विविध उद्योगांमध्ये विस्तृत ॲप्लिकेशन्समध्ये वापरले जाते. येथे काही उदाहरणे आहेत:
- टेलिकॉम सिस्टीम्स: अर्लँग मूळतः टेलिकॉम स्विचेससाठी डिझाइन केले होते आणि त्याची विश्वसनीयता आणि स्केलेबिलिटीमुळे या क्षेत्रात त्याचा वापर सुरू आहे.
- इन्स्टंट मेसेजिंग: व्हॉट्सॲप, जे मूळतः अर्लँग वापरून तयार केले होते, हे ॲक्टर मॉडेल कसे मोठ्या संख्येने कॉनकरन्ट वापरकर्त्यांना हाताळू शकते याचे एक उत्तम उदाहरण आहे. (टीप: व्हॉट्सॲपचे आर्किटेक्चर विकसित झाले आहे.)
- ऑनलाइन गेमिंग: मल्टीप्लेअर ऑनलाइन गेम्स अनेकदा गेम स्टेट व्यवस्थापित करण्यासाठी, खेळाडूंच्या परस्परसंवादाला हाताळण्यासाठी आणि गेम सर्व्हर स्केल करण्यासाठी ॲक्टर मॉडेलचा वापर करतात.
- फायनान्शियल ट्रेडिंग सिस्टीम्स: हाय-फ्रिक्वेन्सी ट्रेडिंग प्लॅटफॉर्म रिअल-टाइममध्ये मोठ्या प्रमाणात व्यवहार प्रक्रिया करण्याच्या क्षमतेसाठी ॲक्टर मॉडेलचा वापर करतात.
- IoT डिव्हाइसेस: IoT नेटवर्कमधील असंख्य उपकरणांमधील संवाद हाताळणे.
- मायक्रो सर्व्हिसेस: ॲक्टर मॉडेलची अंगभूत कॉनकरन्सी त्याला मायक्रो सर्व्हिसेस आर्किटेक्चरसाठी योग्य बनवते.
- शिफारस इंजिन्स: वापरकर्त्याच्या डेटावर प्रक्रिया करणारी आणि वैयक्तिकृत शिफारसी प्रदान करणारी सिस्टीम तयार करणे.
- डेटा प्रोसेसिंग पाइपलाइन्स: मोठे डेटासेट हाताळणे आणि समांतर गणना करणे.
जागतिक उदाहरणे:
- व्हॉट्सॲप (जागतिक): सुरुवातीला अब्जावधी मेसेज हाताळण्यासाठी अर्लँग वापरून तयार केले गेले.
- एरिक्सन (स्वीडन): टेलिकॉम उपकरणे तयार करण्यासाठी अर्लँगचा वापर करते.
- क्लार्ना (स्वीडन): पेमेंट प्रोसेसिंग सिस्टीम्स तयार करण्यासाठी अक्काचा वापर करते.
- लाइटबेंड (जागतिक): अक्काच्या मागे असलेली कंपनी जी सेवा आणि समर्थन प्रदान करते.
- इतर अनेक कंपन्या (जागतिक): लंडन आणि न्यूयॉर्कमधील फायनान्सपासून ते आशियातील ई-कॉमर्स प्लॅटफॉर्मपर्यंत विविध क्षेत्रांमध्ये जगभरातील विविध संस्थांद्वारे वापरले जाते.
ॲक्टर मॉडेल अंमलात आणण्यासाठी सर्वोत्तम पद्धती
ॲक्टर मॉडेल प्रभावीपणे वापरण्यासाठी, या सर्वोत्तम पद्धतींचा विचार करा:
- एकल जबाबदारीसाठी ॲक्टर्स डिझाइन करा: प्रत्येक ॲक्टरचा एक स्पष्ट, सु-परिभाषित उद्देश असावा. यामुळे त्यांना समजणे, तपासणे आणि देखभाल करणे सोपे होते.
- अपरिवर्तनीयता (Immutability): कॉनकरन्सी समस्या टाळण्यासाठी तुमच्या ॲक्टर्समध्ये अपरिवर्तनीय डेटा वापरा.
- मेसेज डिझाइन: तुमचे मेसेज काळजीपूर्वक डिझाइन करा. ते स्वयंपूर्ण असावेत आणि स्पष्ट कृती किंवा घटना दर्शवावेत. मेसेज डेफिनिशनसाठी सील्ड क्लासेस/ट्रेट्स (स्काला) किंवा इंटरफेस (जावा) वापरण्याचा विचार करा.
- त्रुटी हाताळणी आणि सुपरव्हिजन: ॲक्टरच्या अपयशांचे व्यवस्थापन करण्यासाठी योग्य त्रुटी हाताळणी आणि सुपरव्हिजन स्ट्रॅटेजीज लागू करा. तुमच्या ॲक्टर्समधील अपवादांशी सामना करण्यासाठी एक स्पष्ट धोरण परिभाषित करा.
- टेस्टिंग: तुमच्या ॲक्टर्सच्या वर्तनाची पडताळणी करण्यासाठी सर्वसमावेशक चाचण्या लिहा. मेसेज परस्परसंवाद आणि त्रुटी हाताळणी तपासा.
- मॉनिटरिंग: तुमच्या ॲक्टर्सच्या परफॉर्मन्स आणि आरोग्याचा मागोवा घेण्यासाठी मॉनिटरिंग आणि लॉगिंग लागू करा.
- परफॉर्मन्सचा विचार करा: मेसेजच्या आकाराबद्दल आणि मेसेज पासिंगच्या वारंवारतेबद्दल जागरूक रहा, जे परफॉर्मन्सवर परिणाम करू शकते. परफॉर्मन्स ऑप्टिमाइझ करण्यासाठी योग्य डेटा स्ट्रक्चर्स आणि मेसेज सीरिअलायझेशन तंत्र वापरण्याचा विचार करा.
- कॉनकरन्सीसाठी ऑप्टिमाइझ करा: कॉनकरन्ट प्रोसेसिंगच्या क्षमतांचा पुरेपूर फायदा घेण्यासाठी तुमची सिस्टीम डिझाइन करा. ॲक्टर्समध्ये ब्लॉकिंग ऑपरेशन्स टाळा.
- डॉक्युमेंट: तुमचे ॲक्टर्स आणि त्यांच्या परस्परसंवादाचे योग्यरित्या दस्तऐवजीकरण करा. हे प्रकल्प समजून घेण्यासाठी, देखभाल करण्यासाठी आणि त्यावर सहयोग करण्यासाठी मदत करते.
निष्कर्ष
ॲक्टर मॉडेल कॉनकरन्ट आणि स्केलेबल ॲप्लिकेशन्स तयार करण्यासाठी एक शक्तिशाली आणि सुबक दृष्टिकोन देते. अर्लँग आणि अक्का दोन्ही या मॉडेलची मजबूत अंमलबजावणी प्रदान करतात, प्रत्येकाची स्वतःची ताकद आणि कमकुवतता आहे. अर्लँग फॉल्ट टॉलरन्स आणि कॉनकरन्सीमध्ये उत्कृष्ट आहे, तर अक्का JVM इकोसिस्टमचे फायदे देते. ॲक्टर मॉडेलची तत्त्वे आणि अर्लँग व अक्का यांच्या क्षमता समजून घेऊन, तुम्ही आधुनिक जगाच्या मागण्या पूर्ण करण्यासाठी अत्यंत लवचिक आणि स्केलेबल ॲप्लिकेशन्स तयार करू शकता. त्यांच्यातील निवड तुमच्या प्रकल्पाच्या विशिष्ट गरजा आणि तुमच्या टीमच्या विद्यमान कौशल्यावर अवलंबून असते. ॲक्टर मॉडेल, निवडलेल्या अंमलबजावणीची पर्वा न करता, उच्च-परफॉर्मन्स आणि विश्वसनीय सॉफ्टवेअर सिस्टीम्स तयार करण्यासाठी नवीन शक्यता उघडते. या तंत्रज्ञानाचा अवलंब करणे खरोखरच एक जागतिक घटना आहे, जी न्यूयॉर्क आणि लंडनच्या व्यस्त आर्थिक केंद्रांपासून ते भारत आणि चीनच्या वेगाने विस्तारणाऱ्या टेक हब्सपर्यंत सर्वत्र वापरली जाते.