30/11/2011
DataSnap e Cloud
Deep Dive
Agenda
•
•
•
•
RAD Cloud Overview
DBExpress
Novo API Cloud
Novidades no DataSnap
1
30/11/2011
API Cloud
2
30/11/2011
O que é novo no API Cloud?
“Delphi API for accessing cloud application services from Amazon and Microsoft Azure.”
Serviços suportados pelo API Cloud
Storage
Azure Blobs Service
Amazon S3
Table
Azure Table Service
SimpleDB
Queue
Azure Queue Service
Amazon SQS
3
30/11/2011
Convenção de nomes
• Amazon e Microsoft utilizam diferentes nomes para as mesmas coisas…
Container
=
Bucket
Blobs
=
Object
Page
=
Multipart
ACL
=
ACL (Access Control List)
Microsoft Azure
• Blob Storage
– Unstructured storage
– Defined Container
– For storing large pieces of data such as: Images, Video, Documents, etc.
• Azure Tables
–
–
–
–
Scalable structured storage
NOSQL type tables
Entities stored in a table
Different set of properties made up of different types
• Queues
– Persistent asynchronous messaging
– Each message is up to 8kb long
4
30/11/2011
Amazon WS
• Simple Storage Service (S3)
–
–
–
–
Blob Storage
Unstructured storage
Defined Container
For storing large pieces of data such as: Images, Video, Documents, etc.
• SimpleDB ‐ Tables
–
–
–
–
Scalable structured storage
NOSQL type tables
Entities stored in a table
Different set of properties made up of different types
• Simple Queue Service (SQS)
– Persistent asynchronous messaging
– Each message is up to 64kb long
Distribuição para Cloud
• O gestor de distribuição suporta:
– Microsoft Azure
– Amazon EC2
5
30/11/2011
O que há de novo no DataSnap O que há de novo no DataSnap
• Enhancements
– Server
– REST Interfaces
– Callback
– Authentication Manager
• New DataSnap Monitoring and Control
6
30/11/2011
Server • Suporte de informação de Proxy para ligações DataSnap HTTP em TSQLConnection e TDSRESTConnection
• Novo TDBXChannelInfo.DBXClientInfo
(TDBXClientInfo record) que fornece:
– IP Address
– Protocol
– Application Name (se possível) – apenas em HTTP
Suporte HTTPS
• Para servidores stand‐alone DataSnap
• Para servidores stand‐alone WebBroker
• DataSnap wizards actualizados com suporte HTTPS
7
30/11/2011
Gestor de Sessão
• Suporte de sessão para protocolo TCP/IP
• Suporte para “store” e “retrieve” Tobject nas sessões
• Sessões “criadas” e “destruídas” com o protocolo TCP/IP agora notificam o now
AddSessionEvent e RemoveSessionEvent
• Suporte para múltiplos Callback Tunnels na interface DataSnap REST
Gestor Callback Tunnel
• Classe TDSCallbackTunnelManager na unidade DSServer
• Permite o seguimento quando:
– Callback é adicionado ou removido
– Tunnel é criado ou encerrado
8
30/11/2011
Callbacks • “Heavyweight callbacks” agora suportam a difusão para callbacks específicos
• GetAllChannelNames adicionado ao DSServer
para obter o nome de todos os canais callback
Eventos Callback no lado cliente
• As notificações de quando o gestor de Tunnel
é aberto ou encerrado, ou quando os Callbacks são adicionados ou removidos, são também disponibilizadas para:
– Delphi DBX Client Events
– Delphi REST Client Events
– JavaScript REST Client Events
9
30/11/2011
Eventos cliente Delphi DBX
• Componente TDSClientCallbackChannelManager, evento OnChannelStateChange
• Method signature:
(Sender: TObject; const EventItem: TDSClientChannelEventItem);
• TunnelClosedByServer – tipo de evento para ligações fechadas pelo servidor ou perda de ligação
Eventos cliente Delphi REST
• Componente TDSRestClientChannel, evento OnChannelStateChange
• Method signature:
(Sender: TObject; const EventItem: TDSRESTChannelEventItem);
• ChannelClosedByServer – tipo de evento para uma perda de ligação não‐esperada com o servidor
10
30/11/2011
Eventos cliente JavaScript
• Cria‐se uma função que devolve um evento quando acontecer uma alteração no canal ou num dos seus callbacks
var channel = new ClientChannel (clientID, channelName);
channel.onChannelStateChange = HandleChannelEvent;
• Se o servidor fechar o canal correctamente, o cliente terá um evento do tipo
“ClientChannel. EVENT_CHANNEL_STOP”
• Se a ligação for perdida, o cliente terá um evento do tipo
“ClientChannel. EVENT_SERVER_DISCONNECT”. Suporte de sessão JavaScript
• initSessionData function (in
serverFunctionExecutor.js) poderá levar um segundo parâmetro (opcional)
• O parâmetro irá fazer referência à ID geral do cookie – dssessionid
• Vai permitir ter o controlo total sobre que aplicação utiliza cada ID/cookie de sessão
11
30/11/2011
JSON results e REST calls
• O evento OnResult event foi adicionado aos componentes TDSHTTPWebDispatcher e TDSHTTPService
• Permite transformar o formato do resultado JSON em chamada REST
• Method signature:
(Sender: TObject; var ResultVal: TJSONValue; const Command: TDBXCommand; var Handled: Boolean);
Query parameters in REST calls
• GetInvocationMetadata().QueryParams
• Devolve uma TStrings que contém os valores dos parâmetros de todas as queries que passaram pelo URL da chamada REST
12
30/11/2011
Monitorização e controlo
DataSnap
Monitorização e Controlo DataSnap
“DataSnap servers in XE2 are able to easily monitor connections, and close any TCP connection they wish.”
13
30/11/2011
O que consegue fazer
•
•
•
•
•
Ter controlo sobre as ligações cliente
Monitorizar os pedidos cliente
Limitar o número de pedidos por ligação
Melhorar a segurança
E mais…
Como funciona isso?
• Os componentes TDSTCPServerTransport têm dois novos eventos:
– onConnect
– onDisconnect
• As ligações estão relacionadas com um ID de sesão
14
30/11/2011
Estar “à escuta” dos eventos TCP/IP
Detectando o desligar “normal”
• Por defeito, o evento OnDisconnect não será notificado se o cliente perder a ligação de internet de modo não‐esperado
• Este comportamento depende da configuração do sistema operativo
• Utilizar os métodos TDSTCPChannel para controlar este comportamento em cada ligação
– EnableKeepAlive
– DisableKeepAlive
15
30/11/2011
Como utilizar o EnableKeepAlive
• Se a ligação estivar “parada” durante 10 segundos, então envia um pacote para verificar se o client ainda está…
Event.Channel.EnableKeepAlive(10000); Como utilizar o EnableKeepAlive
• Se o cliente não responde, o SO irá tentar enviar o pacote X vezes (Win 7 tenta 10x).
• Poderá especificar o número de milissegundos de intervalo entre tentativas se o cliente não responder
Event.Channel.EnableKeepAlive(10000, 100); 16
30/11/2011
KeepAlive Enablement
• Com o componente TDSTCPServerTransport
• Três novas propriedades:
– KeepAliveEnablement ‐ (Set: Default, Enabled, Disabled)
– KeepAliveTime ‐ Integer Milliseconds value
– KeepAliveInterval ‐ Integer Milliseconds value
Como utilizar o DisableKeepAlive
• Com o canal associado a determinada ligação
e chamar:
DisableKeepAlive;
17
30/11/2011
Encerrar as ligações Client
• A ligação pode ser encerrada a qualquer momento
• O Channel fornece a instância da ligação
//Saber o Channel associado a determinada ligação e se conseguir, encerrá‐la
if FConnections.TryGetValue(Connection, Channel) then
Channel.Close; Demo
• Fazer o seguimento de todas as ligações
TCP/IP e correspondentes sessões
• Como encerrar manualmente uma ligação
TCP/IP a partir do servidor
• Como detectar quando um cliente perdeu a ligação à internet durante a ligação
18
Download

DataSnap e Cloud