Русский
Русский
English
Статистика
Реклама

Планировщик

Из песочницы Бот Умный планировщик понимает с полуслова

29.07.2020 14:20:10 | Автор: admin
Если вы когда-нибудь желали иметь личного слугу, который бы напоминал вам обо всем, о чем вы ему скажите, но не имели возможности нанять такого, то разработанный мною бот станет ему достойной заменой.



Хотите проверить функционал? Напишите в лс боту по этой ссылке и он ответит вам.

А тем, кому интересно как он работает и как 16-летний школьник смог написать его, я с удовольствием расскажу всё в подробностях в этой статье.

Предыстория


Началось все с другого моего бота для вк на node js, который расшифровывал голосовые сообщения (и так как таких ботов пруд пруди, я решил не писать статью о его разработке, хотя и он имеет несколько отличительных особенностей). После того, как я запустил его, мой отец предложил мне разработать другого бота для нашего семейного чата в телеграмме. Суть этого бота была простой извлекать дату и время из текстового сообщения человека, и, используя телеграмовские отложенные сообщения, создавать напоминания прямо в семейном чате.

Но вскоре меня ждало разочарование. Оказалось, что боты не могут делать отложенных сообщений, поэтому я решил написать свою систему хранения и выполнения напоминаний.

Разработка


Общие сведения


Этот бот написан на node js и живет на heroku.

Он способен хранить любые текстовые напоминания с точностью до минуты.

Также он может работать в групповых беседах.

На данный момент бот распознает дату и время только на русском языке.

SmartScheduler open source проект, доступный на моем гитхабе.

Извлечение даты и времени из сообщения


Начать я решил с самой сложной задачи: разбиения текстового напоминания на дату и на само напоминание. Для этого пришлось учесть все возможные стандарты написания даты человеком, от в 12:00 до в следующее воскресенье в без двадцати пяти восемь вечера.

Была создана большая база данных (constValues.js), хранящая в себе константные выражения и их свойства, которые человек использует в своей речи. Затем были написаны функции для распознавания каждого варианта написания времени.

К примеру для распознавания даты в виде через X %тип_времени% используется функция FindAdditiveLiterals, а для поиска дня недели FindDayOfWeek.

Для каждого варианта обозначения времени выставлялся свой приоритет.

В итоге алгоритм работы парсера выглядит следующим образом:

  1. Исходная строка делится на слова. Слов, в которых производится поиск времени, не может быть больше 40.
  2. Массив слов пропускается через функцию конвертации слов в числа.
  3. Находятся все указания времени в сообщении, а также помечаются использованные в указаниях слова (например в указании будильник 8 часов отмечаются слова 8 и часов).
  4. Если какая-то характеристика времени не была найдена (например месяц) в текстовом сообщении, то берется текущее значение этой характеристики.
  5. Для окончательного вердикта выбираются указания времени с наибольшим приоритетом и смежные указания, имеющие одинаковое исходное слово (например в слове 10:30 одновременно указан и час, и минута).
  6. После выбора окончательных характеристик времени формируется штамп времени из выбранных минуты, часа, дня, месяца и года.
  7. Из массива слов удаляются все помеченные слова, а из оставшихся формируется текст напоминания.
  8. Если сформированный штамп времени больше текущего времени, то мы считаем что такое напоминание пригодно и функция возвращает объект типа
    { string: answer, string: text, date: date }

    В противном случае функция возвращает объект
    { string: answer, string: text }
    (answer ответ для пользователя, text текст напоминания, date дата напоминания).

База данных напоминаний


Следующими вопросами были где хранить все напоминания и как следить за их выполнением.

Изначально я хотел воспользоваться библиотекой node-schedule, но отказался от этой идеи, так как я не хотел засорять оперативную память всеми напоминаниями.

Вместо этого я решил изучить принцип работы SQL баз данных и создать свою.

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

Чтобы взаимодействовать с бд я написал небольшой скрипт (db.js), в котором реализовал все необходимые функции, такие как инициализация бд, получение списка напоминаний и т.д.

В моей базе данных присутствует две таблицы: первая для хранения напоминаний, вторая для хранения часовых зон пользователей (о ней чуть позже).

После этого я реализовал сохранение распарсенного напоминания из текстового сообщения в базу данных. Проверкой времени напоминаний занимается таймер, срабатывающий раз в минуту. Если же пришло время для какого-то напоминания, то оно удаляется из базы данных, а пользователю, сделавшему его, отправляется сообщение с текстом из напоминания.

Также я добавил отображение всех напоминаний через команду /list.



(рядом с каждым напоминанием есть кликабельная команда /N, которая удаляет его при клике на неё)

Настройка часового пояса


До того, как я решил написать эту статью и выложить её на Хабр, в переменных среды был захардкожен часовой пояс Москвы. Для пользования внутри нашей семьи этого было достаточно, но для того, чтобы воспользоваться всеми прелестями и удобствами жизни с ботом SmartScheduler мог каждый, я решил добавить индивидуальную настройку часового пояса.

Для выполнения настройки требуется написать команду /tz, о чем предупредит бот пользователя, если он еще не указал свой часовой пояс:



(из-за того что часовой пояс не указан, в ответе используется не локальное время, а гринвичское)

При вводе команды /tz запускается процесс определения часового пояса и появляется клавиатура с тремя кнопками:



  1. Использование локации пользователя.
  2. Ручной ввод.
  3. Отмена.

Первая кнопка запрашивает у пользователя его местоположение, на основе которого вычисляется часовой пояс.

Пример использования


Вторая кнопка позволяет вручную ввести свою часовую зону в формате HH:MM,
где плюс или минус, HH часы, MM минуты.

Пример использования


Третья кнопка отменяет процесс определения.

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

Финальные доработки


Закончив с основным функционалом, я добавил главную клавиатуры с основными функциями, откорректировал ответы для команд /start и /help, ну и по мелочам.

Также я решил заменить часовой пояс по умолчанию для всех пользователей на Московский.

Результат


Главным преимуществом бота SmartScheduler является конечно же парсинг даты, который позволяет даже в самых непредсказуемых ситуациях быстро и удобно записать нужную информацию или задачу в форме напоминания.

Больше не нужно листать календарь в поиске нужного дня и крутить часы для выставления нужного времени, достаточно по-человечески сказать боту что и когда, а дальше он сам все сделает.

Заключение


До разработки ботов на node js я был совершенно не знаком с javascriptом, посему все знания, которые я использовал в написании кода, брались из интернета, где зачастую можно найти не совсем то, что тебе на самом деле нужно. Из-за этого, скорее всего, где-то в моем коде встречаются очень глупые ошибки, для определения которых я еще недостаточно много знаю.

