версионирование • Событийное взаимодействие • Отказоустойчивость и масштабирование • Типичные проблемы и их решения Пара слов о докладчике: • 7 лет управления разработкой • 4 года на go, до этого java и php • Опыт в e-com, ads и fintech • 5 запущенных проектов с нуля за 5 лет 2
+ Поддержка нескольких версий - Путаница Тэггирование: get_user, id_uuid + Меньше путаницы - Есть вероятность ошибки Версии у сервисов: ‘v1.2.7’==‘v1.2.7’ + Нет путаницы и дублирования - Нет поддержки нескольких версий Совпадение сигнатур: {“get_user_by_id”: {“req”: [{“name”: “id”, “type”: “uuid”}], “rsp”:[...]}} + Очень удобна - Есть вероятность коллизии
сервисами 9 ИЛИ Коммуникация сервисов напрямую друг с другом: http, raw socket, zmq Требует доступности портов Использование брокера сообщений: nats, rabbitmq, nsq Требует стабильности от брокера
• Нет step-by-step отладки • Неизвестно состояние сервисов • Одинаковые запросы могут попадать в разные сервисы • Дополнительные ошибки в транспорте и протоколе Решение? • Opentracing / Datadog / AWS X-Ray • Сквозное логгирование
• ChatOps bot • Simple metrics • Rate limiting Недостатки: • Очень много interface{} • Использование reflect • Совсем нет security • Хочется gogo/protobuf 26