News for hackers. Stuff that matters.
Re:The Reliability of Go by kenkam on Tuesday May 14, 2013 @08:23AM (#5704387)
I would like to hear more about the technical implementations from the author on how he managed to improve performance. He mentions: "Due to the complex nature of the system this script could take up to three minutes to scan nodes and process the results" but how does Go solve this complex system that Python couldn't? 3 minutes to 1 second is a superb improvement.

The second paragraph reads like: replacing a relational DB with a (in memory?) key value store resulted in more throughput. He implemented it in Go, but he could have implemented it in any other language.

What I want to know is how he convinced management to use Go? Where did he find the programmers? I work in a similar environment and I don't see my firm adopting Go any time soon, although I wished they had as I'm a big fan of Go and believe it has a place especially server side processes (e.g. algo trading, market data feeds) where concurrent connections are prevalent.

Re:The Reliability of Go by elithrar on Tuesday May 14, 2013 @08:43AM (#5704471)
> He implemented it in Go, but he could have implemented it in any other language

I assume he used Go's concurrency features, although he could have articulated on that.

> Where did he find the programmers

I don't think you explicitly need to hire new programmers. If you have capable, existing programmers, the learning curve is pretty minimal for something like Go.

Re:The Reliability of Go by kenkam on Tuesday May 14, 2013 @08:52AM (#5704502)
I agree with not needing to hire new devs, but convincing management and the business to move to a new, untried system with current devs is no trivial feat. It would be nice if he could expand on how that came about.
Re:The Reliability of Go by Stephen_C on Tuesday May 14, 2013 @09:13AM (#5704583)
Andy convinced management by spending a lot of personal development time creating and testing the Go components before demonstrating in a peer review process that they were an appropriate solution.

There's no special method - the introduction of Go was incremental. If I remember correctly the monitoring collection component (mentioned in the blog post) was the first. It was small, easy to swap in and easy to demonstrate the improvements.

You build trust in the technology and work flow before moving on to larger more critical/risky projects.

(Andy is very much missed by his former colleagues)

Re:The Reliability of Go by j_s on Tuesday May 14, 2013 @09:33AM (#5704685)
Would be interesting to hear the details on management's side of the story: 'This guy re-wrote all our stuff in the new hotness then left the company'
Re:The Reliability of Go by Stephen_C on Tuesday May 14, 2013 @10:07AM (#5704896)
Well what sort of story are you expecting to hear? Without going into detail it's not really that exciting.

There was a requirement for high volume/through put messaging component in our infrastructure.

That technological requirement (along with non functional requirements e.g. development time/costs) was more than adequately met by a program(s) written by a team member written in Go. Was it an opportunity to further explore the "new hotness" that is/was Go…absolutely but the solution could have been implemented in one of the other supported technologies C/C++/Java with appropriate advantages/disadvantages associated with each. It will stay in use for as long as it provides the best solution, if that changes a more appropriate solution will be investigated.

> 'This guy re-wrote all our stuff in the new hotness then left the company'

The Go dataStore is "a" component within a large infrastructure, it is supportable by more than one member of the development team (a core requirement when deploying any new technology to production).

I'll also note that before Andy left, being a professional and thoughtful colleague, he put a lot of effort into ensuring appropriate training and knowledge was given to team members that had not been part of the deployment.

As Andy is a very well regarded former colleague, it helps that we could easily get in touch for a query, even when we're out for a beer or five* :)

(*five might not be a maximum in that scenario)

Re:The Reliability of Go by j_s on Tuesday May 14, 2013 @01:41PM (#5706568)
Glad to hear it worked out well; there are many times where it doesn't. Thanks for taking the time to share an overview.
Re:The Reliability of Go by lttlrck on Tuesday May 14, 2013 @01:40PM (#5706560)
This sounds reasonable and certainly worthwhile if it really does result in adoption in "larger more critical/risky projects."

If the result was just one component out of many written in Go then the reality is it was a side-experiment and/or a poor management decision. I do hope that is not the case.

"Andy is very much missed by his former colleagues" hopefully for good reasons, not because they left him with another language and toolchain to maintain :)

Re:The Reliability of Go by swah on Tuesday May 14, 2013 @09:40AM (#5704721)
BTW, by component you mean program, right?
Re:The Reliability of Go by Stephen_C on Tuesday May 14, 2013 @10:09AM (#5704907)
Yes, or a larger collection of programs/scripts/resources.
Re:The Reliability of Go by rubinelli on Tuesday May 14, 2013 @09:29AM (#5704659)
Go has the advantage of being "Google's language." This may sound stupid, but this credibility-by-association is a very important factor for a non-technical manager.
Re:The Reliability of Go by 0xdeadbeefbabe on Tuesday May 14, 2013 @01:13PM (#5706343)
Go puts the Go in Google.
Re:The Reliability of Go by gngeal on Tuesday May 14, 2013 @03:27PM (#5707418)
Without Go, you'd only ogle Google.
Re:The Reliability of Go by beatgammit on Tuesday May 14, 2013 @01:27PM (#5706444)
I got my boss to let me try out Go after proving that I could solve problems that we were currently struggling with.

I also agree that you don't need to hire new devs. I've taken two programmers who've never used Go (mostly university languages) and taught them to be productive in a matter of days. Both consider Go to be one of their favorite languages.

Re:The Reliability of Go by 0xdeadbeefbabe on Tuesday May 14, 2013 @01:12PM (#5706336)
No trivial feat? It seems to me that managers would be more willing to gamble than a typical programmer. But I still agree with you. I'd like to see a post about how someone switched to go from cobol.
Re:The Reliability of Go by Ecio78 on Tuesday May 14, 2013 @08:59AM (#5704526)
Probably that would be the most interesting part of the story...
Re:The Reliability of Go by TheAnimus on Tuesday May 14, 2013 @08:50AM (#5704495)
>I assume he used Go's concurrency features, although he could have articulated on that.

I've yet to find a good explanation of what is so special about them, why I'd choose it over F# or C# Async/Await.

In the case of pinging servers, I would have prefered to use a 'cheaper' to develop language, which has a boatload of libraries that are widely used.

Anyone got any links or stories about why you would want to use Go for something like that? I don't find this blog story remotely useful in the whole 'why Go' thing.

Re:The Reliability of Go by kenkam on Tuesday May 14, 2013 @09:10AM (#5704570)
I think async/await is semantically similar to the promises pattern [1] but different to the Go concurrent models using channels. What the compiler does with await/async is quite interesting [2]. Essentially it takes your await/async code and turns the related code into a state machine which keeps track of how control should be switched between the callee and the await keyword (and uses Task for the async bit).

[1] http://blog.parse.com/2013/01/29/whats-so-great-about-javasc...

[2] http://www.codeproject.com/Articles/535635/Async-Await-and-t...

Re:The Reliability of Go by TheAnimus on Tuesday May 14, 2013 @10:50AM (#5705206)
Thanks for replying.

But I'm not trying to say that async/await are superior to the actor paradigm (which is what my understanding Go subroutine, don't call em threads things are).

Just that I would have hazarded a guess for pinging a bunch of servers, the TPL stuff is a better choice, than actor?

I feel there is a lot of buzz around Go, though I'm not seeing why. I guess my only option is to find something suitable enough for it, and give it whirl. But of course I am lazy, so trying to find someone elses suitable experiences would be great.

Re:The Reliability of Go by threeseed on Tuesday May 14, 2013 @09:01AM (#5704537)
This is a good overview of Go concurrency:

http://www.slideshare.net/jgrahamc/go-oncurrency

As a Java developer I personally don't find it that impressive compared to something like the LMAX Disruptor or even Vert.x but I can appreciate that it is simple and that always counts for a lot.

Re:The Reliability of Go by randomsearch on Tuesday May 14, 2013 @09:49AM (#5704768)
As an Ada 95 developer, I like that Go seems to have an Adalite concurrency-related syntax.
Re:The Reliability of Go by tptacek on Tuesday May 14, 2013 @09:54AM (#5704795)
Both systems have a CSP design, right? Golang is pretty up front about having lifted its design from Hoare.
Re:The Reliability of Go by randomsearch on Monday May 20, 2013 @07:03AM (#5736943)
Yes, you're right - the design comes from CSP. The syntax looks nicely Adalike.
Re:The Reliability of Go by brown9-2 on Tuesday May 14, 2013 @09:18AM (#5704605)
On the Python script, it sounds like the performance problems were more likely than not caused by inadequate use of any concurrency features rather than an inherent problem with Python The Language. As exciting as Go is it sounds like replacing the old script with a sufficiently concurrent and well-written application in any language should have worked well.

More details would be really helpful. Also the author seems to be responding to a question of reliability by talking about performance which is not the same thing.

Re:The Reliability of Go by coldtea on Tuesday May 14, 2013 @10:17AM (#5704974)
>On the Python script, it sounds like the performance problems were more likely than not caused by inadequate use of any concurrency features rather than an inherent problem with Python The Language.

"Inadequate concurrency features" IS an inherent problem with Python The Language.

(Notice I didn't say "inadequate use of concurrency features", I said "inadequate concurrency features").

Re:The Reliability of Go by Roboprog on Tuesday May 14, 2013 @10:46AM (#5705172)
It's been a while, but I remember that Python threads run into a global interpreter lock quite often, yes?
Re:The Reliability of Go by bvdbijl on Tuesday May 14, 2013 @01:08PM (#5706294)
Yes, unless your code is very I/O bound using threads won't speed up your Python application
Re:The Reliability of Go by Stephen_C on Tuesday May 14, 2013 @09:43AM (#5704736)
I doubt Andy would disagree with you, it's no slight or bad commentary against Python (Andy was the cheerleader for introducing Python into our infrastructure where it is blossoming nicely).

With sufficient development time Andy could have introduced more concurrency and optimisation into the Python monitoring component (I'm thinking Gevent might have been a nice fit)...but without introducing additional frameworks or libraries Go had these features as a core component.

The offhand performance comment aside, Andy was noting that a component written in Go is depended on to handle VERY high volumes of message throughput in a financial services firm.

While no proof of reliability it is merely anecdotal support that Go is being used in production environments.

Re:The Reliability of Go by codonaut on Tuesday May 14, 2013 @09:24AM (#5704639)
Can anyone explain why exactly a script written in one language would stall, while the same script in another wouldn't? Is there that much inherent instability in Python? Can it be assumed that the scripts in this case aren't comparable?
Re:The Reliability of Go by Cowen on Tuesday May 14, 2013 @09:51AM (#5704781)
Without actually be able to see either script, I would assume that his Go implementation took advantage of some of Go's more natural concurrency features.

The only reason I'd assume the Go version was concurrent and the Python one wasn't is that concurrent processing in Python can be very prickly. That is by design. Guido has talked about how adding too much support for concurrency at the language level would complicate things and probably end up with a language that was very non-Pythonic.

Re:The Reliability of Go by brown9-2 on Tuesday May 14, 2013 @12:03PM (#5705809)
A completely different implementation would seem likely to have been made.
Re:The Reliability of Go by _pmf_ on Tuesday May 14, 2013 @09:46AM (#5704758)
> Can anyone explain why exactly a script written in one language would stall, while the same script in another wouldn't?

It stalls in Python because the author is not acquainted with non-blocking system programming (the select()-call, which has been around since at least the eighties and has been a part of core Python since a very long time).

As to why a software developer who did not invest some minimal time into learning basic system programming feels qualified to write a blog post about this topic is another question.

Re:The Reliability of Go by tptacek on Tuesday May 14, 2013 @09:56AM (#5704812)
It's funny how people who learn evented programming in scripting languages like Python feel like they've discovered some new hidden concept. No competent systems developer fails to understand what select() does. Suggesting that the author was't "acquainted" with select says more about this comment than about the author of the post it comments on.
Re:The Reliability of Go by coldtea on Tuesday May 14, 2013 @10:18AM (#5704984)
>It stalls in Python because the author is not acquainted with non-blocking system programming

Citation needed.

How about "he is acquainted but can't be bothered to use it retrofitted to a language not tailor made for it"?

>As to why a software developer who did not invest some minimal time into learning basic system programming feels qualified to write a blog post about this topic is another question.

And why you think you're any better than him based on a short blog post (and especially one in which he does not delve into why the Python version was slower or says it would be impossible to make it faster, just mentions it's speed in passing), is beyond me.

Maybe cut down the snark?