后端Go框架设计与实现:
这是我参与【第五届青训营】伴学笔记创作活动的第7天。
3.走进 HTTP 协议:
常见的状态码有:
- 1xx: 信息类
- 2xX: 成功
- 3xx: 重定向
- 4xX: 客户端错误
- 5xX: 服务端错误
6.微服务架构原理以及特征
单体架构
优势:
1.性能最高 2.冗余小
劣势:
1.debug 困难 2.模块相互影响模块 3.分工、开发流程
分布式架构
优势:
- 业务无关的独立服务
劣势 :
- 服务模块bug可导致全站瘫痪
- 调用关系复杂
- 不同服务元余
微服务架构
优势:
- 开发效率
- 业务独立设计
- 自下而上
- 故障隔离
劣势:
- 治理、运维难度
- 观测挑战
- 安全性
- 分布式系统
服务间通信
对于单体服务,不同模块通信只是简单的函数调用. 对于微服务,服务间通信意味着网络传输。
7.核心服务治理功能
服务发布的难点:
- 服务不可用
- 服务抖动
- 服务回滚
服务发布:
- 蓝绿部署(简单,稳定,但需要两倍资源)
- 灰度发布(金丝雀发布)
稳定性治理:
- 限流
- 熔断
- 过载保护
- 降级
8.服务治理实践
重试的意义:
重试可以避免掉偶发的错误,提高SLA
- 降低错误率:
- 假设单次请求的错误概率为 0.01,那么连续两次错误概率则为 0.0001。
- 降低长尾延时:
- 对于偶尔耗时较长的请求,重试请求有机会提前返回
- 容忍暂时性错误:
- 某些时候系统会有暂时性异常 (例如网络抖动),重试可以尽量规避
- 避开下游故障实例:
-
一个服务中可能会有少量实例故障(例如机器故障)重试其他实例可以成功。
-
可以设定一个重试比例阈值,重试次数占所有请求比例不要超过该阈值
-
对于可能超时(或延迟高)的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应