Про Kubernetes и .Net Core
От: Shmj Ниоткуда  
Дата: 07.11.18 05:18
Оценка:
Немного посмотрел сие чудо. В облаке можно даже не за дорого сие поднять.

Но не ясен ключевой вопрос — как быть с базой данных? Тут ребята описали свой опыт https://habr.com/company/eastbanctech/blog/420665/ , но у них база данных была классическая, т.е. никакой распределенности не было.

Как вообще принято решать этот вопрос? Есть ли готовые решения?
Re: Про Kubernetes и .Net Core
От: GarryIV  
Дата: 07.11.18 05:55
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Немного посмотрел сие чудо. В облаке можно даже не за дорого сие поднять.


S>Но не ясен ключевой вопрос — как быть с базой данных?


А как связан сабж и БД? Ну хочешь свою в k8s подними хочешь другую используй.
WBR, Igor Evgrafov
Re[2]: Про Kubernetes и .Net Core
От: Shmj Ниоткуда  
Дата: 07.11.18 06:14
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>А как связан сабж и БД? Ну хочешь свою в k8s подними хочешь другую используй.


Дык... Поднять то много инстансов и добавить типа лоадбалансер — нет проблем. Проблема начинается когда хочешь чтобы везде данные были одинаковые. А это значит нужна единая согласованния база, что не очень то совмещается с распределенностью. Вот и спрашиваю — какие есть стандарные решения этой проблемы?
Re[3]: Про Kubernetes и .Net Core
От: GarryIV  
Дата: 07.11.18 09:38
Оценка:
Здравствуйте, Shmj, Вы писали:

GIV>>А как связан сабж и БД? Ну хочешь свою в k8s подними хочешь другую используй.


S>Дык... Поднять то много инстансов и добавить типа лоадбалансер — нет проблем. Проблема начинается когда хочешь чтобы везде данные были одинаковые. А это значит нужна единая согласованния база, что не очень то совмещается с распределенностью. Вот и спрашиваю — какие есть стандарные решения этой проблемы?


Ты чего балансировать собрался? Какое у тебя узкое место? Вообще кубернейтис не заставляет ничего распределять. Хочешь поднять скажем PostreSQL сделай один под для него и пусть себе крутиться. Хочешь распределенную БД — ставь такую чтоб умела распределенность, подними подов сколько надо.
WBR, Igor Evgrafov
Re[3]: Про Kubernetes и .Net Core
От: Sharov Россия  
Дата: 07.11.18 10:18
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Дык... Поднять то много инстансов и добавить типа лоадбалансер — нет проблем. Проблема начинается когда хочешь чтобы везде данные были одинаковые. А это значит нужна единая согласованния база, что не очень то совмещается с распределенностью. Вот и спрашиваю — какие есть стандарные решения этой проблемы?


У каждого миркросервиса должна быть своя бд, соотв. единой согласованной бд быть не должно.
Кодом людям нужно помогать!
Re[3]: Про Kubernetes и .Net Core
От: RushDevion Россия  
Дата: 07.11.18 11:12
Оценка:
S>Дык... Поднять то много инстансов и добавить типа лоадбалансер — нет проблем. Проблема начинается когда хочешь чтобы везде данные были одинаковые. А это значит нужна единая согласованния база, что не очень то совмещается с распределенностью. Вот и спрашиваю — какие есть стандарные решения этой проблемы?

Мои 5 копеек.
Здесь нужно рассуждать с точки зрения нагрузки и объемов данных.
Задаем вопросы типа:
Сколько запросов в секунду прилетает на наш сервис (по чтению, по записи)?
Сколько запросов в БД делается на один запрос к сервису (по чтению, по записи)?
Какой объем данных пишется (читается) на один запрос? Как быстро будет расти БД с учетом вышесказанного?
Есть ли ограничения по данным (длительность хранения, например), способу доступа (скажем, большинство запросов только к 5% самых актуальных данных) и т.п.

Получив какие-то цифры уже можно прикидывать, вытянем ли мы ожидаемую нагрузку и объемы силами одной БД.
Если да — то проблемы нет, ставим БД на отдельную машину, все сервисы ходят в нее.
Т.е. когда говорят, что у каждого микросервиса должна быть своя БД, это не обязательно означает, что она должна быть у каждого инстанса сервиса. Вполне может хватить одной на всех.

Если нет — данные нужно распределить между несколькими физическими машинами (т.е. размазать по кластеру).
Самый простой путь — отдать это на откуп самой БД. Скажем, MongoDB, Cassandra умеют кластеризоваться из коробки.
Некоторые SQL-базы, насколько я знаю, тоже умеют работать в кластере, но у них это хуже получается (что немудрено, ибо вытянуть полноценный ACID против CAP-та еще задачка)
Более сложный (но и более гибкий) путь — распределять данные руками. Это называется шардирование. (гуглить шардирование, виртуальные шарды, шард-диспетчер, консистентное хэширование).
Re[4]: Про Kubernetes и .Net Core
От: GarryIV  
Дата: 07.11.18 19:25
Оценка:
Здравствуйте, Sharov, Вы писали:

