RSS

Комментарии

На этой неделе пользователи Hacker News решили обсудить вопрос «Каков максимальный объем плохого — но при этом работающего — кода вам доводилось видеть?» (позже к ним присоединились и пользователи Reddit). В комментариях было рассказано немало «веселых» историй про то, с чем мы все время от времени сталкиваемся; но больше всего внимания привлек рассказ про код «передовой СУБД, которую используют большинство компаний, входящих в список Fortune 100».

Победителем в номинации «лавкрафтовские ужасы» заслуженно стал рассказ бывшего разработчика Oracle, который работал над Oracle Database в период разработки версии 12.2. Объем кодовой базы СУБД на тот момент составлял 25 миллионов строк на языке C — и стоило вам изменить лишь одну из этих строк, как ломались тысячи написанных ранее тестов.

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

Для того, чтобы предсказать поведение кода в том или ином случае, приходится разбираться и запоминать, какие значения и последствия могут иметь 20 (а то и сотня) флагов. Ситуацию ухудшает тот факт, что различные разработчики использовали свои собственные типы, которые по своей сути представляли собой одно и то же (например, int32) — и едва ли кто-то рискнет тронуть подобное легаси (можно точно сказать, что это имело место быть в кодовой базе Oracle 8i).

Возникает вопрос: каким же образом при всем этом Oracle Database до сих пор удается держаться на ногах? Секрет — в миллионах тестов. Их полное выполнение может занимать от 20 до 30 часов (при этом выполняются они распределенно на тестовом кластере из 100-200 серверов).

В команде, которая работала над продуктом в конце 90-ых и придерживалась идей TDD (test-driven development), бытовало следующее мнение: «автоматизированные тесты означают то, что вы не обязаны писать код, который можно будет понять – вместо этого за вас должны думать тесты». В дальнейшем разработчики были вынуждены придерживаться заложенных ими принципами, и теперь мы на практике наблюдаем, чем обернулась эта идея в долгосрочной перспективе — со всеми ее плюсами и минусами.

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

Затем он отправляет код на тестирование, и на следующий день спокойно переключается на другую задачу, ожидая, пока тестовый кластер соберет новую сборку Oracle DB и прогонит на ней все тесты. Если разработчику повезло, «покраснеет» примерно 100 тестов; если нет (и этот вариант случается чаще) — около 1000, и ему придется проверять, какое из его предположений о работе существующего кода оказалось неверным; вполне возможно, что он обнаружит, что ему требуется изучить еще десяток различных флагов, которые неочевидным образом принимали участие в работе кода, который он изменил.

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

В силу того, что на сборку СУБД и выполнение тестов уходит не менее суток, ожидается, что каждый разработчик работает одновременно над 2-3 багами и переключается между ними, пока ждет результатов тестирования.

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

В описанном случае, TDD позволяет не рассыпаться «спагетти»-коду, в котором уже крайне сложно что-то понять, и иметь на выходе рабочий продукт. При этом, издержки продолжают расти, и качество нового кода часто оставляет желать лучшего. Над СУБД работает не только команда разработчиков из США, но и команда из Индии, поэтому некоторые разработчики Oracle по сложившейся традиции сваливают вину за качество кода на них. Другие с ними не согласны, и основываясь на changelog заявляют, что качество кода не зависит от географии команды, и плохой код периодически «прилетает» от обеих команд. По-настоящему серьезная проблема для продукта — это разработчики, которые воспринимают проект как «вход в индустрию», и работают над СУБД не дольше 1-2 года; за это время существенно разобраться в тонкостях работы проекта невозможно.

По свидетельствам другого разработчика, который занимался портированием кодовой базы Oracle 8i на одну из версий Unix в конце 90-ых, код уже на тот момент представлял собой клубок «спагетти», который понять целиком было решительно невозможно. Еще один разработчик, который работал с кодом СУБД в конце 80-ых, утверждает, что тогда кодовая база представляла собой огромную кучу из исходников на C и набора makefile для сборки — многие из которых были устроены гораздо сложнее, чем код самого ядра. Конечно, стоит быть реалистами — едва ли ситуация обстоит лучше в аналогичных продуктах-лидерах индустрии, разработка которых велась в течение нескольких десятков лет.
У множественной первичной репликации, которая позволяет нескольким репликам принимать обновления независимо, я бы выделил слудеющие преимущества:
— Увеличенная пропускная способность при записи. Несколько реплик могут обрабатывать запросы на запись одновременно, повышая общую пропускную способность системы.
— Меньшая задержка записи. Записи могут обрабатываться локально в каждой реплике, что сокращает задержку по сравнению с централизованными моделями первичного резервного копирования.
— Отказоустойчивость. Даже если одна реплика выходит из строя, другие реплики могут продолжать принимать операции записи и выполнять операции чтения.

