微服务架构学习
服务描述
三种类型
RESTful Api (springcloud),XML配置(dubbo)以及IDL文件(grpc)
restful和grpc 都是跨语言平台的
如何注册和发现服务
注册中心原理
https://www.processon.com/diagraming/5c2991a0e4b04eb4e36747fc
注册中心Api
服务注册及反注册 :
服务提供者提供至少有服务地址,端口等信息。
心跳汇报:及时反馈是否存活
服务订阅: 通过服务订阅提供服务地址列表,并变更时通知
服务变更查询
服务查询
服务修改
zookeeper工作原理
每个节点内存都存储了一份数据,client 的读可以从任何一个server读取。
zk启动将从实例中选择一个leader (paxso协议)
leader负责处理数据更新等(zab协议)
服务健康状态检测
客户端和服务建立连接会话,并生成一个全局的session ,服务端和客户端维持一个长链接,在SESSION_TIMEOUT内通过客户端定期ping 发送心跳 到 服务端,并重置下次的SESSION_TIMEOUT。
服务状态变更通知
zk采用的watcher机制来实现服务变更通知服务消费者的
白名单机制
注册提供白名单机制,防止本地测试服务注册到生产环境中的zk上。禁止调用服务注册接口。
RPC调用
客户端和服务端如何建立网络连接?
http 协议 基于tcp 协议 三次握手四次挥手
socket bind ,connected ,accept ,send ,recievd ,close
服务端任何处理请求?
bio,nio,aio
数据传输采用什么协议?
http协议开放,或者是自定义的消息协议,消息头和消息体 二部分
数据如何序列化和反序列化?
监控
监控对象
用户端监控
接口监控
资源监控
基础监控
监控指标
请求量 二个维度,一个实时请求量,一个统计请求量
QPS 每秒查询次数,PV 一段时间内用户的访问量
响应时间
错误率一般按照返回错误码503的比率来表示
监控系统主要包括四个环节:数据采集、数据传输、数据处理和数据展示
数据采集二种方式:
服务主动上报 硬编码在业务代码
代理收集 调用的记录到日志文件
数据传输
UDP 传输
kafaka 传输 发送到指定的topic上 ,传输格式二进制PB效率高,文本协议json ,解析性能差点
数据处理
接口维度聚合 ,把实时收到的数据按照接口名聚合在一起,计算每个接口的实时请求量和平均耗时等信息。
聚合后的数据存储 索引数据库 elasticsearch ,时序数据库openTSDB
数据展示
曲线图 ,饼状图,橘子图
服务追踪的作用
第一,优化系统瓶颈。
第二,优化链路调用。
第三,生成网络拓扑。
第四,透明传输数据。
服务追踪原理 核心理念就是调用链 ,例如twiiter 的zipkin,阿里鹰眼,美团mtrace
spanId,用于标识一次 RPC 调用在分布式请求中的位置
traceId,用于标识某一次具体的请求 ID
常用的服务治理手段
节点管理
1.注册中心主动摘除机制
2.服务消费者摘除
3.负载均衡
随机,轮询,一致性hash,最少活跃调用
服务路由
为什么要定制路由?
业务存在灰度发布的需求
多机房访问需求
路由规则
静态配置
动态配置
服务容错
服务容错手段
failover 失败自动切换,要幂等
failback 失败通知 ,非幂等场景应该先去查询下服务的状态
failcache 失败缓存,间隔一定时间在去重新调用
failfast 快速失败,仅仅记录失败日志就返回