2. Кто я такой?
Я – не программист, я – системный администратор.
Я люблю статические бинарники и кроскомпиляцию.
Я «знаю» десяток языков. Ну – почти десяток.
Ни на одном из них я не пишу, но все знаю достаточно, чтобы читать
чужой код, и вставлять куда надо отправку метрик в Graphite.
Go был мной освоен в рамках моей собственной программы
повышения моей собственной квалификации.
Язык как язык, но несколько новых конструкций и отсутствие
нескольких привычных заставляют пересматривать паттерны, что
весьма полезно.
3. Что такое FUSE?
With FUSE it is possible to implement a fully functional filesystem in a
userspace program.
Картинка из википедии:
4. Зачем нужен FUSE в современном мире?
Вообще – я не знаю. Может быть – и не нужен вовсе.
Нам – для создания собственной FS поверх NoSQL СУБД
Для файлового хранилища файловая система – нативный интерфейс,
как ни крути.
5. Приятная неожиданность
FUSE-bindings для GO
• На «официальном» сайте
• Go-FUSE
• CGO wrapper
• На просторах интернета
• bazil.org/fuse – и он-то как раз правильный!
6. Почему bazil.org/fuse правильный?
Не использует базовую библиотеку на С – kernel-userspace протокол
реимплементирован на GO
Использует объектную модель, позволяющую бесплатно получить
кеширование
7. Особенности реализации
По методу на интерфейс
Это означает широкое использование рефлексии
Рефлексия – увеличивает накладные расходы, но это не важно.
Минимальная имплементация содержит ровно один интерфейс с
ровно одним методом.
Для решения некоторых задач имеется более, чем один путь.
Например, есть и ReadDir, и OpenDir с последующим Read
Один вызов – одна рутина
8. Бенчмарков не будет, извините
Поверьте мне на слово – оно ни чуть не медленнее, чем любой другой
FUSE
9. Почему теперь я буду писать FUSE-драйвера именно на Go?
Кеширование бесплатно
Модель многозадачности
Статические бинарники
Отсутствие привязки с C-библиотеке (которая очень C)