Mam aplikację, w jej najprostszej formie, odczytuje dużą liczbę numerów telefonów z bazy danych (około 15 milionów) i wysyła każdą liczbę z jednego wiersza na raz do adresu URL w celu przetworzenia. Zaprojektowałem aplikację w następujący sposób:Ciężkie przetwarzanie asynchroniczne
- masowo wyeksportuj numery telefonów z SQL do pliku tekstowego za pomocą SSIS. Jest to bardzo szybkie i trwa 1 lub 2 minuty.
- Załaduj numery do kolejki wiadomości (w tej chwili używam programu MSMQ).
- Usuń kolejność wiadomości z aplikacji wiersza poleceń i uruchom żądanie przez http dla usługi, np. 3 połączenia na numer telefonu, a następnie zaloguj się do bazy danych.
Problem: wykonanie kodu trwa jeszcze długo. MSMQ ma również limit rozmiaru wiadomości, które może pobrać, a teraz muszę utworzyć wiele kolejek komunikatów. Potrzebuję dużej odporności na uszkodzenia, ale nie śmiem sprawić, aby kolejka wiadomości była transakcyjna z powodu wydajności. Zastanawiam się nad opublikowaniem kolejki komunikatów (obecnie kolejka prywatna) w katalogu aktywnym, aby procesy mogły ją wycofać z różnych systemów, aby mogło się to zakończyć szybciej. Ponadto, moje procesory osiągnęły 100% podczas wykonywania i zmieniam je, aby używać w tym momencie wątku. Chcę teraz eksplorować JMS, jeśli lepiej poradzi sobie z kolejką. Do tej pory najskuteczniejszą częścią całego przetwarzania jest część SSIS.
Chciałbym usłyszeć lepsze podejście do projektowania, zwłaszcza jeśli wcześniej zajmowałeś się tego rodzaju głośnością. Jestem gotowy, aby przejść do systemu Unix lub zrobić seplenienie, jeśli lepiej poradzi sobie z tą sytuacją.
Dzięki.
15 milionów rekordów przetwarzanych pojedynczo przez HTTP ** ** zajmie dużo czasu - nie wiem, jak długo trwa każde żądanie, ale nawet z opóźnieniem 250ms dla całego procesu prawdopodobnie patrząc na> 1000 godzin przetwarzania (przy założeniu kolejnej prośby). Nawet wysłanie 10 żądań równolegle i przy założeniu, że mają one takie samo ogólne opóźnienie, przetworzenie zajmie 250 godzin. Zacznę od sprawdzenia, czy twój "adres URL" obsługuje akceptowanie więcej niż jednego rekordu naraz - byłby to najprostszy sposób na zrównoleglenie pracy, aby przyspieszyć. – LBushkin
Niezależnie od tego, jakie rozwiązanie znajdziesz - zrób matematykę wcześniej, znajdując czas potrzebny na jej zrobienie, a następnie pomnóż to przez 15,000,000. Musisz mieć możliwość grupowania żądań. –
Batch URL nie jest dostępny, i tak, zrobiłem matematyki, tylko zastanawiam się, czy ktoś miałby interesujące podejście. – keni