Недостатки: одновременное обновление нескольких основных файлов может привести к конфликтам, которые необходимо разрешить.

Распределённая репликация распределяет данные или услуги по нескольким узлам менее структурированным образом. Реплики могут быть расположены географически или логически распределены по сети.

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

Недостатки: обеспечение согласованности между распределёнными репликами может быть сложной задачей, особенно в средах с высокой задержкой в сети или в сценариях разделения.
Такие стратегии, как первичное резервное копирование, мультиосновная или распределенная репликация, различаются по масштабируемости, влияя на производительность, балансировку нагрузки и согласованность при динамике узла.
А тогда еще вопрос — как различные стратегии репликации влияют на масштабируемость системы, особенно с точки зрения динамического добавления или удаления узлов?
Проблемы включают конфликты одновременной записи и обеспечение согласованности между несколькими первичными файлами, при этом механизмы разрешения конфликтов имеют решающее значение для балансировки производительности и поддержания целостности данных.
Спасибо за подробную статью, интересно а каковы основные проблемы при реализации репликации с несколькими основными элементами и как разрешение конфликтов влияет на производительность системы и целостность данных?
B2C — business to customer, «бизнес — потребителю». Площадки, где ИП или компании предлагают товары или услуги физическим лицам. Очевидный пример — популярные маркетплейсы Wildberries, Ozon, Яндекс Маркет.На этих площадках могут также покупать компании и предприниматели: например, на Яндекс Маркете есть отдельный раздел покупок для бизнеса. Но большая доля покупателей на B2C-площадках — обычные люди. Для такого типа подходит система DST Маркетплейс

B2B — business to business, «бизнес — бизнесу». Площадки, где одни ИП и компании продают товары другим ИП и компаниям. Работают B2B-маркетплейсы так же, как Wildberries и Ozon: площадка привлекает поставщиков и выставляет их товар на витрине. Но сделать заказ сможет только предприниматель или организация. По такой модели работают, например, китайский Alibaba, площадки «Рывок» и «Пульс цен». Для такого типа подходит система DST Мультивендор

C2C — customer to customer, «потребитель — потребителю». Площадка, где физические лица могут покупать друг у друга товары или обмениваться ими. Пользователи сами управляют ценами и определяют время и способ доставки. Самый известный пример C2C-маркетплейса — Авито. Но сейчас предлагать товары и услуги на этой площадке может и бизнес. Для такого типа подходит система DST Маркетплейс
B2C — business to customer, «бизнес — потребителю». Площадки, где ИП или компании предлагают товары или услуги физическим лицам. Очевидный пример — популярные маркетплейсы Wildberries, Ozon, Яндекс Маркет.На этих площадках могут также покупать компании и предприниматели: например, на Яндекс Маркете есть отдельный раздел покупок для бизнеса. Но большая доля покупателей на B2C-площадках — обычные люди. Для такого типа подходит система DST Маркетплейс

B2B — business to business, «бизнес — бизнесу». Площадки, где одни ИП и компании продают товары другим ИП и компаниям. Работают B2B-маркетплейсы так же, как Wildberries и Ozon: площадка привлекает поставщиков и выставляет их товар на витрине. Но сделать заказ сможет только предприниматель или организация. По такой модели работают, например, китайский Alibaba, площадки «Рывок» и «Пульс цен». Для такого типа подходит система DST Мультивендор

C2C — customer to customer, «потребитель — потребителю». Площадка, где физические лица могут покупать друг у друга товары или обмениваться ими. Пользователи сами управляют ценами и определяют время и способ доставки. Самый известный пример C2C-маркетплейса — Авито. Но сейчас предлагать товары и услуги на этой площадке может и бизнес. Для такого типа подходит система DST Маркетплейс

Вопрос к экспертам, помочь определиться с типом площадки, есть три варианта: B2C, B2B, C2C, можно подробнее и на примерах
Вопрос к экспертам, помочь определиться с типом площадки, есть три варианта: B2C, B2B, C2C, можно подробнее и на примерах
Обычно такие проекты вырастают из уже существующих в интернете бизнесов, но есть и редкие случаи, когда площадку хотят выстроить с нуля. В каждом варианте — свои подводные камни.

