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

Go и fuse

  • 1.
    Go и FUSE опытпрактического применения
  • 2.
    Кто я такой? Я– не программист, я – системный администратор. Я люблю статические бинарники и кроскомпиляцию. Я «знаю» десяток языков. Ну – почти десяток. Ни на одном из них я не пишу, но все знаю достаточно, чтобы читать чужой код, и вставлять куда надо отправку метрик в Graphite. Go был мной освоен в рамках моей собственной программы повышения моей собственной квалификации. Язык как язык, но несколько новых конструкций и отсутствие нескольких привычных заставляют пересматривать паттерны, что весьма полезно.
  • 3.
    Что такое FUSE? WithFUSE 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)
  • 10.