Open APIs

 View Only
  • 1.  Microservices and why you should care

    TM Forum Member
    Posted Mar 14, 2017 08:52
    Edited by Community Manager Apr 07, 2017 13:31

    I know there is a great discussion around microservices right here in the API community and after reading this article, I wanted to get your opinion and continue the discussion.

    Microservices is a huge shift in how companies build, deliver, and use software.  Large applications are broken down into small, loosely coupled, compassable pieces that are autonomous.

    Google, Amazon, and Facebook have been running microservices for over a decade.  But, the right building blocks for mass adoption are now in place.  Still, to start reaping the benefits of a mircroservices architecture it requires a true business transformation, encompassing IT, processes, people and culture.

    I’m interested to hear, what do you see as the operational and organizational challenges of microservices?



    ------------------------------
    Melanie DiGeorge
    Community Manager
    TM Forum
    ------------------------------


  • 2.  RE: Microservices and why you should care

    Posted Mar 15, 2017 05:55

    I would say the challenges are quite extensive. I would try to split them into a number of areas:

     

    1.       Order and timeline of the transition.

    To "explode" a monolith into chunks to make it possible for a transition into micro-services is not trivial. The number of dependencies and dependency-chains in a monolith can be extensive and chunking it can sometimes prove to be near impossible. Making it even worse, customers are using that monolith and the change requests and need for bug-fixes will not stop just because you decide to make an architectural change. Simply put, don't underestimate the timeline. Making this change for a large monolith is time-consuming and most likely requires several major releases.

     

    2.       Shift from synchronous to asynchronous flows

    Monoliths often contain quite a large set of synchronous or pseudo-synchronous flows, which people tend to look at as near-real-time flows. To move into an asynchronous micro-services architecture can be daunting in the matter of just convincing staff of the effects of the change (or lack there-of). Asynchronous calls can be faster, handle larger loads and produce more reliable results than synchronous, but this has to be truly believed by the people owning the products, developing them and supporting them. Simply put, educating your staff is key.

     

    3.       Shift from transactions to atomic events.

    Failures must be handled differently in a micro-services architecture compared to a monolith. Fail fast is often not possible or preferable. Eliminating failures to lots of 9s is also too costly. Instead you have to embrace failures and make the services robust enough to handle them. You correct failures when needed after they have already taken place by creating new events cancelling out the effect of the failure instead of never writing data. This is a major shift in state of mind and focus in software development. Simply put, again, educating your staff is key.

     

    4.       Orchestration of complex flows

    Long and complex event-chains can be very hard to properly manage in a micro-services architecture. The often proposed solution to this challenge is to build specialized orchestrator micro-services that has one job only and that is to manage long and complex event-chains. This might sound simple enough and straight-forward, but to properly identify the correct level of orchestration and build for re-usability can be very complex. Simply put, let the orchestration part of the architectural work take it's time. Try, fail and redo.

     

    5.       Choosing the right tools and adapting the organisation to a new and larger toolbox

    This might be the hardest part of all. You most likely have specialists in your organisation that might not fit very well with the new architecture. You'll also have staff that simply don't want to adapt. This means you have to brace yourself for a change in staff. Loosing the wrong person at the wrong time might put heavy strain on the support of the legacy monolith, a risk that shouldn't be underestimated, since some people might react strongly being a part of a team developing/supporting a product-line that has a clear EoL and no natural fit in the new product line. Tools are also numerous and a lot of them are new and fairly un-tested so choosing the correct ones for long term is hard. Simply put, don't over-commit to new technologies but still try to keep the size of your toolbox manageable and brace yourself for rather substantial change in staff.

     

    This list is in no way complete, this is just my experiences from working with for and with transitions into micro-services architectures. But in general I would suggest is to keep things simple (as always):

     

    ·         Pick the low-hanging fruit of the code-base first. Preferably parts with minor dependencies, but if possible don't pick a trivial or uninteresting part. Convincing people with the release/result of your new development is paramount. Seeing is believing.

    ·         Invest into a dedicated team of people that are excited about micro-services to learn and use the new tools and the new mind-set. So make sure you secure the money needed.

    ·         Start with proof-of-concepts and then if possible internal beta-releases. Allow for some headroom in the timelines, until you have a proper idea of the time needed for starting a new team and get a service into production.

    ·         Make sure that you have strong supporters that conceptually really understand the impact of the transition high up in the organisation.

    ·         Don't over-commit in technologies. One of the beauties of micro-services is that you can avoid over-commit in a way impossible with a monolith if planned correctly.

    ·         Don't underestimate the complexity in orchestrating long complex event chains. Try to stay out of the worst ones until your teams has some mileage.

    ·         Once the transition has proper traction, brace yourself for possibly major changes in staff.

     

    /Lars






  • 3.  RE: Microservices and why you should care

    Posted Mar 15, 2017 05:56
    In my opinion the current view of the end game is microservices.

    This does not imply I think we will get to 100% microservicesth, just that as we convert more of our BSS/OSS to microservices we will be able to track and match the equivalent innovation of the network as that moves to NFV and SDN.  Like the NFV transformation, the BSS/OSS microservice is unlikely to cover the entire landscape and we will live with hybrid realities for a while.

    One of the more interesting outcomes of this shift is the rising importance of the Integration Framework - and the attending DSRA and DPRA vs the TAM, which assumed as a starting point that applications are the basis of solutions.

    So we are in for an interesting ride, where these ideas will compete and co-exist for the next generration of technology.

    My 2 cents.

    ------------------------------
    Hugo Vaughan
    IBM Corporation
    ------------------------------



  • 4.  RE: Microservices and why you should care

    Posted Mar 15, 2017 07:27
    Hi Melanie,

    Full disclaimer: I am a consultant CTO for a relatively small Fintech startup where everyone works fully remotely across different timezones, but I have worked in (much) larger organisations. 

    Microservices are the (current) pinnacle of agile software engineering. They are supposed to be small, focused on doing one thing and one thing only, but doing it extremely well.

    In my opinion, to be able to deliver microservices efficiently, you need to make your organisation and operations as agile as the service itself. I don't see how a waterfall project management style, with large teams of developers, could be efficient in that scenario. I have found that the opposite was pretty much required.

    Project Management Style:

    Something Agile based, but done the right way. I have seen too many times teams saying that they are following an agile process and yet the senior management or marketing department are imposing deadlines without negotiation of features, or requesting Gantt Charts before starting the project. Agile is not time based, it's feature based.

    I have experimented and found these two approaches to be equally viable:

    An Agile Scrum style of project management, with real story pointing and a real buy-in from the senior management. The Product Owner and stakeholders defining the what, the development team investigating and deciding the how leaving the when to be the most flexible data point.  Sprint lengths of 2 weeks to a month maximum. If that's not long enough to produce the microservice (in its MVP version), the microservice is probably too big and should be split.
    A Kanban approach, again focusing on the what and the how, with the when being set by the priority in the backlog. The Kanban approach makes it a bit harder to draw a line on when a microservice is "too big", but is as effective and allows more flexibility for the changes coming from the business. 

    Team Organisation:

    One thing that I have found, is that the larger the teams, the least efficient they become. 3 to 4 developers per "strike team" is the sweet spot in my opinion. With one or 2 seniors per team. More than that and the team efficiency drops, you need more meetings to keep everyone in the loop, and you have more "opinionated discussions" about how to implement a feature.

    It's also down to the fact that there is only a maximum number of people working on the same bit of code (or even the same branch) before it becomes an organisational nightmare and "merges of doom" with conflicts everywhere.

    Code Organisation:

    Beyond having code repositories like Git (yay!) or SVN (boo!) and having a set of common libraries: A template for the "base service" to integrate with the existing (microservice) architecture. That could be a set of templates, because the beauty of microservices is that you can really chose the best tools or languages for the task.
    Want something very lean, very fast, secure, for the web? Do it in Golang.
    Want something with a bit more features or support (or even broader knowledge), go with Java Spring Boot.
    AI, Machine Learning, Deep Learning? An H2O cluster, Python, or the tensorflow library will work a charm.
    Worried about the pushes to production? Bamboo or Jenkins can pack your code nicely into whatever is convenient for you (or a docker file) and publish it accordingly. CI/CD is a breeze
    Code coverage: Since the services are meant to be small, they are much easier to test. 95% coverage is my minimum acceptable, split between unit, integration and acceptance tests. If it has some front ent features, throw in a bit of Selenium for good measure and you are all set.

    Conclusion:

    Starting from greenfield projects, in a startup, what I am describing is very easy to implement. In a larger structure, it is not impossible, it needs buy in from the senior management, the stakeholders and the developers. But once it is in place (and there are growing pains, there isn't a magic cookie cutter), the time to market for each new feature will be much faster than what you could have experienced in the past.

    Because the microservices themselves are so small, and using so few resources to produce, they are also ok to fail and learn from. It's easier to iterate over a feature implementation, using different approaches, than build a semi-monolith that doesn't really work and try and patch it as much as possible, often throwing more developers at it. Instead, look at your MVP, if there are issues that are not easy fixes, tear it apart and try again in a new language, different framework, or variation of features. It's not free, but it's much cheaper than the alternative.

    The main challenge is the change management and the period of transition. After that you will be living in a world of much less bugs, and much faster software delivery. 

    If you have any specific questions or want more details feel free to reach out.

    ------------------------------
    Julien Frisquet
    Chief Technical Officer
    ------------------------------



  • 5.  RE: Microservices and why you should care

    Posted Mar 15, 2017 17:25
    As a simple every day user of digital technologies and consummate technology consumer cum thinker, will be interested to know real eCommerce business use cases for the usage of benchmarks provided by Digital Maturity Model and tools used to undertake such activity/ies, to have the clarity of real value from a business technologist and enlightened user perspective?

    ------------------------------
    Ranbir Parmar
    Ranbir Singh Parmar
    ------------------------------



  • 6.  RE: Microservices and why you should care

    TM Forum Member
    Posted Apr 06, 2017 18:07
    Microservices are becoming defacto. I feel it certainly helps achieving Domain Driven Design.

    I also agree with the fact of its linkage with Agile Methodology and how effectively it is complimenting the process. One of the challenge I see is always segregation of these services and inclusion of common services.

    Versioning becomes a challenge once every Microservices starts acting as an independent deployable unit which sometimes have to include common services; that becomes redundant. There are multiple ways to tackle this problem but definitely one of the challenge. Thanks.


    ------------------------------
    Pash | PMP®, CSM®, ITIL®, SFC™
    Infosys Ltd.
    ------------------------------