Pull to refresh
0
0
Владимир @enrichment

Пользователь

Send message

Зачем нужен Refresh Token, если есть Access Token?

Reading time4 min
Views244K
Недавно мы в Voximplant улучшали авторизацию в SDK. Посмотрев на результаты, я несколько опечалился, что вместо простого и понятного токена их стало две штуки: access token и refresh token. Которые мало того что надо регулярно обновлять, так еще документировать и объяснять в обучающих материалах. Помня, что в OAuth два токена нужны в основном из-за разных сервисов, на которых они используются (даже вопрос на stackoverflow есть), а у нас такой сервис один, я несколько офигел и пошел на второй этаж вытрясать души из разработчиков. Ответ получился неожиданным. Его нет на stackoverflow. Зато он есть под катом.
Читать дальше →
Total votes 74: ↑70 and ↓4+66
Comments296

Трассировка сервисов, OpenTracing и Jaeger

Reading time7 min
Views127K
image

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

Для минимизации ручного труда мы решили воспользоваться одним из инструментов трассировки. О том, как и для чего можно использовать трассировку и как это делали мы, и пойдет речь в этой статье.
Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments7

Понимание джойнов сломано. Это точно не пересечение кругов, честно

Reading time4 min
Views334K

Так получилось, что я провожу довольно много собеседований на должность веб-программиста. Один из обязательных вопросов, который я задаю — это чем отличается INNER JOIN от LEFT JOIN.


Чаще всего ответ примерно такой: "inner join — это как бы пересечение множеств, т.е. остается только то, что есть в обеих таблицах, а left join — это когда левая таблица остается без изменений, а от правой добавляется пересечение множеств. Для всех остальных строк добавляется null". Еще, бывает, рисуют пересекающиеся круги.


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


Дело в том, что этот ответ в общем случае неверен. Ну или, как минимум, не точен.

Читать дальше →
Total votes 179: ↑138 and ↓41+97
Comments227

Разделённые запросы в EF Core

Reading time7 min
Views16K

ORM Entity Framework Core с каждой версией становится все более и более богатой на фичи. Команда разработчиков тратит много времени на перфоманс и вероятно простое обновление Nuget-пакета уже приведет к некоторому бусту, который почувствуют пользователи. Но сегодня я хочу рассказать о совершенно конкретной фиче: это новый режим запросов — "разделённые запросы" или "split queries" в оригинале.

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments12

Паттерн Outbox: как не растерять сообщения в микросервисной архитектуре

Reading time8 min
Views76K

Привет! Меня зовут Михаил Боровиков, я тимлид команды, которая отвечает за систему процессинга заказов Lamoda — Orders Management. Эта система, словно «сердце» Lamoda, через которое проходит самый важный для бизнеса шаг — оформление заказа.

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

Для решения этой проблемы мы выбрали паттерн Outbox. И в этой статье я расскажу, что он из себя представляет, как мы его применили, почему пошли по пути at-least-once и не положились на работу одного брокера сообщений.

Читать далее
Total votes 28: ↑26 and ↓2+27
Comments27

Оконные функции SQL простым языком с примерами

Reading time4 min
Views530K

Привет всем!

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

P.S. Если автор что-то не разобрал и не написал, значит он посчитал это не обязательным в рамках этой статьи))) 

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

Читать далее
Total votes 49: ↑46 and ↓3+58
Comments16

Уровни изолированности транзакций для самых маленьких

Reading time5 min
Views259K


Сегодня хотел бы довести крайне интересный, но часто покрытый тайнами для обычных смертных программистов раздел базы данных (БД) — уровни изолированности транзакций. Как показывает практика, многие люди, связанные с IT, в частности с работой с БД, слабо понимают зачем нужны эти уровни и как их можно использовать себе во благо.

Немного теории


Сами транзакции особых объяснений не требуют, транзакция — это N (N≥1) запросов к БД, которые выполнятся успешно все вместе или не выполнятся вовсе. Изолированность же транзакции показывает то, насколько сильно влияют друг на друга параллельно выполняющиеся транзакции.
Выбирая уровень транзакции, мы пытаемся прийти к консенсусу в выборе между высокой согласованностью данных между транзакциями и скоростью выполнения этих самых транзакций.
Стоит отметить, что самую высокую скорость выполнения и самую низкую согласованность имеет уровень read uncommitted. Самую низкую скорость выполнения и самую высокую согласованность — serializable.
Читать дальше →
Total votes 42: ↑36 and ↓6+30
Comments17

