Обновить
137.37

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
Период
Уровень сложности

Go: как изменяется размер стека горутины?

Время на прочтение7 мин
Охват и читатели14K

Эта статья берет за основу Go 1.12.

Go радует нас легким и умным управлением горутинами. Легким, поскольку стек горутин изначально весит всего 2 КБ, а умным, потому что горутины могут автоматически увеличиваться/уменьшаться в соответствии с нашими потребностями.

Читать далее

CQRS на golang

Время на прочтение9 мин
Охват и читатели17K

Сегодня рассмотрю архитектурный паттерн CQRS и его возможное место в вашей архитектуре. Также осуществим его реализацию на языке golang.

Читать далее

Мониторинг производительности приложений в Broadcom DX APM — анонс вебинара

Время на прочтение1 мин
Охват и читатели930
image

Единый агент для всех популярных технологий, динамическое отслеживание изменений инфраструктуры, низкий оверхед, искусственный интеллект, оценка эффективности релизов, контекстный мониторинг, мониторинг реальных транзакций — обо всём этом и многом другом вы узнаете на вебинаре, посвящённому инструменту для мониторинга производительности приложений и инфраструктуры под ними Broadcom DX APM. Вебинар состоится 5 марта в 11 часов утра по московскому времени.

Под катом вы найдёте квадрант Gartner за 2020 год по APM-решениям и дополнительные материалы по DX APM и другим решениям Broadcom.
Читать дальше →

Сравним C++, JS, Python, Python + numba, PHP7, PHP8, и Golang на примере расчёта “Простое Число”

Время на прочтение4 мин
Охват и читатели17K

Все топовые языки программирования уже давно доказали свои позиции и "определились" с нишами своего использования.

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

Измерять можно довольно много параметров и для разных целей.

Для каких-то задач важнее будет наличие быстрого просчёта по математическим операциям. А для других - больше пригодится ускоренная работа с сетью и файлами.

В данной статье мы рассмотрим ускорение программы с использованием JIT-компиляции для языков Python и PHP.

В качестве задачи для расчёта возьмём функцию проверки - является ли число Простыми или нет - "is prime". Возьмём базовый алгоритм проверки на то, что число Простое:

Читать далее

Создаем высокопроизводительные микросервисы с помощью gRPC, Ballerina и Go

Время на прочтение8 мин
Охват и читатели13K

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

Распространенность и хорошая поддержка REST играют решающую роль в успехе внешних микросервисов. OpenAPI предоставляет четко определенные спецификации для описания, создания, использования и визуализации REST API. Для таких API существуют системы управления API, которые обеспечивают безопасность, ограничение скорости, кеширование и монетизацию наряду с реализацией бизнес-требований. В качестве альтернативы REST API на основе HTTP можно использовать GraphQL, но это уже тема для отдельной статьи.

Читать далее

Кто такая эта Ваша Pandora и при чем здесь Tarantool

Время на прочтение5 мин
Охват и читатели8.3K


Привет, меня зовут Иван, и я занимаюсь разработкой высоконагруженных решений на Tarantool. Я расскажу про то, как и почему мы выбрали Pandora для нагрузочного тестирования приложения на Tarantool, а также покажу пример, как ей воспользоваться.

Читать дальше →

Мы все записали: доклады Ozon на GopherCon Online 2020

Время на прочтение2 мин
Охват и читатели7.1K
Привет, Хабр! В этом году для GopherCon команда Ozon Tech подготовила пару часов докладов на самые разные темы: от классических — о микросервисной архитектуре, до по-настоящему гошных.

image

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

Священный холивар «Python vs Go»

Время на прочтение3 мин
Охват и читатели12K
Выбери, на какой стороне ты, и встань на защиту своего любимого языка в решающей битве на Russian Python Week.



Что будет?


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

Холивар «Python vs Go» на Russian Python Week не будет:

  • мнением одного «эксперта»;
  • выступлением одного спикера, в котором, пускай и аргументированно, победитель заранее известен;
  • сравнением на синтетических тестах;
  • набором бенчамрков, которые заведомо выгодны для одного участника.

Битву начнут два представителя Python- и Go-сообщества, но каждый участник сможет повлиять на её ход. Конечное решение останется за вами.

Языковая механика стеков и указателей

Время на прочтение10 мин
Охват и читатели16K

Прелюдия


Это первая из четырех статей в серии, которая даст представление о механике и дизайне указателей, стеков, куч, escape analysis и семантики значения/указателя в Go. Этот пост посвящен стекам и указателям.

Оглавление цикла статей:

  1. Language Mechanics On Stacks And Pointers
  2. Language Mechanics On Escape Analysis (перевод)
  3. Language Mechanics On Memory Profiling (перевод)
  4. Design Philosophy On Data And Semantics

Вступление


Не буду лукавить — указатели трудны в понимании. При неправильном использовании указатели могут вызвать неприятные ошибки и даже проблемы с производительностью. Это особенно верно при написании конкурентных или многопоточных программ. Неудивительно, что многие языки пытаются скрыть указатели от программистов. Однако, если вы пишете на Go, вы не сможете избежать указателей. Без четкого понимания указателей вам будет сложно писать чистый, простой и эффективный код.
Читать дальше →

Почему будущее не за Python

Время на прочтение6 мин
Охват и читатели36K
Хотя, безусловно, этот язык программирования будет востребован ещё много лет.



Сообществу программистов понадобились десятилетия, чтобы по достоинству оценить Python. С начала 2010-х годов он переживает бум — и в итоге превосходит C++, C#, Java и JavaScript по популярности.

Но до каких пор эта тенденция будет сохраняться? Когда Python в конечном итоге будет заменён другими языками и почему это неизбежно произойдёт?
Читать дальше →

Новая программная модель чейнкода Hyperledger Fabric

Время на прочтение5 мин
Охват и читатели2.3K


Не так давно был выпущен первый релиз fabric-contract-api-go — реализации новой программной модели чейнкода по RFC 0001. Давайте разберемся, что это и как этим пользоваться.
Читать дальше →

4 примера iota-перечислений

Время на прочтение2 мин
Охват и читатели36K


От переводчика: при разработке ПО у программистов, какого бы уровня они ни были, нередко возникает желание реализовать тот или иной фрагмент программы более красиво и удобно. Когда, глядя на код, интуитивно чувствуешь: этот кусок точно можно сделать изящнее, начинаешь либо вспоминать best practice для решения таких задач, либо искать их в инете, либо придумывать своё решение. Недавно я сам столкнулся с подобной ситуацией и нашёл, казалось бы, очевидное решение, но, тем не менее, ранее я им не пользовался. Вот им бы хотелось поделиться с сообществом в представленном ниже переводе очень небольшой статьи.

Читать дальше →