Изначально моей целью не было создание максимально продвинутого и идеального с точки зрения структуры проекта, для меня было важнее всего получить новые знания, изучить новый язык программирования для улучшения понимания информатики в целом, а также создать MVP продукт.

Но если данная разработка будет пользоваться спросом, то я с удовольствием продолжу улучшать её, а если у вас есть какие-то идеи или вы обнаружили баг, то добро пожаловать на гитхаб проекта. У меня уже есть идеи где и как что изменить (например переписать ужасный спагетти-код в модуле парсинга с использованием нормального Visitor-паттерна), а также в планах добавление поддержки английского языка.

Надеюсь, что этот бот поможет вам также, как помогает мне и моей семье в повседневных делах.

Спасибо за внимание!
Подробнее..

Алгоритм планирования задач на TypeScript. Теория графов наконец-то пригодилась

18.08.2020 00:10:56 | Автор: admin

В этой статьей я хочу рассказать об алгоритме, который помогает ответить на извечный вопрос всех проектов:


Когда проект будет закончен?

Более формально проблема звучит так: "Проект состоит из задач, которые могут зависеть друг друга, а также могут иметь один и тех же исполнителей. Когда проект может быть закончен?"


КДПВ Еженедельное планирование


Небольшая предыстория


Чем я занимаюсь и как до этого дошел

С прошлого года я работаю в роли техлида. В моменте я отвечал за 3 различных проекта в команде с 11 разработчиками, 2 продактами, 2 дизайнерами и рядом смежников из других отделов. Проекты крупные, один из них, например, к запуску содержал около 300 тикетов.


Для работы с задачами мы используем Яндекс.Трекер. Увы, Трекер не содержит инструментов, которые могут дать ответ на извечный вопрос: "Когда?". Поэтому время от времени мы руками синхронизируем задачи с Omniplan, что увидеть общую картину по срокам. Оказывается, этот инструмент решает практически все наши проблемы планирования. Самая полезная для нас фича это авто-планирование задач таким образом, чтобы ни один сотрудник не был загружен единовременно больше чем на 100%.


Однако, Omniplan имеет свои минусы:


  • Медленная и ненадежная синхронизация между членами команды, основанная на модификации локальной копии.
  • Только для MacOS
  • Довольно непросто синхронизировать с внешним трекером
  • Дороговат: $200 или $400 за Pro редакцию.

Я решил попробовать сделать свой собственный Omniplan c блэкджеком и пр.:


  • Работает в вебе
  • Простая синхронизация с нашим трекером
  • Real-time совместная работа над проектом

Самая веселая часть это разработка алгоритма авто-планирования задач. Я изучил довольно много других сервисов и не понимал, почему только Omniplan имеет эту жизненно важную фичу. Теперь понимаю.


Предварительные исследования


Итак, не найдя подходящих сервисов, я решил написать свой сервис с функцией авто-планирования задач. Мне нужно было уметь импортировать задачи из нашего трекера и выставлять их таким образом, чтобы у разработчиков не было загрузки больше 100%.


Для начала я поисследовал вопрос, ведь всё уже придумано до нас.


Нашел довольно много информации про диаграммы Ганта, PERT, но не нашел ни одной работы про реализацию нужного мне алгоритма.


Затем поискал open-source библиотеки и нашел только одну: Bryntum Chronograph. Похоже, это было то, что нужно! У них даже есть бенчмарки. Но, честно говоря, я вообще не понял код этого решения, и отсутствие документации также не сильно помогло. В общем, надо писать свое.


Как всегда, сначала я попробовал изобразить проблему.


Исходные задачи


Пока я рисовал картинку, меня осенило: а ведь задачи можно представить как направленный граф, где ребра это не только явные зависимости между задачами, но и неявные. Неявные зависимости появляются из-за того, что на разные задачи может быть назначен один и тот же исполнитель.


Алгоритм должен привести к такой расстановке задач во времени:


Желаемый результат планирования


Анатомия задачи


Давайте рассмотрим, из чего состоит задача:


Анатомия задачи


Есть ряд на таких уж очевидных свойств у задачи:


  • Длительность. Задача выполняется только в рабочие дни. Оценка задачи число рабочих дней. В этом примере задача стартует 2 марта, имеет оценку в 6 рабочих дней и её выполнение заканчивается 9 марта. Важно, что не 7 Марта, т.к. 7 и 8 марта выходные.
  • Приоритет задачи. Будем считать, что чем выше позиция задачи в списке, тем раньше она должна быть сделана, другими словами она более приоритетна.
  • Прогресс выполнения. Прогресс в процентах отражает выполненную часть задачи. Фактически это число дней, которые уже потратили на задачу. Например, если оценили задачу в 4 дня, а ее прогресс 75%, значит задачу осталось делать 1 день.

В нотации Typescript задача выглядит следующим образом:


export type Task = {  id: ID;   // ID  alias for string  title: string;  start: Date;  end: Date;  duration: number;  position: number;  // Приоритет  progress: number;  resourceId: ID;  dependencies?: ID[];};

Алгоритм


Алгоритм должен менять начальную и конечную даты задач следующим образом:


  1. Задачи должны начинаться от текущего дня, если это возможно.
  2. Задачу невозможно начать сегодня, если есть другие незавершенные задачи, от которых она зависят, явно или неявно. Таким образом задача должна начаться сразу после того, как все предварительные задачи закончатся.

На практике алгоритм состоит из следующих шагов:


1) Сначала построим граф задач. Создадим ребра с учетом явных зависимостей или неявных по общему исполнителю.


/*** Graph respects explicit dependencies * and implicit by resources (via positions) */export const makeGraphFromTasks = (tasks: Task[]): Graph => {  const graph: Graph = new Map();  const resources = new Map<ID, Task[]>();  // add edges for deps by resourceId and explicit dependencies  for (const t of tasks) {    const tasksForResource = resources.get(t.resourceId) ?? [];    tasksForResource.push(t);    resources.set(t.resourceId, tasksForResource);    graph.set(t.id, new Set(t.dependencies ?? []));  }  for (const tasksForResource of resources.values()) {    // sort by position    tasksForResource.sort((a, b) => a.position - b.position);    // add to graph such edges so first node has second as dependency    let prevTask: Task | undefined;    for (const task of tasksForResource) {      if (prevTask) {        graph.get(prevTask.id)?.add(task.id);      }      prevTask = task;    }  }  return graph;};

2) Сделаем обратный (транспонированный) граф. Этот граф нам поможет найти стоки (вершины только с входящими ребрами), истоки (вершины только с исходящими ребрами) и изолированные вершины (без ребер).


Для прохода по всем вершинам воспользуемся поиском в глубину. Я привел универсальную функцию-генератор для прохождения по графу.


