0

I only know about cloud application "in theory"; I've read some material related to cloud computing but never had access to cloud computing from the point of view of their developer (not of the sysadmin!).

What is specific in developing (not deploying) cloud software in compiled languages (precisely those accepted by recent or near future GCC, so C, C++, Go, Fortran, D, ....) ??

The What is a Cloud-native application question is helpful but not much.

I have read Above the Clouds: A Berkeley View of Cloud Computing, which does not really answer my question (and reinforce my opinion that cloud computing is more a way of deploying applications that of designing and developing new ones). The C++ and Cloud Computing white-paper advocates Casablanca, the Microsoft C++ REST SDK. There is also a AWS SDK for C++.

FWIW, the context of this question is working on a research grant proposal to H2020 call ICT-16-2018 Software Technologies, with mostly static source code analysis in mind. I'm interested mostly (but not only) in HPC and big data apps running on the cloud.

My first impression is that cloud computing is separated in two directions:

  • medium-scale cloud computing, that is running a program (or a small set of programs) on a known (and rather small and reliable) set of cloud instances, typically a few dozen or a hundred of (perhaps virtual) machines or containers. Then, from the developer's point of view, it is "just" coding a networked application (using decades old techniques like TCP sockets, perhaps with recent libraries like 0mq, etc...). The developer assumes that all instances he wants to are running reliably his code. Hence such development is similar to the development of code written in the 1990s running on a local network of dozen Unix workstations. I would probably give (as program arguments or configuration files) to such an app the network coordinates (IP addresses, TCP ports, ...) of fellow application processes running in the same cloud. So it is like old cluster computing.

  • large-scale cloud computing, e.g. running something in an entire datacenter or on many thousands of "machines". Then, the architect of the distributed software should take into account that several nodes can fail, and design his application with that property in mind and this require specific architecture, design, and code

the "medium-scale" vs "large-scale" terminology above is probably wrong or too broad. If you know more relevant or precise terminology, please tell.

My feeling is that developing a medium-scale cloud application can be mostly done on a Linux PC (of course full tests should be done on a cloud, but unit tests don't have to); for example an application running on Docker is just an ordinary (batch) Linux app started by specific scripts in Dockerfile, and Docker is mostly something to manage and deploy the application.

I do know however that large scale cloud applications (like the indexing engine of Google) are designed for large scale deployment and takes into account failure of individual instances (but I don't know that well, and would like to read more about that).

I am not sure about cloud applications running on OpenStack, which I don't understand much. It looks like a set of tools to deploy and run cloud applications. So It seems that one can run on OpenStack a cloud app (e.g. its ELF binary), but that it is useful (but not necessary) to add some web or REST services to it which helps to maintain and instrument that app. It looks that it is useful (but not mandatory) e.g. to code some Python or perhaps to design my C++ cloud application for OpenStack as being embedded in Python (so it won't have any C++ main function, but a small set of C++ functions called from Python scripts?).

I don't understand yet how C++ (or Go) cloud applications for Kubernetes or Hadoop should be designed.

How should C++ or Go applications for OpenStack, Kubernetes or Hadoop be designed and coded? Are they required to follow or provide some specific API, or link some mandatory library, beyond usual practices on Linux? Does the C++ or Go cloud application developer has to care if his C++ or Go cloud app is deployed on Docker, OpenStack, Kubernetes, Hadoop? What does that change in his code?

In other words, if I would be starting a big software project -typically in HPC or bigdata domains- from scratch (with a small team of C++ or Go developers working for several years), what should I be aware of?

A too broad variant of my question might be: how to design and code cloud application in C++ or Go? or what is the essence of cloud computing development in C+++? Is it "just" a matter of e.g. using & providing micro web services (in programming terms, that would just mean using some HTTP server library like libonion and client library like libcurl, by itself not a big deal, or some REST API like pistache), or message libraries like 0mq, or is there something else to have in mind?

Or what is the definition (or decisive characteristics) of cloud applications from the point of view of a C++ or Go developer? How is it different to the developer from cluster applications of the 1990s?

PS. I am the designer, architect and author of GCC MELT, in a lab who develops Frama-C. We are trying to understand what future software engineering tools (notably static source code analyzers) would be needed by cloud software developers.

Basile Starynkevitch
  • 32,434
  • 6
  • 84
  • 125
  • Why the downvote? Is my question unclear, or too broad? Please comment it and I'll try to improve it. – Basile Starynkevitch Oct 20 '17 at 08:33
  • I didn't downvote (yet) but this part of what you asked for looks like off-topic / recommendation: "References to free software cloud applications..." Possibly somebody picked that – gnat Oct 20 '17 at 09:08
  • Changed that to "examples", but that is not the main thing in my question. – Basile Starynkevitch Oct 20 '17 at 09:10
  • that change still reads like a recommendation to me sorry. As for it being "just a part" of the whole question, you need to understand that this doesn't really help. As long as it is a part of the question, it is going to attract link-only answers and spam as they say in close reason. This is rather the case when part pollutes the whole – gnat Oct 20 '17 at 09:22
  • I remove that paragraph to please you, but still got no answers, and no constructive comments. I wish to improve my question if I can. However, I do wish to see examples of C++ cloud code. – Basile Starynkevitch Oct 20 '17 at 09:31
  • The question seems very broad, every application is different and designed differently depending on the functionality and the guarantees that they need to provide. It's hard to tell exactly what you are expecting people to answer... – Sean Burton Oct 20 '17 at 10:22
  • 1
    Is there some characterization, from the developer's point of view, of cloud computing? Or is it just a buzz word? – Basile Starynkevitch Oct 20 '17 at 10:35
  • 2
    The question seems so broad to me that answering it might well form the first phase of the project, should OP secure the funding. – High Performance Mark Oct 20 '17 at 10:35
  • 1
    @BasileStarynkevitch would it be accurate to paraphrase your question as "how is developing a C++ or other compiled-language application different in the cloud than on the desktop or traditional server?" –  Oct 20 '17 at 15:45
  • Cloud computing is a buzzword. It was simply called server applications previously. As such it can use any protocol, HTTP or anything based on TCP/IP. – Frank Hileman Oct 20 '17 at 22:52
  • 1
    Regarding the characterization of cloud computing, there is a [Gartner definition](https://www.gartner.com/newsroom/id/1035013) and an [NIST definition](https://www.nist.gov/news-events/news/2011/10/final-version-nist-cloud-computing-definition-published). – rwong Oct 21 '17 at 08:49
  • You can think of cloud computing as a software-configurable data center. That is, instead of installing a machine to run a SQL Server, you stand up a virtual machine via cloud software. From a data center perspective, your software's architecture shouldn't change all that much. OpenStack just looks like a way to stand up this type of data center. – Robert Harvey Oct 22 '17 at 15:13
  • Naturally, this is a very simplistic point of view, but the basic principle is sound: you only pay for the computing power that you actually use. The conventional approach requires you to over-spec your data center, so that you have room to grow. That means spending a lot of money for equipment that may not be used to its full potential for awhile. – Robert Harvey Oct 22 '17 at 15:15

0 Answers0