Как стать автором
Обновить
70
0
Андрей Гордиенков @VioletTape

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

Отправить сообщение

Многопоточность в .NET: когда не хватает производительности

Время на прочтение26 мин
Количество просмотров44K


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

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

Под катом — видео и расшифровка моего доклада с конференции DotNext, где я разбираю несколько примеров, когда использование средств из стандартной библиотеки .NET (Task.Delay, SemaphoreSlim, ConcurrentDictionary) привело к просадкам производительности, и предлагаю решения, заточенные под конкретные задачи и лишённые этих недостатков.
Всего голосов 49: ↑48 и ↓1+47
Комментарии87

Вам не нужен блокчейн: 8 популярных юзкейсов и почему они не работают

Время на прочтение10 мин
Количество просмотров36K

image


Порой диву даёшься, чего только люди не сделают «на блокчейне». С середины 2017 я занимаюсь аудитами безопасности смарт-контрактов и повидал всякого. В отдельную категорию я бы выделил «применения блокчейна», которые выглядят логичными и полезными, но в основе содержат проблему. И кочуют из стартапа в стартап вместе с ней. Здесь я рассмотрю ряд таких примеров, опишу проблемы и неработающие способы решения. После прочтения этого текста вы будете знать, с каких вопросов стоит начать, если вам как разработчику/клиенту/инвестору предложат такое «применение блокчейна».


Дисклеймеры


  • Я описываю юзкейсы и проблемы, которые возникают на первом шаге. Я не утверждаю, что эти проблемы нельзя решить. Но при рассмотрении подобной системы стоит понимать, как создатели предлагают решать соответствующую проблему.
  • Словосочетание «применение блокчейна» режет глаз. Тем не менее, здесь и далее я буду писать его без кавычек, хотя до сих пор до конца не уверен, что возможны другие применения блокчейна помимо денег, то есть кроме Bitcoin.

1. Supply Chain Management


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

Читать дальше →
Всего голосов 82: ↑81 и ↓1+80
Комментарии119

Управление секретами при помощи HashiCorp Vault

Время на прочтение21 мин
Количество просмотров71K
Как правильно хранить секреты? В репозитории, в системе деплоя или в системе управления конфигурациями? На личном компьютере, на серверах, а может в коробке под кроватью? А как управлять секретами, чтобы не допускать утечек?

Сергей Носков (Albibek) — руководитель группы информационной безопасности платформы из Авито, знает ответ на эти вопросы и поделится с нами. В Авито два года активно используют HashiCorp Vault, за это время набили шишки, и прокачали опыт до уровня «Мастер».

В статье всесторонне поговорим про Vault: что это такое, где и как используется в компании, как в Авито управляют секретами с помощью HashiCorp Vault, как используют Puppet и Kubernetes, варианты использования с Puppet и другими SCM, какие возникают проблемы, что болит у безопасников и разработчиков, и, конечно, поделимся идеями, как все исправить.


Всего голосов 31: ↑31 и ↓0+31
Комментарии10

Как лучше разбираться в людях

Время на прочтение31 мин
Количество просмотров102K
Рассказывать айтишникам про психологию то еще дело, некоторые читатели скажут: «Bullshit!», и вообще не поверят, потому что психологию, даже прикладную, нельзя назвать точной наукой. Тем не менее, задача этой статьи — показать и доказать вам, что некоторые модели действительно работают. В основе доклад Сергея Котырева из UMI на РИТ++ 2017, от его лица дальше и пойдет повествование.



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

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

Мне кажется, о поведении и предсказании поведения спиральных галактик мы знаем больше, чем о том, как поведет себя человек, например, моя жена, сотрудник, или особенно сотрудница моего отдела маркетинга, не говоря уже о пиарщицах. О том, что ближайшая к нам Галактика летит, и через сколько-то миллиардов лет столкнется с нашей, мы уже знаем точно.
Всего голосов 127: ↑113 и ↓14+99
Комментарии63

Анализируем локальные функции в C# 7

