微服务架构介绍与分类「建议收藏」

微服务架构介绍与分类「建议收藏」微服务架构介绍与分类

大家好,又见面了,我是你们的朋友全栈君。

微服务是面向服务架构(SOA)的变体,使用各种相互依赖的模块来标识它们之间的相互关系,并可衡量每个模块之间的松耦合程度。

基于微服务的架构主要关注:

自然地强制执行模块化结构。
适用于持续交付软件开发过程。 
对应用程序的一小部分进行更改只需要重建和重新部署一个或少量服务
坚持诸如此类的原则 
细粒度接口(可独立部署的服务)
业务驱动的开发(例如域驱动设计)
云应用程序架构
多语言编程和持久性
轻量级容器部署
分散的持续交付
DevOps提供全面的服务监控 

将单个App开发为一套小型服务,每个小型服务都在自己的流程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务功能构建,可通过全自动部署机制独立部署。这些服务至少集中管理,可以用不同的编程语言编写,并使用不同的数据存储技术。

微服务的优点包括

    新技术和流程适应变得更加容易。您可以使用我们创建的新微服务来尝试新技术。
    更快的发布周期。
    可扩展到云。 

应用和团队的两个方面的功能分解是构建成功的微服务架构的关键。这样才能实现松耦合(REST接口)和高内聚(多个服务可以相互组合以定义更高级别的服务或应用程序)。功能分解提供了敏捷性,灵活性,可伸缩性和其他功能,但业务目标仍然是创建应用程序。

  • 聚合器微服务设计模式

第一种,也许是最常见的是聚合器微服务设计模式。在最简单的形式中,聚合器可能就是一个简单的网页,它调用多个服务来实现应用程序所需的功能。由于使用轻量级REST机制公开了每个服务(服务A,服务B和服务C),因此网页可以检索数据并相应地处理/显示数据。

  • 代理微服务设计模式

代理微服务设计模式是聚合器的变体。在这种情况下,不需要在客户端上进行聚合,但可以根据业务需要调用不同的微服务。

  • 链式微服务设计模式

链式微服务设计模式对请求产生单个合并响应。在这种情况下,来自客户端的请求由服务A接收,服务A然后与服务B通信,服务B又可以与服务C通信。所有服务可能使用同步HTTP请求/响应消息传递。

  • 共享数据微服务设计模式

微服务的设计原则之一是自治。这意味着该服务是全栈并且可以控制所有组件 – UI,中间件,持久性,事务。这允许服务是多语言,并使用正确的工具来完成正确的工作。例如,如果可以使用NoSQL数据存储,则更合适,在SQL数据库中会干扰数据独立性。

在这种设计模式中,一些在链条中的微服务可能共享缓存和数据库存储。这只有在两个服务之间存在强耦合时才有意义。有些人可能认为这是一种反模式,但在某些情况下可能需要业务需求来遵循这一点。对于基于微服务设计的绿地应用来说,这肯定是一种反模式。

  • 异步消息微服务设计模式

虽然REST设计模式非常普遍,并且很好理解,但它具有同步的限制,因此阻塞。可以实现异步,但这是以特定于应用程序的方式完成的。由于这一点,一些微服务架构可能会选择使用消息队列而不是REST请求/响应。

Spring Boot

Spring Boot是一个旨在简化新服务创建的框架。对于最简单的用例,所需的库已经捆绑在所谓的Spring starter配件组合和版本中。我们不必将应用程序部署到应用服务器中,而是独立运行我们的应用程序或在Docker容器中运行,因为应用已经包含服务器。Spring Boot可用于设置基于REST的微服务。

Spring Boot针对大多数用例简化了构建基于Java的微服务。与Dropwizard等框架不同,它更易于使用,并提供更丰富的功能集。Spring Boot提供了大量额外的库和集成,如Ribbon,Zuul,Hystrix,与MongoDB,Redis,GemFire,Elasticsearch,Cassandra或Hazelcast等数据库的集成。

借助Maven和Gradle,Java开发人员可以支持功能强大且受到广泛支持的构建系统,这些构建系统比Play Framework等框架的专用构建系统更常见,更易于集成到现有结构中。与传统的Web应用程序相比,Spring Boot很精简。对于大多数项目,向项目添加依赖项足以从头开始获得良好项目起步,无需调整默认配置。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106585.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java static(三) – 静态代码块

    Java static(三) – 静态代码块静态代码块static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内JVM加载类时会执行这些静态代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们每个静态代码块只会被执行一次实例说明//父类publicclassParentStatic{privatestaticStringpstr=”父类静态变量”;static{System.o.

    2022年7月16日
    17
  • oracle触发器示例,Oracle触发器简单示例

    oracle触发器示例,Oracle触发器简单示例首先创建两张测试表:CREATETABLEtest(t_idNUMBER(4),t_nameVARCHAR2(20),t_ageNUMBER(2),t_sexCHAR);CREATETABLEtest_log(caozuoVARCHAR2(20),tdatedate);然后创建触发器并且进行测试:CREATEORREPLACETRIGGERtest_t…

    2022年7月11日
    20
  • cocos2d-x lua 内存回收

    cocos2d-x lua 内存回收

    2021年12月8日
    43
  • ai创意插件合集Astute Graphics

    ai创意插件合集Astute GraphicsAstutegraphics是一个AdobeIllustrator的创意插件合集,包含多种常见辅助功能,可以帮你提升平面与矢量设计的效率,AstuteGraphics最新版本也与时俱进的更新了支持CC2017的全系列插件,包含ColliderScribe,DynamicSketch,InkQuest,InkScribe,MirrorMe,Phantasm,Rasterino,VectorScribe,WidthScribe几大插件,插件支持Illustratorcs4/cs5/

    2022年5月30日
    52
  • 猴子吃桃

    猴子吃桃猴子吃桃

    2022年4月24日
    47
  • 在TIM客户端删除被管理员解散的群组会话

    在TIM客户端删除被管理员解散的群组会话编者:李国帅qq:9611153微信lgs9611153时间:2020.6.1背景原因:TIM客户端会保留曾经参与过的会话,即便是会话的对话方,参与的群组已经不存在,会话和消息也不会移除,除非从本地删除。如果不想保留,就需要对TIM的逻辑进行处理。对于群组,如果群组被解散,可以在收到解散通知时,把群组会话移除。如果用户不在线时群组被解散,该如何做呢?想到并验证确实可用的方法:查询当前用户所在群组,删除那些过期的本地群组。背景问题流程:所需资源:Andr.

    2022年5月19日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号