Создавать площадку с нуля. В этом случае маркетплейс превращается в полноценный стартап — это сложный и дорогой сценарий. Создание маркетплейса с нуля возможно в двух случаях:

1. Бизнес хочет закрыть существующую свободную рыночную нишу. Например, из России ушел маркетплейс БАДов и органической косметики iHerb. Предприниматель может занять эту нишу и запустить новую площадку.

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

Создавать площадку с нуля. В этом случае маркетплейс превращается в полноценный стартап — это сложный и дорогой сценарий. Создание маркетплейса с нуля возможно в двух случаях:

1. Бизнес хочет закрыть существующую свободную рыночную нишу. Например, из России ушел маркетплейс БАДов и органической косметики iHerb. Предприниматель может занять эту нишу и запустить новую площадку.

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

Создавать площадку с нуля. В этом случае маркетплейс превращается в полноценный стартап — это сложный и дорогой сценарий. Создание маркетплейса с нуля возможно в двух случаях:

1. Бизнес хочет закрыть существующую свободную рыночную нишу. Например, из России ушел маркетплейс БАДов и органической косметики iHerb. Предприниматель может занять эту нишу и запустить новую площадку.

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

Создавать площадку с нуля. В этом случае маркетплейс превращается в полноценный стартап — это сложный и дорогой сценарий. Создание маркетплейса с нуля возможно в двух случаях:

1. Бизнес хочет закрыть существующую свободную рыночную нишу. Например, из России ушел маркетплейс БАДов и органической косметики iHerb. Предприниматель может занять эту нишу и запустить новую площадку.

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

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

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

Иван разбирается в таких товарах, а значит, он:
1. Сможет сформулировать требования для других продавцов.

2. Знает, чем привлечь покупателей.

3. Понимает в ценообразовании и может выстроить грамотную бизнес-модель.

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

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

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

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

Иван разбирается в таких товарах, а значит, он:
1. Сможет сформулировать требования для других продавцов.

2. Знает, чем привлечь покупателей.

3. Понимает в ценообразовании и может выстроить грамотную бизнес-модель.

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

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

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

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

Иван разбирается в таких товарах, а значит, он:
1. Сможет сформулировать требования для других продавцов.

2. Знает, чем привлечь покупателей.

3. Понимает в ценообразовании и может выстроить грамотную бизнес-модель.

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

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

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

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

Иван разбирается в таких товарах, а значит, он:
1. Сможет сформулировать требования для других продавцов.

2. Знает, чем привлечь покупателей.

3. Понимает в ценообразовании и может выстроить грамотную бизнес-модель.

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

Один из краеугольных камней при создании нишевого маркетплейса — это знание ниши. Если его нет, глубинные исследования не помогут.
Масштабирование интернет-магазина. У компании уже есть ретейловая сеть и продажи, и она хочет привлечь новых поставщиков, чтобы расширить и разнообразить ассортимент.Например, компания строительной техники посчитала, что она теряет четыре заявки из 10 — то есть 40% потенциальной прибыли, потому что клиенты не находят нужного оборудования в каталоге. Чтобы решить эту проблему, нужно масштабироваться.

Другой пример: интернет-магазин продает саженцы и семена компаниям, которые занимаются озеленением дворов по всей России. В ассортименте магазина есть 200 видов растений — а всего в мире 2000 видов растений. Чтобы компания росла, ей нужно расширять ассортимент и создавать нишевый маркетплейс.

Первое и главное, ради чего компании создают маркетплейсы, — это расширение ассортимента: либо для привлечения новых покупателей, которые не могут найти нужные товары в существующем ассортименте, либо чтобы увеличить средний чек и частоту покупок своих клиентов.
Масштабирование интернет-магазина. У компании уже есть ретейловая сеть и продажи, и она хочет привлечь новых поставщиков, чтобы расширить и разнообразить ассортимент.Например, компания строительной техники посчитала, что она теряет четыре заявки из 10 — то есть 40% потенциальной прибыли, потому что клиенты не находят нужного оборудования в каталоге. Чтобы решить эту проблему, нужно масштабироваться.

Другой пример: интернет-магазин продает саженцы и семена компаниям, которые занимаются озеленением дворов по всей России. В ассортименте магазина есть 200 видов растений — а всего в мире 2000 видов растений. Чтобы компания росла, ей нужно расширять ассортимент и создавать нишевый маркетплейс.

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

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе 170 Е.
Региональный оператор Сколково. Технопарк Нобель

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон