BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

Windows Azure SDK 1.3 ir naujasis Windows Azure Platform portalas jau prieinami

Parašė Sergejus | 2010-11-30 20:56

Lygiai prieš savaitę rašiau apie Windows Azure naujoves, o šiandien dalis minėtų galimybių tapo prieinama viešai, o dalis – beta testuotojams.

Naudingos nuorodos:

Windows Azure SDK and Windows Azure Tools for Microsoft Visual Studio (November 2010)
Windows Azure Platform Training Kit - November Update
Windows Azure komandos straipsnis apie SDK1.3 naujoves ir naują portalą

Tiems kam smalsu, bet neturi prieigos prie Windows Azure, žemiau pateikiu naujojo Windows Azure Platform portalo paveiksliuką

azure-portal1

Rodyk draugams

Windows Azure naujovės paskelbtos Microsoft PDC konferencijos metu

Parašė Sergejus | 2010-11-23 22:44

Kaip žinia, beveik prieš mėnesį vyko programuotojų konferencija Microsoft PDC, kurios metu buvo anonsuota daug Windows Azure naujovių. Kadangi jau greitai prasidės pirmoji naujovių paleidimo banga, nusprendžiau trumpai aprašyti kas apskritai atsiras naujo.

Windows Azure naujovės

Įvairūs patobulinimai

  • Naujas, pilnai perdarytas su Silverlight technologija, Windows Azure portalas
  • Galimybė RPD (Remote Desktop Connection) pagalba per nuotolį prisijungti prie Windows Azure virtualios mašinos
  • Pilnas IIS palaikymas, t.y. galimybė sukurti kelis Web saitus ir instaliuoti IIS modulius
  • Galimybė leisti programas ir procesus administratoriaus teisėmis
  • Prieiga prie dar daugiau diagnostinės informacijos
  • Windows Azure SDK 1.3
  • Daug geresnis Java palaikymas

Nauja Windows Azure Virtual Machine rolė

Šalia jau esamų Web ir Worker rolių, atsiras nauja VM rolė, kuri įgalins egzistuojantį Hyper-V virtualios mašinos vaizdą įkelti į Windows Azure ir naudotis iš anksto sukonfigūruota mašina.

Naujas Windows Azure virtualios mašinos dydis

Mažų apimčių užduotims atlikti atsiras specialus virtualios mašinos dydis Extra Small.

CPU: 1 GHz
RAM: 768 MB
HDD: 20 GB
Kaina: $0.05

Windows Server 2008 R2 palaikymas

Šiuo metu naudojama Windows Azure Guest OS 1.X yra grindžiama Windows Server 2008. Artimiausiu metu pasirodys nauja Windows Azure Guest OS 2.X versija, kuri bus paremta Windows Server 2008 R2. Kartu su R2 galima bus pasinaudoti ir visomis IIS 7.5 galimybėmis.

Windows Azure Virtual Network

Dažna debesų kompiuterijos problema - debesyje esančių aplikacijų apjungimas su įmonės tinkle esančiais duomenimis. Vienas iš sprendimų būtų pasinaudoti Windows Azure AppFabric Service Bus protokolų tuneliavimu ir kitomis technikomis. Kitas sprendimas - Windows Azure Virtual Network, leidžiantis apjungti jūsų tinklą su Windows Azure aplikacijomis VPN (Virtual Private Network) pagalba.

Windows Azure Storage patobulinimai

Dinaminis turinio kešavimas

Šiuo metu Windows Azure CDN (Content Delivery Network) palaiko tik statinį kešavimą, t.y. gali kešuoti tik statinius failus išsaugotus Windows Azure BLOBe. Dinaminis kešavimas įgalins duomenų, grąžinamų iš Windows Azure aplikacijų, kešavimą.

CDN SSL palaikymas

Dabartinis Windows Azure CDN palaiko išskirtinai HTTP protokolą, naujoje versija bus palaikomi abu HTTP(S) protokolai.

SQL Azure naujovės

SQL Azure Reporting

