Я — Роман Гелемб’юк з Івано-Франківська. Уже більше 17 років займаюся програмуванням. Основні технології — PHP та Golang. Як порядний IT-шник я маю свої pet-проекти. Наразі мене цікавлять децентралізовані бази даних та блокчейн-технології.
Хочу розповісти про свій проект OurSQL. Це, свого роду, розширення MySQL, яке дозволяє створити децентралізовану базу даних без вузлів із «особливими» правами.
Ідея
Спочатку була ідея створити децентралізовану платформу для громадянського суспільства. Щось типу соціальної мережі, але децентралізовану, без «адміна», «власника» і модераторів, із можливостями вести конструктивний діалог, водночас.
Першою прийшла ідея використати блокчейн як базу, але весь механізм виглядав занадто складним. Потім ідея еволюціонувала в більш вузьку — створити універсальну платформу для децентралізованих баз даних. А тоді вже на цій базі можна буде робити все інше, концентруючись лише на бізнес-логіці самої соціальної мережі.
Огляд готових рішень для децентралізованих ДБ не дав результатів, фактично є лише BighainDB (на базі MongoDB). Насправді ж вона не виконує обіцяного, хоч і є розрекламованою та популярною. Слід відзначити проект Hyperledger.org, який у той час видався мені занадто складним для використання. Напевно, для корпорацій він буде найкращим вибором, але не для малих компаній чи одинаків.
Процес розробки
Задача була створити інструмент для реплікації баз SQL-даних повністю децентралізованим способом, без будь-яких master вузлів.
Вибір технології був простим. Поки що єдиним рішенням, яке довело свою ефективність для таких задач, є Blockchain. Тому я почав вивчати цю технологію на прикладі створення криптовалюти. Для розробки я вибрав Golang. Основна причина — я давно хотів отримати реальний досвід на цій мові програмування із великим проектом.
У результаті написав спрощений клон bitcoin на Golang із нуля. Він робочий, хоча підтримувати я його не планую.
Далі на базі коду democoin був створений OurSQL — проксі-сервер MySQL, який фільтрує SQL-запити, перевіряє можливість виконання, конвертує SQL у блокчейн-транзакції, будує блоки (для блокчейну), відправляє блоки та транзакції іншим нодам (іншим серверам OurSQL в межах однієї бази даних) і ті, в свою чергу, роблять відповідні оновлення у своїх локальних копіях MySQL-баз.
Назва OurSQL народилася сама собою. MySQL — для моєї бази даних, а OurSQL — для нашої бази даних. У процесі довелося вивчити протокол MySQL клієнта, детально розібратися у всіх нюансах шифрування та електронних підписів у різних мовах програмування та бібліотеках та інше.