Mooncake Image Storage
An image storage system for Microsoft China's Azure cloud, Mooncake
Role
back-end software engineer intern
Manager
Thomas Shao
Tools
C#, Visual Studio, Azure
Timeline
350 hrs. June-August 2016
Results
Working demo presentation
The summer after my freshmen year, I interned as a software engineer at Microsoft as part of the open source team in the China Cloud Innovation Center. With three other colleagues, I helped design the storage component of an image processing service.
When users upload their photos to the Azure Image Processer, they need information about each photo (name, folder, date uploaded, meta-data). My job was to search for where the information was collected in the backend, and find an optimal way to store and display the information for users.
Implementing the storage component of an image processing service challenged me to make sense of the existing source code and build on top of it. I spent a lot of time weighing different approaches and figuring out which approach would be the most efficient in terms of query time and bandwidth.
My internship took place over the course of two months, and ended with a demo to the rest of the team.
Final Product
Azure cloud logo
Hello, Azure User!
Our goal for this image processing project was to provide an efficient solution for users to store and analyze their images. My individual goal was to gather useful information for the images and display them in a table.
Features
Buckets
Sort and organize photos by putting them into different buckets. Each bucket has an owner and a unique name.
Meter Data
Monitor api meter and bandwidth meter data to track the data consumption of all the devices on a user's network and notify them when they have approached the threshold.
Tables
Store valuable information (name, size, type, meta-data) of each image in a table to help the user organize their images.
Implementation: Optimizations
Microsoft image processing service
Credit: Microsoft
My role in the project was to find important image information within the existing source code and store it in a table for users to view. To do this, I initially queried the database each time the user uploaded a photo or sent a request to the table, and then inserted the data into the table and sent it back to the front end. After testing my code, however, I realized that the process of querying every time the user uploaded a photo or viewed the table was inefficient. With the help of my mentor, Liz Zhang, I was able to implement a cache that stored images that have already been uploaded for 90 days. If a user uploaded a new photo, the database will be queried, and the information will be saved in a cache to prevent subsequent queries. Although this approach required more memory space, it drastically optimized my functions.
Microsoft Shanghai Interns 2016
Credit: Microsoft
Next Steps
If I had another month at Microsoft, I would address the following issues first:
Competition
Alibaba's cloud also has an image processing feature. How can we convince our users to choose Mooncake's?
Convenience
How can I help make the process of retrieving image information easier (e.g. through search functions and filers)?
Reflections
The most challenging part of the internship was understanding the source code for the image processing service and trying to learn as much as I could about the project while building upon it. I was exposed to C# and new IDEs such as Visual Studio, and also learned a bit about market research and the decisions that go into designing a product.
Big thanks to my amazing manager Thomas Shao and mentor Liz Zhang for their constant encouragement and guidance.