export const makeReverseGraph = (graph: Graph): Graph => {  const reverseGraph: Graph = new Map();  for (const [id, parentId] of dfs(graph, { withParentId: true })) {    const prerequesitions = reverseGraph.get(id) ?? new Set();    if (parentId) {      prerequesitions.add(parentId);    }    reverseGraph.set(id, prerequesitions);  }  return reverseGraph;};/** * Iterate over every node. * If withParentId = true, than it is possible to visit same not more then once * @yields {[string, string?]} [nodeId, parentNodeId?] */export function* dfs(  graph: Graph,  options: { withParentId: boolean } = { withParentId: false }): Generator<readonly [string, string?], void, void> {  const visited = new Set<ID>();  // DFS interative  // iterate over all nodes in case of disconnected graph  for (const node of graph.keys()) {    if (visited.has(node)) {      continue;    }    const stack: ID[] = [node];    while (stack.length > 0) {      const currentNode = stack.pop();      assertIsDefined(currentNode);      yield [currentNode];      visited.add(currentNode);      const dependencies = graph.get(currentNode);      if (!dependencies) {        continue;      }      for (const dependencyId of dependencies) {        if (options.withParentId) {          // possible to yield same nodeId multiple times (needed for making reverse graph)          yield [dependencyId, currentNode];        }        if (visited.has(dependencyId)) {          continue;        }        stack.push(dependencyId);      }    }  }}export const makeReverseGraph = (graph: Graph): Graph => {  const reverseGraph: Graph = new Map();  for (const [id, parentId] of dfs(graph, { withParentId: true })) {    const prerequisites = reverseGraph.get(id) ?? new Set();    if (parentId) {      prerequisites.add(parentId);    }    reverseGraph.set(id, prerequisites);  }  return reverseGraph;};/** * Iterate over every node. * If withParentId = true, than it is possible to visit same not more then once * @yields {[string, string?]} [nodeId, parentNodeId?] */export function* dfs(  graph: Graph,  options: { withParentId: boolean } = { withParentId: false }): Generator<readonly [string, string?], void, void> {  const visited = new Set<ID>();  // DFS interative  // iterate over all nodes in case of disconnected graph  for (const node of graph.keys()) {    if (visited.has(node)) {      continue;    }    const stack: ID[] = [node];    while (stack.length > 0) {      const currentNode = stack.pop();      assertIsDefined(currentNode);      yield [currentNode];      visited.add(currentNode);      const dependencies = graph.get(currentNode);      if (!dependencies) {        continue;      }      for (const dependencyId of dependencies) {        if (options.withParentId) {          // possible to yield same nodeId multiple times (needed for making reverse graph)          yield [dependencyId, currentNode];        }        if (visited.has(dependencyId)) {          continue;        }        stack.push(dependencyId);      }    }  }}

3) Посетим каждую вершину графа (задачу) и обновим даты начала и конца. Посещение вершин должно начинаться с задач с более высоким приоритетом.


Если задача исток (не зависит от других задач и у исполнителя нет других задач, которые нужно сделать раньше) или если задача это изолированная вершина (нет зависимостей и сама задача не является зависимостью), то начинаем задачу сегодня.


В противном случае у задачи есть предварительные задачи и она должна начаться в момент когда закончатся все предварительные задачи.


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


Ниже по коду встретите отсылку к алгоритму Беллмана-Форда. Тут используется похожая техника: запускаем алгоритм обновления дат начала и конца задач до тех пор, пока даты не перестанут меняться.


export const scheduleTasks = (tasks: Task[], today?: Date) => {  const graph = makeGraphFromTasks(tasks);  const tasksById = tasks.reduce((map, task) => {    map[task.id] = task;    return map;  }, {} as { [id: string]: Task });  // @TODO: 0. Detect cycles, if present throw error  // 1. Make reverse graph, to detect sinks and sources  const reverseGraph = makeReverseGraph(graph);  // 2. If node is source, t.start = max(today, t.start)  // Repeat until dates remains unchanged, max graph.size times.  // Similar to optimization in Bellman-Ford algorithm  // @see https://en.wikipedia.org/wiki/BellmanFord_algorithm#Improvements  for (let i = 0; i <= graph.size; i++) {    let datesChanged = false;    for (const [id] of dfs(graph)) {      const t = tasksById[id];      const isSource = reverseGraph.get(id)?.size === 0;      const isSink = graph.get(id)?.size === 0;      const isDisconnected = isSource && isSink;      if (isSource || isDisconnected) {        datesChanged = updateStartDate(t, today ?? new Date());      } else {        const prerequesionsEndDates = Array.from(          reverseGraph.get(id) ?? []        ).map((id) => tasksById[id].end);        datesChanged = updateStartDate(          t,          addBusinessDays(max(prerequesionsEndDates), 1)        );      }    }    if (datesChanged === false) {      break;    }  }  return tasks;};/** * Update task dates, according to startDate change * @returns false if date didn't change, true if it changed */export const updateStartDate = (task: Task, startDate: Date) => {  const correctedStartDate = shiftToFirstNextBusinessDay(startDate);  const daysSpent = Math.floor(task.duration * task.progress);  const newStartDate = subBusinessDays(correctedStartDate, daysSpent);  if (isEqual(task.start, newStartDate)) {    return false;  }  task.start = subBusinessDays(correctedStartDate, daysSpent);  // -1 because every task is minimum 1 day long,  // say it starts and ends on same date, so it has 1 day duration  task.end = addBusinessDays(task.start, task.duration - 1);  return true;};

Что можно улучшить


  1. Обнаружение циклических зависимостей. Если задача А зависит от задачи Б и задача Б зависит от задач А, то в графе есть циклическая зависимость. Пользователи должны сами вручную разруливать эти проблемы, а нам надо только явно сказать, где она найдена. Это известный алгоритм, который надо запустить после получения графа задач, однажды я его туда добавлю.)
  2. Потенциально, одна из наиболее важных функций это добавление желаемой даты старта задачи. Если однажды это все вырастет в веб-сервис, думаю, это нужно будет сделать в первую очередь. Сейчас это можно примерно поправить, выставив правильный приоритет у задач.
  3. Для полноценного решения также надо добавить поддержку отпусков и праздников. Думаю, это несложно будет добавить в функцию updateStartDate.
  4. Использование одного дня в качестве наименьшего кванта времени хорошо подходит для моих задач. Но кому-то может быть важно использовать почасовое планирование.

Заключение


Код с тестами вы можете найти на моем GitHub. Также его можно скачать как NPM-пакет.


Интересно, есть ли какие-то ошибки в предложенном алгоритме. С удовольствием с вами это обсужу тут или в issues секции на GitHub.

Подробнее..

Перевод Идеальная версия недельной сетки календаря для печати

02.03.2021 12:21:43 | Автор: admin
Очень многие люди до сих пор пользуются печатной версии ежедневников, и дело тут не в том, что не хватает онлайн версии, а в том, что это когнитивная потребность.

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



