2017-01-25 29 views
7

Zajmowałem się tym projektem, ponieważ pomysł posiadania całego systemu jako zbioru funkcji Lambda wydaje się bardzo atrakcyjny. W rzeczywistości kilka lat temu napisałem oprogramowanie, które robi to samo, co MoonMail i jest ono związane z aktualizacją, ponieważ niektóre specyfikacje uległy zmianie. Oceniam przeniesienie mojego oprogramowania do Lambdy lub po prostu adaptowanie tego, aby używać MoonMail.Architektura MoonMail Lambda z Serverless

Mam następujące pytania:

W moich testów przy użyciu Serverless, zauważyłem, że kiedy zmienił nazwę zasobu (jak nazwa tabeli DynamoDb) i przesunięta, nie było żadnego ostrzeżenia i stary stół i jego zawartość została zniszczona. Myślę, że prosty błąd, taki jak dodatkowy znak w pliku konfiguracyjnym, powodujący usunięcie wszystkich danych z bazy danych, jest dość ryzykowny. Jak sobie z tym poradzić?

Odnośnie wysyłania wiadomości e-mail za pośrednictwem SES. Jak radzisz sobie z ograniczaniem przepustowości po osiągnięciu limitu wysyłania dla określonego konta? Czy robisz wykładnicze wyprzedaże? Nie mogę znaleźć tego w bazie kodu. Będę bardzo wdzięczny, jeśli możesz wskazać mi w ogólnym obszarze repozytorium, w którym to się dzieje.

Odpowiedz

5
  1. MoonMail ma nazwy tabel zapisane w pliku s-templates.json. Plik ten jest rzadko dotykany i dlatego zespół nie doświadczył jeszcze tego problemu, ale prawdą jest, że niebezpieczeństwo nadal istnieje i chciałbym zwrócić się do zespołu AWS z pytaniem, jak uniknąć upuszczenia stołu, po prostu zmieniając jego nazwę na CF.
  2. Powtarza się w przypadku limitu wysłania z Cloud Watch invocation (zespół MM poprawi mnie, jeśli się mylę, ale 99% pewności, że nie jestem).
+1

@julian w odniesieniu do pytania dławiącego, gdy przekracza on stawkę wysyłania, po prostu zatrzymujemy e-mail w kolejce, a to będzie automatycznie ponawiana, dopóki kolejka nie jest pusta (więcej informacji tutaj (https://github.com/microapps/MoonMail/blob/master/events/lib/send_email_service.js#L134)). Jeśli osiągniemy dzienny limit, po prostu zatrzymamy proces wysyłania, ponieważ przydział nie zostanie przywrócony aż do następnego dnia, ale przed wysłaniem kampanii przeprowadzamy pewne kontrole, aby tego uniknąć. – davids

5

Możesz ustawić DeletionPolicy: Retain podczas tworzenia swoich tabel DynamoDB, aby zapobiec ich przypadkowemu usunięciu przez Cloud Formation.

Jeśli twoja Lambda jest wywoływana przez SNS, możesz po prostu przestać działać po przekroczeniu limitu SES. SNS będzie następnie ponownie próbować dostawy za pomocą back-off.

3

Moje podejście polega na stworzeniu dynamodb w oddzielnym procesie. Tak więc moja konfiguracja bez serwera jest tylko do odczytu, bez tworzenia bazy danych. Bo nie wydaje mi się, żebym często odtwarzał mój db :)