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>&mdash; 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>