[Twisted-web] Multithread SSL

lasizoillo lasizoillo at gmail.com
Wed Jun 24 16:00:51 EDT 2009

2009/6/24 Yann Pomarede <yann.pomarede_twisted at gadz.org>:
> Thanks for your reply.
> I already thought about that but I'll have other problems if I do so:
> - I need some variables to be common between the instances (Maybe it's
> not so difficult with RPC or a DB or shared memory).
If you need full ACI (ACID without durability) this can be a performance issue.

> - I also need to keep a pool of all the outgoing the connections (to
> perform some real time stats and to limit the number of connection per
> user)
The load balancer can limit number of connections (without decipher
ssl) or agregate real time stats from web servers (for easier
management). You can upgrade code in your web app without lost service
too ;-)

> But if I do not have other choices, it's certainly what I'll have to do...

Threads are not  the solution. Python have a GIL (Global Inter-Lock)
[1] and don't use multicore facilities. I don't know if you can do
multiprocessing with twisted. A load balancer sound more easy (and
maybe more horizontal scalable).

[1] http://www.dabeaz.com/python/GIL.pdf

Excuse my poor english.



> Yann.

> On Wed, Jun 24, 2009 at 21:08, Duncan M.
> McGreggor<duncan.mcgreggor at gmail.com> wrote:
>> Yann Pomarede wrote:
>>> Hello,
>>> I used Twisted to write some kind of proxy and it's working great,
>>> it's so easy to develop and understand.
>>> But I have a problem. I use SSL (on both side of this app) and the
>>> bandwidth available is limited to the power of one of my CPU due to
>>> the high cost of the SSL encryption.
>>> I would like to use both core of my CPU to increase the bandwidth of
>>> this application but it does not seem easy to do.
>>> # Here is the server definition in myapp.tac
>>> from twisted.application import internet, service
>>> application = service.Application('MyApp', uid=1001, gid=1001)
>>> internet.SSLServer(80, serverFactory, MySSLContext(), 50,
>>> 'xxx.xxx.xxx.xxx').setServiceParent(service.IServiceCollection(application))
>>> # And here the clients connections
>>> from twisted.internet import reactor, ssl
>>> mySSLContext = ssl.ClientContextFactory()
>>> mySSLContext.method = SSL.SSLv23_METHOD
>>> reactor.connectSSL(self.HOST, self.PORT, self, mySSLContext)
>>> Does anyone already have this kind of problem? Is there an easy way to
>>> multithread the SSL encryption part?
>> You could run two instances and load balance them...
>> d
>> _______________________________________________
>> Twisted-web mailing list
>> Twisted-web at twistedmatrix.com
>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
> _______________________________________________
> Twisted-web mailing list
> Twisted-web at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web

More information about the Twisted-web mailing list