Sporo ostatnio o SOA i mikroserwisach. Jednym z wyzwań podczas rozłupywania monolitu na serwisy jest wydajność. Wywołania in-memory są zastępowane np. HTTP lub innym zdalnym protokołem. Niesie to ze sobą kilka niedogodności m.in.: 1. Wydajność jest dużo mniejsza – serializacja, deserializacja, nawiązanie połączenia, transmisja danych. 2. Serwis może być nieaktywny. 3. Może wystąpić timeout. Powyższe punkty mogą być wyjątkowo niebezpieczne, gdy wiele usług próbuje wywołać serwisy, które aktualnie nie...
Programowanie rozproszone 2073 dni, 11 godzin, 21 minut temu 321 źrodło rozwiń
Ostatnio na blogu sporo o SOA. W poprzednim wpisie, poruszyłem temat kompatybilności, teraz czas na coś, co ma na celu zminimalizowanie ilości różnych wersji usług. Najprostszym sposobem na uniknięcie problemów z kompatybilnością jest po prostu nie wprowadzenie niekompatybilnych zmian. Consumer-driven contracts to prosty sposób, aby mieć pod kontrolą śledzenie zmian oraz ich wpływ na konsumentów naszej usługi. Zwykle usługi posiadają pewien schemat (schema) czyli po prostu kontrakt. Najbardziej restry...
Programowanie rozproszone 2079 dni, 21 godzin, 32 minuty temu 87 źrodło rozwiń
Kompatybilność usług jest problemem w każdej architekturze SOA, ale w przypadku mikro-usług staje się jeszcze bardziej widoczna. W przyszłości chce napisać post o tzw. consumer-driven contracts, które znacząco mogą zminimalizować potrzebę wersjonowania usług. W każdym razie, bardzo prawdopodobne, że w pewnym momencie zajdzie potrzeba wprowadzenia zmiany, która nie jest kompatybilna wstecz. Jeśli nasz system składa się np. z 20 usług to musimy mieć mechanizm, który zagwarantuje nam, że nie wprowadzimy zm...
Programowanie rozproszone 2086 dni, 7 godzin, 54 minuty temu 208 źrodło rozwiń
Akka.NET simple example with Github Api Posted on by Michal Franc In this post I want to a simple introduction to Akka.NET using an example app based on Github api. I have been diving into Akka .NET lately. My first encounter with this technology was on Vaughn Vernon workshop in Krakow. The main event had couple of side presentation and one of them was about Akka project in Java world. It was a magic to me. Couple years later, I accidentally found ( probably on twitter ) Bartosz Sypytkowski blog and ...
Programowanie rozproszone 2092 dni, 5 minut temu 161 źrodło rozwiń
Martin Fowler, kilka lat temu pisał o tzw. Richardson maturity model, którego autorem jest tak naprawdę Leonard Richardson. Groźnie brzmiąca nazwa, jak zwykle nie opisuje nic bardzo skomplikowanego. Nie mniej jednak, model ten doskonale opisuje założenia usług RESTful. W zasadzie nie ma framework’ów, które wymuszałyby poprawną implementację REST, stąd niezbędne jest zrozumienie jakie są założenia tych usług. Programiści zbyt często luźno interpretują pojęcie REST. Moim zdaniem, w momencie, gdy REST wchod...
Programowanie rozproszone 2100 dni, 9 godzin, 55 minut temu 525 źrodło rozwiń
Hi, today I would like to share with you idea of right parallel execution of actions/methods. Imagine at the beginning that you have queue of messages and even some number of threads that in parallel get messages from queue and then there are doing background work. Now if that messages executes actions on relational database you will quickly find out that some of your work is done right, but b...
Programowanie rozproszone 2134 dni, 17 godzin, 12 minut temu 156 źrodło rozwiń
Hadoop w .NET, czyli "word count" w wykonaniu F#, Hortonworks Data Platform i mono.
Programowanie rozproszone 2160 dni, 7 godzin, 51 minut temu 141 źrodło rozwiń
Akka.NET is a .NET port of famous actor model programming framework Akka, well known for the JVM community. This blog post discuss how in few lines of code we can distribute our computations by deploying actors on the remote machines. And all of that using F# functional API.
Programowanie rozproszone 2228 dni, 21 godzin, 50 minut temu 100 źrodło rozwiń
This post is a part of preparation for 70-483 exam. Information written down here refers to the part Manage program flow. Last time I wrote about the Thread class which allows you to run the code concurrently. Today I will show an another part of the System.Threading namespace, the ThreadPool class.
Programowanie rozproszone 2495 dni, 16 godzin, 8 minut temu 51 źrodło rozwiń
This post is a part of preparation for 70-483 exam. Information written down here are related with the part Manage program flow. .NET framework provides several mechanisms to write concurrency, parallel and asynchronous code. They all are included in System.Threading namespace. This namespace contains types that allow creating multithreaded applications. Today’s post is about the Thread class.
Programowanie rozproszone 2500 dni, 7 godzin, 12 minut temu 44 źrodło rozwiń
This post is a part of preparation for 70-483 exam. Information written down here are related with the part Manage program flow. First of all I decided to explain the differences between concepts which come along with a phrase multithreading...
Programowanie rozproszone 2500 dni, 18 godzin, 16 minut temu 101 źrodło rozwiń
Dzisiaj kilka rozważań na temat korzyści płynących z wielowątkowości. Zastanówmy się, jak bardzo może nam pomóc albo zaszkodzić wprowadzenie nowych wątków w aplikacji. Jeśli wykonanie danej pracy na jednym procesorze zajmuje T(1) a wykonanie jej na n procesorach zajmuje T(n) wtedy możemy oszacować korzyści płynące z nowych wątków. W przypadku gdy T(1)/T(n) daje wynik < n. oznacza to, że gdy praca na jednym rdzeniu zajęła 5 sekund, wtedy na 5 rdzeniach zajmie np. 1.2 sekundy. czyli wydajność ma chara...
Programowanie rozproszone 2612 dni, 11 godzin, 14 minut temu 194 źrodło rozwiń
by Marcin Borecki Dzisiaj artykuł z serii poważnych– choć po przeczytaniu części tekstu mogło by się wydawać, że żartuję to chciałbym położyć nacisk na to by wszyscy zrozumieli jak działają dyski podłączone automatycznie do maszyny wirtualnej. Chciałbym dzisiaj zainspirować wszystkich do czytania tego bloga, albo chociaż do przeczytania dokumentacji w Windows Azure do komponentów, których zamierzacie używać. W ramach usługi Windows Azure możemy założyć maszyny wirtualne zarówno z systemem Linux jak I W...
Programowanie rozproszone 2657 dni, 15 godzin, 33 minuty temu 138 źrodło rozwiń
Dzisiaj zajmiemy się kolejnym wzorcem przeznaczonym dla środowiska wielowątkowego. W dokumentacji\artykułach możemy go spotkać pod nazwą “condition pattern”. Załóżmy, że jeden wątek musi sprawdzić pewien warunek aby móc wykonać jakąś pracę. Innymi słowy, mamy współdzielony zestaw zmiennych, modyfikowanych przez różne wątki. Jeden z wątków może wykonać swój kod wyłącznie, gdy te współdzielone zmienne spełnią jakiś warunek. W jaki sposób moglibyśmy podejść do problemu? Najprostszym rozwiązaniem byłaby pęt...
Programowanie rozproszone 2785 dni, 13 godzin, 47 minut temu 167 źrodło rozwiń
W ostatnim poście zajęliśmy się wprowadzeniem do TPL Dataflows. Użyliśmy ActionBlock do implementacji wzorca producent\konsument. Dzisiaj dołączymy kolejne bloki, aby pokazać na czym polega tworzenie współbieżnych algorytmów w TPL. ActionBlock przetwarzał wyłącznie dane – nie zwracał żadnego rezultatu. Innymi słowy, przyjmował parametry wejściowe ale zwracał wyłącznie void. TransformBlock implementuje zarówno ITargetBlock jak i ISourceBlock – stanowi również źródło danych. Rozważmy przykład:privatestati...
Programowanie rozproszone 2806 dni, 23 godziny, 17 minut temu 64 źrodło rozwiń
Witajcie, Chciałbym Was wszystkich zaprosić do “przygody”, która będzie trwać kilka następnych miesięcy, a będzie związana z poznaniem technologii chmury firmy Microsoft zwanej Windows Azure. Dzisiejszy wpis to inauguracja szkolenia, którego ramy zostaną przedstawione kilka linijek niżej, a do którego idealnym wstępem jest wpis, który poczynił Mariusz Kędziora, który w bardzo przystępny sposób opisuje czym chmura i technologie z nią związane są – link tutaj. Wstęp Dla osób, które nie zrozumiały przek...
Programowanie rozproszone 2916 dni, 21 godzin, 30 minut temu 61 źrodło rozwiń
Praca z obiektami COM może być trudna i czasami frustrująca. Przykład:Worksheet sheet = excelApp.Worksheets.Open(...); // Jakaś logika. Odczytywanie lub modyfikacja arkusza itp.Marshal.ReleaseComObject(sheet); Marshal.ReleaseComObject(excelApp); O obiektach COM należy pamiętać, również po zakończeniu pracy z nimi – należy zwolnić wszelkie zasoby. Nie zawsze jest to proste i oczywiste. Powyższy kod spowoduje memory leak ponieważ Worksheets również musi zostać zwolniony. Metoda Open jest wywołana na ob...
Programowanie rozproszone 3033 dni, 17 godzin, 56 minut temu 122 źrodło rozwiń
W trakcie tworzenia serwisów bazujących na ASP.NET niejednokrotnie zdarza się potrzeba przesyłania dużych plików przez sieć. W przypadku, gdy kontroler, aby przetransportować plik do przeglądarki, musi odwołać się do usługi sieciowej (w opisywanym przez mnie wypadku WCF) sprawy mogą się trochę skomplikować. Ponieważ nie chcielibyśmy, aby nasz serwer regularnie zapychał się buforując dużą ilość danych, dobrym rozwiązaniem byłoby utworzenie strumienia wzdłuż całego stosu komunikacyjnego...
Programowanie rozproszone 3118 dni, 23 godziny, 40 minut temu 225 źrodło rozwiń
Dziś kolejny post o kolekcjach, które mogą być używanie swobodnie w środowisku współbieżnym. Tak jak ConcurrentBag, obiekty przedstawione w tym poście również są mocno zoptymalizowane. ConcurrentQueue to po prostu kolejka.
Programowanie rozproszone 3141 dni, 11 minut temu 118 źrodło rozwiń
W ostatnim poście pisałem o różnych mechanizmach opartych o Spin. Zachęcam do przejrzenia ostatnich wpisów ponieważ bez tego trudno będzie zrozumieć dzisiejszy post. SpinWait jest strukturą, w której najważniejsza metoda to SpinOnce. SpinOnce przez pierwsze 10 wywołań wykonuje klasyczny Spin (patrz poprzednie posty) dzięki czemu nie musimy obawiać się koszty związanego z uśpieniem wątku, zmianą kontekstu itp. SpinOnce jest jednak na tyle inteligentny, że po 10 wywołaniach zmienia swoje zachowanie:Po 10...
Programowanie rozproszone 3149 dni, 18 godzin, 21 minut temu 52 źrodło rozwiń