后端笔记03 微服务的历史和应用

99 阅读3分钟

微服务架构原理及特征 - 掘金 (juejin.cn)

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

微服务架构发展历史简介

架构发展历史

  • 单体架构
  • 垂直应用架构
  • 分布式架构
  • SOA架构
  • 微服务架构

image.png

单体架构
优势: 性能最高 、冗余小
劣势:debug困难、模块相互影响、分工难

image.png 垂直应用架构 优势: 不同业务独立开发维护
劣势:不同业务冗余、每个业务都是单体

image.png 分布式架构
优势: 服务可以独立于业务
劣势:调用关系复杂、服务冗余、服务模块bug导致业务瘫痪 image.png SOA架构
优势: 服务注册中心
劣势:系统中心化、需要从上到下设计、重构困难

image.png 微服务架构
优势:

  1. 不同部分解耦,开发效率高、
  2. 业务不影响服务可独立设计
  3. 自下而上设计、
  4. 故障隔离,不会因为一个服务不行bug导致业务瘫痪\

劣势

  1. 治理、运维难度高
  2. 观测挑战
  3. 安全性
  4. 分布式系统 image.png

微服务的核心要素

核心要素就是闭幕微服务的劣势

  1. 服务治理
  2. 可观测性
  3. 安全性

image.png

微服务的原理架构和特性

服务(service) 一组相同逻辑的运行实体
实例(instance) 一个服务中,每一个运行实体即为一个实例
实例与进程的关系 一个实例可以对应多个进程 集群(lcuster) 服务内部的逻辑划分,包含多个实例
常见的实例形式 进程、VM、K8s pod
有状态/无状态服务 服务实例是否存储了可持久化的数据(比如磁盘文件) image.png

HDFS可以看做一组微服务 image.png

服务间的通信

单体服务:简单函数调用
微服务:网络传输 image.png

服务注册及发现

一个服务可能有很多服务器,如何确定服务器IP和端口

image.png

hardcode:写死ip和端口
服务器损坏、负载均衡 image.png

DNS:把IP和端口存到数据库

  1. 本地DNScu缓存,导致延迟
  2. 负载均衡问题
  3. 域名无法配置端口
  4. 不支持服务实例的探活检查

解决办法
新增统一的注册中心,用于存储服务名到服务实例(服务器)的映射

image.png

服务实例(服务器)的上线和下线

下线:

  • 注册中心删掉服务器ip和端口
  • 关闭对应的服务器

上线:

  • 启动新的服务器,并检查
  • 注册中心添加新的服务器ip和端口

流量特征

  1. 统一网关
  2. 内部通信多采用RPC

网络调用链路 image.png

服务发布

让一个服务升级到最近代码的过程

服务发布难点

image.png

难点解决办法

蓝绿部署
一半机器维护、另一半工作
简单稳定,但是需要双倍资源

灰度(金丝雀)部署\

image.png

image.png

流量治理

在微服务的框架下可以基于地区、集群、实例、请求等维度,实现端到端的流量治理

image.png

image.png

稳定性治理

image.png image.png image.png

字节跳动治理实践

重试的意义

重试:顾名思义就是让相同代码运行多次
一次运行的错误率是百分之一,那么2次运行就可以降到万分之一

image.png

image.png

重试的难点

  1. 超时设置
  2. 重试风暴
  3. 幂等性

重试风暴

上游的简单重复调用,可能会导致下游服务器崩溃 image.png

重试解决办法

  1. 设置阈值
  2. 防止链路重试
  3. hedged request

image.png

image.png

image.png image.png

重试效果验证

image.png