Šiuo metu SQL Azure palaiko tik pagrindines SQL Server variklio galimybes. Viena iš naujovių – SQL Azure Reporting, kuri yra paremta daugeliui gerai žinomais SQL Server Reporting Services. Tai leis egzistuojančius RDL failus talpinti Azure platformoje ir kurti ataskaitas duomenims iš SQL Azure duomenų bazės.

SQL Azure Data Sync

Ši galimybė nėra visiškai nauja ir jau kurį laiką buvo prieinama CTP versijoje. SQL Azure Data Sync paremta Microsoft Sync Framework 2.0 ir leidžia sinchronizuoti SQL Azure duomenų bazes su jūsų lokaliomis DB.

Database Manager for SQL Azure

Anksčiau žinomas kaip Project Huston. Supaprastinta SQL Server Management Studio versija paremta Silverlight technologija. Leidžia atlikti pagrindinius veiksmus su SQL Azure duomenų bazėmis.

Windows Azure AppFabric naujovės

Windows Azure AppFabric Caching

Ne kartą esu rašęs apie Project Velocity, dabar žinomą kaip Windows AppFabric Caching – paskirstytą kešavimo mechanizmą. Windows Azure AppFabric Caching tai yra Windows Azure platformai skirta Velocity versija, leidžianti pasinaudoti kešavimu kaip paslauga.

Windows Azure AppFabric Access Control

Antroji Access Control versija pasižymi palaikomų autentifikavimo provaiderių gausa:

  • Windows Live ID
  • Google
  • Facebook
  • Active Directory Federation Services

Rodyk draugams

Lygiagretaus programavimo supaprastinimas su .NET 4.0 ir Reactive Extensions for .NET 3.5

Parašė Sergejus | 2010-11-18 22:18

Prieš kelias savaites darbe teko susidurti su klasikine gamintojo/naudotojo užduotimi. Scenarijus buvo toks: yra viena gija-gamintoja, kuri sukuria užduotis, patalpina jas į eilę (atmintyje), iš kurios nurodytas skaičius gijų-naudotojų pasiima po užduotį ir ją įvykdo. Programuojant .NET 3.5 ar senesniu, tai įgyvendinti reikalautų nemažai lygiagretaus programavimo žinių (gijų sinchronizavimas, sinchronizavimo primityvai ir daug daugiau). Laimei, .NET 4.0 atsirado daug patobulinimų skirtų lygiagrečiam programavimui: patogesnis darbas su gijomis bei naujas gijų planuotojas iš Task Parallel Library, gijoms saugios konstrukcijos iš System.Collections.Concurrent vardų srities ir Parallel LINQ. Šių patobulinimų dėka, užduoties įgyvendinimas pasidarė kaip niekada paprastas:

public class WorkerPool
{
    private readonly BlockingCollection<Action> _queue;
    private readonly Task[] _workers;

    public WorkerPool(int numberOfWorkers, int maxQueueSize)
    {
        _queue = new BlockingCollection<Action>(maxQueueSize);
        _workers = new Task[numberOfWorkers];

        for (var i = 0; i < numberOfWorkers; i++)
        {
            _workers[i] = SpinNewWorker();
        }
    }

    public void Enqueue(Action task)
    {
        _queue.Add(task);
    }

    public bool TryEnqueue(Action task, TimeSpan timeout)
    {
        return _queue.TryAdd(task, timeout);
    }

    private Task SpinNewWorker()
    {
        return Task.Factory.StartNew(state =>
        {
            foreach (var task in _queue.GetConsumingEnumerable())
            {
                try
                {
                    task();
                }
                catch
                {
                    // failure, just ignoring
                    continue;
                }
            }
        }, TaskCreationOptions.LongRunning);
    }
}

Išnagrinėkime kodą. Iš anksto sukuriamas gijų-naudotojų masyvas, kurios ir yra naudojamos visos aplikacijos gyvavimo metu. Gijos kuriamos Task.Factory pagalba, perduodant anoniminį delegatą. Tiek gamintojas, tiek naudotojai dirba tiesiogiai su nauju kolekcijos tipu – BlockingCollection. Ji pasižymi keliomis savybėmis:

  • jos viduje pagal nutylėjimą naudojama gijoms saugi duomenų struktūra – eilę (angl. queue), kurios maksimalus dydis gali būti apribotas; pasiekus ribą – gija, bandanti pridėti naują elementą, užsiblokuos, kol eilėje neatsiras vietos naujam elementui
  • metodas GetConsumingEnumerable() leidžia ypač intuityviai vienu metu iš kelių gijų skaityti elementus iš eilės ir kai eilė patampa tuščia – gija automatiškai užmiega
  • BlockingCollection turi ne tik įprastus metodus Add() ir Take(), bet ir TryAdd() bei TryTake(), kurie pasižymi tuo, jeigu operaciją nepavyksta įvykdyti per nurodytą laiką (eilė yra perpildyta TryAdd() atveju arba eilė yra tuščia TryTake() atveju), ji bus tiesio praignoruota

O dabar svarbiausias dalykas, tam kad pasinaudoti aukščiau išvardinta galimybe, jums nebūtinas(!) .NET 4.0. Užtenka pasinaudoti System.Treading.dllReactive Extensions for .NET 3.5! Tikiuosi tai jums pravers, kaip pravertė man…

Rodyk draugams

Silverlight Firestarter

Parašė Sergejus | 2010-11-13 13:37

The Future of Silverlight Starts Now

Gruodžio 2 dieną, 19:00 vyks tiesioginė transliacija iš renginio Silverlight Firestarter. Renginio stebėjimui būtina užsiregistruoti.

Silverlight Firestarter programa

19:00
Scott Guthrie Scott Guthrie, The Future of Silverlight

20:45
Jesse Liberty Jesse Liberty, Data Binding Strategies with Silverlight and WP7

21:30
Yavor Georgiev  Yavor Georgiev, Building Compelling Apps with WCF using REST and LINQ

22:15
alt
Breask

23:00
Dan Wahlin  Dan Wahlin, Building Feature Rich Business Apps Today with RIA Services

23:45 pm
John Papa John Papa, MVVM: Why and How? Tips and Patterns using MVVM and Service Patterns with Silverlight and WP7

00:45 pm
Tim Heuer Tim Heuer, Tips and Tricks for a Great Installation Experience

01:30
Scott Guthrie  Mike Cook & Jossef Goldberg, Tune Your Application: Profiling and Performance Tips

02:30 pm
Jaime Rodriguez Jaime Rodriguez, Performance Tips for Silverlight Windows Phone 7

Rodyk draugams

Pingy - #6 Windows Azure Queue korektiškas žinučių apdorojimas

Parašė Sergejus | 2010-11-09 12:00

Primenu, Pingy – tai mano bandymas sukurti paslaugą, kuri kas tam tikrą laiką kreiptųsi į vartotojo nurodytą URL, taip neduodant IIS užmigti. Tuo pačiu metu bus renkama statistika apie serverio būseną, atsakos laikas ir pan. Pingy yra kuriamas specialiai Windows Azure mokymosi tikslais.

Turinys

Pingy - #1 Architektūra
Pingy - #2 Windows Azure Table ir NoSQL mąstymas
Pingy - #3 PingItem ir PingItemRepository
Pingy - #4 PingItem repozitorijos atnaujinimas metodu GetItemsByPeriod
Pingy - #5 Windows Azure Queue ir PingTaskRepository
Pingy - #6 Windows Azure Queue korektiškas žinučių apdorojimas
Pingy - #7 Pinger serviso kūrimas
Pingy - #8 PingReportItem ir PingReportRepository

Šioje dalyje, kaip ir žadėjau, aptarsime pagrindines problemas, kurios gali kilti apdorojant Windows Azure Queue pranešimus bei pateiksiu korektišką žinučių apdorojimo šabloną.

Žinučių apdorojimo scenarijai

Kaip jau rašiau, eilės leidžia logiškai atskirti servisus-gamintojus nuo apdorojimo servisų, taip suteikiant gerą plečiamumą (angl. scalability). Windows Azure Queue reikalauja, kad apdorojimo servisai:

  • galėtų korektiškai apdoroti tą patį pranešimą kelis kartus
  • nepriklausytų nuo apdorojamų žinučių eiliškumo

Išnagrinėkime kelis išskirtinius žinučių apdorojimo scenarijus bei jų apdorojimo būdus.

Scenarijus: žinutės apgodojimo metu servisas nulūžo.

Sprendimas: nieko nereikia daryti, Windows Azure Queue neišima žinutės iš eilės, o tiesiog pažymi kaip nematomą nurodytam laikui, po jo – žinutė vėl bus matoma kitiems apdorojimo servisams.

Scenarijus: tam tikra žinutė visada nulaužia apdorojimo servisą (kenkėjiška žinutė).

Sprendimas: bandyti apdoroti žinutes tik nurodytą skaičių kartų, po to – ignoruoti.

Scenarijus: žinutės apdorojimas viename iš servisų užtrūko ilgiau negu „nematomumo periodas“ (t.y. žinutė buvo jau grąžinta atgal į eilę).

Sprendimas: normaliai užbaigti žinutės apdorojimą, bandant šalinti žinutę iš eilės apdoroti situaciją, kaip žinutė jau yra ištrinta (kitas servisas apdorojo greičiau ir jau ją pašalino).

Žinučių apdorojimo šablonas

Žemiau pateikiamas žinučių apdorojimo šablonas, kuris atsižvelgia į visus aukščiau išvardintus scenarijus:

while (true)
{
    PingTask task = null;
    var success = false;

    try
    {
        // get message from the queue
        task = pingTaskRepository.GetTask();

        if (task != null)
        {
            // process task if any

            success = true;
        }
        else
        {
            // queue is empty - just sleep for some time
            Thread.Sleep(SleepInterval);
        }
    }
    catch (Exception)
    {
        // log
        success = false;
    }
    finally
    {
        // check for success or ensure it's not the poison message
        if (success || task != null && task.DequeueCount > DequeueThreadhold)
        {
            try
            {
                // delete message from the queue
                pingTaskRepository.DeleteTask(task);
            }
            catch (StorageClientException ex)
            {
                // the message has already been deleted
                if (ex.ExtendedErrorInformation.ErrorCode == "MessageNotFound")
                {
                    // log to tune the visibility timeout
                }
                else
                {
                    // log
                }
            }
        }
    }
}

Kitoje dalyje…

Šioje dalyje mes išnagrinėjome kaip korektiškai apdoroti Windows Azure Queue žinutes, kitoje dalyje pereisime prie Worker rolių įgyvendinimo. Pradėsime nuo Pinger, kuri ir panaudos aukščiau pateiktą šabloną.

Rodyk draugams

Kaip paleisti Internet Explorer 9 Preview 6 su pilnaverčiu UI iš Internet Explorer 9 Beta

Parašė Sergejus | 2010-11-07 12:50
  1. Sukurkite katalogą IE9_PP6 
  2. Nukopijuokite iexplore.exe iš C:\Program Files\Internet Explorer arba C:\Program Files (x86)\Internet Explorer į katalogą IE9_PP6
  3. Sukurkite katalogo IE9_PP6 viduje katalogą iexplore.exe.local
  4. Nukopijuokite visą turinį iš katalogo C:\Program Files\Internet Explorer Platform Preview\iepreview.exe.local arba C:\Program Files (x86)\Internet Explorer Platform Preview\iepreview.exe.local į katalogą iexplore.exe.local
  5. Nuo šiol iš katalogo IE9_PP6 galėsite paleisti Internet Explorer Preview 6 su UI iš Internet Explorer 9 Beta

Kodėl aš tai aprašiau:

  • Nuo šiol įmanoma naudotis naujausiu IE varikliu su pilnaverčiu UI
  • Tai reiškia IE (pagaliau) turi UI atrištą nuo variklio

Rodyk draugams

Skaidrės iš mano pristatymo Demystifying HTML5

Parašė Sergejus | 2010-11-05 20:05

Šiandien dariau pristatymą Microsoft Web Day konferencijoje iš HTML5. Ačiū visiems!

Rodyk draugams