Java на habrahabr
JAVA / Multitenancy через JPA+Hibernate
Центральной идеей SaaS-модели обслуживания является очень простой фокус. Нужно всего лишь запустить для всех пользователей один экземпляр приложения и этим шагом категорически снизить все мыслимые затраты на инфраструктуру. Такой принцип “коммунальной квартиры” — одна из основных особенностей SaaS; она называется multitenancy.
Эта простая идея на практике оборачивается замысловатой реализацией. Замысловатой в силу того, что хранилище данных для SaaS-приложения должно поддерживать хранение данных всех пользователей экземпляра приложения. Один из вариантов решения этой задачи — это использование одной базы данных для всех пользователей.
Но такой «ночной кошмар программиста» тяжело развивать и поддерживать. Тяжело из-за того, что весь бизнес-код должен быть построен с учетом контекста выполнения. Из контекста выполнения приложение должно знать о том, для кого выполняется в настоящий момент код и использовать это знание для работы с хранилищем данных. А работа с хранилищем данных в терминах реляционной СУБД — это запросы SQL. В небольшом приложении их немного и издержками на их поддержание можно пренебречь, создав более-менее стабильную обертку. Но в приложении со сложной бизнес логикой необходимо построить масштабируемое решение, которое бы скрывало от разработчика multitenancy настолько, насколько это является возможным.
Итак, что у нас есть? J2EE приложение, использующее для работы с БД прослойку в виде JPA и его реализация — Hibernate. Эти замечательные программные средства содержат все средства для того, чтобы сделать жизнь программиста бизнес-логики беззаботной, а архитектора — насыщенной. Ниже вы найдете описание необходимых для этого шагов.
Теги:
Java
hibernate
jpa
multitenancy
saas
moysklad
мойсклад