14 вопросов об индексах в SQL Server, которые вы стеснялись задать

Reading time26 min
Views1.1M
Индексы — это первое, что необходимо хорошо понимать в работе SQL Server, но странным образом базовые вопросы не слишком часто задаются на форумах и получают не так уж много ответов.
Роб Шелдон отвечает на эти, вызывающие смущение в профессиональных кругах, вопросы об индексах в SQL Server: одни из них мы просто стесняемся задать, а прежде чем задать другие сначала подумаем дважды.


От переводчика
Данный пост является компиляцией двух статей Роба Шелдона:

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

Перейти к чтению
Total votes 40: ↑37 and ↓3+34
Comments44

Фильтры действий в ASP.NET Core

Reading time11 min
Views8.1K

ASP.NET Core — это мощный и универсальный фреймворк для создания веб-приложений. Он предоставляет широкий набор возможностей для создания надежных и масштабируемых приложений, и одной из ключевых фич, расширяющих его функциональность, являются фильтры действий (Action Filters). Фильтры действий позволяют выполнять код до или после выполнения метода контроллера (или метода действия), что дает возможность добавить в приложение сквозной функционал.

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

Читать далее
Total votes 9: ↑7 and ↓2+7
Comments1

Атомарные и неатомарные операции

Reading time8 min
Views125K


Перевод статьи Джефа Прешинга Atomic vs. Non-Atomic Operations. Оригинальная статья: http://preshing.com/20130618/atomic-vs-non-atomic-operations/

В Сети уже очень много написано об атомарных операциях, но в основном авторы рассматривают операции чтения-модификации-записи. Однако, существуют и другие атомарные операции, например, атомарные операции загрузки (load) и сохранения (store), которые не менее важны. В этой статье я сравню атомарные загрузки и сохранения с их неатомарными аналогами на уровне процессора и компилятора C/C++. По ходу статьи мы также разберемся с концепцией «состояния гонок» с точки зрения стандарта C++11.
Читать дальше →
Total votes 44: ↑43 and ↓1+42
Comments10

MVCC-6. Очистка

Reading time13 min
Views54K
Мы начали с вопросов, связанных с изоляцией, сделали отступление про организацию данных на низком уровне, затем подробно поговорили о версиях строк и о том, как из версий получаются снимки данных.

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

Обычная очистка (vacuum)


Что делает очистка


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

Основная, «обычная» очистка выполняется командой VACUUM и ее мы будем называть просто очисткой (а про автоочистку мы будем говорить отдельно).

Итак, очистка обрабатывает таблицу полностью. Она вычищает не только ненужные версии строк, но и ссылки на них из всех индексов.

Обработка происходит параллельно с другой активностью в системе. Таблица и индексы при этом могут использоваться обычным образом и для чтения, и для изменения (однако одновременное выполнение таких команд, как CREATE INDEX, ALTER TABLE и некоторых других будет невозможно).

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

В процессе работы обновляется и карта свободного пространства, чтобы отразить появившееся свободное места в страницах.
Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments17

Используем все возможности индексов в PostgreSQL

Reading time8 min
Views25K

В мире Postgres индексы крайне важны для эффективной навигации по хранилищу базы данных (его называют «куча», heap). Postgres не поддерживает для него кластеризацию, и архитектура MVCC приводит к тому, что у вас накапливается много версий одного и того же кортежа. Поэтому очень важно уметь создавать и сопровождать эффективные индексы для поддержки приложений.

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

Примечание: показанные ниже запросы работают на не модифицированном образце базы данных pagila.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments3

Использование выражений для фильтрации данных из БД

Reading time6 min
Views26K
Статья основана на ответе в StackOverflow. Начну с описания проблемы, с которой я столкнулся. Есть несколько сущностей в базе данных, которые нужно отображать в виде таблиц на UI. Для доступа к базе данных используется Entity Framework. Для этих таблиц есть фильтры, по полям этих сущностей. Нужно написать код для фильтрации сущностей по параметрам.
Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments38

Нормализация отношений. Шесть нормальных форм

Reading time8 min
Views1.5M
В данной теме я затрону 6 нормальных форм и методы приведения таблиц в эти формы.

