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

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

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

GO Scheduler: теперь не кооперативный?

Время на прочтение8 мин
Количество просмотров35K
Если вы читали release notes для версии GO 1.14, то возможно заметили несколько довольно интересных изменений в рантайме языка. Вот и меня очень заинтересовал пункт: «Goroutines are now asynchronously preemptible». Выходит что GO scheduler (планировщик) теперь не кооперативный? Что же, после прочтения по диагонали соответствующего proposal любопытство было удовлетворено.

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

image
Читать дальше →
Всего голосов 59: ↑55 и ↓4+51
Комментарии9

Индексы в PostgreSQL — 1

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

Предисловие


В этой серии статей речь пойдет об индексах в PostgreSQL.

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

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

В этой части мы поговорим про разделение сфер ответственности между общим механизмом индексирования, относящимся к ядру СУБД, и отдельными методами индексного доступа, которые в PostgreSQL можно добавлять как расширения. В следующей части мы рассмотрим интерфейс метода доступа и такие важные понятия, как классы и семейства операторов. После такого длинного, но необходимого введения мы подробно рассмотрим устройство и применение различных типов индексов: Hash, B-tree, GiST, SP-GiST, GIN и RUM, BRIN и Bloom.
Читать дальше →
Всего голосов 104: ↑103 и ↓1+102
Комментарии59

Объясняя необъяснимое. Часть 3

Время на прочтение16 мин
Количество просмотров44K
В рамках подготовки к конференции PG Day’16 мы продолжаем знакомить вас с интересными аспектами PostgreSQL. И сегодня предлагаем вам перевод третьей статьи из серии об explain.

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

Сегодня мы перейдем к более сложным операциям.


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

Senior Engineer в поисках работы. О задачах на технических собеседованиях и теоретических вопросах

Время на прочтение15 мин
Количество просмотров51K
Продолжаем говорить о технических собеседованиях (если вы не читали — просмотрите предыдущие статьи из цикла — о собеседованиях с HR и технических). В этот раз будет больше субъективного опыта, минимум советов, а также немножко про тестовые задания и теоретические вопросы. Поехали.

Disclaimer: автор — не турборазработчик, а обычная веб-макака без претензий. Поэтому приведенные задания и решения могут вызвать у вас улыбку, баттхерт и желание указать автору на его некомпетентность. С нетерпением жду вас в комментариях! :)

Обсуждение выполненных тестовых заданий


В прошлой части я описывал, что делал аж два тестовых задания: первое на DevOps Engineer, второе — на Ruby Developer. Расскажу, что же было дальше.
Читать дальше →
Всего голосов 85: ↑76 и ↓9+67
Комментарии302

Direct routing и балансировка с помощью NFT vs Nginx

Время на прочтение6 мин
Количество просмотров7.1K
При разработке высоконагруженых сетевых приложений возникает необходимость в балансировке нагрузки.

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

Несмотря на все прелести Nginx, если: 

  1. Не нужно работать с HTTP(s).
  2. Нужно выжать из сети максимум.
  3. Нет необходимости что либо кешировать - за балансером чистые API - сервера с динамикой.

Может возникнуть вопрос: а зачем нужен Nginx? Зачем тратить ресурсы на балансировку на L7, не проще ли просто пробросить SYN-пакет? (L4 Direct Routing).
Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии14

Повышение привилегий в PostgreSQL — разбор CVE-2018-10915

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

Не секрет, что стейт-машины среди нас. Они буквально повсюду, от UI до сетевого стека. Иногда сложные, иногда простые. Иногда security-related, иногда не очень. Но, зачастую, довольно увлекательны для изучения :) Сегодня я хочу рассказать об одном забавном случае с PostgreSQL — CVE-2018-10915, которая позволяла повышать привилегии до superuser.

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

Разработка приложений на Elixir/Phoenix с помощью Docker

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров6.2K


Под катом небольшое и простое руководство, в котором показано, как использовать Docker Compose для настройки и запуска приложения Elixir/Phoenix + PostgreSQL.
Читать дальше →
Всего голосов 17: ↑13 и ↓4+9
Комментарии1

