tisdag 5 juli 2011

Riak

Riak är en NoSQL databas med följande egenskaper:

  • Skriven i Erlang
  • Dokument orienterad
  • Skalbar decentraliserad lagring med "buckets" och "keys"
  • Distribuerad
  • Replikerar automatiskt i samma kluster
  • Konfigurerbar storage backend. Bitcask används som default finns exempelvis även en för att använda InnoDB.
  • HTTP API (finns även API för Erlang)
  • Hanterar konflikter mha Vector clocks - vilka exponeras ut till klienten.
  • Klarar av MapReduce jobb skrivna i JavaScript eller Erlang med stöd för JSON
  • Stöd för länkar mellan objekt (tänk graf-databas light) - funkar tydligen bra upp till ett par dussin relationer per dokument.
  • Konfigurerbar nivå på consistency, availability och partition tolerance ( N i konfiguration. W och R går att överskriva på fråge nivå mha parametrar)
  • OpenSource med möjlighet till Enterprise licens (via Basho)

    Tillskillnad från ex MongoDB går det ej att ha sekundära indexar i Riak - detta då Riak inte vet någonting om datan du sparat och behandlar all data lika.

    Efter att ha labbat med Riak en stund kan jag konstatera att det gått extremt smidigt att sätta upp ett Riak kluster på ett antal noder. Rekommenderar klart att köra igenom Bashos Riak Fast Track vilken tar ungefär 1 timme att gå igenom (plus eventuellt strul :)).

    De egenskaper jag själv värderar starkt hos Riak är:

  • Den skalar automatiskt när man lägger till fler noder i klustret.
  • Gör ej skillnad på vad du sparar i den. Funkar utmärkt med binära filer. Luwak (del av Riak) sköter partitionering av större filer automatiskt (måste dock slås på i config).
  • Bra stöd för JSON i MapReduce jobb
  • "Link walking"
  • Enkelheten

    Utöver ovannämda finns även ett projekt som heter Riak Search vilket integrerar Lucene i Riak - vilket jag tycker låter extremt spännande. Dock ej haft möjlighet att testa detta ännu.
  • måndag 4 juli 2011

    Kom igång med Amazon EC2

    Efter att senaste året arbetat en hel del med Microsoft's moln erbjudande Azure har jag de senaste veckorna passat på att lära mig mer om Amazons motsvarighet AWS (Amazon Web Services).

    Tänkte i detta inlägg beskriva lite kortfattat hur man kommer igång med EC2. Det hela är mycket enkelt och det tar bara några minuter att få upp ett par burkar i EC2.

    Börja med att skapa ett konto på: http://aws.amazon.com/

    Efter registreringsprocessen loggar du in i "AWS Management console".

    Väl inne i AWS Management console visas de tillgängliga AWS tjänsterna upp i separata flikar.


    För tillfället finns följande tjänster i AWS:

  • Elastic beanstalk - Möjliggör deploy av war paket direkt i molnet.
  • S3 - skalbar lagringslösning
  • EC2 - Virtualiserings lösningen
  • VPC - Virtual Private Cloud - Möjlighet att skapa sitt egna privata nät inne i molnet.
  • CloudWatch - Sammanställer övervakning av AWS resurser
  • Elastic MapReduce - Hadoop hostat i molnet möjliggör mapreduce mot data i S3.
  • CloudFront - CDN (Content Delivery Network)
  • CloudFormation - Möjliggör gruppering av resurser i AWS för att kunna hantera resurserna på gruppnivå.
  • RDS - Relationsdatabas för närvarande MySql och Oracle
  • SNS - Simple Notification Service - Tjänst för att skicka notifieringar från molnet
  • IAM - Identity and Access Management

    Vi kommer i detta inlägg enbart arbeta med EC2 fliken.

    Väl inne på EC2 fliken möts man av en "dashboard" som ger överblick i vilka EC2 resurser som ligger igång. Observera att denna dashboard visar resurser i vald region, uppe i vänstra hörnet finns möjlighet att byta region.



    Innan vi går vidare ser vi till att vi valt den regionen som passar oss bäst. Generellt sett är priset på tjänsterna desamma i EU och US regionerna, något högre rörliga kostnader gäller i Asien baserade regionerna.

    Nu har det blivit dags att skapa vår första instans klicka på "instances" i vänstermenyn och sedan på knappen "launch instance". Detta kommer öppna en guide för att kapa en instans.

    Det första man gör vid instans skapandet är att välja vilken AMI (Amazon Machine Image) som vi vill lägga på vår virtuella server.



    Amazon erbjuder på "Quick start" fliken sin egen Linux variant, RedHat, SUSE och Windows Server 2008. Om någon annan Linux distribution är att föredra kan man söka bland "Community AMI's" efter AMI's byggda och upplagda av communityn runt AWS.
    Man kan även paketera sina egna AMIs och spara dessa i S3 för att kunna återanvända dom i framtiden.

    Efter att ha valt AMI kommer man vidare till "Instance detail" vi har här möjlighet att välja antal och storlek på maskinerna vi vill skapa utifrån AMI'n. Följande två skärmar ger möjligheter för avancerade inställningar, vilka funkar alldeles utmärkt att lämna på standard värdena.

    Filken "Create keypair" är mycket viktig då det är på denna flik vi skapar vårt certifikat, detta certifikat måste sedan användas vid all fjärrkommunikation med instansen. Observera att certifikatet endast får laddas ner från Amazon en gång, det är därför viktigt att direkt spara detta på ett bra ställe.
    För att skapa certifikatet välj "Create new key pair" ange ett namn och klicka på "Create and Download". Observera att certifikatet har filändelsen .pem.




    Nästa steg är att välja säkerhetsgrupp. Säkerhetsgruppen anger hur instanserna får prata med varandra samt vilka portar som är öppna från omvärlden. Säkerhetsgruppen default finns från början. Default är från början helt obegränsad när det gäller hur instanser i denna grupp får prata med varandra dock helt tillåter den ingen kommunikation från omvärlden (vilket vi ska ändra strax). Välj default och gå vidare.

    Säkerställ att all information ser rätt ut klicka sedan på "Launch instance".

    När instansen väl är uppe och snurrar går det att kontrollera den till viss del från "Instance" menyn.

    Vi ska nu öppna upp för anslutningar utifrån molnet så vi sedan kan logga på vår server. För att göra detta gå in på "Security groups" och markera "default". Klicka på "Inbound" fliken nedan och lägg till:
    * Custom TCP rule
    * Port : 22 för SSH alternativ 3389 för remote desktop på windows.
    * Source: 0.0.0.0/0 (denna öppnar upp för alla anslutande addresser - det kan vara önskvärt att begränsa detta till endast din egen)

    Vi har nu konfigurerat säkerhetsgruppen för att tillåta SSH (alternativt RDP för Windows).

    Gå tillbaka till "instance" menyn och klicka på instansen. I "details" sektionen under fliken "description" listas instansens publika DNS, ser ut något i stil med: ec2-XX-XXX-XX-XX.eu-west-1.compute.amazonaws.com.

    För att ansluta till instansen över SSH används följande kommando på mac / linux:
    ssh -i dittcertifikat.pem user@publikadnsen

    I windows kan man använda putty. I Putty kan man dock inte använda .pem filen rakt av utan man måste konvertera denna via puttygen till en ppk fil. Detta görs genom att öppna .pem filen i puttygen och klicka på "Save private key". När man väl har en ppk fil kan man ansluta till instansen genom att skriva:
    putty -i dittcert.ppk user@publikadnsen
    Det går även att ladda ppk filen i Putty UI under SSH -> Auth noden.