Вы можете почитать исследования профессора Audrey van der Meer из Норвежского Университета Науки и Технологии (NTNU)

Огромный выбор шаблонов календарей и планировщиков



В мире существует тысячи разных бесплатных шаблонов и сеток на любой вкус. Есть строгие и классические, есть разноцветные с картинками, есть с фиксированным временем, а есть без.

Существуют даже целые фан клубы людей можно сказать помешанных на планировании (Planner Addicts), где каждый пытается сделать лучший для себя планировщик.

Минималистичная недельная сетка без привязки к точному времени



Изучив большое количество разных шаблонов, мы постарались создать максимально простой и универсальный шаблон недельного вида. Вернее будет сказать самый классический.

Мы использовали четкую, контрастную черно-белую недельную сетку где нету привязки к дневному времени. Шаблон разделен на 7 дней с секции Someday, которая может служить для дел когда-нибудь или просто для заметок.

Шаблон для печати абсолютно бесплатный. Вы можете скачать PDF файл либо заполнить календарь online и потом распечатать.
Подробнее..

Обзор 10 бесплатных систем управления. Что даром, а за что придется платить

20.01.2021 10:13:24 | Автор: admin

У большинства систем управления проектами есть бесплатные версии, но они бывают двух принципиально разных видов.

1) Честная бесплатная версия. Система искренне хочет, чтобы вы свободно пользовались ею без ограничений по времени. И делились с друзьями.

2) Пробная бесплатная версия. Продукт нацелен на то, чтобы сконвертировать вас в платящего клиента. И потому намеренно урезает вам жизненно важные функции. Часто это становится неприятным сюрпризом, когда начинаешь пользоваться системой.

Мы в YouGile приняли опасное для себя решение и в октябре запустили честную бесплатную версию. Сняли все ограничения, оставили только одно до 10 пользователей (оплата начиная с 11-го). Результат пока такой: сильно потеряли в количестве платящих клиентов, зато график активности в системе вырос в 2 раза за 3,5 месяца.

Конечно, предварительно мы изучили рынок и посмотрели, а какие free-версии предлагают наши конкуренты: Asana, Bitrix24, Trello и другие. Мы постоянно тестируем разные системы управления и делаем выводы: кто предлагает честную бесплатную версию, а кто нет.

В этой статье обзор 10 бесплатных систем управления проектами. Делимся наблюдениями: где какие кейсы можно решить бесплатно, а в какой момент придется доставать кошелек.

Начнем с продуктов, у которых бесплатные версии наиболее полноценные, а также расскажем про свою.

10 бесплатных систем управления

1. YouGile

До 10 человек полностью бесплатная, то есть честная облачная версия. Функционал весь на месте, тот же, что и за деньги, в рукаве ничего не прячем. По сути у нас нет бесплатного и платного тарифа как таковых маленьким командам доступно абсолютно все, всегда и бесплатно. Оплата вводится только за 11-го человека.

Подробнее о тарифах YouGile

Что получится сделать в бесплатной версии:

Организовать сотрудников в системе: указать должности, руководителей, отделы.

Наладить работу с подрядчиками и фрилансерами: настроить права доступа в системе для своих и для чужих.

Создать проекты, доски, задачи, подзадачи.

Сортировать свои и чужие задачи в личном планировщике.

Наладить коммуникации между разными отделами. Например, передавать заказы из отдела продаж на производство.

Общаться как в мессенджере. Каждая задача это чат, также есть личные чаты. Со смайликами, цитированием, упоминаниями и всем, чем нас балуют соцсети и мессенджеры.

Смотреть, как выполняется работа доступны все виды отчетов и сводок.

Сделать для себя уютное и удобное рабочее пространство: личные доски, свой фон, приватные и избранные задачи, чек-листы, таймеры, дедлайны.

За что точно придется платить:

За пользование системой в больших командах. До 10 человек все бесплатно, за 11-го надо будет платить по 299 рублей в месяц.

За коробочную версию.

На бесплатном тарифе в YouGile можно легко работать всем отделом или маленькой командой. Создавайте сколько угодно проектов и досок, устанавливайте права для сотрудников, назначайте задачи, следите за ходом их выполнения. Помечайте важные задачи стикерами или звездочкой Избранное. Общайтесь в чатах, обсуждайте заказ пиццы (приватно) или новый проект (всей командой). Обменивайтесь файлами (без ограничений по весу). Побалуйтесь смайликами и красивыми фонами для досок.


2. Trello

Крутая бесплатная версия честная. Никаких ограничений по времени и количеству пользователей. Ограничения только по числу досок до 10 штук. И кое-где функционал урезан: не настроить права доступа, не отсортировать карточки, не экспортировать данные, не использовать больше 1 расширения для 1 доски. Раньше было лучше до продажи Trello компании Atlassian. Однако все равно считаем эту версию вполне полноценной для работы в небольших командах.

Подробнее о тарифах Trello

Что получится сделать в бесплатной версии:

Да собственно все, чего вы ждете от системы управления проектами. Доски, задачи, дедлайны. Сколько угодно карточек, сколько угодно списков, сколько угодно пользователей.

Можно загружать файлы, главное, чтобы не больше 10 МБ.

Хочется больше общения по задачам есть интеграция со Slack.

Легко использовать для личных целей: план действий на день, на неделю, на месяц.

Легко использовать, чтобы организовать работу в отделе или небольшой команде.

За что точно придется платить:

Больше досок. Если хотите сделать более 10 открытых досок переходите на платный тариф.

Расширения. Для каждой доски можно выбрать только 1 расширение бесплатно. Например, ставите календарь тогда карта уже недоступна. Ставите голосование и нельзя будет копировать карточки. В платной версии ограничений нет.

Тяжелые файлы. Платите, чтобы загружать в задачи 250 МБ.

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

Приоритетная техподдержка. Ответ прилетает на почту в течение 1 дня.

Группировка и объединение досок в коллекции, чтобы не путаться в них.

Сортировка карточек. Навести порядок, упорядочить карточки по последним действиям или числу участников только в платной версии.

Шаблоны досок.

Экспорт данных.

Интеграции без ограничений: более 100 интеграций с Jira, Slack, Google Диск, InVision

Кастомные фоны для досок и пользовательские стикеры. Не самое важное в этом списке, конечно, но упомянем тоже.

Итак, в бесплатной версии Trello можно продуктивно работать, особенно в небольших командах или отделах из 10-15 человек. Надо только все продумать: не создавать лишних досок, выбирать самые важные. Не грузить тяжелые файлы, хранить их где-то отдельно и в карточках просто давать на них ссылки. Интегрировать Slack. Этого вполне хватит. Но, конечно, без расширений, экспорта данных и гибкой настройки прав доступа временами будет нелегко.


