Как стать автором
Обновить
0
0
HesusMan @JesusMen

.net developer

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

Запуск фоновых задач в asp.net core

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

Небольшой обзор стандартных средств запуска бэкграунд-задач в аспнет приложениях — что есть, чем отличается, как пользоваться. Встроенный механизм запуска таких задач строится вокруг интерфейса IHostedService и метода-расширения для IServiceCollection — AddHostedService. Но есть несколько способов реализовать фоновые задачи через этот механизм (и ещё несколько неочевидных моментов поведения этого механизма).

Читать далее
Всего голосов 15: ↑14 и ↓1+14
Комментарии10

Перестроились в модульный монолит, а не в микросервисы

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

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

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

Об авторе статьи. Меня зовут Илья, я занимаюсь разработкой новой версии. Мне не довелось работать с предыдущими версиями "Юнидата", и в проект я пришел на этапе прототипа. Я могу быть не до конца объективен на тему того, почему было выбрано то или иное решение, если это происходило еще до моего присоединения к продукту. В причинах перехода я написал свое видение, после общения с командой.

Итак, всем, кто любит истории переезда с ноткой технических особенностей, добро пожаловать под кат.

Краткий тех.обзор

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

Кроме того, продукт разделён на Community Edition (хранится в публичном гитлабе) и Enterprise Edition.

Фронтенд состоит из 20 модулей (число не конечное). Мы используем свежую версию typescript и почти свежую react (сейчас 16, но перевод на 17 - дело ближайшего времени). Применяем MVC подход в каждом модуле: реакт только view-слой, своя observable модель (обязательно про нее напишем отдельную статью), mobx сторы в качестве контроллеров.

Читать далее
Всего голосов 9: ↑9 и ↓0+9
Комментарии2

Как ускорить аутентификацию и снизить потребление памяти в 5 раз? Наймите дворецкого

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

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

Меня зовут Роман Литвинов, я разработчик в команде Учи.ру. Хочу вам рассказать именно о такой истории из практики и о нашем сервисе под названием Butler, о «дворецком», через которого проходит каждый пользователь, прежде чем зайти на платформу.

Итак, овсянка, сэр.

Читать далее
Всего голосов 3: ↑2 и ↓1+2
Комментарии10

Domain Driven Design на практике

Время на прочтение12 мин
Количество просмотров274K
Эванс написал хорошую книжку с хорошими идеями. Но этим идеям не хватает методологической основы. Опытным разработчикам и архитекторам на интуитивном уровне понятно, что надо быть как можно ближе к предметной области заказчика, что с заказчиком надо разговаривать. Но не понятно как оценить проект на соответствие Ubiquitous Language и реального языка заказчика? Как понять, что домен разделен на Bounded Context правильно? Как вообще определить используется DDD в проекте или нет?

Последний пункт особенно актуален. На одном из своих выступлений Грег Янг попросил поднять руки тех, кто практиукует DDD. А потом попросил опустить тех, кто создает классы с набором публичных геттеров и сеттеров, располагает логику в «сервисах» и «хелперах» и называет это DDD. По залу прошел смешок:)

Как же правильно структурировать бизнес-логику в DDD-стиле? Где хранить «поведение»: в сервисах, сущностях, extension-методах или везде по чуть-чуть? В статье я расскажу о том, как проектирую предметную область и какими правилами пользуюсь.
Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии18

werf vs. Helm: корректно ли их вообще сравнивать?

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

Эта статья — развернутый ответ на вопрос, который нам периодически задают: чем werf отличается от Helm? На первый взгляд можно предположить, что задача у них примерно одинаковая: автоматизировать деплой приложений в Kubernetes. Но всё, конечно, немного сложнее…

Читать далее
Всего голосов 41: ↑40 и ↓1+48
Комментарии9

Microservices. Как правильно делать и когда применять?

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



Автор: Вячеслав Михайлов



Монолитные приложения и их проблемы



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





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





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



  • сложность системы постоянно растет;
  • поддерживать ее все сложнее и сложнее;
  • разобраться в ней трудно — особенно если система переходила из поколения в поколение, логика забывалась, люди уходили и приходили, а комментариев и тестов нет);
  • много ошибок;
  • мало тестов — монолит не разобрать и не протестировать, поэтому обычно есть только UI-тесты, поддержка которых обычно занимает много времени;
  • дорого вносить изменения;
  • застревание на технологиях (например, я работал в компании, где с 2003 г. технологии до сих пор не изменились).


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


Читать дальше →
Рейтинг0
Комментарии6

Лучшие практики обработки исключений в C#

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

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

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

Как перестать DDoS-ить чужой API и начать жить

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

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

Читать далее
Всего голосов 9: ↑9 и ↓0+9
Комментарии2

6 вещей, которые не стоит делать в ASP.NET контроллерах

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

«Ваши .NET контроллеры должны быть тонкими»

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

Почему они должны быть тонкими? Какой в этом плюс? Как сделать их тонкими, если они сейчас не такие? Как сохранить их тонкими?

