这是我参与「第五届青训营」伴学笔记创作活动的第 7 天
概述
微服务是一种通过多个小型服务组合来构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言,不同的数据存储技术,运行在不同的进程之中。服务采取轻量级的通信机制和自动化的部署机制实现通信与运维
微服务架构设计三大核心要素:
- 服务治理
- 可观测性
- 安全
微服务架构原理与特征
基本概念
-
服务
一组具有相同逻辑的运行实体
-
实例(instance) 一个服务中,每个运行实体即为一个实例
-
实例与进程的关系 实例与进程之间没有必然对应关系,可以一个实例可以对应一个或多个进程(反之不常见)
-
集群(cluster) 通常指服务内部的逻辑划分,包含多个实例。
-
有状态/无状态服务 服务的实例是否存储了可持久化的数据
服务注册与发现
新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。
注册中心的加入,解决了以下微服务间调用的问题:
- 本地DNS存在缓存导致时延
- 多个实例间的负载均衡问题
- 实例的健康检查
- 使用域名无法为单个服务配置多个端口
服务实例的上线与下线:
- 当需要下线服务实例时,首先应将实例在注册中心中的记录抹去,待到没有流量访问该实例时再将其关闭
- 当需要上线服务时,首先将服务启动,注册中心对该实例进行健康检查后,将服务注册到注册中心后,可正常调用该实例服务
流量特征
外部请求达到网关时一般为http请求,而在服务间调用一般为采用rpc的方式
服务治理
服务发布
服务发布面对以下三种难点:
- 服务不可用
- 服务抖动
- 服务回滚
通过以下发布策略可以改善上述问题:
-
蓝绿发布
将服务分为两个隔离的部分,将两个部分分别进行服务发布
蓝绿部署操作简单稳定,但同时因为需要两个隔离的部分导致需要消耗两倍的资源
使用场景:在流量低的时候进行发布
-
灰度发布
将新的实例逐个上线,并替换老版本的实例
缺点:
- 在逐个上线新实例与老实例时对流量调度的要求高,操作的粒度为实例级别
- 在灰度发布的整个过程中,可能都需要对服务进行回滚,对平台有较高的要求
流量治理
在微服务架构下,我们可以基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行精确控制。
负载均衡
负载均衡组件负责分配请求在每个下游实例上的分布
稳定性治理
线上服务总会出问题,这与程序的正确性无关
为了应对服务可能会出现的问题,从以下四个方面保证服务的稳定:
- 限流
- 熔断
- 过载保护
- 降级
个人收获
微服务架构将庞大的单体服务进行拆分,拆分成多个功能单一的简单服务,降低软件开发难度的同时增加了架构的难度,微服务架构本身引入了注册发现、服务发布、负载均衡、流量治理等一系列在前微服务时代不会出现的问题,只要是分布式架构的系统,就无法完全避免
引用
- 字节内部课:核心服务治理功能
- 字节内部课:微服务架构原理及特征