Apache Kafka и RabbitMQ: семантика и гарантия доставки сообщений

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


Подготовили перевод следующей части многосерийной статьи, где сравнивается функциональность Apache Kafka и RabbitMQ. В этой публикации речь идёт о семантике и гарантии доставки сообщений. Обращаем ваше внимание, что автор учитывал Кафку до версии 0.10 включительно, а в версии 0.11 появился exactly-once. Тем не менее, статья остаётся актуальной и полна полезных с практической точки зрения моментов.
Предыдущие части: первая, вторая.
Читать дальше →
Всего голосов 34: ↑34 и ↓0+34
Комментарии2

Дайджест новостей из мира PostgreSQL. Предновогодний (укороченный) выпуск №13

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


Мы продолжаем знакомить вас с самыми интересными новостями по PostgreSQL. В этом предновогоднем выпуске не будем утомлять вас длинным перечнем новостей. С Наступающим Новым Годом!

Релизы


pgAdmin4 3.6

В этой версии добавлены:

  • из панели Properties можно дропать несколько объектов одновременно;
  • можно импортировать из и экспортировать в определения серверов из базы и в базу данных конфигураций.

pgpoolAdmin 4.0.2

Можно скачать здесь, как и многочисленные предыдущие версии.

dbForge Studio for PostgreSQL v2.0

На этот раз devart выпустила Studio со Standard edition, в которой есть функциональность, не включенная в бесплатную версию Express. 30 дней можно пользоваться Standard edition бесплатно. О различиях Standard и Express можно почитать здесь.

VOPS-2.0

Вышла новая версия расширения PostgreSQL от Postgres Professional для эффективного исполнения векторных операций.

pg_probackup 2.0.25

Новая версия утилиты для бэкапа и восстановления, тоже от Postgres Professional

pgCluu 2.9

Новую версию этой программы на Perl для аудита производительности кластеров с PostgreSQL можно скачать здесь. pgCluu собирает статистику работы не только СУБД, но и системные ресурсы кластера.

postgres_dba 4.0

Вышла новая версия утилиты Николая Самохвалова для администрирования PostgreSQL. В ней появились три новых отчета: список расширений, настройка параметров PostgreSQL и Вакуум: что происходит прямо сейчас. И, конечно, доработки и исправления.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии2

Анимация подчёркивания ссылок на чистом CSS

Время на прочтение2 мин
Количество просмотров39K
Одно из преимуществ создания моего личного сайта с нуля вместо использования готовой темы заключается в том, что я начинаю с настроек браузера по умолчанию и постепенно добавляю собственные расцветки. Я стараюсь удержать сайт от раздувания, но и персонализация — важное дело. Нужно найти некий компромисс между спартанскими страницами Hacker News и Craigslist с одной стороны и перегруженностью старого MySpace с другой.

Как-то мне попался сайт с причудливыми анимированными подчёркиваниями для ссылок, и я захотел реализовать эффект. Но мне важно использовать чистый CSS, потому что ради таких легкомысленных вещей негоже добавлять JavaScript, который может вызвать проблемы с производительностью или удобством интерфейса (см. угон полосы прокрутки).
Всего голосов 14: ↑11 и ↓3+8
Комментарии10

Решаем проблемы типов данных в Ruby или Make data reliable again

Время на прочтение7 мин
Количество просмотров5.3K
В этой статье я хотел бы рассказать о том, какие проблемы с типами данных есть в Ruby, с какими проблемами столкнулся я, как их можно решить и как сделать так, чтобы на данные, с которыми мы работаем, можно было положиться.

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

Для чего программисту Continuous Integration и с чего начинать

Время на прочтение8 мин
Количество просмотров52K
Представьте что в Роскосмосе решили собрать новую ракету не имея при этом чертежей и четкого понимания как ракета должна быть устроена. Отдельный завод занимается корпусом ракеты, отдельный выпускает двигатели, еще один — сопла. Главный менеджер Роскосмоса сказал что он доверяет профессионалам, и мастерски сделегировал всю работу заводам.



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

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

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

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

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