Мне интересно!
Всего голосов 21: ↑13 и ↓8+11
Комментарии28

Многопоточность на низком уровне

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

Очень часто при обсуждении многопоточности на платформе .NET говорят о таких вещах, как детали реализации механизма async/await, Task Asynchronous Pattern, deadlock, а также разбирают System.Threading. Все эти вещи можно назвать высокоуровневыми (относительно темы хабрапоста). Но что же происходит на уровне железа и ядра системы (в нашем случае — Windows Kernel)?


На конференции DotNext 2016 Moscow Гаэл Фретёр, основатель и главный инженер компании PostSharp, рассказал о том, как в .NET реализована многопоточность на уровне железа и взаимодействия с ядром операционной системы. Несмотря на то, что прошло уже пять лет, мы считаем, что никогда не поздно поделиться хардкорным докладом. Гаэл представил нам хорошую базу по работе процессора и атомнарным примитивам.



Вот репозиторий с примерами из доклада. А под катом — перевод доклада и видео. Далее повествование будет от лица спикера.

Всего голосов 31: ↑30 и ↓1+40
Комментарии16

Ловушка знаний или как ускорить обучение в несколько раз

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

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

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

Познать дзен быстрого обучения
Всего голосов 28: ↑21 и ↓7+21
Комментарии71

Принципы работы IQueryable и LINQ-провайдеров данных

Время на прочтение8 мин
Количество просмотров76K
Средства LINQ позволяют .Net-разработчикам единообразно работать как с коллекциями объектов в памяти, так и с объектами, хранящимися в базе данных или ином удаленном источнике. Например, для запроса десяти красных яблок из списка в памяти и из БД средствами Entity Framework мы можем использовать абсолютно идентичный код:

List<Apple> appleList; 
DbSet<Apple> appleDbSet;
var applesFromList = appleList.Where(apple => apple.Color == “red”).Take(10);
var applesFromDb = appleDbSet.Where(apple => apple.Color == “red”).Take(10);

Однако, выполняются эти запросы по-разному. В первом случае при перечислении результата с помощью foreach яблоки будут отфильтрованы с помощью заданного предиката, после чего будут взяты первые 10 из них. Во втором случае синтаксическое дерево с выражением запроса будет передано специальному LINQ-провайдеру, который транслирует его в SQL-запрос к базе данных и выполнит, после чего сформирует для 10 найденных записей объекты С# и вернет их. Обеспечить такое поведение позволяет интерфейс IQueryable<T>, предназначенный для создания LINQ-провайдеров к внешним источникам данных. Ниже мы попробуем разобраться с принципами организации и использования этого интерфейса.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии3

IQueryable порождает сильную связанность

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

Время от времени я встречаю людей, пытающихся выразить API в терминах IQueryable<T>. Почти всегда это плохая идея. В этой статье я объясню почему. Вкратце, IQueryable<T> — это один из лучших примеров заголовочного интерфейса (Header Interface), предлагаемых платформой .NET. Его почти невозможно реализовать полностью.


Эта статья о проблемах реализации API на основе интерфейса IQueryable<T>. Это не претензия к интерфейсу как таковому. Кроме этого, это не претензия к замечательным методам LINQ, доступным для интерфейса IEnumerable<T>.

Можно сказать, что IQueryable<T> — это одно сплошное нарушение принципа подстановки Лисков. Я буду использовать закон Постела, чтобы объяснить почему это так.


Принцип устойчивости, также известен как закон Постела в честь Джона Постела: «Будь либерален к тому, что принимаешь, и консервативен к тому, что отсылаешь (Be liberal in what you accept, and conservative in what you send)».
Читать дальше →
Всего голосов 18: ↑17 и ↓1+21
Комментарии38

Безопасность hdfs hive hbase используя knox и ranger

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

Apache HDFS (Hadoop Distributed File System) — файловая система, предназначенная для хранения файлов больших размеров, поблочно распределённых между узлами вычислительного кластера.
Apache Hive — система управления базами данных на основе платформы Hadoop.
Apache HBase — СУБД класса NoSQL с открытым исходным кодом, проект экосистемы Hadoop.
Apache KNOX — REST API и шлюз приложений для компонентов экосистемы Apache Hadoop, обеспечивает единую точку доступа для всех HTTP соединений с кластерами Apache Hadoop и систему единой аутентификации Single Sign On (SSO) для сервисов и пользовательского интерфейса компонент Apache Hadoop.
Apache Ranger – это инфраструктура для обеспечения, мониторинга и управления комплексной безопасностью данных на платформе Hadoop


Перевод поста Securing hdfs hive hbase knox ranger 2015 года. Получше и поновее поста не нашел.

Читать дальше →
Всего голосов 7: ↑6 и ↓1+5
Комментарии0

3 года Q#. Что уже сделано и что дальше

