极客时间专栏——微服务架构核心20讲
目录:
微服务架构的定义
微服务架构的特点
- 一组小的服务(具体小到什么程度)
- 独立的进程
- 轻量级通信
- 基于业务能力
- 独立部署(迭代效率会高很多)
- 无集中式管理
微服务的利弊权衡
利
- 强化模块边界 以前是用类,之后是类库组件
- 可独立部署
- 技术多样性
弊
- 分布式复杂性
- 最终一致性(数据同步的问题)
- 运维复杂性
- 测试复杂性
康威模式和微服务架构的启示
略
企业什么时候引入微服务
略,更多的是在企业到一定程度再进行引入
什么样的组织架构适合微服务
微服务的中台战略
服务分层方式
聚合和裁剪
微服务技术架构体系
网关层更多的是做限流和熔断等
微服务最经典的服务发现机制
- DNS
- 服务注册 服务请求的时候直接请求对应服务
- 通过集中的LB获取服务注册
API网关原理
三层
- 接入
- API网关 反向代理,认证安全,限流熔断,日志监控等
- 服务
API网关Zuul
- 支持热插拔过滤规则
- 支持过滤规则共享变量
Netflix的路由发现体系
包括
- 网关层 Zuul
- 服务注册中心 Eureka
配置中心
配置的审计,谁修改的,当时为什么这么修改,可以进行追溯
通讯方式
RPC和REST
\ | RPC | REST |
---|---|---|
耦合性 | 强耦合(需要定制一些消息格式) | 松散耦合 |
消息协议 | 二进制thrift,protobuf,auro | 文本xml或json |
通讯协议 | TCP | HTTP/HTTP2 |
性能 | 高 | 一般低于RPC |
接口契约 | thirft | swagge |
客户端 | 强类型客户端 | 一般http客户端 |
案例 | dubbo,thirft,grpc(可用TCP和HTTP2) | SpringMVC |
可读性 | 二进制不可读 | 文本消息可读 |
对外开放 | 需要协议转换 | 直接对外开放 |
治理环节
- 服务注册发现
- 负载路由
- 日志监控
- Metrics
- 调用链埋点
- 限流熔断
- 安全和访问控制(钱相关进行黑名单)
- Rest/RPC支持,序列化Json,Xml
- 代码生成
- 统一异常处理
- 文档
- 配置集成
- 后台服务集成DB,Cache,Mq
监控分层
- 端用户体验监控(性能,返回码,城市和地区,运营商,版本,系统等)
- 业务监控(核心指标,登录,注册,下单支付等)
- 应用层监控(URL,Service,Sql,平响,QPS)
- 系统层监控(CPU,内存,网络,磁盘)
- 基础设施(网络流量,丢包等)
调用链监控选型
容错限流
- 熔断
- 隔离(服务器资源隔离)
- 限流
- 降级(使用其他的函数等)
容器
略
基于容器调度
略