UPD. Тестирование REST API на Golang. 120 000 [#/sec] не предел?

Время на прочтение6 мин
Охват и читатели7.5K

На глаза попалась не особо позитивное сравнение Java vs GO. Тестирование большим числом пользователей.


Решил проверить, действительно ли так все не радужно с Go.
Забегая вперед скажу, что при кэшировании в памяти и формировании JSON "на лету" удалось получить до 120 000 [#/sec] на 8 физических ядра.


Базовый сценарий GET запроса:


  • Если данные найдены в in memory кэше и они валидные, то формируем JSON из структуры
  • Если данных в кэше нет, то ищем их в Bolt DB, если находим, то считываем готовый JSON
  • Если данных нет в Bolt DB, то запрашиваем их из БД, сохраняем их в in memory кэше
  • Данные в in memory кэше накапливаются в буферном канале, после накопления около 10000 элементов они сбрасываются единым save в Bolt DB
  • Если данные в БД менялись (update / insert) то через pg_notify передается уведомление и данные в кэше помечаются как невалидные, при следующем обращении они считываются заново из БД

Под катом результаты тестирования, и код тестового стенда GitHub


Update 06.05.2020


Повилась возможность протестировать в облаке Oracle.
get_db_memory_json1


  • стенд собран на 3 серверах — 8 Core Intel (16 virtual core), 120 Memory (GB), Oracle Linux 7.7
  • локальные NVMe диски — 6.4 TB NVMe SSD Storage min 250k IOPS (4k block)
  • локальная сеть между серверами — 8.2 Network Bandwidth (Gbps)
  • в режиме прямого чтения из PostgreSQL — до 16 000 [get/sec], сoncurrency 1024, медиана 60 [ms]. Кажды Get запрашивает данные из двух таблиц общим размером 360 000 000 строк. Размер JSON 1800 байт.
  • в режиме кэширования — до 100 000 — 120 000 [get/sec], сoncurrency 1024, медиана 2 [ms].
  • на вставку в PostgreSQL — около 10 000 [insert/sec].
  • при масштабировании с 2 до 4 и 8 Core, рост производительности практически линейный.
Читать дальше →

Ближайшие события

Proposal: try — встроенная функция проверки ошибок

Время на прочтение19 мин
Охват и читатели3.4K

Краткое содержание


Предлагается новая конструкция try, созданная специально для устранения if-выражений, обычно связанных с обработкой ошибок в Go. Это единственное изменение языка. Авторы поддерживают использование defer и стандартных библиотечных функций для обогащения или оборачивания ошибок. Это маленькое расширение подходит для большинства сценариев, практически не усложняя язык.


Конструкцию try просто объяснить, легко реализовать, этот функционал ортогонален другим языковым конструкциям и является полностью обратно-совместимым. Он также является расширяемым, если мы захотим этого в будущем.


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

Читать дальше →

Что есть и чего нет в Go. Часть 1

Время на прочтение4 мин
Охват и читатели9.8K
Всем привет, в преддверии старта нового потока по курсу «Разработчик Golang» хотим поделиться с вами переводом интересной статьи, в первой части которой разбираются элементы, которые есть в Go. Поехали.



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

Перед прочтением: Выше приведен отрывок из книги Алан А. А. Донована и Брайана В. Кернигана «Язык программирования Go». страница XIV. Пункты, упомянутые ниже, являются кратким и несколько неполным объяснением терминов, используемых при проектировании языка программирования. Я попытался объяснить все концепции с точки зрения программирования на Go. Все пункты, упомянутые ниже, не моего авторства, они взяты из других выдержек. Я никоим образом не защищаю Go или любой другой язык.
Читать дальше →

Как Go спасал нашу «Чёрную пятницу»

Время на прочтение7 мин
Охват и читатели8.5K
Ранее мы уже рассказывали о том, что по мере роста нагрузки постепенно ушли от использования Python в бэкенде критичных сервисов на продакшене, заменив его на Go. А сегодня я, Денис Гирько, тимлид команды разработки Madmin, хочу поделиться деталями: как и почему это происходило на примере одного из важнейших для нашего бизнеса сервисов — расчета цены с учетом скидок по купонам.


Читать дальше →

Эволюция Backend as a Service: второе пришествие Scorocode

Время на прочтение4 мин
Охват и читатели4.3K
Здравствуй, Хабр.

Мы прерываем длительное молчание и объявляем о выходе второй версии Scorocode.
Это даже не эволюция, а рождение нового сервиса.

Год работы, Docker, Kubernetes, Яндекс.Облако, и т.п.

Предупреждая вопрос «А зачем тут хаб Go?», отвечаю — все сервисы Scorocode написаны на Golang, именно этот язык у нас является основным в стеке технологий.

За подробностями прошу под кат.
Читать дальше →

Система уведомлений из консоли в Телеграм

Время на прочтение3 мин
Охват и читатели11K

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


Первая версия просто использовала notify-send, но время показало некоторое неудобство процесса. Поскольку операции были очень требовательные к машине, то машина становилась на этот момент неюзабельной и хотелось отойти и выпить кофе. Но вернуться, когда процесс завершится. Поэтому появилась идея программы, которая чейнится в консольный пайплайн или оборачивает как sudo программу и по окончании присылает тебе нотификацию в чатик. Таким образом, ты увидишь нотификацию как на десктопе, так и на телефоне.

Читать дальше →

Blockchain на Go. Часть 4: Транзакции, часть 1

Время на прочтение12 мин
Охват и читатели19K
Привет, Habr! Представляю вашему вниманию перевод статьи "Building Blockchain in Go. Part 4: Transactions 1".

Содержание

  1. Blockchain на Go. Часть 1: Прототип
  2. Blockchain на Go. Часть 2: Proof-of-Work
  3. Blockchain на Go. Часть 3: Постоянная память и интерфейс командной строки
  4. Blockchain на Go. Часть 4: Транзакции, часть 1
  5. Blockchain на Go. Часть 5: Адреса
  6. Blockchain на Go. Часть 6: Транзакции, часть 2
  7. Blockchain на Go. Часть 7: Сеть

Вступление


Транзакции являются сердцем Биткоина, и единственная цель цепи блоков — это хранить транзакции безопасным и надежным способом, чтобы никто не смог модифицировать их после создания. В этой статье мы начинаем работу над реализацией механизма транзакций. Но поскольку это довольно большая тема, я разбил ее на две части: в этой части мы реализуем общий механизм, а во второй части мы детально разберем весь остальной функционал.
Читать дальше →

Go на устройствах с маленькой памятью

Время на прочтение4 мин
Охват и читатели7.7K

Перевод статьи разработчика компании Samsara об опыте использования Go на автомобильном роутере с 170MB оперативки.


В компании Samsara мы разрабатываем автомобильные роутеры, которые предоставляют в реальном времени телеметрию двигателя через CAN шину, данные с беспроводных термосенсоров через Bluetooth Low Energy и соединение по Wi-Fi. Эти роутера очень ограничены по ресурсам. В отличие от серверов с 16 GB оперативной памяти, у наших роутеров есть всего 170MB и всего одно ядро.



Наша новая камера CM11, закреплённая в кабине.


Чуть ранее в этом году мы выпустили видео камеру, которая крепится внутри кабины, чтобы улучшить безопасность машин для наших клиентов. Эта камера, по сути, является периферийным устройством для нашего роутера, которое генерирует много данных. Она записывает 1080p H.264 видео с частотой 30 кадров в секунду.


Наша первая реализация сервиса работы с камерой, который был отдельным процессом на роутера, потреблял 60MB, то есть почти половина всей доступной памяти, но мы знали, что можем добиться лучших результатов. Мы буферизировали только 3 секунды видео потока на 5Mpbs, и 60MB было достаточно, чтобы удерживать в памяти целых 90 секунд видео, так что мы решили посмотреть, где мы можем уменьшить использование памяти.

Читать дальше →

Вклад авторов