github.com/tickoalcantara12/micro/v3@v3.0.0-20221007104245-9d75b9bcbab9/docs/blog/_posts/2019-11-18-what-is-micro.md (about) 1 --- 2 layout: post 3 title: What is Micro? It's just the future of microservices development. 4 date: 2019-11-18 09:00:00 5 --- 6 7 [**Micro**](https://github.com/tickoalcantara12/micro) is an open source project focused on simplifying microservices development. 8 It started life as [**go-micro**](https://github.com/micro/go-micro) - a Go framework for microservice development. But even 9 before then, go-micro, was a hacked up tiny library created to enable the development of a "kubernetes as a service" 10 project way back when in 2014 (see the first commit [here](https://gist.github.com/asim/a035820aec2d8cba5d73b5be12c6e707)). 11 12 **Go Micro** was an idea born out of that attempt to build kubernetes as a service, which was written as a set of microservices, 13 but ultimately was too early and scrapped not long after being built. What was left behind though was the kernel of 14 something else, a handful of packages which if you squinted hard enough looked like the basis for a framework. 15 16 # 2014: In the beginning 17 18 At the time microservices was a hot topic but tooling was sparse. People spoke of the benefits of this form 19 of architecture and development at their organisations but nobody really had the opportunity to open source their tools 20 including our team at Hailo. 21 22 I had noticed a pattern back then. A developer joined a company for a couple years, helped build a platform 23 and set of services for the business, only to leave and then have to go do it all over again at the next company, 24 with no ability to carry over the tools of the first. This really frustrated me. Especially 25 because if the right tools existed as open source software we wouldn't have to continually go through this process 26 and perhaps we'd be focusing on more interesting problems. Not to mention we'd probably save 6-9 months of our lives 27 at the very least. 28 29 This started to get me thinking about a way for many companies to rally around a single solution. I knew 30 a few things though. Every organisation had different skills, different infrastructure preferences and 31 adopting new tools was often a big hurdle. 32 33 With that in mind my idea was to start with a very lightweight yet opinionated framework for microservices development. 34 Knowing how this approach had benefited us at Hailo it felt like it might resonate with other developers too. So over 35 the next couple of months I started to work on what eventually formed the initial go-micro framework. 36 37 # 2015: Open sourcing go-micro 38 39 In early 2015 I decided to open source go-micro. I was deathly afraid of the idea considering I'd never really 40 actively publicised a project before and was worried about the 41 quality of my code but there wasn't much to lose really. Go Micro felt like something worth sharing. 42 43 As with a lot of open source projects, I posted to [Hacker News](https://news.ycombinator.com/item?id=8895794). 44 It didn't really get any comments, I can't even remember if it 45 was on the front page but what I do remember is hitting 300 stars within a few days! 46 47 I don't have a quick view of the earliest release on github but thankfully Brian Ketelsen, a good friend and strong 48 advocate of Micro forked it back then. You can see that code at [github.com/bketelsen/go-micro](https://github.com/bketelsen/go-micro) and from it it's clear there was a few packages outlining a method of microservices communication. 49 50 <center> 51 <a href="https://github.com/bketelsen/go-micro"> 52 <img src="{{ site.baseurl }}/blog/images/fork.png" style="height: auto; width: 80%; margin: 0" /> 53 </a> 54 </center> 55 56 <br> 57 Go Micro at the time included a **registry** for service discovery, **server** for RPC and protobuf based request 58 handling and a **client** to call those services by name. It even included a key-value storage package but 59 we later removed this to focus entirely on communication first (we've recently added it back in). 60 61 # Micro: A microservices toolkit 62 63 Somewhere in mid-2015 I came to the realisation that a framework was not enough. Once you'd written those services 64 there needed to be a way to access them, to serve them, and to consume them by traditional means. This is where 65 I began to think about a toolkit. 66 67 In a lot of cases we see open source tools which try to solve one problem. State, load balancing, messaging, etc but 68 in the case of microservices you really needed a holistic system that would cover all the bases in a seamless way. 69 Something that would essentially form the foundations of a platform. 70 71 In that [**Micro**](https://github.com/tickoalcantara12/micro) was born. Micro was built as a toolkit to enable the development of 72 a microservices platform. It contained a CLI, Web dashboard and API gateway along with a sidecar for non Go based 73 applications. That sidecar pattern has now evolved into something called "service mesh" but back then Netflix 74 had this thing called [Prana](https://github.com/Netflix/Prana) which is what the Micro sidecar was based on. 75 76 Micro and Go Micro were my full focus for the rest of 2015 and took a significant period of time to develop but 77 in Autumn of that year a few companies started to use it in production which gave me hope that it may thrive 78 in the years to come. 79 80 # 2016: Validating the tooling 81 82 In 2016 I decided it was time to test the waters once more. To let the world know about Micro and drum up some traction. 83 I went to Hacker News once more, only this time, things went a bit differently 84 [https://news.ycombinator.com/item?id=11327679](https://news.ycombinator.com/item?id=11327679). 85 86 Hacker News responded positively and Micro shot to the top of the front page. Here's the original blog post 87 for those interested in reading it [https://m3o.com/blog/2016/03/20/micro.html](https://m3o.com/blog/2016/03/20/micro.html). 88 89 <center> 90 <a href="https://m3o.com/blog/2016/03/20/micro.html"> 91 <img src="{{ site.baseurl }}/blog/images/micro-post.png" style="height: auto; width: 80%; margin: 0" /> 92 </a> 93 </center> 94 <br> 95 96 It was clear there was something here, that there might be a demand for such a set of tools, and I wanted to pursue 97 it full time. Back then I got the opportunity to work with [Sixt](sixt.com) through a corporate sponsorship. This 98 allowed me to work full time on Micro and use them as a feedback loop for it's features and development. 99 100 I'm incredibly grateful to Sixt for that opportunity and what it allowed Micro to become. Without them it's unclear 101 if it would have made it to where it is today. The sponsorship let me continue to iterate on the tools 102 as a solo effort for a few years. 3 years in fact. 103 104 And in that time, Micro grew, from a small open source project, to one with a community of 1k+ members, thousands 105 of GitHub stars, but more importantly use in the real world in production. 106 107 # 2019: The evolution of Micro 108 109 Fast forward to the present. Earlier this year I got the opportunity to take Micro from a solo bootstrapped open source 110 project and turn it into a venture funded company with the potential to change microservices development on a much larger scale. 111 112 We're not ready to reveal all the details just yet but what I will say is it's enabled us to start executing on what many of 113 us developers long for. The ability to build, share and collaborate on services in the cloud and beyond, without the 114 hassle of managing infrastructure. 115 116 ## Progress 117 118 The progress we've made as a small team in 6 months is pretty astounding. Having committed more times in that period than I had 119 done in the entire 4 years of working on Micro alone. 120 121 <center> 122 <img src="{{ site.baseurl }}/blog/images/commits.png" style="height: auto; width: 80%; margin: 0" /> 123 </center> 124 <br> 125 126 And as you can see here, if GitHub stars are a measure of anything, it reflects in our awareness, popularity and usage. 127 We recently passed the 10k star mark on the [go-micro](https://github.com/micro/go-micro) framework and it feels as though we're 128 just getting started with what's possible. 129 130 <center> 131 <img src="{{ site.baseurl }}/blog/images/10k-stars.png" style="height: auto; width: 80%; margin: 0" /> 132 </center> 133 134 You can probably tell exactly where we went from 1 person to 2. Based on this progress I'm fairly confident in my previous assumption 135 that [go-micro](https://github.com/micro/go-micro) will go on to become the most dominant Go framework and likely surpass Spring 136 adoption globally within the next decade. 137 138 ## Micro as a Runtime 139 140 [Micro](https://github.com/tickoalcantara12/micro) has also progressed significantly as we've moved on from just a sparse set of tools to 141 something we're now calling **a microservice runtime environment**. 142 143 The idea behind this is to reorient the toolkit to be a full fledged 144 environment for building microservices. One which provides a programmable abstraction layer for the underlying infrastructure built 145 as microservices themselves. 146 147 This image is a little old but you'll get the idea. By abstracting away the underlying infrastructure and creating it as a set of 148 services that all look the same, run the same, feel the same we end up with a programmable runtime that acts as a foundation for 149 all development, whether it be local, in docker or on kubernetes in the cloud. 150 151 <center> 152 <img src="{{ site.baseurl }}/blog/images/runtime.png" style="height: auto; width: 80%; margin: 0" /> 153 </center> 154 <br> 155 We also redefine the boundaries between development and operations in a way that allows each side to focus on their roles without 156 the cognitive load of understanding the other side. In the developers case, we no longer have to reason about infrastructure just code. 157 158 The feature set is fairly extensive and growing. 159 160 <center> 161 <img src="{{ site.baseurl }}/blog/images/feature-set.png" style="height: auto; width: 80%; margin: 0" /> 162 </center> 163 <br> 164 165 166 ## Micro as a Platform 167 168 Even still while Micro as a runtime and having a Go framework for development solves a lot of problems, this isn't enough. 169 So Micro continues to evolve. It's no longer enough to just simply provide the tools for building microservices, we also need to 170 provide the environment in which to share and consume them. We at Micro are now building a **global shared microservices platform** for 171 developers by developers. 172 173 What does that really mean? Well imagine the platform you're given to work on when you join a company or all of the things you 174 have to do from an infrastructure perspective just to get up and running. We're going to provide this as a service to everyone. 175 176 A fully managed serverless platform for microservices development (that's a mouthful). 177 178 ## Why? 179 180 I've become frustrated with the status quo and the way in which developers are now forced to reason about infrastructure 181 and cloud-native complexity. The barrier to entry in just getting started is too high. Building services in the cloud 182 should be getting vastly easier, not harder. 183 184 Just take a look at the cloud-native landscape... 185 186 <center> 187 <a href="https://landscape.cncf.io"> 188 <img src="{{ site.baseurl }}/blog/images/cncf.png" style="height: auto; width: 80%; margin: 0" /> 189 </a> 190 </center> 191 <br> 192 193 Having to reason about this as a developer is horrible. All I want to do is write and ship software but now 194 I'm expected to walk some arduous path of containers, container orchestration, docker, kubernetes, service mesh, etc, etc. 195 Why can't I just write code and run it? 196 197 ## Microservices 198 199 You're probably thinking. Ok that's great, I buy into this vision. Simpler app development without managing infrastructure 200 but what's microservices got to do with this? 201 202 We firmly believe that all forms of development at scale inevitably end up as distributed systems and the pattern 203 for that development is now largely known as **microservices**. 204 205 Microservices unlock a huge productivity boost in the companies that adopt them and the velocity of their 206 development is such that with every new service added their is compounding value in the system built. 207 208 I also believe that developers need a platform that enables this form of development for them to thrive. One in which 209 they do not have to reason about infrastructure and where they are provided the tools that empower them to build software at 210 scale without having to worry about operating large scale systems. 211 212 One highly controversial example I want to share is from the startup bank [Monzo](https://monzo.com). 213 214 Monzo opted to pursue a microservices architecture from day 1. Knowing there were initial operational tradeoffs to this 215 approach but with an insight from their time at Hailo, they knew if the company succeeded on the product side they'd 216 need a scalable platform to help them grow and move fast. 217 218 This led to the creation of a platform that is now host to 1500 services. This might sound hard to reason about, but 219 a shared platform where every developer has the ability to consume and reuse existing services is a fundamentally powerful thing. 220 221 Not only that, but when the platform is managed for you, developers can get back to focusing on what's really important. The 222 product and the business. 223 224 <center> 225 <blockquote class="twitter-tweet"><p lang="en" dir="ltr">1500 microservices at <a href="https://twitter.com/monzo?ref_src=twsrc%5Etfw">@monzo</a>; every line is an enforced network rule allowing traffic <a href="https://t.co/2r2y9f6LYO">pic.twitter.com/2r2y9f6LYO</a></p>— Jack Kleeman (@JackKleeman) <a href="https://twitter.com/JackKleeman/status/1190354757308862468?ref_src=twsrc%5Etfw">November 1, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 226 </center> 227 <br> 228 229 # Our solution 230 231 This form of development has largely been siloed at large tech cos capable of building such systems. But what 232 if this was available to every developer as a shared system outside of those large orgs. What if we were able to 233 collaborate across org and across teams. What would the velocity of our development as an industry look like as a whole? 234 235 I would argue that all technology would advance faster than it ever has done in the decades that have come before us. 236 We would finally capture the true potential of the internet. 237 238 GitHub was a prime example of this collaboration and innovation in open source, massively reducing the pain of hosting 239 source code and creating an environment for reusing code. However there's just one but, this source code largely sits 240 at rest on their platform. 241 242 What if instead of just sharing code and running it in silos, we shared an environment for software development, one 243 in which we could collaborate on services, reusing each others running applications where necessary and focusing 244 on solving higher order problems. 245 246 It would have it's own quirks and challenges but the opportunities such a platform presents is immense. And something 247 we want to explore at [Micro](https://m3o.com), the company. 248 249 So that's what we're setting out to do really. To build a global shared services platform for developers by developers. 250 Where the pains of cloud, kubernetes and everything else will no longer be felt. An environment 251 in which we can build, share and collaborate on micro services based on the [**go-micro**](https://github.com/micro/go-micro) framework. 252 253 # Closing 254 255 The future of Micro is one which involves rapidly reducing the friction for developers in harnessing the power of 256 the cloud and to empower them to build microservices from anywhere, with anyone. 257 258 If this sounds interesting to you, come join our community on [**slack**](https://m3o.com/slack), kick the tyres 259 on the [**go-micro**](https://github.com/micro/go-micro) framework or come help us make it a reality. We're hiring, 260 just drop us an email at <a href="mailto:hello@micro.mu"><b>hello@micro.mu</b></a>. 261 262 Cheers 263 <br> 264 Asim 265 266 <h6><a href="https://m3o.com">Micro</a></h6>