1. 微服务架构特点

    一个程序项目的逻辑分解为明确定义职责范围的细粒度组件(即微服务项目),这些组件互相协实现一整个项目的功能.

    每个组件都有一个小小的职责领域,并且完全独立部署.微服务项目应该对业务领域的单个部分负责.此外,一个微服务项目可以跨多个应用程序服用.

    微服务项目之间基于一些基本的原则,并采用HTTP(一般符合rest风格)和JSON(大部分使用这种格式,也有其他格式比如二进制)这样的轻量级通讯协议,在服务消费者和服务生产者之间进行数据交换.

    服务的底层采用什么技术实现没有任何影响,只要其采用的通讯协议(通常是JSON)进行通讯.这样每个微服务项目可以使用多种编程语言和技术进行架构.

    微服务利用其小,独立,和分布式的性质.使组织拥有明确责任领域的小型开发团队.每个成员只负责他们在做的服务.

  2.为什么要采用微服务架构

    项目复杂度上升----由于大型项目不断迭代更新,导致项目结构复杂,引入新功能困难. 通过互联网与外部服务和数据库进行交互困难.

    客户期待更快速的交付----客户不再希望等待软件包的下一次年度发布或整体版本更新.相反,他们期待软件产品中的功能被拆分,以便在几周(甚至几天)内即可快速发布新功能,而无需等待整个产品发布.

    性能和伸缩性----预测应用程序将处理多少事务量以及何时触发该事物量非常困难.应用程序需要跨多个服务器进行扩大,然后在事物量高峰后进行收缩.

    客户期待他们的应用程序可用----应用程序不能因为其中某个部分的故障或问题导致整个应用程序崩溃

    

    微服务架构特点:

      灵活性----可以将解耦的服务进行组合和重新安排,一遍快速交付新的功能. 微服务项目越小,更改代码越方便.测试部署代码所需的时间越短.

      有弹性----故障可以被限制在应用程序的一小部分之中,并在整个应用遇到中断之前被控制.这也使应用程序在出现不可恢复的错误的情况下能够方便的降级.

      可伸缩性----微服务项目之间解耦可以轻松多个服务器进行水平分布,从而可以 适当地对功能/性能进行伸缩.

    小型的,简单的和解耦的服务=可伸缩的,有弹性的和灵活的应用程序.

  3.微服务架构的要点

    a.位置透明  在微服务应用程序中,多个服务实例可以快速启动和关闭时,如何管理服务调用的物理细节?

    b.大小适当  如何确保正确地划分微服务的大小,以避免微服务承担太多的职责?适当地的大小允许快速更改应用程序,并降低应用程序中断的总体风险.

    c.有弹性   如何通过绕过失败的服务,确保采用"快速失败"的方法来保护微服务消费者和应用程序的整体完整性?

    d.可重复   如何确保提供的每个新实例与生产环境中的其他所有服务实例具有相同的配置和代码库?

    e.可伸缩   如何进行异步处理和事件来最小化服务之间的直接依赖关系,并确保可以优雅地扩展微服务?

 

    《spring boot 实战》书中涵盖一下6类微服务模式(模式可以一起使用):

      核心微服务开发模式

      微服务路由模式

      微服务客户端弹性模式

      微服务安全模式

      微服务日志记录和跟踪模式

      微服务构建和部署模式