zoukankan      html  css  js  c++  java
  • Spring Cloud Alibaba (一)组件与架构

    微服务要解决的8大核心问题

    微服务面临的问题

    1. 如何发现新服务节点以及检查服务节点的状态?
    2. 如何发现服务及负载均衡如何实现?
    3. 服务间如何进行消息通信?
    4. 如何对使用者暴露服务 API?
    5. 如何集中管理众多服务节点的配置文件?
    6. 如何收集服务节点的日志并统一管理?
    7. 如何实现服务间调用链路追踪?
    8. 如何对系统进行链路保护,避免微服务雪崩?

    行业解决方案

    可以发现,上述这些问题并不是针对某种语言或某种技术的,任何软件厂商要构建微服务架构就必须面对这些问题,要么独立开发要么将已有多种技术整合形成整体解决方案。好在经过多年沉淀,业内已经有了标准答案,下图清晰的说明微服务架构需要的标准组件

    微服务各大组件的简介及架构图

    WhcJM9.png

    注册中心(Service Registry)

    注册中心是微服务架构最核心的组件。它起到新服务节点的注册与状态维护的作用,通过注册中心解决了上述问题 1

    微服务节点在启动时会将自身的服务名称、IP、端口等信息在注册中心中进行登记,注册中心会定时检查该节点的运行状态。注册中心通常会采用心跳机制最大程度保证其持有的服务节点列表都是可用的。
    Why1oT.png

    负载均衡(Load Balance)

    负载均衡器解决了问题2
    通常在微服务彼此调用时并不是直接通过IP、端口直接访问,而是首先通过服务名在注册中心查询该服务拥有哪些可用节点,然后注册中心将可用节点列表返回给服务调用者,这个过程称为“服务发现”。因服务高可用的要求,服务调用者会接收到多个可用节点,必须要从中进行选择,因此在服务调用者一端必须内置负载均衡器,通过负载均衡策略选择适合的节点发起实质的通信请求。
    WhyEFS.md.png

    服务通信(Communication)

    服务通信组件解决了问题 3.
    在微服务定义中阐述服务间通信采用轻量级协议,通常是 HTTP RESTful 风格。但因 RESTful 风格过于灵活,必须加以约束,通常在应用时对其进行上层封装,例如在 Spring Cloud 中就提供了 Feign 和 RestTemplate 两种技术屏蔽底层实现 RESTful 通信细节,所有开发者是基于封装后统一的SDK进行开发,这有利于团队间协作。

    API 服务网关(API Gateway)

    服务网关解决问题4。
    对于最终用户来说,微服务的通信与各种实现细节应该是透明的,用户只需关注他要使用的 API 接口即可。因此微服务架构引入服务网关控制用户的访问权限。服务网关是外部环境访问内部微服务的唯一途径,在这个基础上还可以扩展出其他功能,例如:用户认证与授权、容错限流、动态路由、A/B测试、灰度发布等。
    WhyZWQ.png

    配置中心(Config Management)

    配置中心解决问题5。
    微服务架构下,微服务节点都包含自己的各种配置文件,如JDBC地址、自定义配置、环境配置等。要知道互联网公司微服务节点可能是成千上万个,如果这些配置信息分散存储在节点上,如发生配置变更就必须逐个调整,这必将给运维人员带来巨大的工作量。配置中心便因此而生,通过部署配置中心服务器,将原本分散的配置文件从应用中剥离,集中转存到配置中心。一般配置中心会提供 UI 界面,可以方便快捷的实现大规模集群的配置调整。
    WhyQe0.png
    Whyuyn.png

    集中式日志管理(CentralizedLogging)

    集中式日志解决问题6。
    因为微服务架构默认将应用日志分散保存在每一个微服务节点上,当系统进行用户行为分析、数据统计时必须收集所有节点日志数据。那如何有效收集所有节点的运行日志,并对其进行分析汇总呢?业内常见的方案有 ELK、EFK,通过搭建独立的日志收集系统,定时抓取增量日志形成有效的统计报表,为决策提供数据支撑。
    WhyKLq.md.png

    分布式链路追踪(DistributedTracing)

    分布式追踪解决问题7。
    一个复杂的业务流程可能需要连续调用多个微服务,我们需要记录一个完整业务逻辑涉及的每一个微服务的运行状态,再通过可视化链路图展现,帮助软件工程师在系统出错时分析解决问题。
    WhyVJg.md.png

    服务保护(Service Protection)

    服务保护解决问题8。
    在服务间通信过程中,如果某个微服务出现响应高延迟可能会导致线程池满载,严重时会引起系统崩溃。这里就需要引入服务保护组件实现高延迟服务的快速降级,避免系统崩溃。

    以上是在微服务架构过程中派生的新问题以及对应的解决方案,这些组件是微服务架构设计时必须考虑的事情。在实现层面,Java 是目前对微服务生态支持最好的编程语言,下面我们就来介绍在Java中如何实现微服务架构的。

    Spring Cloud Alibaba

        国产微服务生态Spring Cloud Alibaba是直接隶属于 Spring Cloud 的子项目。官网是:https://spring.io/projects/spring-cloud-alibaba#overview。

        Spring Cloud Alibaba是国产的微服务开发一站式解决方案,与原有 Spring Cloud 兼容的同时对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国情的微服务架构。

    Spring Cloud 与 Alibaba 对比表格

    WhynQs.md.png

        我将两者从不同维度进行比对,可以发现相比 Spring Cloud,Spring Cloud Alibaba 对服务注册、配置中心与负载均衡功能都整合进 Nacos,这样简化了微服务架构的复杂度,出问题的概率也会降低。原有的服务保护组件也调整为 Sentinel,相较Hystrix功能更强大,使用也更加友好。在表格最下方也可看到 Spring Cloud Alibaba 基于阿里云强大的能力提供了更多的新特性,很多复杂的应用场景通过 Spring Cloud Alibaba 结合阿里云便可轻松实现。

  • 相关阅读:
    笔记-归并排序
    Repeated Substring Pattern
    Assign Cookies
    Number of Boomerangs
    Paint Fence
    Path Sum III
    Valid Word Square
    Sum of Two Integers
    Find All Numbers Disappeared in an Array
    First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/xiaodou00/p/15064493.html
Copyright © 2011-2022 走看看