Written by Jim White, EdgeX Foundry TSC Member and Chair of Core Services Working Group
To begin this post, I need to give you a little history. When my team and I started on Project Fuse (which became EdgeX Foundry) at Dell some two years ago, we knew the micro service architecture was going to be the mechanism to deliver the edge/IoT platform to satisfy our ideal platform. What we weren’t sure about was the programming language to use to get started in writing our microservices. As we looked around at options we knew we needed a very powerful and flexible programming platform that would provide all sorts of tools and connectors to the various protocols of the IoT world. Many of the newly emerging languages, like Go Lang, just didn’t ring the bell on the availability of tools and connectors at the time. So, we went with Java as our primarily programming language as it was well known to us, provided all the libraries and connectors we could want, and it seemed to be in line with the other products we wanted to integrate with at the time. We also knew that the microservice architecture would allow us to add or replace a microservice in the future using a different language if we needed. To be honest, our project was a proof of concept system so the choice in language was less relevant then than today.
As we fast forward to EdgeX’s introduction this spring, it was clear from the community that while the concept architecture we built with Fuse was on the mark, we needed to eventually improve EdgeX’s performance, footprint, and scalability – especially to meet the mission critical edge use cases we would encounter. Languages like Go Lang have come a long way, and many of our community members were already seeing incredible improvements using Go Lang in their IoT solutions. Indeed, even at Dell, as we were getting ready to introduce EdgeX into the open source community, we had started to experiment with Go Lang (and other languages) and had even developed some replacement micro services to demonstrate the potential performance/footprint improvements while also trying to understand the challenges.
Today, I am pleased to announce that the EdgeX community has formalized plans to develop preview EdgeX microservices in Go Lang and make them available by Jan 31, 2018. This will be a preview of the California release of EdgeX scheduled for the spring of 2018. We will release these Go Lang services but will not be making any other changes to the system’s functionality or API set – in other words, these Go-based microservices should be drop in replacements to their Java counterparts. And for the foreseeable future, we plan to support both the Java and Go Lang versions as we know the Java and Go Lang communities are vibrant and may want/need these alternatives in their particular IoT solutions.
Specifically, we plan on releasing the following microservices in early 2018 as part of this preview release:
- Core Data, Core Metadata, Core Command microservices
- Export Client microservice
- Initial elements/libraries to a Go Lang Device Service SDK
Additional microservices and facilities may be added to this list depending on work accomplished between now and then. Much of this work is actually already underway – in parallel to our efforts as a community to get the Barcelona release out this fall. We hope to have some preliminary performance and footprint numbers (in comparison to the existing Java microservices) so people will have an understanding of the impact of this work by the time we showcase the Barcelona release in the fall.
We are hopeful this work will also help demonstrate the community’s commitment to drive down the size and speed of EdgeX to meet today’s edge platforms. Much work remains, but this will help provide proof positive that the platform is heading in the right direction and will help galvanize the community around our desire to solve real world IoT/edge use cases.
By the way, don’t let this work suggest that EdgeX is going to use Go as the only development language going forward. One of the core tenets of EdgeX is to be polyglot and use the tools of choice for each microservice to best meet the use case need. As an example, others in our community are already on record (IoTech, Inc. for example) in their desire and focus to eventually develop a C based device service and device service SDK. C/C++ will probably make a lot of sense when trying to operate a device service on very constrained device hardware and offers extreme performance improvements. Go simply offers a popular alternative to Java that is seeing wide use in the IoT community and helps us get the collective footprint and performance of EdgeX down fairly quickly.
So, do you like to work in Go? Lend us a hand! Come join us in the EdgeX community as we try to build the best open source IoT/edge platform on the planet!