हमारे पास एक मोबाइल ऐप है जो उपयोगकर्ताओं को फ़ीड प्रस्तुत करता है। फ़ीड आरईएसटी एपीआई को टोमकैट पर लागू किया गया है, जो समानांतर सामग्री प्रस्तुत करने के लिए कोचबेस, MYSQL जैसे विभिन्न डेटा स्रोतों को कॉल करता है। सरल कोड नीचे दिया गया है:फ़ीड खींचने के लिए टोमकैट को अनुकूलित करने के लिए कैसे करें
Future<List<CardDTO>> pnrFuture = null;
Future<List<CardDTO>> newsFuture = null;
ExecutionContext ec = ExecutionContexts.fromExecutorService(executor);
final List<CardDTO> combinedDTOs = new ArrayList<CardDTO>();
// Array list of futures
List<Future<List<CardDTO>>> futures = new ArrayList<Future<List<CardDTO>>>();
futures.add(future(new PNRFuture(pnrService, userId), ec));
futures.add(future(new NewsFuture(newsService, userId), ec));
futures.add(future(new SettingsFuture(userPreferenceManager, userId), ec));
Future<Iterable<List<CardDTO>>> futuresSequence = sequence(futures, ec);
// combine the cards
Future<List<CardDTO>> futureSum = futuresSequence.map(
new Mapper<Iterable<List<CardDTO>>, List<CardDTO>>() {
@Override
public List<CardDTO> apply(Iterable<List<CardDTO>> allDTOs) {
for (List<CardDTO> cardDTOs : allDTOs) {
if (cardDTOs != null) {
combinedDTOs.addAll(cardDTOs);
}
}
Collections.sort(combinedDTOs);
return combinedDTOs;
}
}
);
Await.result(futureSum, Duration.Inf());
return combinedDTOs;
अभी हमारे पास प्रति अनुरोध लगभग 4-5 समांतर कार्य हैं। लेकिन यह लगभग 20-25 समानांतर कार्यों तक बढ़ने की उम्मीद है क्योंकि हम फ़ीड में नए प्रकार के सामान पेश करते हैं।
मेरा सवाल है, मैं इस डिजाइन को कैसे सुधार सकता हूं? टॉमकैट में यह सुनिश्चित करने के लिए कि किस तरह की ट्यूनिंग की आवश्यकता है, इस तरह के 20-25 समांतर कॉलों को भारी भार के तहत बेहतरीन रूप से परोसा जा सकता है।
मुझे समझ में आता है कि यह एक व्यापक विषय है, लेकिन कोई सुझाव बहुत उपयोगी होगा।
वहाँ एक अनुरोध में सभी डेटा वापस जाने के लिए एक आवश्यकता है का उपयोग करना चाहते नहीं होगा? – AdamSkywalker
हां, पूरी फ़ीड वापस कर दी गई है। भविष्य में, इसे पृष्ठित किया जा सकता है ... –
@ माधुर-आहुजा: ऐसी कई चीजें हैं जिन्हें इस तरह के डिजाइन को बेहतर बनाने के लिए बेहतर किया जा सकता है - ऐसा लगता है कि आप कुछ ऐसा करने की कोशिश कर रहे हैं [http://martinfowler.com/articles/microservices.html] (सूक्ष्मजीव) फ़ीड के लिए डेटा के विभिन्न स्रोतों को एकत्रित करने के लिए। समस्या है ... टोमकैट आपकी समस्याओं का सबसे कम है। चूंकि प्रत्येक दूरस्थ सेवा विफल हो सकती है, इसलिए आपको इस तरह के डिज़ाइन को वास्तव में खींचने के लिए सिस्टम लचीलापन पर ध्यान केंद्रित करने की आवश्यकता होगी। सर्किट तोड़ने वाले और बैलेंसर्स पहली बात है जो मेरे दिमाग में आती है, लेकिन वे सवाल के दायरे में हैं :) –