3. Bitrix24

В марте этого года Bitrix24 расширили свой бесплатный тариф сняли ограничение на количество пользователей. Раньше можно было пригласить только 12 человек, теперь сколько пожелаете. Пожалуй, отнесем эту бесплатную версию к честным. Базового функционала хватает, чтобы работать по проектам.

Подробнее о тарифах Bitrix24

Что получится сделать в бесплатной версии:

Объединить сотрудников даже самой большой команды в общем рабочем пространстве.

Наладить общение в живой ленте или чатах, совершать звонки аудио и видео, обмениваться файлами.

Создавать группы, проекты, доски, ставить задачи и подзадачи, назначить исполнителей.

Смотреть отчеты.

Хранить 5 ГБ файлов в облаке.

Настроить мобильную CRM.

Интегрировать Bitrix24 с Google Drive, Dropbox, Яндекс Диск, One Drive.

Редактировать документы в режиме онлайн в GoogleDocs и MS Office Online.

За что точно придется платить:

Настройка бизнес-процессов. Если у вас много регулярных процессов, например, согласование договоров, вам будет удобнее на платном тарифе.

Создание воронки продаж. В бесплатной версии можно построить только одну общую воронку.

Сквозная аналитика.

Полноценная IP-телефония. Если планируете контролировать количество и качество звонков переходите на платный тариф. Бесплатно можно записать только 100 звонков, и места дается только 5 ГБ.

Интеграция CRM с 1C. Актуально для многих команд.

Интеграция с почтой, создание email-рассылок.

Настройка прав доступа (на всех уровнях: доступ к задачам, доступ к файлам и папкам, доступ к CRM, к телефонии).

Ряд второстепенных, но приятных функций: регулярные задачи, шаблоны проектов и задач, наблюдатели и соисполнители, учет рабочего времени.

Бесплатная версия Bitrix24 вполне подходит для работы, если у вашей команды нет особых запросов. Если вам нужна только работа с задачами спокойно оставайтесь на free-версии. Если же вы хотите построить в системе управления полноценные бизнес-процессы, создать воронки продаж, настроить сквозную аналитику, интегрироваться с 1С и почтой выбирайте платный тариф. Платных тарифов целых 5, они заточены под разные цели. Однако, на наш взгляд, Bitrix24 настолько напичкан всевозможными функциями, что встает вопрос: всегда ли они действительно нужны и легко ли их применять на практике?


4. Pyrus

Честная бесплатная версия для всех, кроме целевой аудитории. Система заточена под работу с документами, и именно на это ставит ограничение на бесплатном тарифе: до 100 задач, созданных по готовым формам. Если у вас есть такой бизнес-процесс, то вам этих 100 задач рано или поздно все равно не хватит. Рядовым же пользователям, которым нужны доски и стандартные задачи, на бесплатной версии будет комфортно.

Подробнее о тарифах Pyrus

Что получится сделать в бесплатной версии:

Пригласить любое количество сотрудников, создать любое количество простых задач, назначить исполнителей.

Связывать между собой задачи. Сортировать их по сроку и активности.

Обмениваться файлами по задачам, для их хранения дается 1 ГБ свободного места.

Вообще работать с задачами легко и приятно: есть доски, есть личный планировщик, где отображаются задачи от меня и задачи для меня. Отдельно выводятся активные, отдельно завершенные.

Есть много фишек в карточках задач: поставить на контроль, отложить на потом, настроить напоминание, повторить задачу.

Выстроить четкую структуру компании и настроить права доступа для разных отделов.

Можно считать время, затраченное каждым сотрудником на все задачи за выбранный период времени. Смотреть подробные отчеты и аналитику.

Настроить интеграцию с Google Drive, Dropbox, Box, OneDrive, а также с любой CRM.

Автоматизировать документооборот. Согласовывать договоры и платежи, оформлять заявки, работать с запросами от клиентов.

За что точно придется платить:

Формы. В системе есть удобные готовые формы, по которым можно создавать задачи и выстраивать целые бизнес-процесс. Это и является основным преимуществом системы. Но таких задач можно создать до 100 штук. Нужно больше переходите на платный тариф.

Место на диске. В платной версии его дается в 100 раз больше 100 ГБ вместо 1 ГБ.

Резервное копирование.

Приоритетная техподдержка.

Бесплатная версия системы управления Pyrus подойдет многим командам. Кроме тех, кто имеет дело с большим количеством документов и хочет автоматизировать работу с ними. В общем-то на этот сегмент платящей аудитории и ориентируется система. Еще одно самое неприятное ограничение малый размер места на диске, всего 1 ГБ.


5. Jira

Система Jira, которая чаще всего используется как баг-трекер для отдела разработки самая оплачиваемая система в России. Корпорации закупают ее примерно на 5 миллиардов рублей ежегодно. Однако у нее есть и бесплатная версия до 10 пользователей. В целом мы относим ее к честным, но все же есть серьезные ограничения: дается всего 2 ГБ места, нет расширенных прав доступа.

Подробнее о тарифах Jira

Что получится сделать в бесплатной версии:

Планировать работу: создавать доски, задачи, спринты, распределять их между исполнителями.

Пользоваться бизнес-шаблонами проектов (для отделов маркетинга, персонала, юридического и финансового, также есть универсальные шаблоны).

Собрать все рабочие файлы в одном месте: статусы, комментарии и вложения (дается 2 ГБ).

Расставлять приоритеты и дедлайны, контролировать ход работы над проектами.

Обсуждать задачи всей командой.

Создавать детальные отчеты о проектах, смотреть сводки, оценивать загрузку сотрудников.

Получить поддержку (правда, это не техподдержка в привычном понимании, а поддержка сообщества Jira).

За что точно придется платить:

Больше пользователей. Платные тарифы поддерживают до 10000 пользователей.

Больше места в хранилище 250 ГБ и больше.

Расширенные права доступа. Ограничить действия пользователей на уровне проектов и задач можно только в платной версии.

Анонимный доступ. Просмотр и создание задач без входа в систему. Удобно при работе с фрилансерами и подрядчиками.

Журнал событий.

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


6. ClickUp

С первого взгляда кажется, что система предлагает честную бесплатную версию сколько угодно пользователей, сколько угодно задач, навсегда. Но если присмотреться внимательнее увидишь множество ограничений: отчеты, настройка прав доступа, интеграции. Ключевое ограничение: лимит в 100 действий по ряду функций. Так что мы все-таки относим ее к нечестным free-версиям.

Подробнее о тарифах ClickUp

Что получится сделать в бесплатной версии:

Приглашать любое число пользователей в проекты.

Создавать сколько угодно досок, задач и списков и организовывать работу по ним.

Использовать заметки, цифровые блокноты, напоминания и календари.

