На прошлой неделе компания CoreOS порадовала очередным Open Source-проектом — zetcd. На самом деле о нём было известно ещё с прошлого года, но теперь состоялся первый релиз, который перевёл продукт в статус бета-тестирования — заявил о готовности продукта к серьёзным испытаниям перед выпуском в мир production. Авторы позиционируют zetcd как готовую замену для ZooKeeper внутри таких распределённых/кластерных решений, как Mesos, Apache Kafka и Apache Drill. Их настрою не препятствует даже тот факт, что etcd предлагает «плоское» хранение ключей-значений против иерархического подхода своего конкурента. Как они к этому пришли?
Читать полностью »
Рубрика «Go» - 48
zetcd от CoreOS: Заменяя ZooKeeper на… хранилище etcd
2017-05-24 в 9:56, admin, рубрики: coreos, etcd, Go, nosql, open source, zookeeper, Анализ и проектирование систем, Блог компании Флант, кластеры, микросервисы, распределенные системы, хранение данных, метки: etcdПроизводительность I-O бэкэнда: Node vs. PHP vs. Java vs. Go
2017-05-23 в 12:49, admin, рубрики: Go, i/o, java, node.js, nodejs, performance, php, Блог компании Mail.Ru Group, никто не читает тегиПонимание модели ввода/вывода вашего приложения может привести и к пониманию различий между приложением, работающим с нагрузкой, под которой оно создавалось, и тем, которое лицом к лицу столкнулось с реальным способом своего применения. Возможно, если ваше приложение невелико и не создаёт большой нагрузки, то для него это не так важно. Но по мере роста трафика использование ошибочной модели ввода/вывода может погрузить вас в мир боли.
Как и в большинстве других ситуаций с несколькими возможными решениями, дело не в том, какой из вариантов лучше, дело в понимании компромиссов. В этой статье мы сравним Node, Java, Go и PHP из-под Apache, обсудим модели ввода/вывода в разных языках, рассмотрим достоинства и недостатки каждой модели и прогоним простенькие бенчмарки. Если вас волнует производительность ввода/вывода вашего следующего веб-приложения, то эта статья для вас.
А пусть тесты сами себя и поддерживают
2017-05-23 в 7:46, admin, рубрики: Go, testing, ненормальное программирование, Программирование, тестированиеСегодня я хочу рассказать о необычном подходе к написанию тестов, к которому я как-то незаметно пришел в ходе работы над несколькими проектами разной величины, и который я почему-то не встречал в чистом виде у других, хотя он, в общем-то, лежит на поверхности. С недавних пор я начал писать кое-какой код на Go, и как только встал вопрос о написании тестов, я опять вспомнил об этом подходе.
Как обычно выглядят тесты?
Очень схематично, каждый юнит-тест обычно состоит из следующих шагов:
- инициализации входных данных;
- выполнения бизнес-логики и получения результата;
- сравнения результата с эталоном.
Входные и выходные данные зачастую находятся в самом коде; когда изменения кода привносят ожидаемые изменения в выходных данных, эталонные результаты приходится править вручную. В некоторых случаях, когда данные для теста объемны, их выносят в отдельные файлы, но поддержка эталонных данных, а так же логика сравнения остается на плечах разработчика.
Но ведь все это можно унифицировать!
Selenium под Windows: все с начала
2017-05-23 в 7:01, admin, рубрики: Go, golang, internet explorer, open source, selenium, test automation, webdriver, windows, Тестирование IT-системПредставляю вам перевод моей статьи на Medium.com.
Впервые выпущенная более 30 лет назад Microsoft Windows сегодня является неоспоримым лидером среди настольных операционных систем. Это просто нельзя игнорировать при разработке веб-приложений. В этой статье я хотел бы обсудить некоторые особенности использования Selenium под Windows и предложить простое и проверенное в боевых условиях решение, значительно упрощающее жизнь.
Как правильно писать логи (?)
2017-05-19 в 4:49, admin, рубрики: Go, golang, php, psr-3, ruby, логи, логирование, ПрограммированиеТема может и банальная, но когда программа начинает работать как то не так, и вообще вести себя очень странно, часто приходится читать логи. И много логов, особенно если нет возможности отлаживать программу и не получается воспроизвести ошибку. Наверно каждый выработал для себя какие то правила, что, как и когда логировать. Ниже я хочу рассмотреть несколько правил записи сообщений в лог, а также будет небольшое сравнение библиотек логирования для языков php, ruby и go. Сборщики логов и системы доставки не будут рассматриваться сознательно (их обсуждали уже много раз).
Читать полностью »
Сервисы на Go в Badoo: как мы их пишем и поддерживаем
2017-05-16 в 14:35, admin, рубрики: badoo, Go, golang, google protobuf, grpc, Анализ и проектирование систем, Блог компании Badoo, высокая производительность, ПрограммированиеНаписать сетевой сервис на Go очень просто: в стандартной библиотеке есть куча инструментов, а если чего-то и не хватает, то на Github есть много модных библиотек для удовлетворения большинства нужд.
Но что, если необходимо написать с десяток разных сервисов, работающих в одной инфраструктуре?
Если каждый демон будет использовать все свежие разнообразные «смузи»-технологии, получится «зоопарк», который сложно и дорого поддерживать, не говоря уже о добавлении в них новой функциональности.
У нас в Badoo крутятся >30 самописных демонов, написанных на разных языках, и ~10 из них – на Go. Все эти демоны работают на порядка 300 серверах. Как мы к этому пришли, не получив в итоге «зоопарк», как админы с мониторингом умудряются спать спокойно, не ограничивая при этом никого в смузи, а девелоперы, QA и релизеры живут дружно и до сих пор не переругались – читайте под катом.
Логирование, интерфейсы и аллокации в Go
2017-05-15 в 14:59, admin, рубрики: Go, golang, аллокации, Блог компании Badoo, высокая производительность, интерфейсы, логирование, ПрограммированиеПоследний свой пост я публиковал сравнительно недавно, так что вряд ли вы успели забыть, что меня зовут Марко. Сегодня публикую перевод небольшой заметки, которая касается нескольких очень вкусных оптимизаций из еще не вышедшего Go 1.9. Эти оптимизации позволяют генерировать меньше мусора в большинстве программ на Go. Меньше мусора – меньше задержки и затраты на сборку этого мусора.
Эта статья о новых оптимизациях компилятора, которые готовятся к релизу Go 1.9, но я бы хотел начать разговор с логирования.
Soft Mocks для Go! (переопределение функций и методов в runtime)
2017-05-14 в 18:18, admin, рубрики: Go, golang, Программирование, тестирование, Тестирование веб-сервисовSoft Mocks для Go!
Основная идея Soft Mocks для PHP — это переписывание кода «на лету» перед include(), чтобы можно было поменять реализацию любых методов, функций и констант во время исполнения. Поскольку go — компилируемый язык, то логично делать то же самое на этапе компиляции. В этой статье я расскажу по свой проект Soft Mocks for Go.
Функциональность
Возможности Soft Mocks for Go весьма ограничены — вы можете временно переопределить нужные вам функции и методы, а потом откатить свои правки. Также можно вызвать оригинальную функцию.
При использовании soft mocks, следующий код:
func main() {
closeFunc := (*os.File).Close
soft.Mock(closeFunc, func(f *os.File) error {
fmt.Printf("File is going to be closed: %sn", f.Name())
res, _ := soft.CallOriginal(closeFunc, f)[0].(error)
return res
})
fp, _ := os.Open("/dev/null")
fmt.Printf("Hello, world: %v!n", fp.Close())
}
Напечатает вот что:
File is going to be closed: /dev/null
Hello, world: <nil>!
Скачать библиотеку можно по адресу: github.com/YuriyNasretdinov/golang-soft-mocks
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO
2017-05-13 в 9:32, admin, рубрики: ctf, erawmosnar, Go, golang, hackquest, information security, PHDays, reverse engineering, информационная безопасность, реверс-инжинирингВсем доброго времени суток, только что подошел к концу двухнедельный HackQuest от PHDays. Не смотря на преобладание заданий связанных с WEB, организаторы не оставили без внимания и задания связанные с реверсом. Решение одного из таких заданий (erawmosnar), я бы хотел сегодня рассмотреть. К тому же думаю после WannaCry подобная тема станет ещё актуальнее.
К заданию была всего 1 подсказка:
Warn: erawmosnar == ransomware, do not run it, if you do not know what you doing.
Лекции Техносферы: Программирование на Go
2017-05-10 в 12:38, admin, рубрики: Go, mail.ru, Блог компании Mail.Ru Group, Программирование, разработка, ТехносфераПродолжаем публикацию наших образовательных материалов. Этот курс посвящен изучению основ языка Go. На примере простой текстовой игры будут рассмотрены все основные задачи, с которыми сталкивается разработчик современных веб-приложений в крупных проектах, с реализацией их на Go. Курс не ставит задачи научить программированию с нуля, для обучения будут необходимы базовые навыки программирования.
Список лекций: