Получи случайную криптовалюту за регистрацию!

Репрезентативный черри пикинг 🍒

Логотип телеграм канала @asvishnya_blog — Репрезентативный черри пикинг 🍒 Р
Логотип телеграм канала @asvishnya_blog — Репрезентативный черри пикинг 🍒
Адрес канала: @asvishnya_blog
Категории: Технологии
Язык: Русский
Количество подписчиков: 68
Описание канала:

Немного об ИТ сквозь призму реального практического опыта создания крупных информационных систем и сервисов, а ныне управляя мульти-командным коллективом полного цикла создания заказного ПО.
Отзываюсь, если постучаться сюда: @asvishnya

Рейтинги и Отзывы

3.33

3 отзыва

Оценить канал asvishnya_blog и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

1

3 звезд

0

2 звезд

0

1 звезд

1


Последние сообщения

2022-07-26 21:21:36
Базовый алгоритм выбора СУБД

С целью структурирования имеющихся знаний по СУБД набросал небольшой алгоритм из простых вопросов, которые можно себе задавать для приближённого выбора СУБД.

Коротко:

1. Начинаем с вопроса о том, насколько чувствительны наши данные. Допустим, мы планируем оперировать балансами, денежными средствами и т.п. sensitivity-данными. Если "ДА", то рекомендуется смотреть в сторону удовлетворения ACID через реляционные СУБД чтобы "быть спокойными". Подойдут MySQL, PostgreSQL и другие.

2.
Если в довесок к вопросу 1 или даже само по себе намечается, что между данными будут сложные связи (например, отели-номера-цены-администраторы-пользователи-брони-итд-итп), то чтобы вывезти эти JOIN-ы нативно (без ручной реализации) также стоит посмотреть в сторону реляционной СУБД.

3. Если 1+2 = "НЕТ", то стоит взглянуть на природу данных. Если данные разнообразны, не имеют структуры, атрибуты могут меняться и к этому ко всему будет много запросов, то стоит взглянуть на документные СУБД. Подойдут MongoDB, CouchDB и другие.

4.
Если у нас запланирован постоянный поток каких-то однотипных записей с фиксированными полями (те же логи, клики пользователей и т.п.), то подойдут колоночные СУБД, из которых, в т.ч. для нужд аналитики можно будет поколоночно выбрать только интересующие нас атрибуты. Подойдут Cassandra, ClickHouse и другие.

5.
Наконец, если наши данные будут совсем простыми (счётчики, агрегаторы, статусы пользователей, списки рекомендаций для пользователей), то речь идёт о СУБД типа "Ключ-Значение" (Key-Value). Сюда же относятся и задачи хранения кэша, чтобы быстро отдать пользователю горячие данные. Подойдут Redis, MemcacheDB и другие.

Разумеется, далее пойдут нюансы: нагрузка, бэнчмарки, компетенция коллектива разработки и т.д. Также всплывёт удовлетворение в части NFR той же CAP-теореме. Но для старта и задания вектора выбора "класса" хранилища в части СУБД - в самый раз

P.S.: кстати, чуть больше СУБД (а не по 2 примера на "класс") можно найти в подвале этого поста.

#невредность
10 viewsedited  18:21
Открыть/Комментировать
2022-07-26 19:42:30
Магическое число 7±2

В студенческие годы (2-ой курс) во время пар в духе анализа БП и теории проектирования ИС услышал про правило "семь плюс-минус два". Контекст тогда был такой: зачем рисовать "разляпистые" схемы на десяток-другой элементов, если их сложно читать и, скорее всего, почти никто не поймёт. Было и было, понимали так, как могли, без оглядки на предтечи.

А оказалось следующее. В 1956 году когнитивным психологом Гарвардского университета George A. Miller была опубликована одна из самых цитируемых работ по психологии: "The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information". Оригинальный текст доступен здесь. Коротко: человек способен держать во внимании (запомнить и повторить) не более 9 элементов, а часто и в пределах 5. Кратковременная память сравнивается с кошельком, в который можно положить одновременно 7 "монет", причем неважно, какой характеристики - важно их число. А если количество элементов больше 7, то мозг начнёт выполнять операции группировки элементов так, чтобы их было от 5 до 9.

