Making the jump from monolithics to microservices

Written By Daniel Oostra

As companies begin to find more ways to save money and operate more efficiently, technology leaders are making key changes to their architectures as they develop applications. These changes offer a huge opportunity for developers to leverage their skills as programmers–and to enhance their skill sets with new DevOps practices and technologies.

Similarly, backend engineers are looking to boot camps and schools to add programming and coding skills to their resumes to make them more versatile and to be able to communicate with the developers and programmers working on applications on the platforms they support.

Just today I spoke with a systems administrator, Robert B., who also was trained to be a cloud security specialist and was interested in Coding Dojo. He was talking to me about how he could shell script, but his knowledge of compiled languages and practices were a complete mystery to him. He brought up containerization in his interview and stressed the desire to learn more about microservices. We had a great discussion and hopefully, we will have him join us at our onsite boot camp in March 2019.

My discussion with Robert prompted me to write this piece. As developers, instructors, and technologists, we need to investigate the shift that has happened in how applications are being developed and supported. To gain a good understanding of the architectures we are discussing, let’s begin by taking a look at what I mean by monolithic; then we can examine how microservices fit into the big picture of application development.

Monolithic Architecture

Today, and in the past, computer programs that have a monolithic architecture are built using a single unified software design model; where all the parts of the program are put together in one piece.

One challenge when working with this sort of software is that when you need to change one feature or function in the software, you might need to re-write the entire program to make that new change work.

That sounds tedious–and believe me, it can be. However, monolithic architectures are not all bad, applications developed this way can be easier to debug since all the parts are encapsulated in one location. They can be more secure since its’ not connected to external systems, and you can maintain total control of the content and experience that you provide your users.

When thinking about what a monolithic application is, think back to an old school arcade game like Centipede, Ms. Pacman, or Space Invaders. The game is played right there, you have one way to interface with it, you have different high scores (state), and the game changes the score data over time (state change). If the game makers want to change the user interface, they would have to re-engineer the entire game. Remember the desktop versions of Word and Excel? Microsoft took its monoliths and moved them to a microservices architecture with its’ launch of Office 360.

Let’s look at a more abstract example. Understanding what a monolith is the first step in understanding how to migrate to microservices. These types of applications take the user interface, the data access layer, and the data store and tightly bind them together into what we call a stateful application. All that means is that we have an application that stores and changes data over time and that the app can have what we call state. The key takeaway is that the state of these applications can and will change.

Modular Architecture

Now let’s look at a modular application. In the diagram below, we have a similar application compared to the one above, but, notice how on each layer of the application, there are multiple components. Now imagine if each component was completely independent of the rest of the system.

Look at how easily things could theoretically scale. In contrast, the monolithic application would be very hard to scale because there is no way to add additional components to the system in a way that would not break the rest of the system. With a modular approach, we can add components on each layer and grow the application to fit the exact needs of our clients. If we need more of something, we just plug it in and turn it on.


Computer scientists have been working with this sort of approach for a long time. We call it orthogonal design, which is just another fancy way to say modular design. Creating applications with orthogonality in mind is not just for computer scientists, we can use it in all aspects of engineering. We can take this approach and develop websites, mobile applications, and even desktop applications using modules and services that are available on the web via APIs.

Microservices

Now that we have all the background out of the way, it is clear from my perspective why anyone would take their application the modular route. My definition for what a microservice is that it is any program that serves a single function or discreet task, and can be integrated into any application seamlessly and easily, regardless of the platform. I’ve read other definitions that define a microservice is any service that only requires one team to maintain it.

Wikipedia defines a microservice as:

Microservices are a software development technique—a variant of the service-oriented architecture (SOA) architectural style that structures an application as a collection of loosely coupled services. In a microservices architecture, services are fine-grained and the protocols are lightweight. The benefit of decomposing an application into different smaller services is that it improves modularity. This makes the application easier to understand, develop, test, and become more resilient to architecture erosion.[1] It parallelizes development by enabling small autonomous teams to develop, deploy and scale their respective services independently.[2] It also allows the architecture of an individual service to emerge through continuous refactoring.[3] Microservices-based architectures enable continuous delivery and deployment.[4]

Wikipedia. (2019 Feb 12) Microservices, https://en.wikipedia.org/wiki/Microservices

We all play video games, and today, many of our favorite video games are collections of microservices.

Think about when you play Fortnite, do you think the Fortnite people wrote their own chat protocols and program to work in their game? Or, maybe when they get an additional million users, do they go out and buy more servers?


Of course, they didn’t, they tapped into a microservice that provided that service and saved them thousands of dollars in design, testing, and development, mainly because someone else spent all the time and money to develop that service. As illustrated in the diagram above, as the number of users increases, the “orchestration software” responds by turning on another service to handle the loads. Each one of the chat microservices can operate on their own and with other units, if something bad happens in one, then we just shut it down and the system continues without notice.

Virtually any program can be broken up into components that could be running in different rooms, cities, or countries. This all goes back to orthogonality and creating tools that can be reused, over and over again.

Preparing Our Teams

How do we make the most effective and efficient system from monolithic design to a microservices approach? We train our people. Taking our current teams of developers and systems administrators and exposing them to the benefits of this approach is the key. Once technologists see the savings in maintenance and support for older architectures, they will move their products to leverage secure, working microservices to scale and grow their online footprints.

Coding Dojo exists to assist the technical staff of your organization to make the migration from your monolithic architectures into the microservices environment. Currently, our instruction team is busy working on curricula that will support your organization’s transition, providing the tools and experience that will give them the vision to see the pitfalls and challenges of a software migration–before they start costing your organization precious resources.

With courses on containerization, microservices orchestration, and modern DevOps practices, let Coding Dojo’s corporate training team help your staff chart a clear and well-thought-out path to increase your organization’s technical efficiency and to develop a solid roadmap to saving money using microservices.

Reaching out to the Educational Technology Community: BlockCerts

 UBTech is the largest educational technology conference. An additional benefit is that Coding Dojo was able to meet with dozens of CTO, IT Managers, and other technology based staff throughout the education community.

We introduced ourselves to this new community and attend the workshop with three strategies in mind. The first is to align ourselves with Coding Dojo’s values and give something back to students by sharing the research that Tim and I have been working for over a year.

Dan at UBTech 2018 – Las Vegas

The UBTech conference was our first really coming of age in regards to researching new offerings. We wanted to begin that with something technical, cool, and exciting.

The second strategy is that we research and understand the needs of the other educational institutions. We wanted to get involved with as many meaningful discussions with others that provide technical advice and consulting.

The last strategy was to develop relationships that could lead to corporate partnerships and other offerings.

We implemented the first strategy with the luncheon/workshop we hosted for over 20 participants from various colleges and universities. They were interested professors and technology providers for their institutions.

There was a strong desire to learn more about blockchain, decentralized digital identity, and digital certificates. Our presentation was very well received and we had an active group with many questions. The discussions that followed the workshop were revealing and uncovered a clear interest and demand for the type of digital certification we are using.

From our interactions we can see that providing general information on blockchain is in high demand, and once potential users learn the difference between blockchain technology as a digital ledger and crypto-currency, they can easily see the value and potential for this type of technology.

The workshop gave us some great insights into the types of clients within the education community. That combined with the networking and contacts we made with other participants was extremely valuable.

Here’s a link to the presentation.

Creating Verifiable Digital Certificates for Coding Dojo Students Using Blockchain

Here’s an article I wrote for Coding Dojo’s blog last year before we started the blockchain effort there. We are still working on launching a course for companies to train their employees and familiarize them with blockchain technology.

One thing I love about working at Coding Dojo, it is that we are 100% focused on the success of our students. From the day that Michael Choi asked me to open the Coding Dojo in Tysons Corner, Virginia, just outside of DC, I have had the pleasure of helping hundreds of people succeed.

