微服务架构 | 青训营笔记

131 阅读2分钟

这是我参与【第五届青训营】伴学笔记活动的第九天

关于微服务

微服务架构是目前大多数互联网公司的标准架构

系统架构的演变历史

image.png

微服务架构的特点

image.png

微服务原理

基本概念

  • 服务:

一组具有相同逻辑的运行实体

  • 实例

一个服务中的每个运行实体

  • 实例与进程的关系

没有必然对应关系,一般1对1,或者1对多

  • 集群 -通常指服务内部的逻辑划分,包含多个实例

  • 常见的实例承载形式

进程、VM、k8s pod

  • 有/无状态服务 服务的实例是否存储了可持久化的数据

服务间通信

通信方式:

  • 一对一: 每个客户端请求由一个服务实例处理;
  • 一对多: 每个客户端请求由多个服务实例处理;
  • 同步模式: 客户端请求需要服务端实时响应,客户端等待响应时间可能会阻塞;
  • 异步模式: 客户端请求不会阻塞进程,服务端的响应可以是非实时的;

image.png

  • 微服务之间通过网络进行通信
  • 常见的通信协议包括 HTTP、RPC

服务注册及服务发现

  • 基本问题

    • 服务间调用中,如何指定下游服务实例的地址?
  • 简单方案

    • 直接指定 ip:port?

      • 没有任何动态能力
      • 有多个实例下游实例怎么办?
    • 使用 DNS?

      • 本地 DNS 存在缓存,导致延迟
      • DNS 没有负载均衡
      • 不支持服务探活检查
      • DNS 不能指定端口
  • 服务注册发现

    • 新增一个统一的服务注册中心,用于存储服务名到服务实例之间的映射关系
    • 旧服务实例下线前,从服务注册中心删除该实例,下线流量
    • 新服务实例上线后,在服务注册中心注册该实例,上线流量
  • 微服务流量特征

    • 统一网关入口

    • 外网通信多数采用 HTTP,内网通信多数采用 RPC(Thrift, gRPC)

字节跳动微服务实践——重试

远程函数调用相比于本地调用,存在着许多挑战,如网络抖动、下游熔断等

重试的好处

image.png

重试的难点

幂等性

什么是幂等性?

                                       f(f(x))=f(x)

若服务难以保证幂等性,则会出现每次调用得到的结果不同的现象

重试风暴

随着调用深度的增加,重试次数会指数级上涨(稍后分析)

超时设置

假设一个调用正常是1s的超时时间,如果允许一次重试,那么第一次请求经过多少时间时,才开始重试呢?

参考资料

juejin.cn/post/719438…

微服务架构的一知半解 - 掘金 (juejin.cn)