Экспериментируя с размерностью постов, сегодня сразу вместо заключения: эволюционно мозг ленив и по разным данным потребляет в "ленивом" состоянии 9% энергии, а во время мыслительного процесса ~ 25%. Тогда почему бы не пользоваться правилом "7±2" хотя бы в следующих наших частых ситуациях:
* хочешь нарисовать большую архитектуру - сэкономь место + чей-то "мозг" и не рисуй все девять ролей пользователей на входных инфопотоках.
* пишешь какой-то маркированный список, который потом будет обсуждён - ограничься 7-ю пунктами или хотя бы сгруппируй их во вложенный список.
* рисуешь условный процесс работы с заявками - композируй его 2-3 десятка детальных шагов в 3 крупных высокоуровневых "проект заявки", "согласование заявки", "утверждение заявки".

P.S.: совпадение ли: 7 чудес света, 7 смертных грехов, 7 уровней ада, 7 дней недели, 7 основных цветов? Сам автор "7±2" выражается так: "But I suspect that it is only a pernicious, Pythagorean coincidence"

#недоэнтимема
9 viewsedited  16:42
Открыть/Комментировать
2022-07-22 14:39:02 Внезапно: довольно простое, но здорово структурированное видео про Apache Kafka от Владимира Богдановского (Архитектор SmartData, HCB). Если много слышалось про кафку, зрели вопросы, но как-то не случалось, то компенсация базовых пробелов за ~50 минут тут: клац.

#невредность
24 views11:39
Открыть/Комментировать
2022-07-21 21:49:46 {начало выше}

Прикладное применение CAP-теоремы на примере условной социальной сети может быть следующее:
* нам необходимо, чтобы социальная сеть всегда была доступна пользователям;
* нам необходимо, чтобы пользовательский контент (посты) не пропадал;
* но в силу того, что социальная сеть доступна, например, по всему земному шару и, как следствие, имеет распределённую вычислительную (серверную) инфраструктура, то будет допустимо, если опубликованный пользователем из локации Lx пост станет быстро доступен всем пользователям в локации Lx, но только через некоторое время станет доступен пользователям в локации Ly.

Таким образом, поскольку под распределённой системой понимается сеть, в которой данные хранятся более чем на одном узле (физическом или виртуальном сервере), то применимость CAP-теоремы возможна чуть меньше, чем в каждой из крупных создаваемых информационных систем. Остаётся лишь одно: в зависимости от ситуации должна решаться проблема выбора того, что из CAP нам важнее, а чем можно пренебречь.

Говоря о CAP, полезно также иметь в виду её расширение в виде PACELC, а также альтернативный BASE и старый-добрый ACID. Но, тем не менее, CAP можно держать на карандаше как довольно зрелую, теоретически доказанную техническую аргументацию по выбираемым проектным решениям.

Бонус: полезная шпаргалка для выбора СУБД (в зависимости от ключевых для проекта комбинаций CA / AP / CP) есть тут: клац.

#невредность
25 viewsedited  18:49
Открыть/Комментировать
2022-07-21 21:47:37
Проблема выбора между реализуемыми нефункциональными требованиями: CAP-теорема

При проектировании информационных систем и работе с их нефункциональными требованиями нередко идеологи последних ожидают получения "всего и сразу". Чтобы и отзывчиво, и быстро, и надёжно, и доступно, и всё прочее, а ещё и сразу. Однако, если с точки зрения проектного менеджмента все мы так или иначе знакомы с железным треугольником (Iron Triange, предложен Dr Martin Barnes в далёком 1969 и более известен как "Быстро-Качественно-Дёшево"), то проектные коммуникации с заказчиком о необходимости поиска баланса в реализации тех или иных нефункциональных требований также хотелось бы поддержать чем-то авторитетным, пусть в техническом плане и дискуссионным (aka "холиварным").

В 2000 году на симпозиуме о распределённых вычислениях профессором Eric A. Brewer была представлена гипотеза о достижимости только двух из трёх следующих характеристик распределённых систем: Consistency | Availability | Partition tolerance. Два года спустя профессорами MIT Seth Gilbert и Nancy Lynch были представлены доказательства, сделавшие гипотезу о CAP полноценной теоремой.

