<div dir="ltr">Hello to All.<div><br></div><div>This message is not about arguing weather OpenStack needs Go and other language.<br><div><br></div><div>This is a good discussion. So, the main question here is "Go along with Python for OpenStack" and the problem is to support Go code starting for necessity of skilled Go developers to infrastructure for CI/CD, etc.</div><div><br></div><div>Correct me if i'm wrong, none of the messages above were stating about support Go-extensions for Python (C extensions were mentioned couple times). Starting Go v1.5 it is possible to develop extension for Python [1] (lib that helps to develop extensions [2])</div><div>An idea is in:</div><div>  - "If think that your project is an exceptional one (swift, designate, etc.) and you really think that Golang is what you need,</div><div>     then why can't you develop your own Go-extensions  and write Python libs that are utilizing that code</div><div>     and then add that new python dependency to your project?"</div><div>  - distribute your go-extensions (*.so files) and DEB/RPM for further consumption in DevStack for example (like we do for multiple components - Kafka, Cassandra, MySQL, RMQ, etc.)</div></div><div><br></div><div>As i can see such behaviour would allow Python to be main lang for OpenStack development, we wouldn't have an overhead for building new infrastructure for Go and would allow projects to use Go for developing their extensions out of OpenStack Big Tent.</div><div><br></div><div>[1] <a href="https://blog.filippo.io/building-python-modules-with-go-1-5/">https://blog.filippo.io/building-python-modules-with-go-1-5/</a></div><div>[2] <a href="https://github.com/sbinet/go-python">https://github.com/sbinet/go-python</a></div><div><br></div><div>Kind regards,</div><div>Denys Makogon</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-05-25 14:21 GMT+03:00 Flavio Percoco <span dir="ltr"><<a href="mailto:flavio@redhat.com" target="_blank">flavio@redhat.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 25/05/16 06:48 -0400, Sean Dague wrote:<br>
<br>
[snip]<div><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
4. Do we want to be in the business of building data plane services that<br>
will all run into python limitations, and will all need to be rewritten<br>
in another language?<br>
<br>
This is a slightly different spin on the question Thierry is asking.<br>
<br>
Control Plane services are very unlikely to ever hit a scaling concern<br>
where rewriting the service in another language is needed for<br>
performance issues. These are orchestrators, and the time spent in them<br>
is vastly less than the operations they trigger (start a vm, configure a<br>
switch, boot a database server). There was a whole lot of talk in the<br>
threads of "well that's not innovative, no one will want to do just<br>
that", which seems weird, because that's most of OpenStack. And it's<br>
pretty much where all the effort in the containers space is right now,<br>
with a new container fleet manager every couple of weeks. So thinking<br>
that this is a boring problem no one wants to solve, doesn't hold water<br>
with me.<br>
<br>
Data Plane services seem like they will all end up in the boat of<br>
"python is not fast enough". Be it serving data from disk, mass DNS<br>
transfers, time series database, message queues. They will all<br>
eventually hit the python wall. Swift hit it first because of the<br>
maturity of the project and they are now focused on this kind of<br>
optimization, as that's what their user base demands. However I think<br>
all other data plane services will hit this as well.<br>
<br>
Glance (which is partially a data plane service) did hit this limit, and<br>
the way it is largely mitigated by folks is by using Ceph and exposing that<br>
directly to Nova so now Glance is only in the location game and metadata<br>
game, and Ceph is in the data plane game.<br>
</blockquote>
<br></div></div>
Sorry for nitpicking here but Glance's API keeps being a data API. Sure it<br>
stores locations and sure you can do fancy things with those locations but, as<br>
far as end users go, it's still a data API. It is not be used as intensively as<br>
Swift's, though. Ceph's driver allows for fancier things to be done but there<br>
are deployments which don't use Ceph.<br>
<br>
I believe it'd be better to separate data services that *own* the data from<br>
those that integrate other backends. Swift owns the data. You upload it to<br>
swift, it stores the data using its own strategies and it serves it. Glance gets<br>
the data, puts it in some other store and then you can either access it (not<br>
always) directly from the store or have Glance serving it back.<div><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
When it comes to doing data plan services in OpenStack, I'm quite mixed.<br>
The technology concerns for data plane<br>
services are quite different. All the control plane services kind of<br>
look and feel the same. An API + worker model, a DB for state, message<br>
passing / rpc to put work to the workers. This is a common pattern and<br>
is something which even for all the project differences, does end up<br>
kind of common between parts. Projects that follow this model are<br>
debuggable as a group not too badly.<br>
<br>
5. Where does Swift fit?<br>
<br>
This I think has always been a tension point in the community (at least<br>
since I joined in 2012). Swift is an original service of OpenStack, as<br>
it started as Swift and Nova. But they were very different things. Swift<br>
is a data service, Nova was a control plane. Much of what is now<br>
OpenStack is Nova derivative in some way (some times direct extractions<br>
(Glance, Cinder, Ironic), some times convergent paths (Neutron). And<br>
then with that many examples, lots of other things built in similar ways.<br>
<br>
Swift doesn't use common oslo components. That actually makes debugging<br>
it quite different compared to the rest of OpenStack. The lack of<br>
oslo.log means structured JSON log messages to Elastic Search, are not<br>
a thing. Swift has a very different model in it's service split.<br>
Swift doesn't use global requirements. Swift ensures it can run without<br>
Keystone, because their goal is Swift everywhere, whether or not it's<br>
part of the rest of OpenStack.<br>
<br>
These are all fine goals, but they definitely have led to tensions on<br>
all sides.<br>
<br>
And I think part of the question is "are these tensions that need to be<br>
solved" or "is this data that this thing is different". Which isn't to<br>
say that Swift is bad, it's just definitively different than much of the<br>
ecosystem. Maybe Swift should be graduated beyond OpenStack, because<br>
it's scope cross cuts much differently. Ceph isn't part of OpenStack,<br>
but it's in 50% of installs. libvirt isn't part of OpenStack, but it's<br>
in 90% of installs. And in both of those cases OpenStack is one of the<br>
biggest drivers of their use.<br>
<br>
Which, gets contentious because people feel like this is kicking<br>
something out. And that I can understand. There is a lot of emotion<br>
wrapped up in labels and who gets to be on the the OpenStack home page.<br>
I wish there wasn't. Good software should get deployed because it is<br>
good and solves a need, not because of labels. I'm not sure Swift users<br>
really care that Swift is OpenStack. They care that Swift is Swift. And<br>
Swift being Swift, but not being OpenStack would open up degrees of<br>
freedom in Swift being more Swift centric without the same friction<br>
from the rest of of the ecosystem.<br>
<br>
...<br>
<br>
Honestly, we probably need to just address #5 first and foremost. It's<br>
been dodged around for a long time, the tensions haven't gotten any better.<br>
We have just decided the standoff around Swift being different is going<br>
to remain.<br>
The global requirements proposal is a good example of that<br>
<a href="https://review.openstack.org/#/c/88736/" rel="noreferrer" target="_blank">https://review.openstack.org/#/c/88736/</a> - 434 revisions later.<br>
</blockquote>
<br></div></div>
Do we? I don't think this is a *swift* problem. I think this is a more generic<br>
problem that came as part of the big tent adoption. Swift has been around longer<br>
than any other project, sure. But I don't believe "fixing swift" will actually<br>
get us anywhere but to the next discussion about the shiny new data service that<br>
needs Go and we don't know whether it's OpenStack or not.<br>
<br>
If we don't organize "the tent" properly, I don't think we'll be able to do<br>
something about projects similar to Swift. Let's solve the issue of what this<br>
tent should look like now, what layers we need (if we need any), what other<br>
grouping we should have (if we must have them) before we start pushing projects<br>
aside.<br>
<br>
So, I believe we should address #4 first but from a different perspective. That<br>
is, we're *already* in the business of building these projects because there's<br>
nothing preventing them from being part of the tent. Let's identify what these<br>
projects are, let's reorganize the tent accordingly and find a proper place for<br>
these projects. Is that place the tent? or is it somewhere else? Dunno yet.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
>From that we have one data point on #4. Are we going to be building a<br>
set of data plane services that can't be in python? If Swift wasn't the<br>
leading<br>
example here would we be having the conversation at all?<br>
</blockquote>
<br></span>
This would have happened anyway. There are other services that could have<br>
similar requirements as Swift. Designate is one. I think Zaqar could also have<br>
such requirements in the API but it'd still be possible to delay such scenario.<div class="HOEnZb"><div class="h5"><br>
<br>
Flavio<br>
<br>
-- <br>
@flaper87<br>
Flavio Percoco<br>
</div></div><br>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div>