zoukankan      html  css  js  c++  java
  • Microservice Trade-Offs

    https://martinfowler.com/articles/microservice-trade-offs.html

    Many development teams have found the microservices architectural style to be a superior approach to a monolithic architecture. But other teams have found them to be a productivity-sapping burden. Like any architectural style, microservices bring costs and benefits. To make a sensible choice you have to understand these and apply them to your specific context.   

     

    Microservices provide benefits…

    • Strong Module Boundaries: Microservices reinforce modular structure, which is particularly important for larger teams.
    • Independent Deployment: Simple services are easier to deploy, and since they are autonomous, are less likely to cause system failures when they go wrong.
    • Technology Diversity: With microservices you can mix multiple languages, development frameworks and data-storage technologies.

    …but come with costs

    • Distribution: Distributed systems are harder to program, since remote calls are slow and are always at risk of failure.
    • Eventual Consistency: Maintaining strong consistency is extremely difficult for a distributed system, which means everyone has to manage eventual consistency.
    • Operational Complexity: You need a mature operations team to manage lots of services, which are being redeployed regularly.

    Eventual Consistency (Con)

    I'm sure you know websites that need a little patience. You make an update to something, it refreshes your screen and the update is missing. You wait a minute or two, hit refresh, and there it is.

    This is a very irritating usability problem, and is almost certainly due to the perils危险 of eventual consistency. Your update was received by the pink node, but your get request was handled by the green node. Until the green node gets its update from pink, you're stuck in an inconsistency window. Eventually it will be consistent, but until then you're wondering if something has gone wrong.

    Inconsistencies like this are irritating气人的 enough, but they can be much more serious. Business logic can end up making decisions on inconsistent information, when this happens it can be extremely hard to diagnose what went wrong because any investigation will occur long after the inconsistency window has closed.

    Microservices introduce eventual consistency issues because of their laudable值得赞赏的 insistence on decentralized data management. With a monolith庞然大物, you can update a bunch of things together in a single transaction. Microservices require multiple resources to update, and distributed transactions are frowned on (for good reason)不允许. So now, developers need to be aware of consistency issues, and figure out how to detect when things are out of sync before doing anything the code will regret.

    The monolithic world isn't free from these problems. As systems grow, there's more of a need to use caching to improve performance, and cache invalidation is the other Hard Problem. Most applications need offline locks to avoid long-lived database transactions. External systems need updates that cannot be coordinated with a transaction manager. Business processes are often more tolerant容忍的 of inconsistencies than you think, because businesses often prize availability more (business processes have long had an instinctive understanding of the CAP theorem).

    So like with other distributed issues, monoliths don't entirely avoid inconsistency problems, but they do suffer from them much less, particularly when they are smaller.

  • 相关阅读:
    二级域名共享主站cookies登陆,整合asp
    AS3事件类型 (as3开发技术大全读书笔记)
    如何通过AS3加载外部SWF文件,调用外部文件文档类的方法?
    C#导出Excel总结
    2010年2月编程语言排行榜,ObjectiveC势头强劲
    Flex组件开发总结(aierong原创技术随笔)
    积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引
    C#导出Excel的函数(可根据实际需要进行相应修改)
    基于FMS的在线录制例子
    处理外部信息(xml,html,js,shareObject)
  • 原文地址:https://www.cnblogs.com/chucklu/p/13050193.html
Copyright © 2011-2022 走看看