Масштабируя область применения и говоря простым языком, CAP-теорема утверждает, что невозможно выполнить все требования одновременно. Это теоретическое ограничение в контексте Консистентности (C), Доступности (A) и Устойчивости к разделению (P). Одна из визуализаций CAP-теоремы в контексте СУБД приведена на изображении к посту. Упрощённая трактовка составляющих CAP-теорему элементов может быть следующей:
* (C)onsistency - система надёжна, контент не пропадает и запросом на чтение мы всегда получаем сведения о данных последнего запроса на запись;
* (A)vailability - система доступна, всегда можно получить контент или внести в него изменения;
* (P)artition tolerance - отказ какого-то из узлов системы не повлияет на её работоспособность.

{продолжение ниже}
21 viewsedited  18:47
Открыть/Комментировать
2022-07-21 02:56:47 {начало выше}

К чему все эти прелюдии? Днём ранее нашей командой проводилась очередная итерация выявления требований к создаваемому отраслевому порталу в рамках коммуникации с функциональным заказчиком. Портал, как видится, будет как достаточно развесистым в интеграционном плане, так и декомпозированным на ряд подсистем и модулей с управляемой моделью доступа к их функциям и соответствующим данным. Помимо ряда прочих, уже обсуждённых требований, заказчиком озвучивается следующее: "На портале должна быть реализована функциональность запроса пользователями доступа к сервисам". Казалось бы, "пользователь", "запрос", "доступ", "сервис". Берём и делаем, ведь это всё про доступ к нашим же "блочкам" портала. И, всё же, "сервис" - это что? Подсистема / модуль / раздел портала, что-то внешнее? Если внешнее, то почему это связано с порталом? "Сервис" в данном случае - это яркий пример implicit-формулировки требования. Выяснив, что под "сервисом" заказчик привык считать свои существующие информационные системы и ресурсы, а не имеет в виду условный раздел "WIKI" или "Видеоконференции" на создаваемом портале, implicit-требование преобразуется в довольно конкретное explicit.

К слову сказать, приведённый выше частный пример требования оказался достаточно критическим для заказчика, ранее не звучал, но вписывается в отведённый проектный бюджет. Пожалуй, довольно удачно, что пользователь сможет только запрашивать доступ на портале, а не запрашивать, после чего портал интегрируется с частными системами / DC / IdM, изменяет полномочия пользователя в целевом "сервисе" по approve-циклу администратора, возвращает пользователю почтовые уведомления со статусом выполнения его заявки и т.п. И если в ряде частных случаев всплывающие неучтённые implicit-детали могут быть разрешены путём джентельменских договорённостей / выпуском доп. соглашения, то так происходит не всегда. Можно полагать, что с ненулевой вероятностью, в некоторой степени пропорциональной уровню работы проектной команды с требованиями, можно дотянуть до испытаний своё собственное разработческое представление о работе тех или иных функций ПО или системы в целом, а затем отправиться в цикл доработок / реинжиниринга или вовсе с протоколом замечаний и неподписанным актом, когда выяснится, что всё не совсем так, как представлялось.

Таким образом, вместо морали: здоровая форма дотошности при работе с требованиями, приземление категориального аппарата объекта автоматизации и просто рабочие вопросы "А что вы имеете здесь в виду?" - это адекватный минимум достаточно очевидных вопросов, которыми следует задаваться, не полагаясь лишь на собственный N-летний опыт, молниеносное и абсолютно точное схватывание "хотелок". Implicit Reqs, рвущие бюджеты и cash-flow, не дремлют

#недоэнтимема
19 views23:56
Открыть/Комментировать
2022-07-21 02:51:36
Об implicit и explicit требованиях: некапитанская очевидность

