初探微服务架构
2020-08-12 16:48:51 0 举报
AI智能生成
微服务架构理论学习
作者其他创作
大纲/内容
如何实现RPC远程调用
客户端和服务端如何建立网络连接?
http
socket
服务端如何处理请求?
同步阻塞方式(BIO)
适用于连接数比较小的业务场景
同步非阻塞方式 (NIO)
适用于连接数比较多并且请求消耗比较轻的业务场景
异步非阻塞方式(AIO)
适用于连接数比较多而且请求消耗比较重的业务场景:相册服务
数据传输采用什么协议?
http
私有协议
数据该如何序列化和反序列化?
文本类:XML、Json
二进制类:Protobuf、Thrift
选择维度
支持数据结构类型的丰富度
跨语言支持
性能
如何监控微服务调用
监控对象
用户端监控:业务直接对用户提供的功能的监控
接口监控:业务提供的功能所依赖的具体 RPC 接口的监控
资源监控:某个接口依赖的资源的监控,redis、mysql
基础监控:cpu、内存、带宽、I/O等
监控指标
请求量
响应时间
错误率
监控维度
全局维度
分机房维度
单机维度
时间维度
核心维度
监控系统原理
数据采集
服务主动上报
代理收集
数据传输
UDP 传输
Kafka 传输
二进制协议
文本协议
数据处理
接口维度聚合
机器维度聚合
索引数据库,比如 Elasticsearch
时序数据库,比如 OpenTSDB
数据展示
曲线图:变化趋势
饼状图:占比分布
格子图:细粒度的监控
如何追踪微服务的调用
服务追踪的作用
优化系统瓶颈
优化链路调用
生成网络拓扑
透明传输数据
服务追踪系统原理
调用链
通过一个全局唯一的 ID 将分布在各个服务节点上的同一次请求串联起来,从而还原原有的调用关系
traceId,用于标识某一次具体的请求 ID
spanId,用于标识一次 RPC 调用在分布式请求中的位置
annotation,用于业务自定义埋点数据,可以是业务感兴趣的想上传到后端的数据,比如一次请求的用户 UID
服务追踪系统实现
数据采集层
CS(Client Send)阶段 : 客户端发起请求,并生成调用的上下文
SR(Server Recieve)阶段 : 服务端接收请求,并生成上下文
SS(Server Send)阶段 : 服务端返回请求,这个阶段会将服务端上下文数据上报
CR(Client Recieve)阶段 : 客户端接收返回结果,这个阶段会将客户端上下文数据上报
数据处理层
实时数据处理
Storm、Spark Streaming、HBase
MapReduce、Spark
离线数据处理
数据展示层
调用链路图:Zipkin
调用拓扑图:Pinpoint
微服务治理的手段有哪些
节点管理
注册中心主动摘除机制
服务消费者摘除机制
负载均衡
随机算法
轮询算法
最少活跃调用算法
一致性 Hash 算法-相同参数的请求总是发到同一服务节点
服务路由
业务存在灰度发布的需求:只允许特定规则用户访问新发布的服务节点
多机房就近访问的需求
服务容错
FailOver
失败自动切换,要求调用操作必须是幂等的,一般用于读请求操作
FailOver
失败通知,根据失败的详细信息,来决定后续的执行策略
FailCache
失败缓存,不立即重启,而是隔一段时间重试
FailFast
快速失败,非核心业务
什么是微服务?
单体应用
部署效率低下
协作开发成本高
高可用性差
线上发布慢
微服务
服务拆分粒度细
独立部署
独立维护
治理能力要求高
单体应用走向微服务化
服务拆分的两种姿势
什么时候进行服务化拆分?
纵向拆分:不同功能模块服务化,独立部署运维,关联密切的业务模块拆分为同一个微服务
横向拆分:独立公共的不与其他业务耦合的模块
服务拆分的前置条件
服务如何定义?
接口:协议、描述、接口名、参数、返回值
服务如何发布订阅?
注册中心
服务如何监控?
QOS、AvgTime、数据埋点、数据收集、数据处理、数据展示
服务如何治理?
性能阈值、熔断
故障如何定位?
服务调用路径
如何发布和引用服务?
服务提供者发布服务
服务消费者引用服务
RESTful API
http/https,跨语言平台
XML配置
代码入侵度高,java
IDL文件
Thrift、gRPC(protobuf),跨语言平台
如何注册和发现服务?
注册中心原理
RPC Server提供服务,启动时根据配置向Registry 注册自身服务,并定期心跳保活
RPC Client调用服务,启动时向 Registry 订阅服务,并定期心跳保活
RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感知后会刷新本地内存中缓存的服务节点列表
RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用
注册中心实现方式
注册中心 API
服务注册接口
服务反注册接口
心跳汇报接口
服务订阅接口
服务变更查询接口
集群部署
集群部署保证高可用
通过分布式一致性协议来保证集群不同节点间的数据一致->zookeeper
服务健康状态检查
超时检查
服务状态变更通知
RPC Server掉线后注册中心广播给所有RPC Client
白名单机制
白名单内的机器才能注册,防止生产环境和测试环境错乱
0 条评论
下一页