Время на прочтение3 мин
Количество просмотров5.4K
2020 год был непохожим на другие. В жизни преобладали вирус COVID-19 и меры, принятые во всем мире для сдерживания его распространения. Я и вся команда Microsoft Quantum надеемся, что вы и ваши близкие благополучно переживают пандемию, и желаем вам дальнейшего здоровья и безопасности в наступающем году.

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

Под катом расскажем подробнее о том, что произошло с Q# за этот год и немного заглянем в будущее.

Читать дальше →
Всего голосов 9: ↑6 и ↓3+4
Комментарии0

Простое и удобное журналирование ошибок для сайтов на .NET Core

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

Возможно, многим знакома библиотека ELMAH (Error Logging Modules and Handlers), которая позволяет организовать простое журналирование ошибок для любого сайта, созданного с помощью .NET Framework.



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


Но это же opensource проект! Несколько выходных в работе над форком, и вот готова первая версия ELMAH работающая под .NET Core.


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

Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии12

Как бы я изучал Data Science, если бы начал пару лет назад, или Руководство по эффективному изучению науки о данных

Время на прочтение5 мин
Количество просмотров30K
Когда я только начал своё путешествие к науке о данных, я потратил много времени на то, чтобы понять, с чего начать, что я должен узнать в первую очередь и какие ресурсы должен использовать. За последние два года я узнал несколько вещей, о которых хотел знать раньше, например о том, стоит ли сначала сосредоточиться на программировании или статистике, какие ресурсы я должен использовать для изучения новых навыков, как я должен подходить к изучению этих навыков и так далее. Таким образом, эта статья написана, чтобы дать направления и идеи для тех, кто изучает Data Science.

Приятного чтения!
Всего голосов 30: ↑29 и ↓1+35
Комментарии3

Миллион видеозвонков в сутки или «Позвони маме!»

Время на прочтение26 мин
Количество просмотров18K
С точки зрения пользователя, сервисы звонков выглядят довольно просто: заходишь на страницу к другому пользователю, звонишь, он снимает трубку, вы с ним разговариваете. Снаружи кажется, что все просто, но немногие знают, как сделать такой сервис. А вот Александр Тоболь (alatobol) не только знает, но и охотно делится своим опытом.



Далее текстовая версия доклада на HighLoad++ Siberia, из которой вы узнаете:

  • как работают сервисы видеозвонков под капотом;
  • как красиво пробить NAT — это будет интересно и специалистам из игровой сферы, которым необходимо peer-to-peer соединение;
  • как устроен WebRTC, какие протоколы в него входят;
  • как можно тюнить WebRTC через BigData.


О спикере: Александр Тоболь руководит разработкой платформ Видео и Ленты в ok.ru.
Всего голосов 47: ↑46 и ↓1+45
Комментарии16

Видеозвонки под капотом: от миллионов в сутки до 100 участников в одной конференции

Время на прочтение21 мин
Количество просмотров11K
Сейчас, кажется, невозможно найти мессенджер без функции звонков. Это удобно для пользователей, потому что все коммуникации можно вести в одном приложении. Если объединить всю доступную в СМИ статистику, то получится, что люди разговаривают через интернет более миллиарда минут в день. И по мере развития технологий растет доля видеосвязи, потому что видео лучше передает эмоции собеседника и позволяет создать эффект присутствия.

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

Руководитель разработки платформ Видео и Лента Александр Тоболь (alatobol) покажет, что под капотом у сервиса видеозвонков, какие технологии и хаки применить, чтобы сделать свой сервер конференций, и как правильно передавать видео. Заходите под кат и узнаете, как перевести сервис звонков один на один к групповым звонкам на 100 человек и зачем вообще нужна поддержка такого количества участников.
Всего голосов 34: ↑33 и ↓1+45
Комментарии2

Про новинки в .NET 5 и C# 9.0

Время на прочтение21 мин
Количество просмотров85K
Добрый день.

В нашей компании .NET используется с самого его рождения. У нас в продуктиве работают решения, написанные на всех версиях фреймворка: от самой первой и до последней на сегодняшний день .NET Core 3.1.

История .NET, за которой мы пристально следим всё это время, творится на глазах: версия .NET 5, которую планируют релизить в ноябре, только что вышла в виде Release Candidate 2. Нас давно предупреждали, что пятая версия будет эпохальной: с нею закончится .NET-шизофрения, когда существовали две ветки фреймворка: классический и Core. Теперь они сольются в экстазе, и будет один сплошной .NET.

Вышедший RC2 уже можно начинать полноценно использовать – никаких новых изменений перед релизом больше не ожидается, будет только фикс найденных багов. Более того: на RC2 уже работает официальный сайт, посвящённый .NET.

А мы представляем вам обзор новшеств в .NET 5 и C# 9. Вся информация с примерами кода взята из официального блога разработчиков платформы .NET (а также ещё из массы источников) и проверена лично.
Читать дальше →
Всего голосов 131: ↑131 и ↓0+131
Комментарии152

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность