Posts

Showing posts from November, 2016

Allen Golub

I passed wonderful course of Allen Holub "Picturing Architecture: UML (The Good Bits) and More" . I put 5 from possible 5 for Allen's work.

LEAN

Image
Good introduction video to the LEAN by Eric Ries:

Java Enterprise Edition cheat sheets

Image
Here are some Java EE cheat sheets, I have made this year spring.  EJB  EJB extras (Authorization, Timer service ..) JSF JSF (Navigation) JMS  JPA JPA (Queries) Transactions XML & JSON

Strangler application pattern

Image
Ідея цього патерну знайдена в тропічний лісах, а втіленням ідеї, є вид ліан які потрапляючи на дерево починають рости в різні сторони обвиваючи господаря. Коли пагони ліани добираються до землі вони утворюють коріння. Таким чином формується повноцінне дерево. Досягнувши своєї мети ліана-дерево придушує господаря. Суть патерну, полягає у поступовому рефакторингу легасі кода та заміні його. Також важливим є підхід до проектування застосунку, так щоб його було легко змінювати в майбутньму. Дізнатися більше можна в статті Мартіна Фаулера

OpenStack Video Manual

Image
Here is two videos from my old project about OpenStack. Videos are two years old, but I think, still actual. Videos are in Ukrainian language.

Agile, agility where you are?

Image
Awesome presentation from one of the founders of agile practice of software development - Dave Thomas. LEAN ideas by Jez Humble:

Finite-State Machine

Here is my presentation at Budapest.py meetup. All about finite-state machines, RAFT algorithm and those implementation in Python. Please, get it here .

Microservices & Data Concistency

Image
При використанні мікросервісної архітектури "гостро" постає питання відповідності даних. Так, оскільки при такій архітектурі неможливо використовувати ACID (через те що бізнес операція може складатися з багатьох бізнес моделей, які належать різним сервісам), то можливими варіантами є двохфазний коміт (2PC) та обмін подіями (event sourcing). Двохфазний коміт (відомий також як XA-Transaction ) полягає в синхронізації збереження даний між багатьма базами даних в розподіленій системі. 2PC складається з підготовчої фази та фази коміту. Підготовча фаза відбувається в момент, коли база даних лідер бажає внести зміни. Лідер надсилає запит усьому кластеру з питанням чи можуть вони закомітити наступні зміни. Якщо усі учасники підтвердили можливість коміту, лідер переходить до фази коміту. Як можна розуміти з опису, такий архітектурний підхід має багато недоліків, серед яких затримки мережі, вимога консенсусу. Обмін подіями дає нам більшу гнучкість. Так ми можено застосовувати AC...

Funny Task To Solve

My friend found and sent me funny task to solve. Initial idea: There is a city/town represented a matrix, where every digit is a building. Randomly selected building become a post office (random row and column are passed). I have to count all distances from the post office which has 0 distance, to all houses in the town. Distance counted as distance from two closest points. It was a little bit mind bending, but finaly I came to the next solution: def generate_matrix(rows, columns): return [[0 for column in range(columns)] for row in range(rows)] def count_distances(matrix, row, column): for r_idx, r in enumerate(matrix): if r_idx == row-1: for c_idx, el in enumerate(r): matrix[r_idx][c_idx] = abs(column - c_idx - 1) else: matrix[r_idx][column-1] = abs(row - r_idx - 1) matrix = go_up_left(matrix, row, column) matrix = go_up_right(matrix, row, column) matrix = go_bottom_left(matrix, row, column) matr...

Service Discovery

Image
Every service has own IP in the network the problem only IP's are dynamically allocated (we want flexible system, right?). How client can find a service in this case? There are two types of service discovery. First one, is called client side service discovery. Second one is called server side service discovery. The common part for the both is a service registry (SR). Every service has to register in SR. Next is different. In case of client side service discovery, client ask a SR for the address of a specific service. In this case client directly queries service and client does balancing. This architecture requires "wise" client. From other side server side service discovery introduces a router, to redirect client requests to an appropriate service and balance the load. This solution does not requires sophisticated clients, however it introduces extra network hop. Good example of server side service discovery is Consul.io. Guys from Hashicorp built it on Goss...

Circuit Break Pattern

При використанні мікросервісної архітектури потрібно вирішити питання міжпроцесної взаємодії (IPC). На даний момент мені відомо два варіанти: посилка повідомлень (messaging) та виклик віддалених процедур (RMI). Кожен з них має свої плюси та мінуси. Проте мова тут не про це, а про поширену проблему комунікації між сервісами зумовленну виходом з ладу одного з сервісів. Процес докладно описаний в книзі Michael Nygard "Release It!" . Автор докладно розповідає з якими проблемами може зіткнутися компанія при блокуванні серверних процесів на очікуванні відповіді від непрацюючого сервіса. В цій же книзі автор наводить опис Circuit Breaker патерна (CBP). Ідея полягає в аналогії з електричним ланцюгом. Ми маємо своєрідний проксі об’єкт перемикач. У випадку коли кількість помилок при зверненні до віддаленого сервісу зростає і переходить певну межу, перемикач блокує наступні з’єднання протягом певного періоду часу. Така техніка допомогає уникнути блокування та каскадний помилок. Ь...