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

Во-первых, насколько это быстро?

Изображение ниже дает вам относительное представление!

Эти тесты проводились с использованием сети из трех идентичных машин. Одна машина использовалась для клиента, одна - для шлюза (Envoy / HTTP Transport), а другая - для эхо-бэкэнда. Характеристики машины следующие: Название модели - ThinkPad-T540, название процессора - Intel Core i7, частота процессора - 2,6 ГГц, общее количество ядер - 8, память - 8 ГБ. Каждый шлюз был поражен 100 одновременными пользователями с 1K сообщений.

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

1) Жесткий опыт

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

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

2) Заставьте это работать, а затем сделайте это быстро

Это принцип, которого мы придерживались при разработке нового транспорта. Этот транспорт имеет 30 с лишним функций, начиная от поддержки HTTP, HTTP2 и WebSockets и заканчивая возможностью дросселирования запросов, чтобы гарантировать, что Ballerina никогда не исчерпает память. Вначале основное внимание уделялось тому, чтобы эти функции работали должным образом при любых условиях, а затем сделать это быстро. В противном случае возможна преждевременная оптимизация, которая обычно приводит к чрезмерно умному и сложному коду. Этот тип кода менее читабелен и подвержен ошибкам. Кошмар для инженеров, поддерживающих код.

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

Будьте консервативны в том, что вы делаете, будьте либеральны в том, что вы принимаете от других.

Это было необходимо, потому что HTTP примерно 30 лет, и у нас есть всевозможные реализации этого протокола, которые немного или почти не соответствуют спецификации!

3) Простота - это безупречная изысканность

Леонардо да Винчи сказал это, и мы твердо в это верим. Ну, насколько это просто, зависит от проблемной области, с которой вы работаете. Однако чем больше вы знаете о проблемной области, тем лучше вы можете упростить решение. К счастью, у нас была команда, которая знала все, что ей нужно знать. В результате, я считаю, мы могли бы создать простую, читаемую кодовую базу при сохранении производительности. Мы изо всех сил старались не нарушать принципы ООП, такие как принцип открытости-закрытости, принцип инверсии зависимостей, принцип единой ответственности и т. Д. Более того, эта база кода сильно зависит от книги Чистый код и Паттерна государственного проектирования.

мы должны упомянуть роль Netty Framework в этом отношении. Без его элегантного паттерна конвейера и реактивного стиля мы не смогли бы зайти так далеко!

4) Реактивный стиль кодирования

Этот стиль программирования развивается вокруг распространения изменений. Всякий раз, когда происходит изменение состояния, программа распространяет это изменение на все заинтересованные стороны, чтобы они могли отреагировать на это изменение. Netty предоставила хороший способ сделать это с помощью Futures, скрывая при этом все сложности Java NIO. Вдохновленные этим дизайном, мы смоделировали все наши API с использованием Futures. Это позволяло полностью не блокировать весь транспорт, сохраняя при этом простоту. Другими словами, если вы хотите, вы можете написать простой обратный прокси с этим транспортом, для выполнения которого требуется только один поток.

Это позволило полностью избавиться от всех проблем с синхронизацией. Это означает, что у нас есть

  • Нет разногласий по блокировкам
  • Нет проблем переключения контекста
  • Требуется меньше планирования потоков
  • Меньше промахов в кэше ЦП
  • Отсутствие эффекта закона Амдала

Все они являются ключевыми факторами, способствующими быстродействию HTTP-транспорта.

Если вы хотите узнать больше о Законе Амдала, нажмите здесь!

5) Совместная команда

И последнее, но не менее важное: у нас лучшая совместная команда,

  • Виджита / Бхашини - не слышат ничего, что исходит из их рта, но следят за тем, чтобы «действия говорили громче, чем слова».
  • Рукшани - предпочел бы читать спецификации, чем есть торт
  • ChamilE - тратьте много времени на спорт, но в то же время выполняйте свою работу (думаю, я делаю то же самое: P)
  • Рияфа - проверяет, все ли в порядке, даже сообщения фиксации
  • Чанака - Не прочь весь день копировать вещи с машины на машину, пока проблема не будет решена.

Кроме того, Исуру Удана, Исуру Ранавака, Ируника и несколько других инженеров внесли свой вклад в эту работу в прошлом.

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

📝 Прочтите этот рассказ позже в Журнале.

🗞 Просыпайтесь каждое воскресное утро и слышите самые интересные истории, мнения и новости недели, ожидающие в вашем почтовом ящике: Получите примечательный информационный бюллетень›