Время на прочтение9 мин
Количество просмотров31K
Добавление локальных функций в языке C# первоначально для меня было излишним. Прочитав статью в блоге SergeyT, я понял, что эта фича действительна нужна. Итак, кто сомневается в надобности локальных функций и кто еще не знает что это, вперед за знаниями!

Локальные функции — это новая возможность в C# 7, которая позволяет определять функцию внутри другой функции.
Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии19

Telegram-бот, webhook и 50 строк кода

Время на прочтение5 мин
Количество просмотров174K
Как, опять? Ещё один туториал, пережёвывающий официальную документацию от Telegram, подумали вы? Да, но нет! Это скорее рассуждения на тему того, как построить функциональный бот-сервис используя Python3.5+, asyncio и aiohttp. Тем интереснее, что заголовок на самом деле лукавит…
Читать дальше →
Всего голосов 31: ↑21 и ↓10+11
Комментарии19

Редкий SQL

Время на прочтение6 мин
Количество просмотров49K

Вводная


Когда часто сталкиваешься с какой-либо технологией, языком программирования, стандартом, формируется некая картина их возможностей, границы, в которых они используются. Так может продолжаться достаточно долго, пока на глаза не попадаются примеры, которые расширяют затвердевшие горизонты знания. Сегодня, я хотел бы рассказать о таких примерах и продемонстировать их для языка SQL. Интересные и редкие конструкции, забытые выражения, странные приемы ждут Вас в этой статье. Кого заинтересовал, добро пожаловать под кат.
Читать дальше →
Всего голосов 25: ↑19 и ↓6+13
Комментарии63

Node.js, Express и MongoDB: API за полчаса

Время на прочтение11 мин
Количество просмотров241K
Начинающему программисту разработка для Node.js может показаться сущим кошмаром. Виной всему – гибкость этой платформы и отсутствие чётких руководств. Но, на самом деле, всё не так уж и страшно.


Вот, например, типичная задача: разработка REST API, серверной части некоего приложения. Обилие собственных возможностей Node и множество дополнительных модулей, которые способны помочь в решении этой задачи, способны завести новичка в тупик, вызванный богатством выбора. Основные вопросы здесь заключаются в подборе компонентов и в настройке их совместной работы.
Читать дальше →
Всего голосов 39: ↑30 и ↓9+21
Комментарии30

Как сделать презентацию интерактивной

Время на прочтение6 мин
Количество просмотров26K

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


Всего голосов 36: ↑31 и ↓5+26
Комментарии9

Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

Время на прочтение9 мин
Количество просмотров75K
Вот уже около трех лет я использую в работе принципы Spec By Example, Domain Driven Design и CQRS. За это время накопился опыт практического применения этих практик на платформе .NET. В статье я хочу поделиться нашим опытом и выводами, которые могут быть полезными командам, желающим использовать эти подходы в разработке.

Факты, цифры, код
Всего голосов 39: ↑39 и ↓0+39
Комментарии45

Советы и рекомендации по работе с Unity3D

Время на прочтение33 мин
Количество просмотров93K


Я опубликовал первую статью «50 советов по работе с Unity» 4 года назад. Несмотря на то, что бóльшая её часть всё ещё актуальна, многое изменилось по следующим причинам:

  • Unity стал лучше. Например, теперь я могу доверять счётчику FPS. Возможность использования Property Drawers снизила необходимость написания пользовательских редакторов (Custom Editors). Способ работы с префабами стал меньше требовать заданных встроенных префабов (nested prefabs) и их альтернатив. Скриптуемые объекты стали более дружелюбными.

  • Улучшилась интеграция с Visual Studio, отладка стала намного проще и уменьшилась потребность в «обезьяньем» дебаггинге.

  • Стали лучше сторонние инструменты и библиотеки. В Asset Store появилось очень много ассетов, упрощающих такие аспекты, как визуальная отладка и логирование. Большая часть кода нашего собственного (бесплатного) плагина Extensions описана в моей первой статье (и многое из него описано здесь).

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

  • Я стал более опытным. За последние 4 года я поработал над многими проектами в Unity, в том числе над кучей прототипов игр, завершёнными играми, такими как Father.IO, и над нашим основным ассетом Unity Grids.

Эта статья является версией первоначальной статьи, переработанной с учётом всего вышеперечисленного.
Читать дальше →
Всего голосов 45: ↑42 и ↓3+39
Комментарии41

Что стоит почитать об Angular 2

Время на прочтение2 мин
Количество просмотров92K
Делюсь списком полезных источников по Angular 2. Подойдут как для начинающих, так и для тех, кто имеет опыт работы с фреймворком.
image
Читать дальше →
Всего голосов 33: ↑28 и ↓5+23
Комментарии28

Список полезных ресурсов по Microsoft SQL Server

Время на прочтение5 мин
Количество просмотров46K

Список из 147 бесплатных и платных интернет ресурсов для изучения и работы с Microsoft SQL Server.
Статья в формате markdown на английском языке доступна на Github

Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии29

RAML 1.0: обзор нововведений

Время на прочтение5 мин
Количество просмотров15K
RAML 1.0

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

Несколько месяцев формат RAML был существенно усовершенствован. Новая спецификация версии 1.0 была опубликована на официальном сайте относительно недавно, в начале октября 2015 года. По сравнению с предыдущей версией (0.8) в неё было внесено много изменений и дополнений. О наиболее значительных нововведениях мы подробно расскажем в этой статье.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии15

Как работает реляционная БД

Время на прочтение51 мин
Количество просмотров535K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Всего голосов 232: ↑229 и ↓3+226
Комментарии134

Мечты об идеальном API или как преодолевались сложности в проекте AdHands

Время на прочтение8 мин
Количество просмотров6K
Пользователи привыкли к принципу одного устройства и одного интерфейса. Этот тренд находит отражение и в бизнесе: многофункциональные корпоративные системы и порталы, единые площадки торговли и закупок, т.д. Онлайн-реклама не осталась в стороне – разрабатываются сервисы, нацеленные на значительную оптимизацию труда рекламодателей и рекламных агентств. И одним из серьёзных технических моментов при создании дашбордов и агрегаторов статистики остаётся работа с API – программным интерфейсом, через который происходит обмен данными между системами. Существует ли API мечты, как его создать и зачем он нужен?


Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии7

NFX — Ультраэффективная Бинарная Сериализация в CLR

Время на прочтение8 мин
Количество просмотров21K

Требования


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

  • самозацикленные графы объектов (деревья с back-references)
  • массивы структур (value types)
  • классы/структуры с readonly полями
  • инстансы существующих .Net коллекций (Dictionary, List), которые внутренне используют custom-сериализацию
  • большое кол-во инстансов типов, специализированных для конкретной задачи


Речь пойдёт о трёх аспектах, которые очень важны в распределённых кластерных системах:

  • скорость сериализации/десериализации
  • объём объектов в сериализированном виде
  • возможность использовать существующие объекты без надобности “украшения” этих объектов и их полей вспомогательными атрибутами для сериализации

Читать дальше →
Всего голосов 24: ↑19 и ↓5+14
Комментарии40

Храним 300 миллионов объектов в CLR процессе

Время на прочтение5 мин
Количество просмотров35K

Камень преткновения — GC


Все managed языки такие как Java или C# имеют один существенный недостаток — безусловное автоматическое управление паматью. Казалось бы, именно это и является преимуществом managed языков. Помните, как мы барахтались с dandling-указателями, не понимая, куда утекают драгоценные 10KB в час, заставляя рестартать наш любимый сервер раз в сутки? Конечно, Java и C# (и иже с ними) на первый взгляд разруливают ситуацию в 99% случаев.

Так-то оно так, только вот есть одна проблемка: как быть с большим кол-вом объектов, ведь в том же .Net никакой магии нет. CLR должен сканировать огромный set объектов и их взаимных ссылок. Это проблема частично решается путём введения поколений. Исходя из того, что большинство объектов живёт недолго, мы высвобождаем их быстрее и поэтому не надо каждый раз ходить по всем объектам хипа.

Но проблема всё равно есть в тех случаях, когда объекты должны жить долго. Например, кэш. В нём должны находиться миллионы объектов. Особенно, учитывая возрастание объемов оперативки на типичном современном серваке. Получается, что в кэше потенциально можно хранить сотни миллионов бизнес-объектов (например, Person с дюжиной полей) на машине с 64GB памяти.

Однако на практике это сделать не удаётся. Как только мы добавляем первые 10 миллионов объектов и они “устаревают” из первого поколения во второе, то очередной полный GC-scan “завешивает” процесс на 8-12 секунд, причём эта пауза неизбежна, т.е. мы уже находимся в режиме background server GC и это только время “stop-the-world”. Это приводит к тому, что серверная апликуха просто “умирает” на 10 секунд. Более того, предсказать момент “клинической смерти” практически невозможно.
Что же делать? Не хранить много объектов долго?

Зачем


Но мне НУЖНО хранить очень много объектов долго в конкретной задаче. Вот например, я храню network из 200 миллионов улиц и их взаимосвязей. После загрузки из flat файла моё приложение должно просчитать коэффициенты вероятностей. Это занимает время. Поэтому я это делаю сразу по мере загрузки данных с диска в память. После этого мне нужно иметь object-graph, который уже прекалькулирован и готов “к труду и обороне”. Короче, мне нужно хранить резидентно около 48GB данных в течении нескольких недель при этом отвечаю на сотни запросов в секунду.

Вот другая задача. Кэширование социальных данных, которых скапливаются сотни миллионов за 2-3 недели, а обслуживать необходимо десятки тысяч read-запросов в секунду.
Читать дальше →
Всего голосов 50: ↑44 и ↓6+38
Комментарии81

Что я узнал о будущем после прочтения 100 научно-фантастических книг

Время на прочтение10 мин
Количество просмотров55K
Что я узнал о будущем после прочтения 100 научно-фантастических книг

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

Я начал читать научную фантастику, просто чтобы скоротать время. У меня остались хорошие воспоминания о прочтении «Парк Юрского периода» в детстве. Я продолжил читать, потому что я заметил, что эта книга дала мне кое-что: сильное воображение, нелюбовь к обыденности.

Я поймал себя на том, что мои идеи отличаются от тех, которые множество черпают из тех же статей TechCrunch, Hacker News, Хабрахабра и других «ежедневных» сайтов жителей Силиконовой (Кремниевой) долины. Мой бизнес — это продажа идей, а эти книги одновременно настоящее сокровище и мой инструментарий.

Как говорит футуролог Джейсон Сильва:
«Воображение позволяет нам ощущать восхитительные будущие возможности, выбрать наиболее удивительную, и двигать настоящее вперед, чтобы в конце-концов встретить её.»

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

Каждая хорошая научная фантастика, по сути, это мысленный эксперимент, и я хотел бы запустить свой собственный прямо сейчас:
Ещё две тысячи слов
Всего голосов 46: ↑43 и ↓3+40
Комментарии125

Мы закрываем проект CppCat

Время на прочтение6 мин
Количество просмотров48K
CppCat RIP

Чуть больше года назад, мы решили провести эксперимент и выпустить альтернативу статического анализатора кода PVS-Studio для маленьких команд и индивидуальных разработчиков. Так появился очень недорогой анализатор под названием CppCat. Сейчас можно подвести итоги этого эксперимента и признать, что он оказался неудачным. За срок чуть более года он принёс приблизительно столько денег, сколько было потрачено на его разработку, продвижение и поддержку. Таким образом проект убыточен. Ведь потраченное время (самый ценный ресурс) мы могли бы использовать для совершенствования PVS-Studio. Мы вынуждены закрыть проект CppCat и сосредоточиться на PVS-Studio. Надеюсь, читателям будет интересен чужой опыт в реализации новой бизнес идеи. Негативный опыт — это тоже полезный опыт.
Читать дальше →
Всего голосов 131: ↑100 и ↓31+69
Комментарии169
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Wroclaw, Польша
Зарегистрирован
Активность