美文网首页
SpringCloud 学习(1) --- 微服务与 Sprin

SpringCloud 学习(1) --- 微服务与 Sprin

作者: laiyy0728 | 来源:发表于2019-02-25 17:09 被阅读0次

    在学习 SpringCloud 时,整理了一个 SpringCloud 脑图:https://www.processon.com/view/link/5c3ec3cce4b0641c83ddee05

    应用是可以独立运行的程序代码,提供相对完善的业务功能。
    架构分为:业务架构、应用架构、技术架构。业务架构决定应用架构,技术架构支撑应用架构。
    架构的发展历程:单体架构 --> 分布式架构 --> SOA 架构 --> 微服务架构

    微服务概述

    单体应用架构

    单体架构可以理解为一个 Java Web 工程,包含:表现成、业务层、数据访问层。从 Controller 到 Service 到 Dao,没有任何应用拆分,开发完毕后打包成一个大型的 war 部署。

    单体应用架构

    优点

    • 便于发开:开发人员使用当前开发工具在短时间内就可以完成开发
    • 便于测试:不需要依赖其他接口,节约时间
    • 便于部署:只需将 war 部署到运行环境即可

    缺点

    • 灵活度不够:如果程序有任何修改,需要自上而下全部修改,测试的时候也不要整个程序部署完才能看到效果。在开发过程中,可能会需要等待其他开发人员开发完成才能进行自己开发的内容。
    • 降低系统性能:原本可以直接访问数据库,但多出了一个 Service 层
    • 启动慢:一个进程中包含了所以的业务逻辑,涉及的模块过多
    • 扩展性差:增加新的功能不能针对单个点增加,要全局性的增加,牵一发动全身

    分布式架构

    按照业务垂直切分,每个应用都是单体架构,通过 API 互相调用

    分布式架构

    面向服务的 SOA 架构

    SOA 架构有两个主要角色:服务的提供者(provider)、服务的消费者(consumer)。阿里的 Dubbo 的 SOA 的一个典型实现

    优点

    • 模块拆分,使用接口通信,降低了模块之间的耦合度
    • 把一个大项目拆分成多个子项目,可以并行开发
    • 增加功能时只需要增加一个子项目,调用其他系统接口即可
    • 可以灵活分布式部署

    缺点

    • 系统之间需要远程通信,增加了开发的工作量

    微服务架构

    微服务架构是一种架构风格,对于大型复杂的业务系统,可以将业务功能拆分成多个相互独立的微服务,各个微服务之间是松耦合的,通过各种远程协议进行同步/异步通信,各个微服务可单独部署扩容/缩容以及升级/降级

    微服务技术选型对比

    Spring Cloud Dubbo Motan MSEC 其他
    功能 微服务完整方案 服务治理框架 服务治理框架 服务开发运营框架
    通信方式 REST / http RPC 协议 RPC / Hessian2 Protocol Buffers gRPC、thrift
    服务发现 / 注册 Eureka(AP) ZK、Nacos ZK / Consul 只有服务发现 Etcd
    负载均衡 Ribbon 客户端负载 客户端负载 客户端负载 Ngnix + Lua
    容错机制 6 种 6 种 2 种 自动容错 keepalived、heartbeat
    熔断机制 Hystrix 过载保护
    配置中心 Spring Cloud Config Nacos Apollo、Nacos
    网关 Zuul、Gateway Kong、自研
    服务监控 Hystrix + Turbine Dubbo + Monitor Monitor ELK
    链路监控 Sleuth + Zipkik Pinpoint
    多语言 REST 支持多语言 Java Java Java、C++、PHP Java、PHP、Node.js
    社区活跃度 高(Spring) 高(阿里) 一般 未知

    基于 Spring Cloud 的微服务解决方案

    • 公用组件:服务调用:Feign、负载均衡:Ribbon、熔断器:Hystrix
    • 网关:Eureka、Consul 使用 zuul(性能低)、SpringCloud Gateway(性能高);etcd、Nacos 使用自研网关
    • 配置中心:SpringCloud Config、携程 Apollo、阿里 Nacos
    • Zipkin、Pinpoint、SkyWalking(推荐)
    • 分布式事务、Docker、gRPC、领域驱动 Halo

    基于 Dubbo 的解决方案使用 Dubbo + Nacos。Nacos 是阿里开源的一个构建云原生应用的动态服务发现、配置、服务管理平台。


    Spring Cloud

    Spring Cloud 介绍

    中间件:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。
    常见的中间件分别是:服务治理(如 RPC)配置中心全链路监控分布式事务分布式定时任务消息中间件API 网关分布式缓存数据库中间件等。

    Spring Cloud 像是一个中间件,基于 Spring Boot 开发,提供一套完整的微服务解决方案。包括服务注册与发现配置中心全链路监控API 网关熔断器 等选型的中立的开源组件,可以随需扩展和替换组装。

    Spring Cloud 项目模块

    组件名称 所属项目 组件分类
    Eureka spring-cloud-netflix 注册中心
    Zuul spring-cloud-netflix 第一代网关
    Sidecar spring-cloud-netflix 多语言支持
    Ribbon spring-cloud-netflix 负载均衡
    Hystrix spring-cloud-netflix 熔断器
    Turbine spring-cloud-netflix 集群监控
    Feign spring-cloud-openfeign 声明式的 HTTP 客户端
    Consul spring-cloud-consul 注册中心
    Gateway spring-cloud-gateway 第二代网关
    Sleuth spring-cloud-sleuth 链路监控
    Config spring-cloud-config 配置中心
    Bus spring-cloud-bus 总线
    Pipeline spring-cloud-pipelines 部署管道
    Dataflow spring-cloud-dataflow 数据处理
    Stream spring-cloud-stream 消息驱动

    服务治理中间件

    服务治理中间件包含:服务注册与发现服务路由负载均衡自我保护管理机制等。
    其中,服务路由包含:服务上下线在线测试机房就近选择AB测试灰度发布等。
    负载均衡包含:支持根据目标状态和目标权重进行负载均衡。
    自我保护包含:服务降级优雅降级流量控制

    注册中心对比

    特性 Consul Zookeeper etcd Eureka
    服务健康检查 服务状态、内存、硬盘等 (弱)长连接、keepalive 连接心跳 可配置支持
    多数据中心 支持 - - -
    kv 存储服务 支持 支持 支持 -
    一致性 raft paxos raft -
    CAP CA CP CP AP
    多语言支持 https、dns 客户端 http/grpc http(sidecar)
    watch支持 全量/支持long polling 支持 支持long polling 支持 long polling/大部分增量
    自身健康 metrics - metrics metrics
    安全 acl/https acl https支持(弱) -
    Spring Cloud 集成 支持 支持 支持 支持

    Spring Cloud 配置中心功能需求

    场景支持:

    面向全公司,充分考虑各部门需求,支持不同语言接入,充分考虑兼容性

    运维集成:

    统一数据源
    标准化运维流程

    权限管理:

    接入权限、审核权限、下发权限...

    Spring Cloud API 网关

    API 网关是出现在系统边界上的一个面向 API 的、串行集中式的强管控服务,可以理解为应用的防火墙,主要起隔离外部访问与内部系统的作用。主要为了解决访问认证报文转发访问统计等问题。

    API 网关需要提供的功能:

    统一接入功能:为各种服务提供统一接入服务,提供三高(高可用、高并发、高可靠)的网关服务,还需要支持负载均衡、容灾切换、异地多活
    协议适配:对外提供 HTTP、HTTPS 访问,对内提供各种协议,如:HTTP、HTTPS、RPC、REST 等
    流量监控:当大流量请求时,进行流量监控流量挑拨;当后端出现异常时,需要进行服务熔断服务降级;在异地多活中,需要进行流量分片等。
    网关防护:所有请求进行安全过滤,对 IP 黑名单、URL 黑名单封禁、风控防刷、防恶意攻击等。

    Zuul、Gateway 的比较

    Zuul Gateway
    实现难度
    底层 http、https、rest Netty
    灰度、降级、标签路由、限流、WAF封禁 需要自定义 Filter 配置
    安全、监控/埋点 自定义 Intercepter 自定义配置

    Spring Cloud 全链路监控

    全链路监控需要包含的功能:

    定位慢调用:慢 web 服务、慢 rest/rpc 服务、慢 SQL
    定位错误:4XX、5XX、Service Error
    定位异常:Error Exception、Fatal Exception
    展现依赖和拓扑:域拓扑、服务拓扑、trace 拓扑
    trace 调用链:将端到端的调用以及附加的上下文信息、异常日志信息、每个调用点的耗时都进行展示
    应用警告:根据设置的警告规则,扫描指标数据,并进行信息上报

    相关文章

      网友评论

          本文标题:SpringCloud 学习(1) --- 微服务与 Sprin

          本文链接:https://www.haomeiwen.com/subject/rebgyqtx.html