1到底什么是微服务
- 单体应用
- 部署效率低
- 团队协作开发成本高
- 系统高可用性差
- 线上发布变慢
- 什么是服务化
- 单体应用中通过jar包依赖产生的本地方法调用,改成通过RPC远程方法调用
- 什么是微服务
- 服务拆分力度更细
- 服务独立部署
- 服务独立维护
- 服务治理能力要求高
#2单体走向微服务#
- 单体迁移到微服务遇到的问题?
- 服务如何定义
- 服务如何发布与订阅
- 服务如何监控
- 服务如何治理
- 故障如何定位
#3微服务架构#
- 基本组件
- 服务描述
- 服务如何对外描述?
- 服务名叫什么?
- 调用这个服务需要提供哪些信息?
- 调用这个服务返回的结果是什么格式的?
- 该如何解析?
- 注册中心
- 解决服务的发布与订阅
- 提供者登记
- 消费者获取地址 发请求
- 解决服务的发布与订阅
- 服务框架
- 服务通信采用什么协议?
- 数据传输采用什么方式?
- 数据压缩采用什么格式?
- 服务监控
- 指标收集
- 数据处理
- 数据展示
- 服务追踪
- 服务调用情况
- 服务治理
- 单机故障
- 单IDC(互联网数据中心)故障
- 依赖服务不可用
#4如何发布与引用服务#
- 服务描述
- 方式
- restful api
- 跨语言
- xml
- idl文件
- 跨语言平台调用
- Thrift协议
- gRPC协议
#5如何注册与发现服务#
- restful api
- 注册中心原理
- 服务提供者RPC server
- 服务消费者 RPC Client
- 服务注册中心 Registry
- 注册中心实现方式
- 注册中心API
- 服务注册接口
- 服务反注册接口
- 心跳汇报接口
- 服务订阅接口
- 服务变更查询接口
- 集群部署
- 集群部署保证高可用性
- 分布式一致性保证数据一致性
- 目录存储
- 服务健康状态监测
- 服务状态变更通知
- 白名单机制
#6如何实现RPC远程服务调用#
- 注册中心API
- 服务消费者
- 客户端
- 服务提供者
- 服务端
- 调用过程
- 成一次 RPC 调用,就必须先建立网络连接。建立连接后,双方还必须按照某种约定的协议进行网络通信,这个协议就是通信协议。双方能够正常通信后,服务端接收到请求时,需要以某种方式进行处理,处理成功后,把请求结果返回给客户端。为了减少传输的数据大小,还要对数据进行压缩,也就是对数据进行序列化
- 客户端和服务端如何建立网络连接?
- HTTP通信
- 基于TCP/IP协议
- Socket通信
- 运行于客户端 clientSocket
- 运行于服务端 serverSocket
- 步骤
- 服务器监听
- serverSocket bind()绑定端口,调用listen()实时监控网络状况,等待客户端的连接请求
- 客户端请求
- clientSocket connect()函数 向serverSocket绑定的地址端口发起请求
- 连接确认
- 服务端监听或收到客户端的连接请求时,调用accept()响应客户端请求,并建立连接
- 数据传输
- 建立连接后,客户端调用send() 服务端调用receive()函数,服务端处理完请求后,服务端调用send()客户端调用recevice()得到返回结果。
- 服务器监听
- 异常情况
- 链路存活检测
- 客户端定时发送心跳检测给服务端,连续N次或者超出规定时间没有回复则认为链路已经失效
- 断连重试
- 等待固定时间发起重连
- 链路存活检测
- HTTP通信
- 服务端如何处理请求?
- 同步阻塞BIO
- 同步非阻塞NIO
- 异步非阻塞AIO
- 建议采取业界开源框架 Netty Mina
- 数据传输采用什么协议?
- Http协议
- Dubbo协议
- 数据该如何序列化和反序列化?
- 编码与解码就是序列化与反序列化
- 常见序列化方式
- 文本类
- xml
- json
- 二进制
- PB
- Thrift
- 文本类
- 使用考虑因素
- 支持数据结构的丰富程度
- 跨语言支持
- 性能{压缩比与序列化速度}
#7如何监控微服务调用#
- 监控的对象是什么?
- 用户端监控
- 接口监控
- 资源监控
- 基础监控
- 具体监控哪些指标?
- 请求量
- 实时请求量QPS 每秒查询次数
- 统计请求量PV 一段时间内用户访问量
- 响应时间
- P99=500ms 意思是 99% 的请求响应时间在500ms以内,它代表了请求的服务质量,即 SLA。
- 错误率
- 一段时间内调用失败的次数占调用总次数的比率来衡量
- 请求量
- 从哪些维度进行监控?
- 全局维度
- 分机房维度
- 单机维度
- 时间维度
- 核心维度
- 核心与非核心部署隔离,分开监控
- 监控系统原理
- 数据采集
- 分类
- 服务主动上报(代码中加入收集逻辑)
- 代理收集(日志文件–>解析–>上报)
- 考虑点
- 采样率 采集数据的频率
- 动态采集
- 分类
- 数据传输
- 传输方式
- UDP
- Kafka
- 数据格式十分重要
- 二进制协议
- 最常用的就是 PB 对象,它的优点是高压缩比和高性能,可以减少传输带宽并
且序列化和反序列化效率特别高
- 最常用的就是 PB 对象,它的优点是高压缩比和高性能,可以减少传输带宽并
- 文本协议
- 最常用的就是 JSON 字符串,它的优点是可读性好,但相比于 PB 对
- 二进制协议
- 传输方式
- 数据采集