Мультитенантное приложение Django
Существуют ли распространенные шаблоны, которые люди используют для создания многопользовательских приложений с использованием Django. Встроенный фреймворк "сайты" выглядит как вариант. Есть ли другие подходы, с которыми люди добились успеха?
2 ответа
Использование инфраструктуры сайтов имеет большое значение для обеспечения гарантии безопасности "арендаторам", при условии, что вы предоставляете каждому экземпляру сайта уникальную таблицу.
С другой стороны, это будет большой проблемой, если у вас есть небольшое количество арендаторов, и вы будете тратить огромное количество серверных ресурсов, так как вам потребуется по крайней мере один серверный процесс на клиента, даже если они не используют система. Если у вас есть большое количество арендаторов, это не будет такой большой проблемой, потому что вы будете вынуждены автоматизировать решение независимо от вашего подхода.
Использование внешнего ключа клиента почти во всех ваших моделях будет работать нормально, а ORM в Django упрощает (облегчает) обеспечение безопасности с помощью пользовательских менеджеров. Недостатком является производительность, если вы начинаете сталкиваться с большим количеством пользователей, потому что нет простого способа увеличить масштаб.
Если вам нужно масштабировать, я думаю, что лучшим решением может быть сочетание обоих подходов. У каждой модели есть внешний ключ клиента, поэтому базы данных могут использоваться совместно, но затем вы разрабатываете механизм на более высоком уровне, чем Django, для направления клиентов в экземпляр сайта. Это позволяет вам размещать действительно больших арендаторов в их собственных базах данных с ресурсами, правильно настроенными только для них (например, надлежащим числом демонов mod_wsgi, количеством соединений с базой данных, пулом memcache надлежащего размера и т. Д.), И арендаторами меньшего размера используются общие ресурсы.
Взгляните на https://github.com/bcarneiro/django-tenant-schemas У вас будет только один экземпляр проекта, и вам не придется вносить много изменений в ваш код.