Part of the “special sauce” that we use includes a significant amount of research and development. We focus on the coming trends and things that make people really serious about technology and learning. That is the magic in teaching others, there is so much there to explore and so many explorers.

Why Blockchain?

Getting involved in blockchain was a no-brainer, it is on the bleeding edge and hot. Giving our students insight into a  new technology and being the first to implement a bitcoin-based digital certificate in the boot camp industry is a huge win for our students and team. Anything we can do to highlight their struggle and give them credit is important to us, so we made it happen.


Coding Dojo is using Blockcerts to develop our digital certificate platform. Blockcerts is an open standard for creating, issuing, viewing, and verifying blockchain-based certificates. These digital records are registered on a blockchain, cryptographically signed, tamper-proof, and shareable. The goal is to enable a wave of innovation that gives individuals the capacity to possess and share their official records. The initial design and development were led by MIT’s Media Lab and Learning Machine. For ongoing development, this open-source project actively encourages other collaborators to get involved. We sent our instructor, Tim Chen, to MIT to work directly with the BlockCert team and the project’s founder. He came back and worked with the Tysons Corner team to develop our current process. See our students’ digital certificates here: certificate.dojo.news

Our students spend hundreds of hours of their time to complete our program. For institutions that have workshops and programs that give people skills, get in touch with us! We would love to assist you to develop a similar platform for your students. Giving people a verifiable “proof of work” is vital for them.

three.js-tutorial

My first Three.js app




Major re-design for MY NASA DATA

The MND website has gone responsive! Gone are the klunky fixed width themes, now MND looks great on mobile. It’s interesting how just by making an extremely responsive theme, the website looks great on really any platform. That’s really the whole idea.

So we had some issues with our data viz tool, we didn’t get hacked but the software we use did get hacked in another organization. For security purposes, we pulled the app and worked on it ourselves. After about 3 months of coding, and re-coding, and working with the security folks, the original developers and others, we got a clean scan and the app was back online. During that time, I also thought that the site needed a face lift, and the first theme was really a collaborative effort–I wasn’t the one who picked all the colors etc.

Anyway, the new design features captured video from the International Space Station, through their incredible HDEV (High Definition Earth Viewing) experiment. It’s comprised of 4 HD cameras that are mounted on the ISS. You can see live video there through their Livestream.

Child Development Resources

Year Developed: 2007-2012

Client: Child Development Resources, Inc.

Platform: Drupal 6

Design: Custom Drupal Theme

Notes: Migrated from static html website that was created in the late 90’s to a new modern CMS that the client still uses today.  Created a interactive helpdesk to support system administration support an with tracking tickets and statistics.  Over, three years I developed several websites to support fundraising with payment processing, and other efforts within the organization.

URL: http://www.cdr.org

Continue reading “Child Development Resources”

Ritchie Curbow Construction Company

Year Developed: 2013-2015

Client: Ritchie Curbow Construction Company

Platform: WordPress/LAMP

Design: Custom WordPress Template

Notes: Long standing client with ten years of service.  Migrated website from Microsoft Frontpage to Drupal, then on to WordPress in 2013.  Added key functions and trained personnel to manage content.  Developed custom HTML5 elements to increase usability and to create a succinct professional website.

URL: http://www.ritchiecurbow.com/

Continue reading “Ritchie Curbow Construction Company”

MY NASA DATA

Year Developed: 2010-2013

Client: NASA – Science Direcorate, Langley Research Center

Platform: WordPress

Design: Custom WordPress Theme

Notes: Since 2010, I’ve worked as the technical lead for the MY NASA DATA project, guiding the development of the website from a basic ‘homemade’ PHP CMS, to what it is today–a modern multi-faceted WordPress website that integrates a plethora of web technologies.  The website provides data visualization services for over 250 data parameters, integrated Jquery and DBA scripts, serving around 20,000 visitors per month.  Focusing on SEO, I’ve doubled the number of visitors to this website in one year.  This is currently my main project.

URL: http://www.mynasadata.larc.nasa.gov/

Continue reading “MY NASA DATA”