Анализировать производительность спринтов.

Отслеживать, сколько времени было затрачено на ту или иную задачу.

Смотреть по календарю, когда работа началась и закончилась.

Сортировать задачи по тегам, присваивать им любые статусы.

Получить помощь от техподдержки, круглосуточно.

За что точно придется платить:

Место в хранилище. На бесплатном тарифе дается всего 100 МБ.

Настройка прав доступа.

Гостевой доступ к проектам.

Использование готовых форм.

Отчеты.

Интеграции с Google Drive, Dropbox, OneDriveи другими хранилищами.

Приоритетная техподдержка.

За превышение лимита в 100 действий по ряду функций, ценных для любой системы управления проектами: настройка полей в карточках, использование dashboard, timeline, mind-map и диаграмм Гантта и так далее.

Главная проблема на бесплатном тарифе рано или поздно упираешься в потолок, когда исчерпаешь свой лимит на 100 действий по множеству функций, и система просто помашет тебе ручкой. И волей-неволей захочешь перейти на платный тариф.


7. Wrike

Возможности бесплатной версии сильно ограничены, и прежде всего количеством пользователей до 5 человек. Еще несколько ключевых ограничений: нельзя настроить права доступа, нельзя оценить загрузку и успеваемость сотрудников. По нашему субъективному мнению это нечестная бесплатная версия, то есть пробная.

Подробнее о тарифах Wrike

Что получится сделать в бесплатной версии:

Все стандартно: сделать проекты и доски, повесить задачи, назначить исполнителей.

Задачи можно ставить как на доски, так и в личный планировщик. Можно их сортировать по дате, приоритету, статусу, важности.

Удобно хранить файлы и документы. Документы даже можно редактировать в режиме онлайн.

Общаться с коллегами в Ленте событий.

Интегрировать систему с Google Диск, Dropbox, Box, MSFT Office 365 и OneDrive.

Использовать в своих целях 2 ГБ места.

За что точно придется платить:

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

Любимая многими диаграмма Гантта тоже доступна только на платном тарифе.

Контроль загрузки сотрудников: кто что выполнил, в какие сроки. Есть индекс эффективности и учет рабочего времени.

Права доступа. Сгруппировать сотрудников по командам (отдел маркетинга, бухгалтерия и т.д.), каждой команде назначить права это стоит денег. Как и приглашение гостевых пользователей клиентов, подрядчиков, фрилансеров.

Даже такая мелочь, как календарь только в платной версии.

Основные ограничения бесплатной версии: нет отчетов, нет настройки прав доступа, нет визуализации процессов и контроля загрузки сотрудников. Подходит только для маленьких отделов, где 5 человек. А для личного пользования лучше использовать более простые и интуитивно понятные бесплатные системы управления, такие как Trello. Однако эта free-версия позволяет познакомиться с Wrike и принять решение, подходит вам эта система или нет.


8. Asana

Есть бесплатная версия до 15 пользователей, но ее функционал сильно урезан: нет отчетов, нет возможности контролировать выполнение задач, нельзя следить за обновлениями. Шаг влево, шаг вправо и ты проваливаешься в Активируйте Asana Premium!. Относим ее к нечестным.

Подробнее о тарифах Asana

Что получится сделать в бесплатной версии:

Создать сколько угодно проектов с высоким уровнем декомпозиции на основе шаблонов.

Организовать работу над проектами: создать доски, поставить задачи, назначить исполнителей.

Классифицировать задачи при помощи тегов.

Начать общение в карточках задач и общей новостной ленте.

Настроить для себя личный планировщик: сортировать задачи по сроку их выполнения, делать приватные задачи.

За что точно придется платить:

Отчеты. Вы не сможете посмотреть отчет даже про проектам или исполнителям.

Контроль выполнения задач, просмотр незавершенных и просроченных. Придется верить людям на слово, что все задачи выполняются в срок.

Возможность следить за новыми задачами, обновлениями и статусами важных проектов.

Визуализация процессов и создание связей между задачами. Timeline недоступен.

Работа с задачами, которые вы создали и поручили коллегам. Их даже нельзя вывести отдельно.

Работа с формами.

Без отчетов, форм, визуализации процессов, чужих задач, списка обновлений и контроля сроков работать в системе управления практически невозможно. Asana хочет, чтобы вы стали платящим клиентом, и потому забирает у вас половину функций. Бесплатная версия нужна только для знакомства подглядеть, что происходит внутри.


9. Worksection

Бесплатная версия очень условная, нечестная: до 2 активных проектов, до 5 пользователей, до 100 МБ на диске. Складывается ощущение, что ее добавили просто как формальность, для галочки. Однако она помогает познакомиться с системой управления тем, кто планирует работать на платном тарифе.

Подробнее о тарифах Worksection

Что получится сделать в бесплатной версии:

Создать всего 2 рабочих проекта. Пригласить до 5 пользователей.

Поизучать систему изнутри: попробовать создать задачу, пообсуждать ее, прикрепить файл.

Возможно, free-версию можно использовать для личных нужд, хотя для этого есть более удобные бесплатные системы управления проектами, тот же Trello.

За что точно придется платить:

Добавление более 2 проектов, задачи и подзадачи, возможность обозначать сроки выполнения, приоритеты, исполнителей, метки, статусы

Ежедневный дайджест, приходящий на email.

Групповые чаты и обмен файлами более 100 МБ.

Диаграмма Гантта.

Функция учета времени, тайм-трекер. Которая помогает посчитать затраты по времени и бюджетам.

Отчеты.

Настройка прав доступа, ограничение прав для клиентов и партнеров.

Бесплатную версию этой системы имеет смысл рассматривать только в том случае, в дальнейшем вы планируете перейти на платный тариф.


10. ToDoist

Бесплатная версия этой системы управления категорически нечестная: до 5 пользователей и до 80 проектов (хотя по сравнению с 2 проектами в Worksection это уже ого-го). Но радоваться рано. Все остальные возможности урезаны практически до нуля. Нельзя добавить более 150 задач, нельзя писать комментарии, нельзя загружать файлы...

Подробнее о тарифах ToDoist

Что получится сделать в бесплатной версии:

Разместить 150 задач.

Подсмотреть, как устроена система изнутри, познакомиться с ней.

За что точно придется платить:

Большее число пользователей и проектов.

Более 150 активных задач.

Напоминания.

Комментарии.

Загрузка файлов.

Метки для карточек и их классификации.

Фильтры для поиска задач.

Визуализация продуктивности: цели на день и неделю, личный прогресс каждого пользователя.

Разные права для админа и для участника.

Формирование задач из писем в ящике Gmail.

Шаблоны проектов.

Лента событий.

Просмотр видео и прослушивание аудио в самой системе.