В 1991 году Гради Буч, видимо, устал от такого безобразия, и предложил делать сборку всего проекта каждый день, чтобы выяснять несовместимости не в день релиза, а пораньше — и назвал этот подход Continuous Integration.
Читать дальше →
Всего голосов 58: ↑52 и ↓6+46
Комментарии56

Секреты сборки и пересылка SSH в Docker 18.09

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

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


Команда сборки Docker 18.09 включает множество обновлений. Основная особенность — в том, что появился абсолютно новый вариант реализации серверной части, он предлагается в рамках проекта Moby BuildKit. Серверное приложение BuildKit обзавелось новыми функциями, среди которых — поддержка секретов сборки Dockerfile.

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

Очень большой Postgres

Время на прочтение9 мин
Количество просмотров85K
Так уж случилось, что последнее время приходилось заниматься оптимизацией и масштабированием различных систем. Одной из задач было масштабирование PostgreSQL. Как обычно происходит оптимизация БД? Наверное, в первую очередь смотрят на то, как правильно выбрать оптимальные настройки для работы и какие индексы можно создать. Если обойтись малой кровью не вышло, переходят к наращиванию мощностей сервера, выносу файлов журнала на отдельный диск, балансировке нагрузки, разбиению таблиц на партиции и к всякого рода рефакторингу и перепроектированию модели. И вот уже все идеально настроено, но наступает момент, когда всех этих телодвижения оказывается недостаточно. Что делать дальше? Горизонтальное масштабирование и шардинг данных.


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

Как работает GIL в Ruby. Часть 2

Время на прочтение6 мин
Количество просмотров11K
В прошлый раз я предложил заглянуть в код MRI, чтобы разобраться с реализацией GIL и ответить на оставшиеся вопросы. Что мы сегодня и сделаем.

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

В предыдущей серии


После первой части остались два вопроса:

  1. Делает ли GIL array << nil атомарной операцией?
  2. Делает ли GIL код на Ruby потокобезопасным?

На первый вопрос можно ответив, взглянув на реализацию, поэтому начнем с него.
Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии3

CRDT: Conflict-free Replicated Data Types

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

Как считать хиты страницы google.com? А как хранить счётчик лайков очень популярных пользователей? В этой статье предлагается рассмотреть решение этих задач с помощью CRDT (Conflict-free Replicated Data Types, что по-русски переводится примерно как Бесконфликтные реплицированные типы данных), а в более общем случае — задачи синхронизации реплик в распределённой системе с несколькими ведущими узлами.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+18
Комментарии14

Операции над комплексными числами

Время на прочтение2 мин
Количество просмотров12K
Здравствуй, %username%!
Я получил довольно много отзывов о первой части и постарался все их учесть.
В первой части я писал о сложении, вычитании, умножении и делении комплексных чисел.
Если не знаешь это — скорей беги читать первую часть :-)
Статья оформлена в виде шпарлагки, истории здесь крайне мало, в основном формулы.
Приятного чтения!
Читать дальше →
Всего голосов 16: ↑8 и ↓80
Комментарии11

Введение в комлексные числа

Время на прочтение2 мин
Количество просмотров31K
Привет!

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

image

А школьники могут что-то новое узнать ;)
// Всех кого заинтересовал прошу под кат.
Читать дальше →
Всего голосов 56: ↑28 и ↓280
Комментарии109

Делаем резервное копирование сайта с помощью git и Makefile

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

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


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


Автор пользуется стеком django/uwsgi/nginx, виртуальным выделенным сервером под управлением GNU/Linux, но содержание статьи почти не зависит от конкретных технологий.

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

Protected методы в JavaScript ES5

Время на прочтение9 мин
Количество просмотров13K
Про объектную модель в JavaScript написано много замечательных статей. Да и про различные способы создания приватных членов класса в интернете полно достойных описаний. А вот про protected методы — данных очень немного. Я бы хотел восполнить этот пробел и рассказать, как можно создать protected методы без библиотек на чистом JavaScript ECMAScript 5.

В этой статье:


Ссылка на git-hub репозиторий с исходный кодом и тестами.
Читать дальше →
Всего голосов 19: ↑15 и ↓4+11
Комментарии8

Информация

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