Software Engineering Intern

CDK Global - Portland

Summary

Over the summer of 2016, I worked in software engineering at CDK Global in Portland, OR. On the Service Edge team, I worked alongside with the team architect as an Application Architect Intern, formally in their department of Architecture and Development.

Due to the existing monolithic structure that was being utilized on the Service Edge team, many services were a hassle to develop and maintain. As a result, the company wanted to adopt microservices due to their strengths in modularity, fault resistence, and continuous delivery. Thus, my task was to research the viability of Microsoft's Service Fabric as a distributed systems platform for microservices given the current CDK Enterprise Platform.

More specifically, my project focused on two main aspects of the CDK Enterprise: Application Lifecycle Management (ALM) Integration and External Centralized Configuration.

In ALM Integration, I had to ensure Service Fabric microservices were compatible with Atlassian's Bamboo, the continuous integration and deployment tool used by CDK. Through arduous research, coding, and scripting, I was able to firstly create and configure a remote node cluster using five virtual machines. Afterwards, I devised a series of Bamboo tasks that built, packaged, deployed, and upgraded Service Fabric applications on the remote cluster. This Bamboo build plan was also connected to a BitBucket repository such that every time changes are committed, the newly updated application is sent through the ALM pipeline.

In External Centralized Configuration, my responsibility was to develop a method to store and retrieve config files for the Service Fabric applications. I accomplished this using Hashicorp's Consul. I took advantage of Consul's Key/Value feature to use as a method for centralized configuration. Specific applications acted as keys while their configurations were the stored values. Further, using Consul's RESTful API, I created several features for the Service Fabric applications including the function to pull config files on application startup, a watch function to monitor configuration changes of a specific application, an update function to update applications to new configuration changes, and finally a low frequency scanner to ensure infrequent changes not caught by the watch function are accounted for.

Challenges

A big challenge during my research was a need to develop a comprehensive understanding of the many components my project required. Having only worked extensively in Java and Python, I was thrown in a completely foreign environment when I first started. Even so, I had to quickly learn about a myriad of technologies including Visual Studio, PowerShell, Microsoft Service Fabric, Atlassian Bamboo, BitBucket, and Consul. While working, I learned that no one had ever tried to connect Service Fabric with software from the CDK stack and thus, was immediately met with the challenges of research, deciphering high-leveled documentation and sifting through mountains of articles and forums on Google and StackOverflow. In trying to perform research I found that Service Fabric was a fairly new product and as a result, there was a severe lack in online resources. Additionally, due to a recent shift in CDK's technology stack, very few employees had a deep understanding of Bamboo and Consul. Ultimately, I was forced to figure it out on my own. Over the course of 10 weeks, hours of conference calls, and hundreds of trials I was finally able to complete my task.