5

Jestem bliski zwolnienia aplikacji szyny ze wspólnymi funkcjami sieciowymi (powiadamianie, ściana itd.). Chcę użyć jakiegoś przetwarzania w tle (najprawdopodobniej Bj) do zadań odciążających z cyklu żądanie/odpowiedź.Czy Amazon SQS to właściwy wybór? Problem z wydajnością railsów

Stanie się tak, gdy użytkownicy zaprosili znajomych za pośrednictwem poczty e-mail, aby dołączyć i aby otrzymywać powiadomienia e-mail.

Nie jestem pewien, czy powinienem po prostu upuścić te zaproszenia i powiadomienia w mojej Bazie Danych, używając modelu, a następnie po prostu przetworzyć go z procesem roboczym co x minut lub gdy powinienem wybrać Amazon SQS, przechowując wiadomości i zaprasza tam i pozwala mojemu pracownikowi pobrać go z Amazon SQS w celu przetworzenia (wysłanie zaproszeń/powiadomień).

Podejście Amazona spowodowałoby obciążenie bazy danych, ale sądzę, że pobieranie wiadomości jest wolniejsze.

Co myślisz?

Odpowiedz

12

Twój tytuł mówi, że masz problem z wydajnością Railsów, ale czy wiesz to na pewno? Z pozostałych pytań wynika, że ​​próbujesz przewidzieć możliwe przyszłe problemy z wydajnością. Jedynym sposobem na racjonalne radzenie sobie z problemami z wydajnością jest doprowadzenie aplikacji do szaleństwa i profilowanie jej. Dzięki temu otrzymasz dane empiryczne na temat rzeczywistych problemów z wydajnością.

Biorąc pod uwagę, że Amazon SQS nie jest za darmo i fakt, że używając go prawie na pewno dodać złożoność aplikacji, chciałbym migrować do niego jeśli i gdy obciążenie bazy danych staje się problemem. Nie próbuj odgadnąć problemów, zanim się pojawią, ponieważ przekonasz się, że pojawią się różne problemy z uruchomieniem aplikacji, z których część prawdopodobnie nie brała pod uwagę.

Najważniejsze jest to, że już zdecydowałeś się użyć przetwarzania w tle, co jest właściwą decyzją, ponieważ każde przetwarzanie, które nie jest natychmiastowe, nie należy do cyklu żądania/odpowiedzi Railsów, ponieważ blokuje ten proces Railsów. Zawsze możesz skalować z Amazonem, jeśli zajdzie taka potrzeba.

+0

Zgadzam się, że to prawdopodobnie najlepszy. Po prostu chcę być przygotowany i jestem trochę perfekcjonistą, więc staram się przewidzieć jak najwięcej. Ale tutaj po prostu skonfiguruję niezły proces w tle i zmienię przechowywanie kolejki w razie potrzeby. Dzięki –

3

Zgadzam się z Johnem Topleyem, że nie chcesz zbytnio komplikować swojej aplikacji, jeśli nie musisz. Biorąc to pod uwagę, są chwile, kiedy dobrze jest podjąć taką decyzję wcześniej, czy przewidujesz duży ładunek od samego początku? Czy przekazujesz to do istniejącej bazy użytkowników, czy też jest to strona publiczna, która może, ale nie musi wystartować?

Jeśli wiesz, że od początku będziesz musiał obsługiwać duży ruch, może to być dobry krok. Jeśli nie chcesz wydawać pieniędzy na używanie SQS, spójrz na niektóre z darmowych rozwiązań kolejek takich jak RabbitMQ.

Aktualnie przesyłam kilka milionów wiadomości miesięcznie poprzez SQS i działa całkiem nieźle. Upewnij się, że od czasu do czasu planujesz jego spowolnienie lub spowolnienie, więc musisz popracować nad niektórymi sposobami ponowienia próby i wykładniczym wycofaniem. Jedną z fajnych rzeczy jest to, że możesz otrzymać 10 wiadomości jednocześnie, co przyspiesza pracę w kolejce, możesz użyć jednego żądania, aby otrzymać 10 wiadomości i przetworzyć je 1 o 1.

4

Czy twoja aplikacja hostowane już na Amazon EC2? Prawdopodobnie nie przeniosę istniejącej aplikacji do AWS tylko po to, abym mógł korzystać z SQS, ale jeśli już korzystasz z infrastruktury Amazon, SQS to świetny wybór. Z pewnością możesz skonfigurować własny system przesyłania wiadomości (taki jak RabbitMQ), ale przechodząc z SQS, to o jedno mniej, o co musisz się martwić.

Istnieje wiele opcji dodawania przetwarzania w tle do aplikacji Railsowych, takich jak delayed_job lub background_job, ale moim ulubionym jest Workling. Daje to ładną warstwę abstrakcji, która umożliwia podłączanie różnych biegaczy w tle bez konieczności zmiany rzeczywistej realizacji zadań.

Posiadam numer Workling fork that adds an SQS client. Istnieją pewne niedociągnięcia (przeczytaj komentarze lub my blog post, aby uzyskać więcej szczegółów), ale ogólnie to działało dobrze dla nas podczas mojego ostatniego uruchomienia.

Użyłem również SQS dla oddzielnego projektu Ruby (bez Railsów) i ogólnie uważam go za niezawodny i wystarczająco szybki. Jak wspomniał James, możesz przeczytać do 10 wiadomości naraz, więc na pewno zechcesz to zrobić (mój klient Workling SQS robi to i buforuje wiadomości lokalnie).

0

Jeśli masz problemy z przejściem do EC2, możesz skorzystać z innych usług, takich jak onlinemq.com.

2

Amazon SQS jest dobra obsługa, z wyjątkiem przypadku gdy następujące rzeczy stają się ważne:

  • Wydajność
  • prawne
  • Podziękowania i transakcje
  • Wiadomości Idiomy Wiadomość Właściwości
  • bezpieczeństwa, autentyczności i Kolejka
  • Uprawnienia

Jeśli którakolwiek z tych rzeczy jest ważna, należy spojrzeć na prawdziwą usługę MQ przedsiębiorstwa, taką jak StormMQ, RabbitMQ, a nawet onlinemq.com.

znalazłem tę serię blogu ciekawy jak to porównuje Amazon SQS do StormMQ bez posiadania żadnych stempli z powrotem: http://blog.stormmq.com/2011/01/06/apples-and-oranges-performance/

Powiązane problemy