I'm extracting an image [jpg/png etc] server project from a larger solution.
- Images are uploaded via an API by authenticated users. The same application also serves the images.
- The file is validated: It is inspected to make sure it is the type of file it claims to be.
- The file is processed: If it is too big in spatial dimensions or in terms of file size it is processed and compressed.
- The processed image is stored in a blob store on Azure with some metadata.
I'm trying to evaluate whether it's better to slice each of these parts into a microservice, or just keep them in their own libraries to be used in a single application (but still separated from the original much larger solution).
I see two applicable benefits of microservices to my situation:
- Far more choices for swapping in a mature open source solution in place of my basic implementations for 2 and 3 in the above list, as I wouldn't be restricted to libraries for the same framework.
- I can update 2 or 3 without any downtime or worrying about any effects on the images actually being served.
Other benefits of microservices do not seem applicable. I don't expect to scale one of the parts independently. I'm the only maintainer of the solution.
Therefore I'm thinking a logical way of slicing it would be to put 2 and 2 into separate services and leave 1 and 4 as part of the same application.
Alternatively I could just use a monolithic approach with a view to migrating it if I decide I want to use something from a different framework for 2 or 3, or if the software gets so popular that avoiding any downtime at all becomes a priority. But I think it would be a useful exercise for myself so I will probably go ahead with it so long as it makes sense to do so.
I'm only getting to grips with microservices so I'm probably missing some things and possibly drawing wrong conclusions. Are there more things that I should consider?