Системная классификация SaaS
5 уровней модели зрелости системной архитектуры SaaS — от «хаоса» до «утопии»
- Уровень 0 (Хаос): каждый раз, когда добавляется клиент, добавляется экземпляр программного обеспечения.
- Уровень 1 (управляемый хаос): все клиенты работают на одной и той же версии программного обеспечения, и любая настройка выполняется путем изменения конфигурации.
- Уровень 2 (мультитенантный [multi-tenant], высотные здания [Highrise]): все клиенты готовы работать с одной и той же версией программного обеспечения, и все они работают на одном и том же «экземпляре».
- Уровень 3 (мультитенантность, наращивание): на этом этапе у вас есть многопользовательская модель программного обеспечения с одной версией. Однако аппаратное масштабирование все же возможно.
- Уровень 4 (Утопия): аналогичен уровню 3, за исключением того, что вы можете найти эффективный способ запуска разных версий программного обеспечения на разных «экземплярах».
Приложение должно поддерживать мультиарендность:
Мультитенантность можно разделить на несколько категорий:
- Простая виртуализация в облаке, где совместно используется только оборудование.
- Общие приложения, использующие разные базы данных для каждого арендатора.
- Обмен приложениями и базами данных (самая высокая эффективность, настоящий мультиванта).
То, чего мы хотим достичь, — это наиболее эффективная бизнес-модель с многопользовательским доступом. Тем не менее, существует процесс проверки для выбора.Ниже описаны различные схемы изоляции данных с несколькими арендаторами.
Независимая независимая библиотека приложений
Несколько различных приложений, каждое со своей собственной базой данных. Хотя этот метод обеспечивает изоляцию данных арендатора, он является худшим с точки зрения масштабируемости и стоимости, поэтому этот метод следует исключить в первую очередь.
Одно и то же приложение, одна библиотека на каждого арендатора
Преимущество
- Данные арендатора физически изолированы от обслуживания базы данных,
- Поскольку это библиотека для каждого арендатора, дизайн библиотеки таблицы может быть расширен отдельно, но это также вызывает проблемы совместимости приложений
Недостатком являются высокие затраты на обслуживание и базу данных (например: в случае, когда одна и та же структура данных или добавление столбцов в индексную таблицу требуют работы с множеством библиотек), стоимость разработки также высока.
то же приложение, та же база данных
Недостаток: мультитенантные базы данных неизбежно жертвуют изоляцией арендаторов. Данные для нескольких арендаторов хранятся вместе в одной базе данных. Во время разработки убедитесь, что запросы не предоставляют данные от нескольких арендаторов.
Преимущества: Это самая низкая стоимость из всех программ.
Разделенная мультиарендность
Шардинг и мультиарендность: мультитенантное одно приложение + мультитенантная единая база данных (шардинг)
Похожа ли она на первую картинку: одно и то же приложение, одна библиотека на тенанта похожа, но в каждой библиотеке больше данных тенанта?
Это на самом деле совсем другое.
Во-первых, в первом режиме библиотеки разных тенантов могут расширяться отдельно, то есть структура может быть разной, но шардированный мультитенант — это одна и та же структура данных.
Во-вторых, режим шардирования хорошо масштабируется: это может быть один шард с одним тенантом или один шард с несколькими тенантами, в зависимости от конкретной стратегии шардирования.
Давайте посмотрим на конкретные показатели в режиме шардинга:
| показатель | Разделенная мультиарендность |
|---|---|
| Масштабируемость | Неограниченно 1-1000000s |
| Изоляция арендатора | средний |
| Стоимость базы данных на одного арендатора | самый низкий |
| Мониторинг и управление производительностью | Интегрированные и одиночные (частично интегрированные) |
| сложность разработки | средний |
| Сложность эксплуатации и обслуживания | От низшего уровня к высокому управление одним арендатором усложняется |
Наш выбор моделей
Основываясь на приведенном выше анализе, мы решили использовать модель сегментирования и мультиарендности, поскольку она может обеспечить неограниченную масштабируемость, а также лучше изолировать данные арендатора.
В этом случае структура базы данных унифицирована, а разные шарды имеют одинаковую структуру таблиц базы данных. Конкретные правила подбиблиотеки могут быть настроены, рекомендуется следоватьОдин арендатор, одна библиотекаконфигурация политики.
практика разработки
-
При разработке каждой таблицы следует учитывать, следует ли добавлять поле «идентификатор арендатора», чтобы различать разных «арендаторов» или разных клиентов. Кроме того, также удобно использовать «идентификатор аренды» в качествеОсколочный ключ
-
Мы представим ShardingSphere, чтобы помочь нам создать подбазу данных и подтаблицу базы данных, которая относительно прозрачна для приложения, уменьшая сложность разработки приложения на уровне базы данных из-за введения подбазы данных и подтаблицы.
-
Мы используем правила сегментирования для сегментирования данных, например, настраиваем правила сегментирования на основе идентификаторов арендаторов.
# 配置分片规则
- !SHARDING
tables:
# 配置 t_order 表规则
t_order:
actualDataNodes: ds${0..1}.t_order${0..1}
# 配置分库策略
databaseStrategy:
standard:
shardingColumn: user_id
shardingAlgorithmName: database_inline
# 配置分表策略
tableStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: table_inline
t_order_item:
# 省略配置 t_order_item 表规则。..
# ...
# 配置分片算法
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds${user_id % 2}
table_inline:
type: INLINE
props:
algorithm-expression: t_order_${order_id % 2}
- При изменении структуры таблицы базы данных (DDL), выполните модификацию прокси через ShardingProxy, и ShardingProxy автоматически изменит таблицы с несколькими базами данных в соответствии с правилами подбазы данных и подтаблицы.
Драйвер метаданных/конфигурации
Хорошее решение SaaS должно быть эффективным мультиарендным. Мультиарендность может быть достигнута с помощью метаданных для каждого арендатора. Метаданные могут быть определены для каждого конкретного компонента. Он определяет данные приложения во время выполнения, базовые функции приложения, а также данные и настройки клиента (если таковые имеются).
В частности, например, наше управление конфигурацией разрешений RBAC для мультитенантных систем — это конфигурация метаданных. Вы можете обратиться к: