Нотатки про програмування, музику, подорожі та плівку
Про мене  •  Список нотаток  •  Плівка

Пізніше Ctrl + ↑

Кластеризация

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

Виды кластеров

  1. Отказоустойчивые кластеры (High-availability clusters, HA)
  2. Кластеры с балансировкой нагрузки (Load balancing clusters)
  3. Вычислительные кластеры (High performance computing clusters, HPC)
  4. Системы распределенных вычислений

Отказоустойчивые кластеры

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

Подтипы отказоустойчивых кластеров

  1. С холодным резервом
  2. С горячим резервом
  3. С модульной избыточностью

Холодный резерв
Один сервер находится в пассивном режиме и ждет падения основного сервера

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

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

Кластеры распределения нагрузки

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

Вычислительные кластеры

Кластеры используются в вычислительных целях, в частности в научных исследованиях. Для вычислительных кластеров существенными показателями являются высокая производительность процессора в операциях над числами с плавающей точкой (flops) и низкая латентность объединяющей сети, и менее существенными — скорость операций ввода-вывода, которая в большей степени важна для баз данных и web-сервисов. Вычислительные кластеры позволяют уменьшить время расчетов, по сравнению с одиночным компьютером, разбивая задание на параллельно выполняющиеся ветки, которые обмениваются данными по связывающей сети.

Типовые задачи для расчетных кластеров

  1. решение задач механики жидкости и газа, теплопередачи и теплообмена, электродинамики, акустики;
  2. моделирование аэрогазодинамических процессов;
  3. моделирование физико-химических процессов и реакций;
  4. моделирование сложного динамического поведения различных механических систем;
  5. решение задач цифровой обработки сигналов, финансового анализа, разнообразных математических задач, визуализации и представления данных
  6. анализ и расчет статической и динамической прочности;
  7. газодинамика, термодинамика, теплопроводность и радиочастотный анализ;
  8. моделирование задач любой степени геометрической сложности;
  9. рендеринг анимации и фотореалистичных VFX эффектов

Системы распределенных вычислений

Такие системы не принято считать кластерами, но их принципы в значительной степени сходны с кластерной технологией. Их также называют grid-системами. Главное отличие — низкая доступность каждого узла, то есть невозможность гарантировать его работу в заданный момент времени, поэтому задача должна быть разбита на ряд независимых друг от друга процессов. Такая система, в отличие от кластеров, не похожа на единый компьютер, а служит упрощенным средством распределения вычислений. Состоит из множества ресурсов разных типов.

Пример
Кластер в CERN представляет из себя иерархический грид, который имеет 3 слоя:

  • Нулевой — собирает информацию с датчиков и осуществляет первичное хранение информации
  • Tier 1 — хранит копии данных в разных точках мира
  • Tier 2 — преимущественно обладают высокой вычислительной мощностью — обрабатывают информацию.

Достоинства

  1. Эффективная утилизация ресурсов.
  2. Обновления без остановки
  3. Увеличение производительности
  4. Отказоустойчивость (круглосуточная работа)
  5. Абсолютная масштабируемость

Недостатки

  1. Синхронизация между приложениями — необходимо обеспечить синхронизацию данных между серверами в кластере.
  2. Цена
  3. Сложность в управлении
  4. Необходимость адаптации приложения для работы в кластере (веб-ферме).

Ссылки

  1. Википедия: Кластер (группа компьютеров)
  2. Кластеризация
  3. Кластерные вычислительные системы
  4. Кластерные архитектуры
  5. Википедия: Серверная ферма
  6. Отказоустойчивые кластеры (кластеры высокой доступности)

Pipeline архитектура

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

Составляющие

  1. Фильтр — преобразует или фильтрует данные, которые он получает через каналы, с которыми он связан. Фильтр может иметь любое количество входных каналов и любое количество выходных каналов.
  2. Канал — это соединитель, который передает данные от одного фильтра к другому. Это направленный поток данных, который обычно реализуется буфером данных для хранения всех данных до тех пор, пока следующий фильтр не успеет их обработать.
  3. Продюсер — является источником данных. Это может быть статический текстовый файл или устройство ввода с клавиатуры, постоянно создающее новые данные.
  4. Приемник или потребитель является целью данных. Это может быть другой файл, база данных или экран компьютера.

Примеры

UNIX приложения, выход одной программы можно передать на вход в другую программу.

$ ps aux | grep [k]de | gawk ’{ print $2}’

выводит на экран список процессов, которые содержат в имени kde


Компиляторы

Когда следует использовать этот шаблон

  1. Процесс обработки, требуемый приложением, можно легко разделить на ряд независимых этапов.
  2. У этапов обработки, которые выполняются приложением, разные требования к масштабируемости.
  3. Требуется определенная гибкость, чтобы изменять порядок шагов обработки, выполняемых приложением, или добавлять и удалять шаги.
  4. Система будет работать эффективнее, если распределить шаги обработки между несколькими серверами.
  5. Чтобы свести к минимуму последствия сбоя на шаге при обработке данных, требуется надежное решение

Проблемы и рекомендации

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

  1. Сложность — повышенная гибкость, которую обеспечивает этот шаблон, может также вызвать сложности, особенно если фильтры в конвейере распределяются между разными серверами.
  2. Надежность — используйте инфраструктуру, которая гарантирует сохранность данных, передаваемых между фильтрами в конвейере.
  3. Идемпотентность — свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом. Если после получения сообщения происходит сбой фильтра в конвейере и операция переносится на другой экземпляр фильтра, часть операции может быть уже выполнена. Тем самым продолжение выполнения должно вернуть нам такой же результат.
  4. Повторяющиеся сообщения — если сбой фильтра в конвейере происходит после публикации сообщения для следующего этапа конвейера, может запуститься другой экземпляр фильтра и опубликовать копию этого сообщения в конвейере. Это может привести к передаче следующему фильтру двух экземпляров одного сообщения.

Достоинства

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

Недостатки

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

Ссылки

  1. Pipeline Architecture
  2. YouTube: 101 способ приготовления RabbitMQ и о pipeline-архитектуре
  3. Текст: 101 способ приготовления RabbitMQ и о pipeline-архитектуре
  4. Принципы и приёмы обработки очередей
  5. Pipes and Filters pattern
  6. Pipe-And-Filter
  7. Pipes and Filters

Толстый клиент

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

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

Примеры

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

Когда стоит использовать

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

Достоинства

  1. Обладает полной функциональностью для работы с данными сервера.
  2. Предоставляет возможность работы при обрывах связи с сервером.
  3. Обладает высоким быстродействием (зависит от машины пользователя).
  4. Режим многопользовательской работы


Недостатки

  1. Проблемы с безопасностью.
  2. Сложность обновления и синхронизации данных.
  3. Согласование данных между клиентами.
  4. Очень сложный процесс настройки и установки.
  5. Контроль обновлений
  6. Большой размер дистрибутива.


Ссылки

  1. «Преимущества» толстого клиента
  2. Википедия

Самообучение

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

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

Обычный кейс изучения
Возьмем на пример изучение SignalR. Обычно мы ищем гайды или какой-то базовый getting started и делаем по нему простенький Hello world, который по сути только демонстрирует работу технологии, но не показывает примеры реального использования.

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

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

  1. Базы данных (можно использовать разные ORM).
  2. Архитектура приложения (как разделить на части приложение, DI).
  3. Построение WebAPI.
  4. Авторизация (ASP.NET Identity, JWT etc.).
  5. Многопоточность.
  6. Работа с файловой системой.

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

Эту идею можно развивать все дальше и дальше. Решили попробовать мобильную разработку — написали клиент для вашего чата и т. д.

P.S. Ну и кроме всех описанных плюсов вы можете прокачать свой Github профиль.

Best Practices for Building Async APIs with ASP.NET Core

На днях был вебинар от JetBrains на тему: «Лучшие практики по построению асинхронных API в ASP.NET Core».
В скором времени опубликую заметку на эту тему.

#1. Ссылки на интересные статьи

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

Поехали.

Технические статьи

  1. Rich Domain Model with DDD/TDD
  2. Приложение двенадцати факторов (The Twelve-Factor App)
  3. ASP.NET Core: Механизмы предотвращения атак 2.0
  4. Реактивные библиотеки RX
  5. Общие принципы проектирования

Разное

  1. У вас меньше денег, чем вы думаете
  2. О пользе ведения профессионального блога
  3. Небольшие доработочки

Эгея

Эгея — это такой движок от Ильи Бирмана, который идеально подходит для того чтобы вести свой блог. Сразу скажу что, как по мне, это самый лучший движок среди тех что я видел.

Фичи, которые мне понравились

Редактор
Минималистичный редактор в котором очень удобно писать текст. Все форматирование текста завязано на использование разметки похожей на Маркдаун. И что самое главное для меня — это подсветка кода. Это позволяет публиковать профессиональные статьи.

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

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

Ивенты

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

2020

  • .NET fwdays’20 online — апрель

2019

  • Svitla Smart Talk: Dependency absolution: applications as pipelines in .NET — декабрь
  • Tech Meetup «New in T-SQL» — ноябрь
  • Лекция «Есть идея для стартапа. Что дальше?»
  • Highload fwdays’19 — октябрь
  • AWS Loft Kiev
  • Воркшоп по проявке ЧБ пленки
  • Лекція Дмитра Білкуна «З нуля до першого мільйона користувачів»
  • The Data & Logging Tech Meetup at AllStars-IT Ukraine — сентябрь
  • Мандрівка до глибин 🔀 Ґітхабу: пишемо бота-помічника 🤖
  • Atlas Weekend — июль
  • Maintainability of Microservices | Terrasoft TechPoint
  • Кураж Базар — май
  • Allstars-IT Ukraine Tech Meetup “Securing your web applications with ASP.NET“ — апрель
  • Як будувати комплексні розподілені системи
  • .NET fwdays’19
  • Зустріч Kyiv ALT.NET (Apache Kafka) — март
  • UNIT.Sales Meetup #3 | Лідогенерація в В2В продажах
  • Зустріч Kyiv ALT.NET (Microservices in .NET Core, Istio — k8s)
  • GlobalLogic Kyiv Embedded TechTalk: Sensor Fusion in Automotive — февраль
  • Kyiv Go meet-up — январь
  • Зустріч «CES 2019: як українські стартапи Вегас підкорювали»

2018

  • SQL Server 2019 in Action — декабрь
  • Зустріч Kyiv ALT.NET — октябрь
  • AWS Startup day — ноябрь
  • Atlas Weekend — июль
  • Dev Challenge 12 — июнь
  • Kubernetes Networking fails and best practices — апрель

2017

  • Atlas Weekend — июль
Раніше Ctrl + ↓