微服务架构
2021-08-19 15:27:38 1 举报
单体到微服务的架构发布
作者其他创作
大纲/内容
1 单体走向微服务
什么时候进行服务化拆分, 或者微服务划分的粒度?
1. 服务的关联维度进行拆分
2. 数据库隔离维度进行拆分
服务如何定义?
服务如何发布和订阅?
发布和订阅三种常见的方式:
restful api
xml 配置
IDL 文件
RPC 远程服务调用
客户端和服务端如何建立网络连接
http 通信 - 短连接
socket通信 - 长连接
服务端如何处理请求
BIO - 同步阻塞方式 - 这个比较符合我们县杂的应用场景
NIO - 同步非阻塞方式
AIO - 异步非阻塞方式
数据传输采用什么协议
数据该如何序列化和反序列化
问题: 服务器调用可不可以用消息队列
服务如何监控?
相关名词解释
监控指标
请求量
响应时间
错误率
监控纬度
监控对象
用户端监控 - 业务需求,例如:排序
用户端监控 - 业务需求,例如:排序
用户端监控 - 业务需求,例如:排序
用户端监控 - 业务需求,例如:排序
接口监控
接口监控
接口监控
接口监控
资源监控
资源监控
资源监控
资源监控
基础监控
基础监控
基础监控
基础监控
数据采集
服务如何治理?
节点管理:
注册中心主动摘除机制(心跳包)
服务消费者摘除机制
负载均衡
随机算法
轮询算法
最少活跃调用算法
一致性 Hash 算法
服务路由
业务存在灰度发布的需求
多机房就近访问的需求
服务容错
FailOver: 失败自动切换
FailBack: 失败通知
FailCache: 失败缓存
FailFast: 快速失败
服务如何定位?
2 微服务架构
服务描述
常用的服务描述方式包括 RESTful API,XML, IDL 三种
向注册中心注册服务时,声明自己是做什么的,能够提供那些服务,地址是什么
注册中心
主要是解决服务的发布和订阅,服务提供者将自己提供的服务以及地址登记到注册中心,服务消费者则从注册中心查询所需要调用的服务地址,发起请求
工作流程
注册:服务提供者 -> 注册中心
订阅:服务消费者 -> 注册中心
通知:注册中心 -> 服务消费者
调用:服务消费者 -> 服务提供者
监控:监控服务消费者和服务提供者
实现方式
注册中心API
集群部署
目录存储
服务健康状态检测
服务状态变更通知
白名单机制
服务框架
服务提供者
服务消费者
服务注册中心
服务监控
服务追踪
服务治理
3 微服务使用
服务的发布和引用
服务提供者定义接口
服务提供者发布接口
服务消费者引用接口
注册中心选型和落地
注册中心工作流程
1. 查看是否在白名单中
2. 查看注册的Cluster(服务的接口名)是否存在
3. 检查service 是否存在
4. 将节点信息添加到对应的service 和 cluster 中
反注册工作流
1. 查看 Service(服务的分组)是否存在
2. 查看 Cluster(服务的接口名)是否存在
3. 删除存储中 Service 和 Cluster 下对应的节点信息
4. 更新 Cluster 的 sign 值
查询节点信息
1. 首先从 localcache(本机内存)中查找
2. 接着从 snapshot(本地快照)中查找,
订阅服务变更
1. 服务消费者从注册中心获取了服务的信息后,就订阅了服务的变化,会在本地保留 Cluster 的 sign 值
2. 服务消费者每隔一段时间,调用 getSign() 函数,从注册中心获取服务端该 Cluster 的 sign 值,并与本地保留的 sign 值做对比,如果不一致,就从服务端拉取新的节点信息,并更新 localcache 和 snapshot。
选型
1. 应用内注册与发布
2. 应用外注册与发布
服务监控系统的搭建
集中式日志解决方案: ELK
ELK,Elasticsearch, Logstash,Kibana 三个开源软件的首字母缩写
Logstash 负责数据的收集和传输
Elasticsearch 服务数据的处理
Kibana 负责数据展示
时序数据库解决方案: Graphite, TICK, Prometheus
Graphite :Carbon, Whisper, Graphite-Web
Carbon:接收被监控节点的连接,收集各个指标的数据,将这些数据写入 carbon-cache 并最终持久化到 Whisper 存储文件中去。
Whisper
Graphite-Web
TICK: Telegraf、InfluxDB、Chronograf、Kapacitor 四个软件首字母的缩写
Prometheus
选型对比
数据收集
ELK 是通过在每台服务器上部署 Beats 代理来采集数据;
Graphite 本身没有收据采集组件,需要配合使用开源收据采集组件,比如 StatsD;
TICK 使用了 Telegraf 作为数据采集组件;
Prometheus 通过 jobs/exporters 组件来获取 StatsD 等采集过来的 metrics 信息。
数据传输
【推】ELK 是 Beats 采集的数据传输给 Logstash,经过 Logstash 清洗后再传输给 Elasticsearch;
【推】Graphite 是通过第三方采集组件采集的数据,传输给 Carbon
【推】TICK 是 Telegraf 采集的数据,传输给 InfluxDB
【拉】Prometheus 是 Prometheus Server 隔一段时间定期去从 jobs/exporters 拉取数据。
数据处理
数据展示
服务追踪系统的搭建
PinPoint - 深度支持java,
OpenZipKin
Collector:负责收集探针 Reporter 埋点采集的数据,经过验证处理并建立索引。
Storage:存储服务调用的链路数据,默认使用的是 Cassandra,是因为 Twitter 内部大量使用了 Cassandra,你也可以替换成 Elasticsearch 或者 MySQL。
API:将格式化和建立索引的链路数据以 API 的方式对外提供服务,比如被 UI 调用。
UI:以图形化的方式展示服务调用的链路数据。
工作原理:
4 微服务进行容器化运维
镜像仓库和资源调度
镜像仓库
权限控制
镜像同步
高可用
资源调度
容器调度和服务编排
容器调度:业界最有名的莫过于 Swarm、Mesos 和 Kubernetes
服务编排
服务依赖
服务发现
基于 Nginx 的服务发现
基于 注册中心的服务发现
自动扩缩容
容器运维平台DCP
5 DevOps 全新的研发流程
0 条评论
下一页