Здраствуйте, прошу совета у хабрасообщества.
Я проектирую сервис который будет заниматься обслуживанием некоторых организаций. Логически сервис разделяется на две части:
- Морда — включает в себя всякую мишуру вроде Wiki, Landing Page и профиль клиента-организации (биллинг, состояние аккаунта и тд),
- Непосредственно сервис, в котором сидят сотрудники клиента-организации.
Фреймворк Play 2.0, планирую хостится у Heroku.
На данном этапе не совсем ясно как разделить инстансы и базы данных.
Следует ли разделять базу данных по клиентам: один клиент — одна база данных? Или стоит хранить все одной базе, но к каждой таблице привязать столбец с указанием принадлежности к клиенту, и не будет ли проблем с производительностью, администрированием и масштабированием?
Если выбрать вариант с разделением баз данных, то как это все разделить? Ведь для этого необходимо запустить инстанс сервиса с указанием базы данных для данного клиента, получается что мы делаем инстансы разнородными, а это может быть препятствием для масштабируемости. К тому же, насколько я знаю, Heroku требует от
web
процессов однородности.
Могу предположить вариант с однородными инстансами имеющими подключение к каждой БД, но это попахивает оверкилом.
Предполагаемый стек:
- Play 2.0
- Anorm
- JDBC
- PostgresSQL
- Heroku
К Heroku не привязан, может быть что-нибудь более подходящее?