SlideShare a Scribd company logo
1 of 32
Архітектура UniSender.
Ріст від 100кк до 1.5ккк листів в місяць.
Олександр Бричук
CTO в UniSender
SaaS рішення
Чим являвся UniSender в 2013
● прибутковим бізнесом
● приблизно 100 млн листів в місяць
● дизайн в дусі нульових
● невелика розподілена команда
● великі амбіції
Технічні деталі
● haproxy + nginx
● php 5.6 * 8
● mysql 5.6 (2Tb sata/ssd, 256Gb Ram, 16core CPU) *2
● redis
● exim smtp server * 7 (ram disk для швидкості)
● nfs server 2Tb користувацьких даних
орієнтовна ціна за залізо 12k EUR
Проблеми ?
SPOF Коментар Проблеми
NFS 2Tb дрібних файлів падіння, rsync не встигає
Percona MySql master/slave (не кластер) падіння, 1 клієнт міг покласти сервіс
Exim RAM spool для швидкодії пікові навантаження
код відправки кампаній 1 функція на 50+ аргументів і
порядка 2000 строк
спагетті код, неможливо оперативно
гасити пожежі
код результатів доставки модуль на 2-3к строк логічно заплутаний код, забагато
обов'язків, неможливо оперативно
гасити пожежі
Архітектура в 2013 - 2016
2015
Карт –
бланш
Було Стало Коментар
Exim Smtp PowerMta PMTA відбив кошти через рік
NFS Ceph -> AWS S3 AWS S3 на 10% виявився дорожчим
модуль відправки кампаній все той же модуль + UniCore (Java
сервіс)
забрали з PHP, написали частково на
Java
модуль збору статистики PMTA + Java сервіс + RabbitMq 100% Java сервіс, PHP не деплоїться
на SMTP тепер
Ceph * vs AWS S3 ? AWS S3 wins.
* Ceph Object Storage
● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
Ceph * vs AWS S3 ? AWS S3 wins.
* Ceph Object Storage
● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
● тестові заміри на маленьких даних не покажуть нічого
Ceph * vs AWS S3 ? AWS S3 wins.
* Ceph Object Storage
● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
● тестові заміри на маленьких даних не покажуть нічого
● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість
читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод
Ceph * vs AWS S3 ? AWS S3 wins.
* Ceph Object Storage
● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
● тестові заміри на маленьких даних не покажуть нічого
● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість
читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод
● кешування не допомагало, ніяке ніде
Ceph * vs AWS S3 ? AWS S3 wins.
* Ceph Object Storage
● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
● тестові заміри на маленьких даних не покажуть нічого
● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість
читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод
● кешування не допомагало, ніяке ніде
● minio.io тільки починав свій шлях
Ceph * vs AWS S3 ? AWS S3 wins.
* Ceph Object Storage
● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
● тестові заміри на маленьких даних не покажуть нічого
● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість
читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод
● кешування не допомагало, ніяке ніде
● minio.io тільки починав свій шлях
● втрачали дані
Ceph * vs AWS S3 ? AWS S3 wins.
* Ceph Object Storage
● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
● тестові заміри на маленьких даних не покажуть нічого
● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість
читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод
● кешування не допомагало, ніяке ніде
● minio.io тільки починав свій шлях
● втрачали дані
● внутрішнє апі для роботи з файлами стало сумісним із S3 API
Ceph * vs AWS S3 ? AWS S3 wins.
* Ceph Object Storage
● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
● тестові заміри на маленьких даних не покажуть нічого
● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість
читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод
● кешування не допомагало, ніяке ніде
● minio.io тільки починав свій шлях
● втрачали дані
● внутрішнє апі для роботи з файлами стало сумісним із S3 API
● отримали статистику використання
Колись Ops-и були дешевшими за програмістів
● автоматизувати все, що можливо: autofailover, backups, deploys (no kube
only docker), monitoring
● чим менше shared ресурсів тим краще
● тримати в голові масштабування по принципу кубиків
● тюнінг мережевих налаштувань на рівні ОС
● відмова від DNS resolving всередині сервісів
● асинхронно там де можливо
Архітектура в 2016-2017
2017
Рефакторити чи ні ?
рефакторити на
мікро-сервіси
Чому ми не вибрали переписувати з 0 ?
● навантаження на фонд оплати праці
● потрібен архітектор in house
● ризик втратити функціональність
● підтримувати 2 системи одночасно
● PHP 7 і досвід з “мікро-сервісами”
Чому у нас вийшло ?
Контрольований процес
● свідомо виділяли місця, які потрібно було “вилікувати”
● призначили відповідального за процес
● відразу писали авто-тести на api
● додавали відсутні тести
● code-review + code style
● декілька раз свідомо зупинялися в розробці окремих сервісів
Рік Рефакторинг Розвиток продукта
2016 50% 50%
2017 60% 40%
2018 34% 66%
2019 62% 38%
2020 25% 75%
Як відновлювати неактивні адреси
Запит від бізнеса: “Зробіть, щоб клієнти не мучили сапорт запитаннями чому
мої контакти все ще недоступні?”.
Дано: база контактів всіх клієнтів живе на 1 сервері. Результати доставки по
контактам тут же. Поточна реалізація не встигає обробити і 10% від всієї бази
за сутки. Оновлювати статус контактам потрібно щодня. Статус оновлюється
в залежності від результату доставки. Контактів сотні мільйонів.
Що ще ?
● вибираємо найважливіші для бізнеса вузли системи і модифікуємо їх
● форсуємо перехід на свіжі версії ПЗ: PHP 7+, MySql 5.7, фреймворків
● API endpoint-и мікро-сервісів на ReactPHP
● стараємось думати "впасти може будь-що і будь-коли"
● якщо можна обходимся без JOIN
● денормалізація, оптимізація структури, стискання даних і розділення баз
даних
● привчаємо розробників мислити: “Що можна зробити, щоб при передачі
даних між вузлами не робити додаткові запити в БД/мікро-сервіси?”
2019
PHP 7.4 vs 7.2 на UniOne
PHP 7.4 vs 7.2
Архітектура в 2019+
Як ріс бюджет на інфраструктуру
2013 - 2014 ~ 11k USD Fornex -> OVH, Hetzner
2015-2017 ~ 11k - 21k USD OVH, Hetzner
2018-2020 ~ 26k - 40k USD міграція в Lattelecom
2021+ ~ 25k USD магія

More Related Content

Similar to Oleksandr Brychuk "UniSender architecture. Growth from 100kk to 1.5kkk letters per month"

"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ..."Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...Fwdays
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET МіфиSerhiy Kalinets
 
Як робити рефакторинг в продукті з бурхливою історією
Як робити рефакторинг в продукті з бурхливою історієюЯк робити рефакторинг в продукті з бурхливою історією
Як робити рефакторинг в продукті з бурхливою історієюAleksandr Brychuk
 
Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....
Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....
Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....HOWWEDOIT
 
Невивчені уроки або логи антивірусних війн
Невивчені уроки або логи антивірусних війнНевивчені уроки або логи антивірусних війн
Невивчені уроки або логи антивірусних війнVladyslav Radetsky
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii NasinnykFwdays
 
Alexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonAlexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonPyCon Odessa
 
Робота із malware. McAfee ATD+TIE+DXL/OpenDXL
Робота із malware. McAfee ATD+TIE+DXL/OpenDXLРобота із malware. McAfee ATD+TIE+DXL/OpenDXL
Робота із malware. McAfee ATD+TIE+DXL/OpenDXLVladyslav Radetsky
 
Різноманітя баз даних (додаток до доповіді)
Різноманітя баз даних (додаток до доповіді)Різноманітя баз даних (додаток до доповіді)
Різноманітя баз даних (додаток до доповіді)Olga Tomakhina
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsPavlo Iuriichuk
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoGlobalLogic Ukraine
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020OdessaJS Conf
 
Роман Якобчук "Real-life React"
Роман Якобчук "Real-life React"Роман Якобчук "Real-life React"
Роман Якобчук "Real-life React"Fwdays
 
Юрий Грузинский. Як самописні скрипти і методики допомагають в роботі по SEO:...
Юрий Грузинский. Як самописні скрипти і методики допомагають в роботі по SEO:...Юрий Грузинский. Як самописні скрипти і методики допомагають в роботі по SEO:...
Юрий Грузинский. Як самописні скрипти і методики допомагають в роботі по SEO:...Octopus Events
 
Корнілов Андрій
Корнілов АндрійКорнілов Андрій
Корнілов АндрійOleg Nazarevych
 

Similar to Oleksandr Brychuk "UniSender architecture. Growth from 100kk to 1.5kkk letters per month" (20)

"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ..."Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET Міфи
 
Як робити рефакторинг в продукті з бурхливою історією
Як робити рефакторинг в продукті з бурхливою історієюЯк робити рефакторинг в продукті з бурхливою історією
Як робити рефакторинг в продукті з бурхливою історією
 
Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....
Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....
Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....
 
Невивчені уроки або логи антивірусних війн
Невивчені уроки або логи антивірусних війнНевивчені уроки або логи антивірусних війн
Невивчені уроки або логи антивірусних війн
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii Nasinnyk
 
Alexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonAlexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using Python
 
Робота із malware. McAfee ATD+TIE+DXL/OpenDXL
Робота із malware. McAfee ATD+TIE+DXL/OpenDXLРобота із malware. McAfee ATD+TIE+DXL/OpenDXL
Робота із malware. McAfee ATD+TIE+DXL/OpenDXL
 
The Revenant: Legend of ProZorro
The Revenant: Legend of ProZorroThe Revenant: Legend of ProZorro
The Revenant: Legend of ProZorro
 
Ddd
DddDdd
Ddd
 
Sql db
Sql dbSql db
Sql db
 
Java script + extjs
Java script + extjsJava script + extjs
Java script + extjs
 
Різноманітя баз даних (додаток до доповіді)
Різноманітя баз даних (додаток до доповіді)Різноманітя баз даних (додаток до доповіді)
Різноманітя баз даних (додаток до доповіді)
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.js
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. Howto
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020
 
Роман Якобчук "Real-life React"
Роман Якобчук "Real-life React"Роман Якобчук "Real-life React"
Роман Якобчук "Real-life React"
 
Юрий Грузинский. Як самописні скрипти і методики допомагають в роботі по SEO:...
Юрий Грузинский. Як самописні скрипти і методики допомагають в роботі по SEO:...Юрий Грузинский. Як самописні скрипти і методики допомагають в роботі по SEO:...
Юрий Грузинский. Як самописні скрипти і методики допомагають в роботі по SEO:...
 
Корнілов Андрій
Корнілов АндрійКорнілов Андрій
Корнілов Андрій
 

More from Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy TytenkoFwdays
 

More from Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy Tytenko
 

Oleksandr Brychuk "UniSender architecture. Growth from 100kk to 1.5kkk letters per month"

  • 1. Архітектура UniSender. Ріст від 100кк до 1.5ккк листів в місяць.
  • 2. Олександр Бричук CTO в UniSender SaaS рішення
  • 3. Чим являвся UniSender в 2013 ● прибутковим бізнесом ● приблизно 100 млн листів в місяць ● дизайн в дусі нульових ● невелика розподілена команда ● великі амбіції
  • 4. Технічні деталі ● haproxy + nginx ● php 5.6 * 8 ● mysql 5.6 (2Tb sata/ssd, 256Gb Ram, 16core CPU) *2 ● redis ● exim smtp server * 7 (ram disk для швидкості) ● nfs server 2Tb користувацьких даних орієнтовна ціна за залізо 12k EUR
  • 5. Проблеми ? SPOF Коментар Проблеми NFS 2Tb дрібних файлів падіння, rsync не встигає Percona MySql master/slave (не кластер) падіння, 1 клієнт міг покласти сервіс Exim RAM spool для швидкодії пікові навантаження код відправки кампаній 1 функція на 50+ аргументів і порядка 2000 строк спагетті код, неможливо оперативно гасити пожежі код результатів доставки модуль на 2-3к строк логічно заплутаний код, забагато обов'язків, неможливо оперативно гасити пожежі
  • 9. Було Стало Коментар Exim Smtp PowerMta PMTA відбив кошти через рік NFS Ceph -> AWS S3 AWS S3 на 10% виявився дорожчим модуль відправки кампаній все той же модуль + UniCore (Java сервіс) забрали з PHP, написали частково на Java модуль збору статистики PMTA + Java сервіс + RabbitMq 100% Java сервіс, PHP не деплоїться на SMTP тепер
  • 10. Ceph * vs AWS S3 ? AWS S3 wins. * Ceph Object Storage ● станом на 2017 Ceph інфо по особливостям шукали в мейл групах
  • 11. Ceph * vs AWS S3 ? AWS S3 wins. * Ceph Object Storage ● станом на 2017 Ceph інфо по особливостям шукали в мейл групах ● тестові заміри на маленьких даних не покажуть нічого
  • 12. Ceph * vs AWS S3 ? AWS S3 wins. * Ceph Object Storage ● станом на 2017 Ceph інфо по особливостям шукали в мейл групах ● тестові заміри на маленьких даних не покажуть нічого ● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод
  • 13. Ceph * vs AWS S3 ? AWS S3 wins. * Ceph Object Storage ● станом на 2017 Ceph інфо по особливостям шукали в мейл групах ● тестові заміри на маленьких даних не покажуть нічого ● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод ● кешування не допомагало, ніяке ніде
  • 14. Ceph * vs AWS S3 ? AWS S3 wins. * Ceph Object Storage ● станом на 2017 Ceph інфо по особливостям шукали в мейл групах ● тестові заміри на маленьких даних не покажуть нічого ● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод ● кешування не допомагало, ніяке ніде ● minio.io тільки починав свій шлях
  • 15. Ceph * vs AWS S3 ? AWS S3 wins. * Ceph Object Storage ● станом на 2017 Ceph інфо по особливостям шукали в мейл групах ● тестові заміри на маленьких даних не покажуть нічого ● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод ● кешування не допомагало, ніяке ніде ● minio.io тільки починав свій шлях ● втрачали дані
  • 16. Ceph * vs AWS S3 ? AWS S3 wins. * Ceph Object Storage ● станом на 2017 Ceph інфо по особливостям шукали в мейл групах ● тестові заміри на маленьких даних не покажуть нічого ● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод ● кешування не допомагало, ніяке ніде ● minio.io тільки починав свій шлях ● втрачали дані ● внутрішнє апі для роботи з файлами стало сумісним із S3 API
  • 17. Ceph * vs AWS S3 ? AWS S3 wins. * Ceph Object Storage ● станом на 2017 Ceph інфо по особливостям шукали в мейл групах ● тестові заміри на маленьких даних не покажуть нічого ● на реальних даних ~ 2-3Tb файлів, більше 35 млн об’єктів швидкість читання 1 об’єкта складала 15-20 секунд, на кластері з 3 потужних нод ● кешування не допомагало, ніяке ніде ● minio.io тільки починав свій шлях ● втрачали дані ● внутрішнє апі для роботи з файлами стало сумісним із S3 API ● отримали статистику використання
  • 18. Колись Ops-и були дешевшими за програмістів ● автоматизувати все, що можливо: autofailover, backups, deploys (no kube only docker), monitoring ● чим менше shared ресурсів тим краще ● тримати в голові масштабування по принципу кубиків ● тюнінг мережевих налаштувань на рівні ОС ● відмова від DNS resolving всередині сервісів ● асинхронно там де можливо
  • 20. 2017
  • 21.
  • 22. Рефакторити чи ні ? рефакторити на мікро-сервіси
  • 23. Чому ми не вибрали переписувати з 0 ? ● навантаження на фонд оплати праці ● потрібен архітектор in house ● ризик втратити функціональність ● підтримувати 2 системи одночасно ● PHP 7 і досвід з “мікро-сервісами”
  • 24. Чому у нас вийшло ? Контрольований процес ● свідомо виділяли місця, які потрібно було “вилікувати” ● призначили відповідального за процес ● відразу писали авто-тести на api ● додавали відсутні тести ● code-review + code style ● декілька раз свідомо зупинялися в розробці окремих сервісів
  • 25. Рік Рефакторинг Розвиток продукта 2016 50% 50% 2017 60% 40% 2018 34% 66% 2019 62% 38% 2020 25% 75%
  • 26. Як відновлювати неактивні адреси Запит від бізнеса: “Зробіть, щоб клієнти не мучили сапорт запитаннями чому мої контакти все ще недоступні?”. Дано: база контактів всіх клієнтів живе на 1 сервері. Результати доставки по контактам тут же. Поточна реалізація не встигає обробити і 10% від всієї бази за сутки. Оновлювати статус контактам потрібно щодня. Статус оновлюється в залежності від результату доставки. Контактів сотні мільйонів.
  • 27. Що ще ? ● вибираємо найважливіші для бізнеса вузли системи і модифікуємо їх ● форсуємо перехід на свіжі версії ПЗ: PHP 7+, MySql 5.7, фреймворків ● API endpoint-и мікро-сервісів на ReactPHP ● стараємось думати "впасти може будь-що і будь-коли" ● якщо можна обходимся без JOIN ● денормалізація, оптимізація структури, стискання даних і розділення баз даних ● привчаємо розробників мислити: “Що можна зробити, щоб при передачі даних між вузлами не робити додаткові запити в БД/мікро-сервіси?”
  • 28. 2019
  • 29. PHP 7.4 vs 7.2 на UniOne
  • 30. PHP 7.4 vs 7.2
  • 32. Як ріс бюджет на інфраструктуру 2013 - 2014 ~ 11k USD Fornex -> OVH, Hetzner 2015-2017 ~ 11k - 21k USD OVH, Hetzner 2018-2020 ~ 26k - 40k USD міграція в Lattelecom 2021+ ~ 25k USD магія