Процесс проектирования БД с использование метода НФ является итерационным и заключается в последовательном переводе отношения из 1НФ в НФ более высокого порядка по определенным правилам. Каждая следующая НФ ограничивается определенным типом функциональных зависимостей и устранением соответствующих аномалий при выполнении операций над отношениями БД, а также сохранении свойств предшествующих НФ.
Читать дальше →
Total votes 37: ↑22 and ↓15+7
Comments14

Нет никакого потока

Reading time4 min
Views42K
Важная правда об асинхронности в своей первозданной форме: нет никакого потока.

Тех, кто возразит, несть числа. «Нет», кричат они, «если я ожидаю операцию, должен быть поток, в котором выполняется ожидание! Возможно это поток из пула. Или поток операционной системы! Или что-то, связанное с драйвером устройства...»

Не внемлем этим крикам. Если операция по-настоящему асинхронная, то никакого потока нет.

Скептики не убеждены. Высмеем же их.
Читать дальше →
Total votes 47: ↑40 and ↓7+33
Comments24

15 ресурсов по Git. Что почитать/посмотреть?

Level of difficultyEasy
Reading time2 min
Views25K

Всем привет! В этот раз собрали подборку вспомогательных материалов для изучения Git. Удобство и гибкость сделали Git стандартом для большинства современных IT-компаний. Поэтому умение работать с ним критично для любого программиста.

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

Читать далее
Total votes 12: ↑8 and ↓4+4
Comments6

Передача и обработка IAsyncEnumerable в Typescript с ASP.NET Core Web

Level of difficultyEasy
Reading time17 min
Views3.6K

Всем привет, Меня зовут Олег и я .NET разработчик в компании Bimeister. Я хотел поделиться своим интересным опытом по связи проекта на ASP.NET Core Web App с использованием IAsyncEnumerable коллекций и современного фронт-енд SPA приложения на Typescript.и Vue.js 3 версии.

Все эти технологии не новы и, на самом деле, фреймворк и технологии для веб части могут быть любые на ваш вкус: Angular, или React, или что-либо еще. Весь интерес представляет собой именно унификация процесса обмена с бэкендом на C# с современной асинхронной коллекцией. Я не буду заострять внимание на структуре обеих половин приложения подробно, скажу лишь, что использовал один из сложившихся в моей практики шаблонов для запуска  ASP.NET Core Web приложения с SPA. Все детали можно будет посмотреть в приложенном репозитории.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments7

Баблишко для тех, кто вкатывается в айтишку

Reading time3 min
Views111K

Алярма! Тут раздают баблишко тем, кто вкатывается в айтишечку!

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

Читать далее
Total votes 173: ↑135 and ↓38+133
Comments178

Как отправлять пользовательский интерфейс по API

Reading time7 min
Views7K
image

Есть приём, позволяющий совершенно по-новому представить работу с пользовательскими интерфейсами (UI). Можно передавать UI на клиент через различные API – так получаются серверно-управляемые пользовательские интерфейсы. Такой метод позволяет выйти на новый уровень гибкости и динамичности, трансформирует традиционные парадигмы разработки UI.

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

Но что же собой представляют серверно-управляемые UI? Как они работают и почему приобретают такую важность в современной разработке на JavaScript? В данном посте мы постараемся ответить на эти вопросы и углублённо рассмотреть серверно-управляемые UI, их достоинства, а также как можно реализовать такой интерфейс в вашем собственном проекте.
Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments11

Разработка REST-серверов на Go. Часть 1: стандартная библиотека

Reading time9 min
Views84K
Это — первый материал из серии статей, посвящённой разработке REST-серверов на Go. В этих статьях я планирую описать реализацию простого REST-сервера с использованием нескольких различных подходов. В результате эти подходы можно будет сравнить друг с другом, можно будет понять их относительные преимущества друг перед другом.

Первый вопрос разработчиков, которые только начинают применять Go, часто выглядит так: «Какой фреймворк стоит использовать для решения задачи X». И хотя это — совершенно нормальный вопрос, если задавать его, имея в виду веб-приложения и серверы, написанные на многих других языках, в случае с Go при ответе на этот вопрос нужно принять во внимание множество тонкостей. Существуют серьёзные аргументы как «за», так и «против» использования фреймворков в Go-проектах. Я, работая над статьями из этой серии, вижу своей целью объективное разностороннее исследование этого вопроса.


Читать дальше →
Total votes 35: ↑32 and ↓3+41
Comments8

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity