Я постараюсь разобрать ваши проблемы с помощью моего опыта, но, возможно, Майкл - Sqlbot или Джон Ротенштейн могут дать более подходящие ответы.
Требование 1
1) Это звучит как хороший подход.Я не вижу здесь ничего критического.
2) Это, ИМХО, лучший из трех вариантов. Он отделит доступ к данным от биллинговой службы, что является отличной вещью в мире микросервисов.
3) Это не масштабируется.Представьте, что ваша система развивается, и вы получаете 10К лямбда-функций.Вам нужно будет не только создать очень надежный механизм для автоматизации этого процесса, но также вам необходимо отслеживать 10 тысяч различных вещей (представьте журналы CloudWatch, API-шлюз и т. Д.), Не говоря уже о том, что у вас будет 10 тысяч функций сточно такой же код (отдельные параметры клиента).Я бы даже не подумал об этом.
Требование 2
1) Это может работать и хорошо вписывается в модель действий DynamoDB: хранить как можно большеданные, как вы можете в уникальной таблице, так что вы можете получить все за один раз.Из того, что я вижу, вы могли бы даже использовать этот ApiKey в качестве ключа раздела и, ради простоты этого ответа, хранить данные клиента в виде JSON в столбце с именем data.Так как ваш запрос должен запрашиваться только с помощью ApiKey, сохранение JSON в DynamoDB не повредит (однако имейте в виду, что если вам нужно выполнить запрос по любому из его атрибутов JSON, чем у вас плохо, так как DynamoDBвозможности запросов очень ограничены)
2) Нет, из-за Требование 1.3
3) Нет, из-за вышеизложенного.
Если вы все ещевам нужно хранить ApiKey в другой таблице, чтобы вы могли выполнять другой анализ и сохранять более точный контроль над вызовами, доступом, выставлением счетов и т. д. клиента, это тоже не проблема, просто убедитесь, что вы дублируете свой ApiKey на ClientData
таблица вместо создания FK (DynamoDB не поддерживает FK, поэтому вам придется самостоятельно управлять этими ограничениями).Дублирование просто отлично в мире NoSQL.
Ваш вариант использования явно мультитенантный, поэтому я также рекомендую вам прочитать Мультитенантное хранилище с Amazon DynamoDB , которое будетдать вам больше понимания и немного расширить свои возможности.Многопользовательская аренда не является легкой задачей и может причинить вам много головной боли, если она не реализована правильно.Я думаю, именно поэтому AWS также подготовил для нас это приятное чтение:)
Рад продолжить это в разделе комментариев, если у вас есть дополнительная информация для обмена
Надеюсь, это поможет!