«Робили микросервисы до того, як це стало мейнстрімом»: Ощадбанк-Технології розробки



В Ощадбанк-Технологіях займаються цілим рядом цікавих завдань — від уніфікації інтерфейсів величезного банку до прототипування blockchain. У більшості випадків розробка ведеться на Java: її у компанії вважають кращим вибором для великих корпоративних систем, цінуючи можливість скомпонувати рішення з сторонніх продуктів і внутрішніх розробок.

На конференціях спікери «Сбертеха» розповідають як безпосередньо про свій досвід, так і про загальні висновки, які можна з нього зробити. Але в формат доповідей укладається не всі, і напередодні Joker ми окремо задали питання трьом співробітникам компанії, які виступають на Java-конференціях. Нам відповіли:

  • Сергій Владіміров (виступить на Joker 2016)
  • Олександр Маторін (раніше виступав на Joker, JPoint і JBreak)
  • Максим Зелінський (раніше виступав на JPoint і JBreak)

Сергій Владіміров (керівник розробки в ЦК платформи підтримки розвитку бізнесу)
— Над чим ви працюєте в Сбертехе?

— Приблизно рік займався розробкою нової системи обліку терміналів прийому карток у торговельних точках. Проект замінює застарілу систему, написану на C, що працювала з прямим з'єднанням з базою даних і мала велику кількість ручних і полуручных взаємодій з іншими системами. Наше додаток буде частиною нової платформи Ощадбанку 2018+ (цільова платформа з 2018 року). Воно написано як «чесне» серверне Java-додаток (з браузером в якості клієнта), з використанням клієнто-орієнтованої архітектури зберігання даних (на основі технології Apache Ignite / GridGain) і єдиної корпоративної моделі даних. Тут купа розумних слів, але за кожним з них кардинальна зміна якщо не у тому, як треба думати, то вже точно в тому, як треба розробляти програми для бізнесу.

У цьому проекті завершена перша фаза, мої колеги продовжать над ним працювати, а сам починаю займатися новим проектом організації користувальницького інтерфейсу. Знову ж таки, це буде не просто переписування коду на JavaScript з HTML, а впровадження нових підходів до взаємодії frontend і backend.

— Ви викладаєте захист інформації та криптографію — це пов'язано з роботою в Сбертехе, або ними цікавитеся окремо? Ощадбанк почав прототипировать blockchain — маєте відношення до цього?

— Захоплюватися захистом інформації я розпочав ще зі школи (як і програмувати), але це завжди йшло паралельно і безпосередньо не пов'язане. Але вплив вони чинять один на одного постійно. Як мінімум, ловиш себе на тому, що на одну і ту ж проблему починаєш дивитися з двох сторін: «як я б зробив це як розробник» і «де у цієї системи є слабкі місця, якщо я захочу її зламати». Особливо це стосується складних систем рівня підприємства. Дуже погано, якщо «облік безпеки» при проектуванні систем полягає в тому, що вже готове рішення вимушено змінюється під тиском співробітників безпеки, а не навпаки — коли дотримання правил безпеки закладається в принципи побудови системи, і той, хто розробляє систему, розуміє і відчуває це принципи. Дуже корисна штука.

Не кажучи вже про те, що мене як програміста не налякати страшними словами «сертифікат», «цифровий підпис» або «хеш-сума».

Що стосується blockchain, на жаль (дійсно жалкую), у Ощадбанку стільки цікавих проектів, що не просто не встигнути взяти участь у всіх цікавлять, але іноді навіть дізнаєшся про них з новин та ЗМІ. Про той же blockchain із задоволенням сходила на лекцію, яку організував Ощадбанк для своїх співробітників, дізнався, що ж таке blockchain з точки зору бізнесу, але, мабуть, в найближчий рік сам особисто в цьому проекті прийняти участь не встигну. Як, на жаль, не встигну взяти участь у проекті «Фабрика даних» (проект аналізу великих даних).

— Ви любите open source — а наскільки активно при роботі в Сбертехе його використовуєте?

— Можна не любити open source, але його дуже складно не використовувати :-) Якщо ви програміст Java і розробляєте рішення для бізнесу — значить, у вас в classpath лежить не один десяток open source бібліотек, починаючи від логер до бібліотек роботи з XML або JSON. В Ощадбанк-Технологіях ми не тільки використовуємо open source, але і намагаємося бути активною частиною спільноти. Найяскравіший приклад — це, звичайно, участь у роботі над Apache Ignite.

Open source виявляється не просто дешевше. Він виявляється швидше з точки зору «time to market». Використовуючи платний продукт з закритим кодом, ви можете два-три роки чекати від розробника виправлень або доробок за потрібною вам функціоналу. А можете взяти open source рішення, виправити в ньому якісь недоліки (якщо вони там були і їх ніхто не помітив), а коли треба щось додати або поміняти, просто брати і міняти. Нехай на це потрібна кваліфікація, нехай вона трохи не властива вашим співробітникам, але це буде працювати, грубо кажучи, вже через тиждень у production, а не через 2-3 роки, коли вийде нова версія закритого продукту. В Ощадбанк-Технологіях це не теорія, а реальні випадки, коли змушені міняти якусь технологію або рішення просто тому, що доопрацьовувати існуюче або дуже дорого, або, що зазвичай важливіше, занадто довго.

— Ви виступаєте перед публікою в різних форматах: і як викладач в МФТІ, і з научпоп-лекціями, і на конференціях. Чим формат конференцій для вас відрізняється?

— Якщо порівнювати лекції та виступи на конференціях, то останні завжди складніше і цікавіше. У доповідача немає способу примусити людей прийти на його розповідь — двійку на іспиті він не поставить. Не можна просто вийти перед аудиторією і розповісти матеріал — люди прийшли не конспектувати, не просто дізнаватися нове і пізнавальне, а люди прийшли отримувати ті знання, які допоможуть стати професіоналами у своїй галузі. І якщо якась доповідь не дає щось корисне, що людина може застосувати на практиці (нехай навіть у майбутньому), людина встане і піде.

Тобто мета студента — здати іспит. Мета слухача науково-популярної лекції — дізнатися щось цікаве у свій вільний час. Сходити на лекцію як на екскурсію. А ось мета слухача професійної конференції — професійний (і кар'єрне зростання. І якщо доповідь не сприяє цієї мети, його не будуть слухати.

— Про що розповісте на майбутньому Joker?

— Презентація для Joker довго допрацьовувалася з організаторами, було кілька попередніх прослуховувань, і в результаті вирішили трохи змістити акценти. Раніше передбачалося, що в ній буде декілька прикладів оптимізацій на рівні алгоритмів, коли нескладними діями (і точно без нових бібліотек та інструментів) ми отримуємо значний виграш в продуктивності. Але в підсумку вирішили взяти один з найяскравіших моментів і розглянути з декількох сторін.

Тому на student edition вас чекає розповідь про таку структуру даних, як trie, або навантажене (префиксное) дерево. І буде показаний реальний приклад з робочого досвіду, в якому за допомогою цієї структури досягли зростання продуктивності окремої вузької завдання в тисячу разів.

Олександр Маторін (головний керівник розробки в ЦК ризик розвитку систем)
— Ви займаєтеся системою визначення шахрайств, і відразу цікаво: чи можете розповісти докладніше (не видаючи ніяких секретів, які допомогли б шахраям)?

Я працюю у відділі, який займає розробкою систем управління ризиками на фінансових ринках. Є системи, які збирають угоди, здійснювані трейдерами від імені Ощадбанку. Інші системи можуть підписуватися на отримання подій про нові угоди, щоб порахувати певні ризик-метрики, або перевірити угоду на предмет шахрайства.

Найпростіший приклад відстеження шахрайства — пошук «парних угод». Тобто трейдер купує певний фінансовий інструмент і через деякий час продає його за більш низькою ціною, можливо, того ж самого контрагента. Наприклад, трейдер купив долари по 70 рублів, і через день продав за 60, розраховуючи, що частина різниці повернеться йому іншим каналом.

Інші тести для визначення шахрайства вважають більш складні показники, наприклад, Implied Volatility для FX-опціонів методом Black-Scholes. Тобто тут цікава предметна область і багато фінансової математики.

— Які інструменти/технології використовуєте?

У нашому відділі розробляється близько 15 різних систем, які взаємодіють один з одним за різними протоколами. Тут дуже добре підходить микросервисная архітектура, яку ми почали використовувати приблизно 4 роки тому, ще до того, як це стало мейнстрімом. Розрахунок кожної ризик-метрики або агрегатор угод — це окремий сервіс. Зараз наші системи розбиті приблизно на 100 микросервисов, які запускаються в декількох дата-центрах. Ми пишемо на Java 8, скрізь використовується Spring. Різні сервіси використовують різні технології і бази. Частина того, що ми використовуємо: Cassandra, MongoDB, Coherence, GridGain, RabbitMQ, Oracle DB, TomCat.

— ви берете участь у внутрішніх конференціях компанії — а чи можете розповісти про них?

— Вже два роки поспіль «Сбербанк-Технологіях» проводяться внутрішні конференції Dev & QA days. На останній Dev Day в Москві прийшло близько 150 осіб, приблизно 300 дивилося online-трансляцію. Було приблизно 20 доповідей в 3 потоки. Я брав участь як спікер і як учасник програмного комітету. У нас, як і на Joker, будь-який бажаючий міг подати заявку на доповідь. Після заявка розглядається програмним комітетом. Якщо заявка прийнята, з доповідачем проводять один або кілька репетицій доповіді. Сподіваюся, ці конференції будуть розвиватися і далі.

— Ви викладаєте на кафедрі «Сбертеха» в МФТІ — а для вас це додаткова діяльність, яка не сильно на основний, або ви відчуваєте, що викладаючи іншим, у підсумку самі починаєте при роботі в Сбертехе виконувати завдання краще?

— Я викладаю в магістратурі СБТ в МФТІ більше 2 років. Також, у СБТ пару місяців тому відкрилася Java-школа, там я теж читаю лекції.

Основне завдання мого курсу по Java, яку я ставлю перед собою — не просто домогтися того, щоб студенти сказане мною, а передати їм свою захопленість джавою, щоб вони вже самі з цікавістю поглиблювали свою експертизу. Кращим студентам кафедра щороку надає можливість відвідувати конференції Joker і JPoint.

У другому семестрі читаю курс з розподіленим системам. Розповідаю CAP, FLP теореми, алгоритми розподілених транзакцій, протоколи консенсусу, поняття часу в розподілених системах, що може зламатися та як забезпечувати відмовостійкість, архітектури NoSQL баз даних.

Другий курс допоміг мені самому дізнатися багато нового, структурувати свої знання і частина з цього застосувати в своїх проектах.

Для студентів курсу вже 2 роки проводиться змагання з алготрейдингу. Студенти повинні реалізувати на Java інтерфейс стратегії алготрейдинга. Потім завантажити вихідний код на сайті гри. Стратегія компілюється, запускається в окремій JVM і в реальному часі починає торгувати з рішеннями від інших учасників. Можна заливати нові версії стратегій необмежену кількість разів. У минулому році один з учасників до кінця гри завантажив приблизно 160 версій. Але переміг інший :)

