了解什么是微服务,微服务的应用场景

了解什么是微服务

参考:https://www.cnblogs.com/skabyy/p/11396571.html

一)、原有单体服务的弊端

场景演示:

需求:小明和小皮一起创业做网上超市 的故事

功能:

网站

  • 用户注册、登录功能
  • 商品展示
  • 下单

管理后台

  • 用户管理
  • 商品管理
  • 订单管理

二)、业务拓展:

  1. 网站系统增加促销活动功能
  2. 增加移动设备:微信小程序,移动App(移动设备的功能和网站的功能相同),
  3. 在后台系统添加促销管理和数据分析
  4. 四个系统共用一个数据库

业务扩展后架构出现的弊端;

1.网站和移动端应用有很多相同业务逻辑的重复代码

2.数据有时候通过数据库共享,有时候通过接口调用传输。接口调用关系杂乱

3.数据库表结构被多个应用依赖,无法重构和优化

4.所有应用都在一个数据库上操作,数据库性能急剧下降

5.开发、测试、部署、维护愈发困难, 即使只改动一个小功能,也需要整个应用一起发布 ,

三)、微服务的特点:

抽象:抽象出公用的业务能力,做成几个公共服务

解决了各应用间数据库的共用问题:一个服务对应一个数据库

数据库拆分产生的问题和挑战 :跨库级联的需求

四)、日志排查

原有单体系统的日志排查:查看日志,研究错误信息和调用堆栈

在微服务架构中,一个服务故障可能会产生雪崩效用,导致整个系统故障

五)、微服务的弊端

1.微服务架构整个应用分散成多个服务,定位故障点非常困难

2.稳定性下降,一个服务出现故障 ,可能导致整个系统挂掉

3.服务数量非常多,部署、管理的工作量很大

4.如何保证各个服务在持续开发的情况下仍然保持协同合作

5.原本单个程序的测试变为服务间调用的测试。测试变得更加复杂

六)、如何进行故障处理:

减少错误:事前监控,事后分析

降低影响:容错,服务降级

建立完善的监控体系

微服务架构中组件繁多 ,各个组件所需要监控的指标不同 ,做一个大而全的监控系统来监控各个组件是不大现实的

例如:Redis缓存监控的指标有占用内存值 ,网络流量 ,数据库监控连接数 ,磁盘空间 ,业务服务监控并发数,响应延迟、错误率等

如何实现监控:

1.各个组件提供报告自己当前状态的接口(metrics接口)

2.接口输出的数据格式一致

3.部署一个指标采集器组件,定时从这些接口获取并保持组件状态,提供查询服务

4.需要一个UI ,从指标采集器查询各项指标 ,绘制监控界面 或 根据阈值发出告警。

例如:Redis缓存和MySQL数据库的指标接口:RedisExporter和MySQLExporter (网上有开源组件)

使用采用Prometheus作为指标采集器

六)、链路跟踪

什么叫链路跟踪?

一个用户的请求往往涉及多个内部服务调用

链路跟踪 :记录每个用户请求 ,记录微服务内部产生了多少服务调用,及其调用关系

实现链路跟踪:

1)、服务调用要在HTTP的HEADERS中记录至少四项数据

1.traceId :标识一个用户请求的调用链路,具有相同traceId的调用属于同一条链路

2.spanId :标识一次服务调用的id

3.parentId : 父节点的spanId

4.requestTime & responseTime : 请求时间和响应时间

2)、调用日志收集与存储的组件,以及展示链路调用的UI组件

链路跟踪的实现过程:

使用HTTP请求的拦截器,在每次HTTP请求时生成这些数据注入到HEADERS,同时异步发送调用日志到Zipkin的日志收集器中

链路跟踪只能定位到哪个服务出现问题 ,查找具体的错误信息的能力则需要由日志分析组件来提供

日志分析

ELK(Elasticsearch、Logstash和Kibana )日志分析组件:

Elasticsearch:搜索引擎,同时也是日志的存储

Logstash:日志采集器,它接收日志输入,对日志进行一些预处理,然后输出到Elasticsearch

Kibana:UI组件,通过Elasticsearch的API查找数据并展示给用户

日志分析过程:

日志输出到文件------》每个服务里再部署个Agent,扫描日志文件 -------》输出给logstash

金麟岂能忍一世平凡 飞上了青天 天下还依然
原文地址:https://www.cnblogs.com/Auge/p/11609613.html