possibilidades com python

Post on 09-Jul-2015

594 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Web, escalabilidade e NoSQL

possibilidades com Python

Gustavo Pinto@gustavopinto

gustavopinto

Web - integração de serviços

o que usar?

Web - integração de serviços

ReST:

Web - integração de serviços

ReST:

https://github.com/caelum/restfulie-python

Web - integração de serviços>>> response = Restfulie.at(resource_uri).get() >>> print response.body <palestra> <nome>Possibilidade com Python</nome> <evento>PythonBR</evento> <local>Amcham - Sao Paulo</local> <link rel="self" href="http://www.slideshare.com.br/gustavopinto/pythonBR" /> </order>

Web - social machines

API TwitterAPI Facebook

Api Twitter

Api Facebook

graph = facebook.GraphAPI(oauth_access_token)profile = graph.get_object("me")friends = graph.get_connections("me", "friends")graph.put_object(profile, "feed", message="Live from pythonBrasil[7] !")

https://github.com/facebook/python-sdk

Web - social machines

1- Release

Escalabilidade

"[...] sistemas que estão preparados para crescer."

Escalabilidade

"[...] sistemas que estão preparados para crescer."

Escalabilidade

"[...] sistemas que estão preparados para crescer."

Escalabilidade, plugável?

Escalabilidade, plugável?

Perguntas

●você faz caching?●você está preocupado com a

arquitetura multicore?●você conhece seu framework?

Caching

●Varnish●MemCached

Caching

●Varnish●MemCached

Caching

●Varnish●MemCached

Essa é sua necessidade?

Multicore - Paralelismo

Paralelismo

● uma aplicação single-threaded vai ser executada somente em um único processador, não importa quantos processadores estejam disponíveis.

700 R$

Paralelismo

● uma aplicação single-threaded vai ser executada somente em um único processador, não importa quantos processadores estejam disponíveis.

● lembrando que, concorrência != paralelismo

700 R$

Paralelismo

● Python built-in○ threading○ multiprocessing (Python 2.6)

● pypar● pyMPI● mpi4py

http://wiki.python.org/moin/ParallelProcessing

Paralelismo

def expo(x):return x ** 2

[expo (i) for i in range(100000)]

Paralelismo

from multiprocessing import Pool

def expo(x):return x ** 2

pool = Pool()roots = pool.map(expo, range(100000))print roots

Paralelismo

from multiprocessing import Pool

def expo(x):return x ** 2

pool = Pool()results = [pool.apply_async(expo, (x,))for x in range(100000)]roots = [r.get() for r in results]print roots

Paralelismo

from multiprocessing import Pool

def expo(x):return x ** 2

pool = Pool()results = [pool.apply_async(expo, (x,))for x in range(100000)]roots = [r.get() for r in results]print roots

Mas eu podia ter feito isso usando threads..

Framework

NoSQL

Mas, o que é NoSQL?

NoSQL

Mas, o que é NoSQL?

+

NoSQL

Mas, o que é NoSQL?

+

NoSQL

Mas, o que é NoSQL?

+

NoSQL

?

NoSQL

● top-level project ● desenhado para tratar volume de dados muito grande● espalhados através de vários servidores● fornecendo um serviço altamente disponível ● sem nenhum ponto único de falha.

NoSQL

● top-level project ● desenhado para tratar volume de dados muito grande● espalhados através de vários servidores● fornecendo um serviço altamente disponível ● sem nenhum ponto único de falha.

NoSQL

● top-level project ● desenhado para tratar volume de dados muito grande● espalhados através de vários servidores● fornecendo um serviço altamente disponível ● sem nenhum ponto único de falha.

Eventualmente consistente..

NoSQL

NoSQL

1

2

34

1. Keyspace2. Column Family3. Column Family Row4. Column

NoSQL - Cassandra (Thrift)

def main: socket = TSocket.TSocket("localhost", 9160)transport = TTransport.TBufferedTransport(socket)protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport)client = Cassandra.Client(protocol)

NoSQL - Cassandra (Thrift)keyspace = "Keyspace1"column_path = ColumnPath(column_family="PrimeiroNivel", column="nome")

key = "1"value = "Gustavo Pinto"timestamp = time.time()

try:transport.open()client.insert(keyspace,key, column_path, value, timestamp,ConsistencyLevel.ZERO)

NoSQL - Cassandra (Thrift)

#read

column_parent = ColumnParent(column_family="PrimeiroNivel")slice_range = SliceRange(start="", finish="")predicate = SlicePredicate(slice_range=slice_range)result = client.get_slice(keyspace, key, column_parent, predicate, ConsistencyLevel.ONE)

NoSQL - Cassandra

NoSQL - Cassandra

mas, essa é a sua necessidade?

top related