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