Uniwersalna procedura aktywacyjna Service Brokera

    No Comments

    Usługa Service Brokera, która pojawiła się wraz z wersja 2005 zadziwia mnie do tej pory.
    Od wielu lat producent niewiele w niej zmienia, co może świadczyć o dobrze przemyślanej architekturze.
    Z drugiej strony monitoring tej usługi dostarczony przez producenta pozostawia wiele do życzenia patrząc na to nawet z ergonomicznego puntku widzenia. Walka z wyłączającymi się kolejkami i komunikatami typu poison spędziła nie jeden sen z powiek. Jak sobie z tym najlepiej poradzić ?
    Zakładam, że czytelnik zna podstawową budowę Service Brokera i ma doświadczenie w jego stosowaniu w warunkach produkcyjnych. To o czym należy pamiętać, to świadomość, że wbudowano w serwer bazodanowy mechanizm, który potrafi obsłużyć za pomocą języka t-sql komunikację asynchroniczną bez pomocy zewnętrznych narzędzi. To niewątpliwie wielki plus funkcjonalny.
    Chciałbym skoncentrować się nad propozycją budowy szkicu uniwersalnej procedury aktywacyjnej, która obsługuje kolejkę targetową.
    Dokumentacja Microsoftu sprowadza się do budowy dedykowanej per kolejka procedury aktywacyjnej, gdzie spore fragmenty kodu są powtarzane i jest to nieco niezgodne z podejściem DRY.
    Przyjęte założenia:
    1. Przekazywane są jedynie komunikaty w formie XML
    2. Każdy typ komunikatu XML na podstawie jego root elementu będzie obsługiwany przez dedykowaną procedurę składowaną
    3. Każda z takich procedur ma standardową postać

    4. Wszystkie obiekty bazodanowe są obrębie jednej bazy.
    5. Wykorzystany zostanie dynamiczny sql.
    6. Procedura przyjmie minimalną liczbę argumentów i stanie się wewnętrzną procedurą aktywacyjną każdej z kolejek targetowych.

    Proponowany nagłówek:

    Powiązanie uniwersalnej procedury aktywacyjnej z przykładową kolejką

    Niech nasza kolejka nazywa się SampleTargetQueue.

    Przygotowujemy procedurę nakladkową definiowaną per kolejka

    Powiązanie kolejki docelowej z tak przygotowaną procedurą aktywacyjną.

    Szkic funkcjonalny uniwersalnej procedury aktywacyjnej

    1. Pobranie z kolejki pierwszego komunikatu XML

    2. Na podstawie root elementu XML ustalenie nazwy procedury składowanej odpowiedzialnej za logikę biznesową

    Proponowany kod transformacji :

    W tym przypadku wyznaczamy wartość nazwy procedury składowanej jako
    spInterfaceAccountV5getNumberGetAccountNumber

    3. Obsłużenie sytuacji wyjątkowych, komunikatów typu poison, XML-i niezgodnych ze schema parametru wejściowego procedury składowanej, wyłączonej kolejki, naruszenia więzów integralność.
    4. Wszystkie powyższe punkty powinny być realizowane w ramach jednej transakcji

    5. Zalogowane komunikaty błędów trafiają do jednej wspólnej tabeli.
    Propozycja takiej wspólnej tabeli

    Przykładowy fragment kodu uzupełniającego tabelę w przypadku wystąpienia błędu:

    Znaczenie pola status:

    wartość znaczenie czy do ponownego przetworzenia
    0 nowy wpis TAK
    1 wpis przetworzony z sukcesem NIE
    2 wpis przetworzony z błędem TAK
    3 nie wymaga przetworzenia NIE

     

    Proste zapytanie monitorujące błędne wpisy w tabeli

    Należy dodatkowo wprowadzić politykę retencji, gdzie po ustalonej liczbie dni, dane powinny być usuwane trwale, w szczegolności tam, gdzie status wskazuje na brak potrzeby ponownego przetworzenia.

     

     

    Literatura

    Configuring Service Broker for Asynchronous Processing

     

    Categories: implementacja, t-sql

    Hacking Azure – PoIaaS model

    3 komentarze

    Pierwszy wpis na blogu dotyczący chmury publicznej Microsoftu Azure.

    Każdy młody adept  Azure  spotyka się na początku z różnymi modelami obsługi zasobów w chmurze. Zgodnie z poniższym rysunkiem.

    https://social.technet.microsoft.com/wiki/cfs-filesystemfile.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/5482.sec_2D00_cloudstack.png

    To, co na zielono kontroluje Microsoft, a to co na niebiesko właściciel subskrypcji, czyli w dużym uproszczeniu, ja. Jak u każdego chlopca, który krzyczy po raz pierwszy “Ja sam, ja sam!”.

    Rozpocząłem klasycznie od  lewej strony, czyli postawiłem kilka maszyn wirtualnych, Najpierw z poziomu portalu, a potem za pomocą Azure CLI 2.0, od czasu do czasu Azure Cloud Shell był pomocny. Skoncentrowałem swoje działania wokół dystrybucji Ubuntu , na której w finalnym instalowałem Midnight Commandera. Prześmiewcom tego pakietu powiem tylko tyle ze linuxa używam wcześniej niż pojawiła się dystrybucja RedHata 4.0. To taka sentymentalna podróż do czasów produktów Petera Nortona. Następnie skoncentrowałem się na modelu PaaS, gdzie  poznawałem bazy danych i usługi pod strony www.

    Dziś chciałbym opowiedzieć o jednej z nich: App Service on Linux

    Instalację wykonałem zgodnie z

    https://github.com/djkormo/azurewordpress

    Z tym, że jako bazę mysql wykorzystałem usługę Azure datatabase for Mysql

    .mywordpressaspaas_1

     

    Konfiguracja po stronie WordPressa wymagała ustawienia czterech zmiennych środowiskowych, zgodnie z zapisem w pliku
    wp_config.php

    Po stronie aplikacji wyglądało to tak:
    mywordpressaspaas_2

    Nie jest to bardzo bezpieczne, ale na Proof of Concept na początek wystarczy.

    Po zainstalowaniu kodu WordPressa pobranego z repozytorium na Githubie pokazała się ładna strona. Dowolna zmiana w kodzie repo powoduje uruchomienie wdrożenia zmian.

    Po konfiguracji oprogramowania  możemy się pochwalić stroną startową.

    mywordpressaspaas_3

    Udało się. Pierwsza strona www z obsługa PHP i Mysql została uruchomiona. Chciałem sprawdzić,  jakie są dalsze możliwości konfiguracyjne, a przy okazji dowiedzieć się co właściwie jest pod spodem, np. z którą dystrybucją linuxa mamy do czynienia.  Uwaga!. To jest ta część kontrolowana przez dostawcę usług, czyli przez Microsoft.

    Wykorzystałem w tym celu wbudowane w usługę narzędzie KUDU . Gorąco polecam.

    Uruchomienie to zakładka Advanced Tools -> go.

    A potem z poziomu KUDU uruchomiłem SSH.

    mywordpressaspaas_4

    Jaka tam jest jest dystrybucja  ?

    Polecenie

    Linux 1c7503c5ac2b 4.4.0-112-generic #135-Ubuntu SMP Fri Jan 19 11:48:36 UTC 2018 x86_64 GNU/Linux

    Spróbowałem zainstalować na początku pakiet mc. Po wpisaniu polecenia

    system stwierdził, że nie znalazł pakietu, ale wystarczyło po chwili zastanowienia

    Sprawdziłem czy to działamywordpressaspaas_6

    Instalacja zakończyła się sukcesem.

    Weryfikacja ostateczna, to uruchomienie  pakietu.

    I naszym oczom ukazuje się znajomy interfejs programu.

    mywordpressaspaas_5

    Czy można zrobić upgrade pakietów systemu operacyjnego ?

    Zakończyło się bez błędu, ale z zerowym przebiegiem.

    I tu się zacząłem zastanawiać, co w jakim modelu stworzyłem moją stronę wordpressową ?  IaaS (mam dostęp do systemu operacyjnego), czy PaaS, a może model hybrydowy który tu roboczo nazywam PoIaaS. (Platform on IaaS) .

    Kolejne pytania, które się pojawiły:

    • W jaki sposób zachowa się system podczas autoskalowania? Czy kolejne “maszyny” wstaną z zainstalowanym mc czy bez?
    • Co jest wzorcem dla takie usługi ?
    • I kto zadba o zmiany w systemie operacyjnym ? Microsoft czy ja ?

    Sprawdzam, jakie procesy w są uruchomione:

    Zrobiłem już kilka eksperymentów i wiem …. Zrób i ty…. Odpowiedz na te trzy pytania.

    Pozdrawiam.

    Komentujcie…..

    Krzysztof Pudłowski

     

    Categories: Azure, chmura, IaaS, PaaS