SlideShare a Scribd company logo
1 of 10
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)
Вопросы?

More Related Content

What's hot

Javascript frameworks
Javascript frameworksJavascript frameworks
Javascript frameworks
sigmaray
 
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
Конференция разработчиков программного обеспечения SECON'2014
 
Поддержка пользователей силами Community (Влад Животнев, Ubuntu Loco Team)
Поддержка пользователей силами Community (Влад Животнев, Ubuntu Loco Team)Поддержка пользователей силами Community (Влад Животнев, Ubuntu Loco Team)
Поддержка пользователей силами Community (Влад Животнев, Ubuntu Loco Team)
PingWin Software
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 

What's hot (12)

Present yapc2010
Present yapc2010Present yapc2010
Present yapc2010
 
Javascript frameworks
Javascript frameworksJavascript frameworks
Javascript frameworks
 
Документирование блоков. Раскрываем все плюсы
Документирование блоков. Раскрываем все плюсыДокументирование блоков. Раскрываем все плюсы
Документирование блоков. Раскрываем все плюсы
 
Secr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.jsSecr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.js
 
02 docsvision
02 docsvision02 docsvision
02 docsvision
 
Владимир Гриненко — Библиотеки блоков bem-core и bem-components
Владимир Гриненко — Библиотеки блоков bem-core и bem-componentsВладимир Гриненко — Библиотеки блоков bem-core и bem-components
Владимир Гриненко — Библиотеки блоков bem-core и bem-components
 
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
 
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
 
Поддержка пользователей силами Community (Влад Животнев, Ubuntu Loco Team)
Поддержка пользователей силами Community (Влад Животнев, Ubuntu Loco Team)Поддержка пользователей силами Community (Влад Животнев, Ubuntu Loco Team)
Поддержка пользователей силами Community (Влад Животнев, Ubuntu Loco Team)
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013
 

Viewers also liked

Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Daniel Podolsky
 
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомБинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Daniel Podolsky
 
ночью через лес Stress-test пяти almost-the-same-functionality shared-nothin...
ночью через лес  Stress-test пяти almost-the-same-functionality shared-nothin...ночью через лес  Stress-test пяти almost-the-same-functionality shared-nothin...
ночью через лес Stress-test пяти almost-the-same-functionality shared-nothin...
Daniel Podolsky
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
Daniel Podolsky
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
Daniel Podolsky
 

Viewers also liked (17)

Ryazan
RyazanRyazan
Ryazan
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
 
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомБинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
 
опыт построения и эксплуатации большого файлового хранилища
опыт построения и эксплуатации большого файлового хранилищаопыт построения и эксплуатации большого файлового хранилища
опыт построения и эксплуатации большого файлового хранилища
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 
ночью через лес Stress-test пяти almost-the-same-functionality shared-nothin...
ночью через лес  Stress-test пяти almost-the-same-functionality shared-nothin...ночью через лес  Stress-test пяти almost-the-same-functionality shared-nothin...
ночью через лес Stress-test пяти almost-the-same-functionality shared-nothin...
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlTk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosql
 
My talk at CEE-SECR 2016
My talk at CEE-SECR 2016My talk at CEE-SECR 2016
My talk at CEE-SECR 2016
 
My talk at LVEE 2016
My talk at LVEE 2016My talk at LVEE 2016
My talk at LVEE 2016
 
Harry Potter and the Daemons of Berkeley
Harry Potter and the Daemons of BerkeleyHarry Potter and the Daemons of Berkeley
Harry Potter and the Daemons of Berkeley
 
My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
My talk at Linux Piter 2015
My talk at Linux Piter 2015My talk at Linux Piter 2015
My talk at Linux Piter 2015
 
My talk at Linux Piter 2016
My talk at Linux Piter 2016My talk at Linux Piter 2016
My talk at Linux Piter 2016
 

Similar to Go и fuse

Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...
SBTech
 
свободные информационные технологии на службе школы
свободные информационные технологии на службе школысвободные информационные технологии на службе школы
свободные информационные технологии на службе школы
alkalinin
 
Kolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovKolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosov
drupalconf
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko
 

Similar to Go и fuse (20)

игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
 
Опросный лист оценки знаний по соревновательной робототехнике
Опросный лист оценки знаний по соревновательной робототехникеОпросный лист оценки знаний по соревновательной робототехнике
Опросный лист оценки знаний по соревновательной робототехнике
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...
 
Rozum robotics release cycle
Rozum robotics release cycleRozum robotics release cycle
Rozum robotics release cycle
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
Drupal conf2011 2_kolosov
Drupal conf2011 2_kolosovDrupal conf2011 2_kolosov
Drupal conf2011 2_kolosov
 
Инструментарий начинающего разработчика Drupal.
Инструментарий начинающего разработчика Drupal.Инструментарий начинающего разработчика Drupal.
Инструментарий начинающего разработчика Drupal.
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open Source
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)
 
Invisible
InvisibleInvisible
Invisible
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программист
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 
Трудности перевода: как построить мультиязычный сайт на WordPress
Трудности перевода: как построить мультиязычный сайт на WordPressТрудности перевода: как построить мультиязычный сайт на WordPress
Трудности перевода: как построить мультиязычный сайт на WordPress
 
свободные информационные технологии на службе школы
свободные информационные технологии на службе школысвободные информационные технологии на службе школы
свободные информационные технологии на службе школы
 
PVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируетеPVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируете
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
 
Kolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovKolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosov
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 

Go и fuse

  • 1. Go и FUSE опыт практического применения
  • 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)