微服务架构原理及特征 | 青训营笔记

99 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第8天

本节课重点内容

  • 微服务架构介绍
  • 微服务架构原理以及特征
  • 核心服务治理功能
  • 字节跳动服务治理实践

微服务架构介绍

  • 系统架构的演进历史
    • 单体架构
    • 垂直应用架构
    • 分布式架构
    • SOA架构
    • 微服务架构

该节的内容在前面的笔记中已经记过,这里就不再重新记录了。

微服务架构的基本概念:

对于单体服务,不同模块通信只是简单的函数调用,而对微服务,服务间通信意味着网络传输。

微服务架构的原理和基本特征

服务的注册与发现

在代码层面,如何指定一个目标服务的地址?

hardCode肯定是不行的。

  • 服务的ip地址可能会变
  • 不能指向多个域名

DNS方法可行吗?

不行。

  • 本地DNS存在缓存,可能导致延时
  • 负载均衡问题难以解决
  • 不支持服务实例的探活检查(就是说服务可能挂掉)
  • 域名无法配置端口

解决方案:用一个统一的服务注册中心,存储服务名到服务实例的映射。在我写JAVA的时候,一般是使用nacos来管理微服务的实例。

image.png

流量特征

  • 统一了网关入口
  • 内网通信多数采用RPC
  • 网状的调用链路

image.png

  1. 外网进入内网后,先进行负载均衡
  2. 然后经过网关,根据网关跳转志相关服务,整体呈现一张网状

内网的通信多用RPC,因为RPC是直接传输二进制的,编解码速度都快很多。

核心服务治理功能

服务发布

指让一个服务升级运行新代码的过程。

在一体化服务中,很容易发布服务,点击运行就可以了,但对微服务来说不是这样

服务发布的难点

  • 服务不可用
  • 服务抖动
  • 服务回滚

蓝绿部署: 集群分为两部分,一部分升级用另一部分。

简单 稳定 但需要双倍资源

灰度发布(金丝雀发布):少部分机器更新,试试有没有问题。如果没有问题,再推广。

难点:流量的切换比较难,回滚方案也比较难以实现。

流量治理

在微服务架构下,可以基于地区、集群、实例、请求等维度,对端对端的流量路径进行治理

负载均衡

负载均衡 负责分配请求在每个下游实例上的分布

常见的LB策略

  • Round Robin
  • Random
  • Ring Hash
  • Least Request

稳定性治理

线上服务总是会出问题的,和程序的正确性无关。

治理方法:

  • 限流

    限制速率

  • 熔断

    一个请求失败之后,过一段时间才能请求成功

  • 过载保护

    拒绝一部分请求

  • 降级

    允许重要事务访问,拒绝普通事务访问