Управление национальной статистики Великобритании выбрало Cantabular, чтобы обеспечить гибкое распространение данных переписи 2021 года. Перепись Великобритании - важный проект как по масштабу, так и по бюджету (оценка переписи 2011 года - 482 миллиона фунтов стерлингов на десятилетие).

Cantabular разработан для организаций, которые хотят обмениваться статистикой, полученной из конфиденциальных и потенциально идентифицируемых данных, при одновременном обеспечении конфиденциальности. Он предназначен для модернизации статистики.

Разумный код решил использовать язык программирования Go (также известный как Golang) для создания последней версии своего продукта. Команда Cantabular работала над этим три года и сочла, что Go отлично подходит; почти все, кто разрабатывает Go в Sensible Code, узнали это на проекте. В Go есть небольшой набор ключевых слов для изучения и компактная и удобочитаемая языковая спецификация.

Сильная поддержка инструментов и библиотеки

Инструментарий, предоставляемый языковым ядром, помогает всем разработчикам, независимо от того, новички в этом языке или нет. Отличительной чертой является инструмент gofmt, который преобразует действительный код Go в единый стандарт. Определяя стандарт, можно не тратить время на споры о том, как следует форматировать код. Это позволяет отформатировать всю нашу кодовую базу Go стандартным способом, делая код более единообразным и более легким для чтения. Кроме того, gofmt используется для поддержки процесса непрерывной интеграции в Cantabular и обеспечения правильного форматирования кода для каждой сборки.

Кроме того, Go включает платформу тестирования (go test) и инструменты для повышения производительности (pprof) для профилирования; оба они используются в кантабуляре. Go снижает трудности при начале работы, объединяя основные инструменты разработки с языком. Это особенно важно для новых разработчиков, и стоит упомянуть о включенных полезных значениях по умолчанию.

Обширная официальная библиотека Go позволила команде Cantabular минимизировать внешние зависимости для этого масштабного проекта предприятия. Как подчеркивается в этой превосходной статье Расс Кокса (@ _rsc), удобство включения внешнего кода связано с накладными расходами, связанными с аудитом и управлением зависимостями. Это проблема в критически важных для безопасности средах; поверхность атаки программного обеспечения может увеличиваться за счет большого количества зависимостей, как прямых, так и транзитивных.

Функции безопасности

Безопасность является важным аспектом для Cantabular, поскольку он обрабатывает конфиденциальные данные.

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

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

Обсуждаемые ранее встроенные инструменты Go также помогают в безопасности; go vet - это встроенный инструмент статического анализа для проверки ошибок или неправильного кодирования. Большой набор сторонних инструментов статического анализа дополняет встроенный инструментарий. Поскольку эти инструменты анализа часто также пишутся на Go, их легко развернуть - см. Следующий раздел. Это упрощает включение этих инструментов в конвейеры непрерывной интеграции для обеспечения автоматической проверки качества кода, которая может помочь выявить потенциальные недостатки безопасности.

Быстрая сборка и развертывание

Клиенты Cantabular запускают наш код в своих безопасных средах; у нас нет доступа к их системам для устранения проблем с развертыванием. Клиентам не нужно настраивать необходимое программное обеспечение для использования Cantabular, потому что Go компилирует код в автономные двоичные исполняемые файлы. Одна загвоздка в том, что получить статические двоичные файлы Go не так просто, как могло бы быть, но если это еще не просто, то, по крайней мере, это возможно. Статические двоичные файлы устраняют догадки о том, какие библиотеки и пакеты установили наши клиенты, и избавляют нас от необходимости предлагать дополнительные требования к программному обеспечению (например, Docker, Ansible или другие).

Код Go можно скомпилировать для нескольких платформ из одной операционной системы; дальнейшее снижение барьеров для клиентов, желающих запустить наше программное обеспечение. У корпоративных клиентов разные вычислительные требования. Некоторые клиенты работают только с Windows, и возможность предложить вариант установки Windows с минимальными усилиями является для них большим преимуществом. На внутреннем уровне мы также извлекли выгоду из кроссплатформенной поддержки Go: большинство разработчиков в Sensible Code используют Linux, но разработчики в наших проектах Go иногда используют OS X.

И последнее, но не менее важное: быстрые сборки были must have для разработчиков языка Go с самого начала, и в Sensible Code мы напрямую извлекаем из этого выгоду, не дожидаясь, пока наш код скомпилируется!

Идти вперед

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

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

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

Go 2 также должен иметь весь существующий исходный код Go 1. Мы не должны разделять экосистему Go .

Куда мы пойдем дальше?

Выбор языка программирования требует компромиссов, и команда должна найти компромисс, выбрав язык, который подходит для области приложения, а также для удобства и производительности разработчика. Положительный опыт использования Go, безусловно, делает его кандидатом на будущие проекты SensibleCode.

Этот пост основан на презентации, которую Стивен Мод представил от имени SensibleCode на Голанг Амстердам в 2019 году.

Спасибо Орне Брокаар и остальной команде организаторов за то, что пригласили нас выступить и приняли нас вечером.

Хотите узнать больше о Cantabular? Посетите кантабулярный сайт!

SensibleCode ищет специалиста по контролю за раскрытием статистической информации, который поможет накопить основной опыт в данной области.