Максим Зелінський (начальник відділу у ЦК Розвитку фронтальних систем)

— Чим саме ви займаєтеся?

— Я беру участь у створенні Єдиної Фронтальної Системи (ЕФС), а саме відповідаю за створення і розвиток Платформи для розробників, які реалізують безпосередньо бізнес-функціональність в рамках ЕФС.

Єдина Фронтальна Система в майбутньому буде обслуговувати абсолютно всіх клієнтів Банку через усі доступні канали (інтернет-банки, мобільні додатки, АТМ, колл-центри, відділення тощо). Її завдання — уніфікація і переиспользуемость рішень. Звичайно, у різних каналів є своя специфіка, але в цілому суть програми в тому, щоб інвестувати в реалізацію чого-небудь, і зробити цю реалізацію аналогічної для різних каналів.

Враховуючи величезні масштаби ЕФС, для створення якісних і надійних рішень вимагається єдиний набір технологій та сервісів, щоб скоротити time to market нових рішень, а також гарантувати єдиний рівень сервісу з точки зору надійності і продуктивності. Цими питаннями (єдиний стек, сервіси, архітектура) і займається моя команда в рамках Платформи ЕФС.

— Ви спеціалізуєтеся на речах начебто розподілених систем — чому тоді займаєтеся фронтальної системою, а не бекендом?

— У нашому випадку фронтенд з точки зору продуктивності, відмовостійкості та надійності навіть цікавіше, ніж бек: там вимоги виду «аптайм 99,99%». А якщо бекенд в якийсь момент не працює, клієнт цього навіть не помітить. Його платежі не здійсняться моментально, але можна буде занести їх в систему, можна буде отримати виписки з кешу.

Але за бэкенду в Ощадбанк-Технологіях є інша велика програма: Програма підтримки розвитку бізнесу. Це спроба трансформувати технологічні рішення з допомогою In-Memory Data Grid. Спочатку були спроби зробити автоматичне шардирование даних на базі Oracle або PostgreSQL. Був пілот, він дав позитивні результати, і негативні. За підсумками пілота було вирішено «поточні технології не зовсім актуальні для масштабів банку, давайте дивитися в майбутнє». Вибрали IMDG, і колеги тепер займаються перенесенням бэковских масивів даних в пам'ять.

— З такими гігантськими масштабами, як у вас, виникають ситуації, коли одне технологічне рішення призводить до дуже великого виграшу в ресурсах?

— Яскравий приклад – вибір технологій для web-презентаційного рівня JS SPA і React. Один тільки перенесення презентаційної логіки з сервера додатків на клієнта дозволив заощадити нам ~200 серверів додатків, які спочатку планувалося використовувати для класичного server-side web-презентаційного рівня. Те ж саме стосується скорочення трафіку між клієнтом і сервером, який очевидно знижується завдяки тому, що обмін йде тільки даними, а не HTML'їм.

— У вас є досвід реверс-інжинірингу — а виявляється він практично корисний при роботі в Сбертехе?

— Дуже навіть. Особливо часто доводиться займатися reverse engeneering'ом при роботі з IBM WebSphere Application Server, починаючи від IBM JVM, де команда, з якою я раніше працював до ЕФС, знайшла критичний дефект, що приводить до дедлоку всередині JVM при роботі з анотаціями під навантаженням, закінчуючи Java-драйверами для IBM WebSphere MQ, коли довелося довго вивчати проблему, чому комбінація IBM WAS + IBM MQ + Spring JMS Templates не працює з неперсистентными чергами під навантаженням.

— Спасибі. Будемо чекати на Joker доповідь Сергія Владимирова, а поки згадаємо попередні доповіді «Сбертеха» на Java-конференціях:






Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.