По факту бесплатной версии у этого сервиса нет. Да, вы можете создать 80 проектов и сделать целых 150 задач, но какой в этом смысл, если нельзя даже оставить комментарий? Не говоря уже об обмене файлами, напоминаниях, метках и прочих must-have атрибутах любой системы управления. Free-версия здесь только для знакомства.


Сравнение 10 бесплатных систем управления

Подведем итоги. Как вы уже поняли, сам этот обзор 10 версий бесплатных систем управления субъективный. В таблице ниже только объективные данные и цифры.

Подробнее..

Перевод Apache Spark на Kubernetes чем полезен Apache YuniKorn

25.02.2021 10:21:06 | Автор: admin

Сунил Говиндан, Вэйвэй Янг, Вангда Tан, Уилфред Шпигельбург

Предпосылки

Почему для Apache Spark выбирают K8s

Apache Spark унифицирует в рамках одной платформы пакетную обработку в режиме реального времени, потоковую аналитику, машинное обучение и интерактивные запросы. Хотя Apache Spark предоставляет множество возможностей для разнообразных сценариев применения, его использование сопряжено с дополнительной сложностью и высокими затратами на обслуживание и администрирование кластера. Давайте рассмотрим некоторые высокоуровневые требования к базовому оркестратору ресурсов, чтобы расширить возможности Spark как единой платформы:

Контейнерные вычисления Spark для предоставления общих ресурсов разным заданиям машинного обучения и ETL.

Поддержка нескольких версий Spark, версий Python с контролем версий, контейнеры на общих кластерах K8s для более быстрой итерации и стабильной работы в продуктиве.

Единая унифицированная инфраструктура для большинства пакетных рабочих нагрузок и микросервисов.

Контроль доступа к общим кластерам.

Kubernetes как фактический стандарт для развертывания сервисов предлагает более точный и детализированный контроль всех вышеупомянутых аспектов по сравнению с другими оркестраторами ресурсов. Kubernetes предлагает упрощенный способ управления инфраструктурой и приложениями с практическим подходом к изоляции рабочих нагрузок, ограничению использования ресурсов, развертыванию ресурсов по запросу и возможностям автоматического масштабирования по мере необходимости.

Проблемы планирования задач Apache Spark на K8s

В планировщике Kubernetes по умолчанию есть пробелы с точки зрения эффективного развертывания пакетных рабочих нагрузок на том же кластере, где также планируется длительная работа других сервисов. Для пакетных рабочих нагрузок из-за требуемого параллелизма вычислений в основном должно планироваться совместное и гораздо более частое выполнение. Давайте подробно рассмотрим некоторые из этих пробелов.

Отсутствие первоклассной концепции приложения

В зависимости от типа развертываемого контейнера пакетные задания часто необходимо планировать к выполнению последовательно. Например, поды драйверов Spark нужно планировать раньше, чем рабочие поды. Четкая концепция первоклассного приложения может помочь с упорядочиванием или постановкой в очередь при каждом развертывании контейнера. Кроме того, такая концепция помогает администратору визуализировать задания, запланированные для отладки.

Отсутствие эффективных возможностей управления емкостью/квотами

Для управления ресурсами при выполнении рабочих нагрузок Spark в случае использования ресурсов несколькими арендаторами могут применяться квоты Kubernetes на ресурсы пространства имен (неймспейсов). Однако здесь есть несколько проблем:

1. Задания Apache Spark в отношении использования ресурсов являются динамическими по своей природе. А квоты пространства имен фиксируются и проверяются на этапе допуска. Запрос пода отклоняется, если он не соответствует квоте пространства имен. Это требует, чтобы задание Apache Spark вместо того, чтобы ставить запрос на выполнение в очередь внутри самого Kubernetes, реализовывало механизм повтора запросов пода.

2. Квота ресурсов пространства имен плоская, она не поддерживает иерархии управления квотами ресурсов.

Также часто пользователь может сталкиваться с нехваткой ресурсов для выполнения пакетных рабочих нагрузок, поскольку квоты пространства имен Kubernetes нередко не соответствуют плану распределения ресурсов на основе организационной иерархии. Эластичное и иерархическое управление приоритетами заданий в K8s сегодня отсутствует.

Недостаточно справедливое распределение ресурсов между арендаторами

В производственной, рабочей среде часто обнаруживается, что планировщик Kubernetes по умолчанию не может эффективно управлять диверсифицированными рабочими нагрузками и обеспечивать справедливость распределения ресурсов для рабочих нагрузок арендаторов. Вот некоторые из основных причин:

Управление рабочими нагрузками в производственной среде часто выполняется большим количеством пользователей.

В плотной производственной среде, где выполняются разные типы рабочих нагрузок, весьма вероятно, что поды драйверов Spark могут занять все ресурсы в пространстве имен. Такие сценарии создают большую проблему для эффективного совместного использования ресурсов.

Неправомерные или поврежденные задания могут легко захватить ресурсы и повлиять на производственные рабочие нагрузки.

Строгие требования SLA с задержкой планирования

На большинстве загруженных производственных кластеров, предназначенных для пакетных рабочих нагрузок, часто выполняются тысячи заданий с сотнями тысяч тасков ежедневно. Эти рабочие нагрузки требуют большего количества параллельно развертываемых контейнеров, и часто время жизни таких контейнеров весьма короткое (от нескольких секунд до часов). Обычно это влечет потребность в развертывании тысяч подов или контейнеров, ожидающих выполнения, и использование по умолчанию планировщика Kubernetes может привести к дополнительным задержкам, что, в свою очередь, приведет к невыполнению SLA.

Как может помочь Apache YuniKorn

Обзор Apache YuniKorn

YuniKorn - это улучшенный планировщик Kubernetes, как для сервисов, так и для пакетных рабочих нагрузок. В зависимости от сценариев использования и развертывания, YuniKorn может либо полностью заменить стандартный планировщик Kubernetes, либо работать с ним совместно.

YuniKorn является унифицированным кроссплатформенным планировщиком смешанных рабочих нагрузок, состоящих как из stateless пакетных рабочих нагрузок, так и stateful сервисов.

Сравнение YuniKorn и стандартного планировщика Kubernetes

Фича

Планировщик по умолчанию

YUNIKORN

Примечание

Концепция приложения

x

Приложения в YuniKorn приоритетны. YuniKorn планирует приложения с учетом, например, порядка их запуска, приоритета, использования ресурсов и т. д.

Упорядочение заданий

x

YuniKorn поддерживает правила упорядочения заданийFIFO/FAIR/Приоритеты (WIP)

Детализированное управление ресурсами

x

Управление ресурсами кластера с помощью иерархии очередей. Очереди предоставляют гарантированные ресурсы (минимум) и предельные квоты ресурсов (максимум).

Справедливое распределение ресурсов

x

