SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Один базист и сто
разработчиков
Михаил Балаян
Руководитель группы баз данных
ЛАНИТ, 2016
Источники вдохновения
• zakupki.gov.ru (Госзакупки: 3 системы, 1 домен)
– 800 000 юзеров
– 300 000 уников в день
– 1 500 pvs (200 pvs поисковых)
• dom.gosuslugi.ru (ГИС ЖКХ)
– Вся страна
– 1 000 000 уников в день
– over 3 000 pvs
Технологии
Oracle Exadata IBM Websphere Application Server Крипто ПРО CSP, TSP, JCP, OCSP
OnCloud, Selectel, Amazon AWS Oracle Weblogic Соболь
VMWare vSphere Redhat Jboss EAP АПКШ Континент
Redhat Enterprise Linux Hazelcast Ansible
IBM AIX Oracle Service Bus Docker
Oracle RDBMS IBM Datapower Appliance Vagrant
PostgreSQL Super Cool Software Zabbix
Riak KV/S2 Apache Active MQ Oracle Enterprise Manager
MongoDB Nginx Atlassian Bamboo
Apache Cassandra Apache HTTP Server Jenkins
Oracle NoSQL HAProxy Confluence
Oracle BI Trusted TLS svn
Pentaho Kav4proxy git
План
• Проблема
• Требования
• Liquibase изнутри
• Свод правил
Проблема #1. Много разработчиков
• мало
специалистов
по базам
данных
• много
разработчиков
Проблема #2. Много стендов
• мало
специалистов
по базам
• много стендов
• с разными
версиями
Проблема #3. Человеческий фактор
• Потеря
изменений
при сведении
• Повторное
применение
• Контроль
изменений
на каждом
стенде
Проблема #4. Версионность
• Версия приложения == версия базы данных
• Код приложения можно деплоить многократно
(stateless)
• Скрипты базы данных деплоить многократно
нельзя (stateful)
• Can you make a build in one step? (Joel Spolsky)
А есть ли проблема?
Небольшая команда
Мало изменений в
базе данных
А можно по-другому?!
А как?
Написали своё
Почему не своё
• Заточено под
конкретный проект
• Заточено под
конкретную базу
данных
• Сопровождение и
развитие своими
силами
Проблемы. Итого
• Много разработчиков
• Много стендов и баз
данных
• Сложность ведения
версий системы
• Сложность
автоматизации
• Сложность подключения
нового сотрудника
Необходимые требования
• Скрипты базы – это
часть версии
• Применение
скриптов
автоматически
• Идемпотентность*
* не ругательство
Достаточные требования
• Создание «с нуля»
для любой версии
системы (миграции
никто не отменял)
• Защита от
одновременного
запуска обновлений
Почему liquibase
• По описанию удовлетворял всем требованиям
• Поддерживает чистый sql (xml, yaml, json)
• Имеет возможность обратной разработки (reverse
engineering)
• Есть возможность выполнения diff баз данных
• Open-source, Java
• Самостоятельный jar-файл
• Альтернатив было не много
Внутреннее устройство
defaultSchemaName
Основные понятия Liquibase
• Changelog
• Changeset
• Preconditions
Liquibase XML [sql]
<sql> считает “;” в конце строки как разделитель выражения
Liquibase XML [createProcedure]
Liquibase XML [runAlways]
Защита от одновременного запуска
INFO 12.02.16 19:32: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:33: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:33: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:33: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:33: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:33: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:33: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:34: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:34: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:34: liquibase: Waiting for changelog lock....
INFO 12.02.16 19:34: liquibase: Waiting for changelog lock....
Unexpected error running Liquibase: Could not acquire change log
lock. Currently locked by Balayan (77.88.55.66) since 12.02.16 19:20
Идемпотентность
Once committed never changes
Идемпотентность и Обычная БД
Автоматизация
• Bamboo (jenkins, hudson)
• Shell / bat
./liquibase --driver=org.postgresql.Driver
--username=$USR
--changeLogFile=master_changelog.xml
--url=$URL/dbname?tcpKeepAlive=true
--password=$PWD
--logLevel=info
update
if [ $? -ne 0 ]
then
exit 1
fi
Часть версии
• Ченджлоги и исходники приложения хранятся в ветке
версии
• Для каждой версии свой ченджлог
• Каждая следующая версия содержит ченджлоги всех
предыдущих
Создание с нуля
• Initial_changelog (табличное
пространство, база данных,
пользователи) // postgres
• Prerun_changelog (схемы,
расширения, владельцы,
значения по-умолчанию)
• Master_changelog (сами
изменения) // правят
разработчики
• Postrun_changelog (права на
объекты, ro-пользователи)
Это ещё не всё
• Что делать с имеющимися проектами
• Что делать, если нужно откатить изменения
• Как обеспечить уникальность ченджсетов
• Как облегчить последующий анализ
изменений в версии
Имеющиеся проекты
• Reverse engineering не полный
• Сложные проекты: baseline dump +
changesets
• Простые: changesets
Откат изменений
• Liquibase XML: createTable, renameColumn,
addColumn
• Блок <rollback>
• Способы:
– по количеству ченджсетов
– до определенной даты
Уникальность ченджсетов
• Уникальность: author + id + filename
• Id = <date+TodayChangeNumber>
Удобство анализа (include)
• Для каждой версии
создаём свой
ченджлог
• Все
пересоздаваемые
объекты базы в
отдельных
ченджлогах (include)
Открытые вопросы (PostgreSQL)
• Изменение пересоздаваемых объектов
– Function return type
– View column drop
• Зависимости объектов в БД
sql> create table t1 (f1 text);
sql> create view v1 as select * from t1;
sql> alter table t1 alter column f1 type char(5);
ERROR: cannot alter type of a column used by a view or rule
DETAIL: rule _RETURN on view v1 depends on column "f1“
Наш этикет
• Используем только теги <sql>, <createProcedure>
• Если есть служебные символы XML, обрамляем конструкцией <![CDATA[ … ]]>
• Если нужно применение ченджсета при его изменениях, используем runOnChange=“true”
• Если нужно постоянное применение ченджсета, используем runAlways=“true”
• Каждое изменение пишем в отдельном ченджсете
• Сохраненные в хранилище ченджсеты не правятся (разработчиками)
• Для каждой версии создаём свой ченджлог
• Каждая следующая версия содержит ченджлоги всех предыдущих
• Есть разделение на служебные ченджлоги и на те, которые относятся к приложению
(master_changelog.xml)
• Пишем <rollback> блоки для ченджсетов
• Id формируем в формате <текущая_дата>-<сегодняшний_номер_изменения>
• Все пересоздаваемые объекты в отдельных ченджлогах
Quick start
• Скачать liquibase http://www.liquibase.org/download/index.html
• Распаковать <lbdir>
• Скачать требуемый jdbc-драйвер
https://jdbc.postgresql.org/download.html
• Скопировать драйвер в каталог <lbdir>/lib
• Запустить liquibase --driver=org.postgresql.Driver --
url=jdbc:postgresql://77.88.55.66:5454/liquitest --
username=postgres --password=postgres --
changeLogFile=generated_log.xml generateChangeLog
• updateSQL, update
Контакты
Михаил Балаян
Руководитель группы баз данных
E-mail: balayan@lanit.ru
Skype: m.balayan

Contenu connexe

En vedette

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

En vedette (20)

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 

Один базист и сто разработчиков или как мы внедряли Liquibase. Михаил Балаян, ЛАНИТ

  • 1. Один базист и сто разработчиков Михаил Балаян Руководитель группы баз данных ЛАНИТ, 2016
  • 2. Источники вдохновения • zakupki.gov.ru (Госзакупки: 3 системы, 1 домен) – 800 000 юзеров – 300 000 уников в день – 1 500 pvs (200 pvs поисковых) • dom.gosuslugi.ru (ГИС ЖКХ) – Вся страна – 1 000 000 уников в день – over 3 000 pvs
  • 3. Технологии Oracle Exadata IBM Websphere Application Server Крипто ПРО CSP, TSP, JCP, OCSP OnCloud, Selectel, Amazon AWS Oracle Weblogic Соболь VMWare vSphere Redhat Jboss EAP АПКШ Континент Redhat Enterprise Linux Hazelcast Ansible IBM AIX Oracle Service Bus Docker Oracle RDBMS IBM Datapower Appliance Vagrant PostgreSQL Super Cool Software Zabbix Riak KV/S2 Apache Active MQ Oracle Enterprise Manager MongoDB Nginx Atlassian Bamboo Apache Cassandra Apache HTTP Server Jenkins Oracle NoSQL HAProxy Confluence Oracle BI Trusted TLS svn Pentaho Kav4proxy git
  • 4. План • Проблема • Требования • Liquibase изнутри • Свод правил
  • 5. Проблема #1. Много разработчиков • мало специалистов по базам данных • много разработчиков
  • 6. Проблема #2. Много стендов • мало специалистов по базам • много стендов • с разными версиями
  • 7. Проблема #3. Человеческий фактор • Потеря изменений при сведении • Повторное применение • Контроль изменений на каждом стенде
  • 8. Проблема #4. Версионность • Версия приложения == версия базы данных • Код приложения можно деплоить многократно (stateless) • Скрипты базы данных деплоить многократно нельзя (stateful) • Can you make a build in one step? (Joel Spolsky)
  • 9. А есть ли проблема? Небольшая команда Мало изменений в базе данных А можно по-другому?! А как? Написали своё
  • 10. Почему не своё • Заточено под конкретный проект • Заточено под конкретную базу данных • Сопровождение и развитие своими силами
  • 11. Проблемы. Итого • Много разработчиков • Много стендов и баз данных • Сложность ведения версий системы • Сложность автоматизации • Сложность подключения нового сотрудника
  • 12. Необходимые требования • Скрипты базы – это часть версии • Применение скриптов автоматически • Идемпотентность* * не ругательство
  • 13. Достаточные требования • Создание «с нуля» для любой версии системы (миграции никто не отменял) • Защита от одновременного запуска обновлений
  • 14. Почему liquibase • По описанию удовлетворял всем требованиям • Поддерживает чистый sql (xml, yaml, json) • Имеет возможность обратной разработки (reverse engineering) • Есть возможность выполнения diff баз данных • Open-source, Java • Самостоятельный jar-файл • Альтернатив было не много
  • 16. Основные понятия Liquibase • Changelog • Changeset • Preconditions
  • 17. Liquibase XML [sql] <sql> считает “;” в конце строки как разделитель выражения
  • 20. Защита от одновременного запуска INFO 12.02.16 19:32: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:33: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:33: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:33: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:33: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:33: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:33: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:34: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:34: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:34: liquibase: Waiting for changelog lock.... INFO 12.02.16 19:34: liquibase: Waiting for changelog lock.... Unexpected error running Liquibase: Could not acquire change log lock. Currently locked by Balayan (77.88.55.66) since 12.02.16 19:20
  • 23. Автоматизация • Bamboo (jenkins, hudson) • Shell / bat ./liquibase --driver=org.postgresql.Driver --username=$USR --changeLogFile=master_changelog.xml --url=$URL/dbname?tcpKeepAlive=true --password=$PWD --logLevel=info update if [ $? -ne 0 ] then exit 1 fi
  • 24. Часть версии • Ченджлоги и исходники приложения хранятся в ветке версии • Для каждой версии свой ченджлог • Каждая следующая версия содержит ченджлоги всех предыдущих
  • 25. Создание с нуля • Initial_changelog (табличное пространство, база данных, пользователи) // postgres • Prerun_changelog (схемы, расширения, владельцы, значения по-умолчанию) • Master_changelog (сами изменения) // правят разработчики • Postrun_changelog (права на объекты, ro-пользователи)
  • 26. Это ещё не всё • Что делать с имеющимися проектами • Что делать, если нужно откатить изменения • Как обеспечить уникальность ченджсетов • Как облегчить последующий анализ изменений в версии
  • 27. Имеющиеся проекты • Reverse engineering не полный • Сложные проекты: baseline dump + changesets • Простые: changesets
  • 28. Откат изменений • Liquibase XML: createTable, renameColumn, addColumn • Блок <rollback> • Способы: – по количеству ченджсетов – до определенной даты
  • 29. Уникальность ченджсетов • Уникальность: author + id + filename • Id = <date+TodayChangeNumber>
  • 30. Удобство анализа (include) • Для каждой версии создаём свой ченджлог • Все пересоздаваемые объекты базы в отдельных ченджлогах (include)
  • 31. Открытые вопросы (PostgreSQL) • Изменение пересоздаваемых объектов – Function return type – View column drop • Зависимости объектов в БД sql> create table t1 (f1 text); sql> create view v1 as select * from t1; sql> alter table t1 alter column f1 type char(5); ERROR: cannot alter type of a column used by a view or rule DETAIL: rule _RETURN on view v1 depends on column "f1“
  • 32. Наш этикет • Используем только теги <sql>, <createProcedure> • Если есть служебные символы XML, обрамляем конструкцией <![CDATA[ … ]]> • Если нужно применение ченджсета при его изменениях, используем runOnChange=“true” • Если нужно постоянное применение ченджсета, используем runAlways=“true” • Каждое изменение пишем в отдельном ченджсете • Сохраненные в хранилище ченджсеты не правятся (разработчиками) • Для каждой версии создаём свой ченджлог • Каждая следующая версия содержит ченджлоги всех предыдущих • Есть разделение на служебные ченджлоги и на те, которые относятся к приложению (master_changelog.xml) • Пишем <rollback> блоки для ченджсетов • Id формируем в формате <текущая_дата>-<сегодняшний_номер_изменения> • Все пересоздаваемые объекты в отдельных ченджлогах
  • 33. Quick start • Скачать liquibase http://www.liquibase.org/download/index.html • Распаковать <lbdir> • Скачать требуемый jdbc-драйвер https://jdbc.postgresql.org/download.html • Скопировать драйвер в каталог <lbdir>/lib • Запустить liquibase --driver=org.postgresql.Driver -- url=jdbc:postgresql://77.88.55.66:5454/liquitest -- username=postgres --password=postgres -- changeLogFile=generated_log.xml generateChangeLog • updateSQL, update
  • 34. Контакты Михаил Балаян Руководитель группы баз данных E-mail: balayan@lanit.ru Skype: m.balayan