S>>Дык... Поднять то много инстансов и добавить типа лоадбалансер — нет проблем. Проблема начинается когда хочешь чтобы везде данные были одинаковые. А это значит нужна единая согласованния база, что не очень то совмещается с распределенностью. Вот и спрашиваю — какие есть стандарные решения этой проблемы?


S>У каждого миркросервиса должна быть своя бд, соотв. единой согласованной бд быть не должно.


Ты точно понял смысл этой фразы? Карго культ какой-то.
WBR, Igor Evgrafov
Re[4]: Про Kubernetes и .Net Core
От: Sharov Россия  
Дата: 07.11.18 19:44
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Т.е. когда говорят, что у каждого микросервиса должна быть своя БД, это не обязательно означает, что она должна быть у каждого инстанса сервиса. Вполне может хватить одной на всех.


Если я не ошибась, то микросервисы же "типизированы" по типу выполняемой задачи, т.е. у нас может быть n микросервисов типа А, m типа B. Все мс типа А имеют одну свою базу, типа B одну свою.
Ну это как я себе представляю, имея только незначительные теор. познания.
Кодом людям нужно помогать!
Re[5]: Про Kubernetes и .Net Core
От: Sharov Россия  
Дата: 07.11.18 19:45
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Ты точно понял смысл этой фразы? Карго культ какой-то.


Только что ниже\выше ответил.
Кодом людям нужно помогать!
Re[5]: Про Kubernetes и .Net Core
От: GarryIV  
Дата: 07.11.18 21:08
Оценка:
Здравствуйте, Sharov, Вы писали:

RD>>Т.е. когда говорят, что у каждого микросервиса должна быть своя БД, это не обязательно означает, что она должна быть у каждого инстанса сервиса. Вполне может хватить одной на всех.


S>Если я не ошибась, то микросервисы же "типизированы" по типу выполняемой задачи, т.е. у нас может быть n микросервисов типа А, m типа B. Все мс типа А имеют одну свою базу, типа B одну свою.


Микросервисы A и B должны быть логически независимы и в этом смысле да у каждого сервиса своя БД. Нет ничего такого если эти логические БД тупо схемы (да хотя бы и таблицы) в одном физическом инстансе БД. Понадобиться можно будет и разделить.

Но тут речь о другом, тут скорее только сервис А и автор думает как ему БД деплоить. Сдается он хочет в одном поде и сервис и БД деплоить вот у него и распределенность получается непонятная.
WBR, Igor Evgrafov
Re[5]: Про Kubernetes и .Net Core
От: RushDevion Россия  
Дата: 07.11.18 21:29
Оценка: 6 (1)
Здравствуйте, Sharov, Вы писали:

S>Если я не ошибась, то микросервисы же "типизированы" по типу выполняемой задачи, т.е. у нас может быть n микросервисов типа А, m типа B. Все мс типа А имеют одну свою базу, типа B одну свою.


Так и есть. Только, правильнее,пожалуй, сказать "одну схему базы". Потому что самих физических баз может быть больше одной даже в рамках одного микросервиса.
Простой пример. Допустим, мы проектируем сервис хранения изображений.

Прикинули нагрузку.
Скажем, 1000 загрузок в день, средний файл 1мб, 500rps на чтение в пике.

Понимаем, что нагрузка небольшая. Ее можно держать вообще одним инстансом сервиса. ОК. Ставим 2 для надёжности.

Теперь БД. Ежедневный прирост нашей базы — 1гб, ~30гб/месяц, 360гб/год, 3.6тб за 10лет. В принципе, 360гб влезут на одну машину. Значит 10 инстансов БД нам в обозримом будущем хватит.Теперь как разложить между ними данные? Ну например так: shard_id = md5(file_name) % 10. Зная shard_id идём к нужному инстансу БД.

Итого получается: 2 инстанса сервиса + 10 инстансов БД (с одинаковой схемой)
Re: Про Kubernetes и .Net Core
От: VladCore  
Дата: 21.11.18 03:23
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Немного посмотрел сие чудо. В облаке можно даже не за дорого сие поднять.


S>Но не ясен ключевой вопрос — как быть с базой данных? Тут ребята описали свой опыт https://habr.com/company/eastbanctech/blog/420665/ , но у них база данных была классическая, т.е. никакой распределенности не было.


S>Как вообще принято решать этот вопрос? Есть ли готовые решения?


Перевожу вопрос

Базу принято держать на raid из быстрых hdd
некоторые таблицы и индексы дожны быть на raid из быстрых ssd

в к8с как с этим?

для простоты рассмотрим 2 случая
1. бд это mssql server
2. бд это nosql кластер типа монго

update
а пикантность интриги ещё ив том что девелоперы нихрена не знают про к8с. у них и на билд сервере docker-compose с эфемерными дисками и им плевать на ваши райды
Отредактировано 21.11.2018 3:28 VladCore . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.