Справедливое распределение ресурсов между приложениями и очередями для их идеального распределения для всех запущенных приложений.

Нативная поддержка нагрузок Big Data

x

Стандартный планировщик ориентирован на долговременные сервисы. YuniKorn разработан для рабочих нагрузок приложений Big Data и изначально поддерживает эффективное выполнение Spark / Flink / Tensorflow и т. д. на базе K8s.

Масштабирование и производительность

x

YuniKorn оптимизирован по производительности, он подходит для высокопроизводительных и крупномасштабных сред.


Как YuniKorn помогает в работе Spark на K8s

YuniKorn имеет богатый набор функций, которые помогают более эффективно запускать Apache Spark на Kubernetes. Подробности можно найти здесь (инструкции по запуску Spark на K8s с YuniKorn).

Ознакомьтесь с более подробной информацией о том, как YuniKorn расширяет возможности Spark на K8s: Cloud-Native Spark Scheduling with YuniKorn Scheduler на Spark & AI саммите 2020.

Давайте рассмотрим некоторые варианты использования и то, как YuniKorn помогает улучшить планирование ресурсов Spark в этих сценариях.

Несколько пользователей одновременно запускают разные рабочие нагрузки (шумные соседи)

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

В приведенном выше примере структуры очередей в YuniKorn и пространства имен, определенные в Kubernetes, сопоставляются с очередями неймспейсов родительской очереди с помощью политики размещения. Очереди сред тестирования и разработки имеют фиксированные ограничения по ресурсам. Все остальные очереди ограничены только размером кластера. Ресурсы распределяются между очередями с использованием справедливой политики, а задания в очереди в производственной среде планируются в порядке FIFO.

Вот некоторые из основных преимуществ:

Одна очередь YuniKorn может автоматически сопоставляться с одним пространством имен в Kubernetes.

Емкость очереди эластична по своей природе и может обеспечивать диапазон ресурсов от минимального до максимального заданного значения.

Справедливость распределения ресурсов, которая поможет избежать возможной нехватки ресурсов.

YuniKorn предоставляет простой способ управления квотой ресурсов для кластера Kubernetes, он может работать как замена квоты ресурсов пространства имен. Управление квотами ресурсов в YuniKorn позволяет задействовать очереди запросов подов и совместное использование ограниченных ресурсов между заданиями на основе подключаемых политик планирования. Все это может быть выполнено без каких-либо дополнительных манипуляций, таких как повторная отправка запроса к поду Apache Spark.

Настройка кластера для модели распределения ресурсов на основе существующей в организации иерархии

В большой производственной среде несколько пользователей будут одновременно запускать рабочие нагрузки разных типов. Часто эти пользователи вынуждены потреблять ресурсы в зависимости от бюджетных ограничений в иерархии организации. Такая производственная настройка помогает эффективно использовать ресурсы кластера в пределах выделенной квоты ресурсов.

YuniKorn позволяет управлять ресурсами кластера с иерархией очередей. Детальное управление распределением ресурсов в многопользовательской среде становится возможным за счет использования очередей ресурсов с четкой иерархией (например, соответствующей иерархии организации). Очереди YuniKorn можно настраивать статически или динамически управлять ими, а с помощью функции динамического управления очередями пользователи могут настраивать правила для делегирования функций управления очередью.

Улучшенное SLA заданий Spark в мультиарендном кластере

Обычные рабочие нагрузки ETL, выполняемые в мультиарендном (мультитенантном) кластере, требуют более простых средств определения детализированных политик для выполнения заданий в желаемой для организации иерархии очередей. Часто такие политики помогают определять для выполнения заданий более строгие SLA.

YuniKorn дает администраторам возможность размещать задания в очередях на основе более простых политик, таких как FIFO, FAIR и т. д. Политика сортировки приложений StateAware упорядочивает задания в очереди в порядке FIFO и планирует их выполнение одно за другим согласно условиям. Это позволяет избежать обычного состояния гонки при отправке большого количества пакетных заданий, например Spark, в одно пространство имен (или кластер). Обеспечивая определенный порядок заданий, она также улучшает планирование заданий, делая его более предсказуемым.

Использование различных фич K8s для планирования заданий Apache Spark

YuniKorn полностью совместим с основными выпущенными версиями K8s. Пользователи могут прозрачным образом менять планировщик в существующем кластере K8s. YuniKorn полностью поддерживает всю родную семантику K8s, которая может использоваться во время планирования, такую как селектор меток, афинность/анти-афинность пода, толерантность, PV/PVC и т. д. YuniKorn также совместим с командами управления и утилитами, такими как узлы cordon, получение событий через kubectl и т. д.

Apache YuniKorn в CDP

Платформа CDP от Cloudera предлагает аналитическое приложение Cloudera Data Engineering на базе Apache YuniKorn (в инкубации).

Некоторые из основных вариантов использования YuniKorn в Cloudera включают в себя:

Управление квотами ресурсов для виртуальных кластеров CDE.

Расширенные возможности планирования заданий Spark.

Ответственность за планирование как микросервисных, так и пакетных заданий.

Работа в облаке с поддержкой автоматического масштабирования.

Планы на улучшение поддержки рабочих нагрузок Spark

Сообщество YuniKorn активно изучает определенные улучшения основных функций для поддержки выполнения рабочих нагрузок Spark. Например, для более эффективного выполнения важно выделить минимальное количество подов драйверов и рабочих подов. Параллельное планирование (gang scheduling) помогает обеспечить выделение для выполнения задания Spark необходимого количества подов. Такая функция будет очень полезна в шумном окружении при развертывании многопользовательского кластера. Для получения более подробной информации см. YUNIKORN-2 (Jira отслеживает прогресс функций).

Поддержка приоритетов заданий/задач

Упорядочение по приоритетам на уровне заданий помогает администраторам расставлять приоритеты и YuniKorn выделять необходимые ресурсы заданиям с высоким уровнем SLA. Это также дает большую гибкость для эффективного использования ресурсов кластера. Для получения более подробной информации см. YUNIKORN-1 (Jira отслеживает прогресс функции).

Распределенная трассировка

В YUNIKORN-387 для улучшения общего контроля планировщика используется открытая трассировка. С помощью этой функции можно собирать и сохранять критические трассировки в рамках основного цикла планирования для устранения неполадок, профилирования системы и мониторинга.

Резюме

YuniKorn помогает эффективно осуществлять детальное распределение ресурсов для различных рабочих нагрузок Spark в крупномасштабных многопользовательских средах, с одной стороны, и динамически создаваемых облачных средах - с другой.

Таким образом, благодаря YuniKorn платформа Apache Spark может стать для пользователей важной платформой корпоративного уровня, предлагающей надежную основу для различных приложений, от крупномасштабного преобразования данных до задач аналитики и машинного обучения.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru