[openstack-dev] [all] Replace mysql-python with mysqlclient

Jay Pipes jaypipes at gmail.com
Tue May 12 02:22:49 UTC 2015


On 05/11/2015 09:02 PM, Dieterly, Deklan wrote:
> Given Python’s inherent inability to scale (GIL) relative to other
> languages/platforms, have there been any serious discussions on
> allowing other more scalable languages into the OpenStack ecosystem
> when concurrency/scalability is paramount?

Robert has already responded to your lack of specificity in the above 
statement. I'd like to add a couple things:

a) The architecture of our OpenStack projects -- including the systems 
we use as backing data stores and the coarse-grained locking techniques 
we have used to date -- is a bigger problem than the language most 
OpenStack components are written in.

b) The speed of development and the familiarity with the Python language 
of the folks involved in our CI, testing, and infra/build platforms and 
the inherent economies of scale we get from that represent a far greater 
long-term cost reduction than trying to rewrite existing systems in 
"faster or more scalable" platforms. Developer and operator time costs 
way more than the tiny amount of additional costs that comes from buying 
a few more and faster processors to put controller services on.

c) Many OpenStack services, including Nova, Cinder, and Neutron, when 
looked at from a thousand-foot level, are little more than glue code 
that pipes out to a shell to execute system commands (sorry, but it's 
true). If you look at the time spent in the database and message queue 
it's really very little compared to the time spent on a compute node 
spawning an image. The DB and message queue are, IME, not where scaling 
problems occur. Instead, they occur in things like Nova pulling images 
from Glance unnecessarily (an architectural problem, not a concurrency 
problem) or the implementation of iptables saves when lots of security 
groups on a single compute node would cause excessive rebuilds of the 
routing tables.

Now, do I support the hummingbird Golang object server effort in Swift?

Absolutely, I do.

Because it 100% makes sense there. That part of the Swift code base is 
where concurrency and performance matters big time. Would implementing 
all of nova-compute in Golang result in huge performance gains? No, not 
at all. It just doesn't make much sense, since much of nova-compute's 
time is spent shell'd out in execution or waiting on locks (an 
implementation thing that has little to nothing to do with the language 
used).

So, bottom line for me: focus on the things that will have the biggest 
impact to long-term cost reduction of our codebase.

Very little of that cost (in most of our OpenStack projects) has to do 
with concurrency issues. A *lot* of that long-term cost has to do with 
the unnecessary complexity of our architecture and subsystems, because 
it's high-priced humans that need to get paid to maintain such complexity.

So, to me, the highest priority performance and scale fixes actually 
have to do with the simplification of our subsystems and architecture, 
not with whether we use mysql-python, PyMySQL, Python vs. Scala vs. 
Rust, or any other distractions.

Best,
-jay



More information about the OpenStack-dev mailing list