Как вы сказали, оба варианта имеют свои преимущества и недостатки.
Опция 1 дает вам Разделение проблем . Логика c для взаимодействия с вашей базой данных абстрагируется от одного сервиса. Изменения типа используемой базы данных или используемой схемы требуют только изменения кода для одной службы. Например, скажем, ваша платформа расширилась, и вы теперь можете sh кэшировать вызовы в вашей базе данных. Если у вас есть API, веб-приложение и мобильное приложение, напрямую связывающиеся с базой данных, все они должны быть обновлены, чтобы использовать преимущества кэша. Эти изменения, вероятно, также должны быть организованы для одновременного развертывания. В действительности это будет связано с простоем: чаще всего вы видите это как «плановое обслуживание». Однако вариант 1 нарушает принцип единой ответственности . Служба должна делать одну вещь и делать это хорошо. В варианте 1 служба отвечает как за интерфейс к базе данных, так и за отображение HTML для веб-приложения. Изменения в веб-приложении требуют повторного развертывания службы для API, даже если они не связаны между собой.
Преимущества и недостатки варианта 2 в основном являются противоположностями преимуществ и недостатков варианта 1. Несколько службы, совместно использующие базу данных, могут привести к несогласованности данных, тесной связи (особенно в развертывании) и усложнению отладки.
Распространенный шаблон проектирования (который я бы порекомендовал) представляет собой небольшую модификацию варианта 1 API находится перед базой данных. Это единственный сервис, который взаимодействует с базой данных. Эта настройка должна улучшить вашу масштабируемость. Легко развернуть дубликаты API, а затем запросить балансировку нагрузки между ними. Кроме того, кэширование поиска в базе данных или полное изменение технологии базы данных является (относительно) простой задачей. Ваше веб-приложение или любые другие службы, которые вы разработаете в будущем, взаимодействуют с API, а не с базой данных. Здесь вы можете воспользоваться преимуществами единой ответственности. Стоит отметить, что при таком дизайне каждый запрос вашего веб-приложения будет go через две службы. Тем не менее, преимущества этого проекта, возможно, перевешивают несколько дополнительных миллисекунд задержки.
И последнее: спасибо за мысли о масштабируемости на столь раннем этапе. Вы можете нанести удар прямо сейчас, если ваш график задерживается, но я думаю, что в долгосрочной перспективе вам будет лучше.