NO.3 微服务架构课程笔记 | 青训营

89 阅读3分钟

本文主要记录掘金字节内部课程笔记,主要分为基本介绍、原理特征、核心功能三个部分,如有错误之处,感谢读者指正!

一、基本介绍

主要包含微服务架构的背景由来、架构慑览、基本要素

1、演变历史:

单体架构

  • 特点:all in one process
  • 优势:1.性能最高 2.冗余小
  • 劣势:1.debug 困难 2.模块相互影响 3.模块分工、开发流程

image.png

垂直应用架构

  • 特点:按照业务线垂直划分
  • 优势:1.业务独立开发维护
  • 劣势:1.不同业务存在冗余 2.每个业务还是单体

image.png

分布式架构

  • 特点:抽出业务无关的公共模块
  • 优势:1.业务无关的独立服务
  • 劣势:1.服务模块bug可导致全站瘫痪 2.调用关系复杂 3.不同服务冗余

image.png

SOA架构(Service Oriented Architecture)

  • 特点:面向服务
  • 优势:1.服务注册
  • 劣势:1.整个系统设计是中心化的 2.需要从上至下设计 3.重构困难

image.png

微服务架构

  • 特点:彻底地服务化
  • 优势:1.开发效率 2.业务独立设计 3.自下而上 4.故障隔离
  • 劣势:1.治理、运维难度 2.观测挑战 3.安全性 4.分布式系统

image.png

2、核心要素

  • 服务治理

服务注册、服务发现、负载均衡、扩缩容、流量治理、稳定性治理

  • 可观测性

日志采集、日志分析、监控打点、监控大盘、异常报警、链路追踪

  • 安全

身份验证、认证授权、访问令牌、审计、传输加密、黑产攻击

二、微服务架构原理及特征

1、基本概念

  • 服务(service ):一组具有相同逻辑的运行实体

  • 实例(instance):一个服务中,每个运行实体即为一个实例。

  • 实例与进程的关系:实例与进程之间没有必然对应关系,可以一个实例可以对应一个或多个进程 (反之不常见)

  • 集群 (cluster):通常指服务内部的逻辑划分,包含多个实例。

  • 常见的实例承载形式:进程、VM、k8s pod ......

  • 有状态 / 无状态服务:服务的实例是否存储了可持久化的数据(例如磁盘文件)

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

image.png

2、服务注册及发现

在代码层面,如何指定调用一个目标服务的地址(ip:port)?

本地 DNS 存在缓存,导致延时、负载均衡问题、不支持服务实例的探活检查、域名无法配置端口。

解决思路: 新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。

3、流量特征

统一网关入口内网

通信多数采用RPC

网状调用链路

三、核心服务治理功能

核心的服务治理功能,包括服务发布、流量治理、服务均衡、稳定性治理

1、服务发布

服务发布 (deployment),即指让一个服务升级运行新的代码的过程

难点:服务不可用、服务抖动、服务回滚

灰度发布(金丝雀发布):试探,新建一个实例,删除一个,再新建一个

2、流量治理

在微服务架构下,我们可以基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行控制,通过加权百分比的形式。

3、负载均衡

负载均衡(Load Balance)负责分配请求在每个下游实例上的分布 常见的 LB 策略:Round Robin、random、Ring Hash、Least Request

4、稳定性治理

image.png

笔者的理解是微服务架构相当于把一整个系统切分成很多个子系统,每一个系统视为微小的服务组份,分别开发,建立关联,向客户提供服务,避免系统的庞大冗余。