На практике, работая с той или иной степенью детализации требований заказчика к создаваемому ПО, мы достаточно часто склонны к тому, чтобы слышать, читать и, в конечном счёте, воспринимать их (требования aka "хотелки") так, как нам кажется верным. Разумеется, это восприятие опирается на эмпирику и когнитивистику. Кроме того, нередко достаточно жёсткие временные, экономические и прочие проектные рамки диктуют необходимость повышения экономии человеческого ресурса, в т.ч. выявляющего, формализующего и согласующего требования к ПО на первичных этапах его реализации. Проще говоря: мы стараемся с первых "аккордов" понять заказчика, а сам заказчик - не углубляться в "очевидные" аспекты функционирования его бизнеса, существующего системного ландшафта и т.п.

Сегодня речь о двух вещах, лежащих на поверхности, а именно: о тех пожеланиях и требованиях к реализации ПО, которые кажутся очевидными, и тех из них, которые не являются очевидными, но кем-то из числа "генераторов хотелок" подразумеваются как таковые. Для категориальной согласованности далее введём пару употребляемых в индустрии понятий в контексте Functional и Non-Functional Reqs: "implicit" - нечто подразумеваемое, "explicit" - явное, чётко и точно определённое.

Не жонглируя гибкими подходами / методологиями разработки ПО и "классикой", можно утверждать, что чем позже мы получаем запрос на изменение того или иного требования к ПО, тем дороже его имплементация по отношению, по крайней мере, к этапу первичного проектирования (одна из типовых визуализаций двух кривых затрат Boehm/Beck приведена на изображении к посту). Теоретические и практические подтверждения тому можно встретить N-раз на просторах интернета, в т.ч. здесь.

{продолжение ниже}
16 viewsedited  23:51
Открыть/Комментировать
2022-07-19 18:53:03 "Цель нужно видеть в своей целостности" (с)

Автор
: заказчик в лице крупного многофилиального ВУЗа.
Обстоятельства: приёмка разработанной BI-отчётности по академическому мониторингу.

#крылема
15 views15:53
Открыть/Комментировать
2022-07-18 23:46:57 Рисовалка

Эпизодически возникает потребность (например, в ходе звонка) визуализировать ту или иную мысль. Здесь может быть и последовательность шагов, и связи между элементами архитектуры (подсистемами, модулями, компонентами, сервисами, серверами), и даже, допустим, пользовательская навигация между разделами. Да, для каждой в частности или для решения всей совокупности этих задач есть ряд инструментов. Но, как правило, открывать тяжёлый Modeling Tool типа Enterprise Architect и создавать там целый проект "не с руки", Visio - зачастую тоже, та же Figma или ей подобные UI/UX design инструменты - очевидно, по случаю. Хочется чего-то в режиме "здесь и сейчас", желательно с минимумом действий и в браузере.

Долгое время выручал app.diagrams.net (ex draw.io), но как-то всё, пусть и субъективно, но не то: лишние клики с созданием проекта, его сохранением на Google-диске, зачастую избыточный по числу элементов для рисования тулбокс, конфигурации страниц, сеток, настройка выравниваний и т.п.

Случайно при просмотре вначале видео по System Design Interview (SDI), а затем и в рамках интенсива по SD (факультативная прожарка) попался отличный веб-инструмент: https://excalidraw.com/. Сами разработчики описывают его как "Virtual whiteboard for sketching hand-drawn like diagrams, collaborative and end-to-end encrypted". Отзывчивый и минималистичный дизайн, удобные горячие клавиши на выбор типа объекта и ввода текста, минимум непродуктивных кликов и перемещений. В общем, при первом приближении получаешь одно удовольствие. Рекомендасьён!

P.S.: неинтересный факт: при прохождении SDI в одной из пяти крупнейших технологических компаний (FAANG), довольно часто именно Excalidraw используется для наглядного отображения хода проектирования полученного вами от интервьюера сервиса (задания).

#невредность
19 viewsedited  20:46
Открыть/Комментировать
2022-07-18 22:52:25 Репрезентативный черри пикинг pinned «Чтобы растекающиеся по древу мысли в этом канале приобретали форму, посты постараюсь маркировать следующими хэштегами, некоторые из которых будут звучать весьма занудно #обудничном - что-то об айтишном: переговорном, аналитическом, разработческом и всём…»
19:52
Открыть/Комментировать