监控metric

目标

实现服务监控,监控访问时间、QPS、PCT99、错误率等服务指标。

原理

上报 <metric名, type, metic值> (当然也可以有附加信息例如tag以方便进行多维分析) 到时序数据库,结合可视化话工具进行可视化,或者进行实时分析监控报警

常见开源方案

https://www.jianshu.com/p/fadcf4d92b0e

Metrics + Influxdb + Grafana

  • metrics 一个 Java metric 上报前端,提供多种度量类型
  • Influxdb 一个常用的时序数据库,和传统数据库不同,其层级结构如下
    • database: 数据库名
    • measurement: metic名
    • points: 度量值
    • time: 时间戳(主索引)
    • field: 值
    • tags: 附加索引
  • Grafana metric可视化工具,支持多种数据源

报警平台

目标

针对开发人员配置的报警规则进行实时监控,并触发报警将报警消息和内容通过IM工具、电话、短信等方式通知业务方。

原理

  • 一个规则引擎及例行检测
  • 一个消息通知服务

常见开源方案

日志服务

目标

提供统一的日志收集存储查询,支持

  • 支持调用链视图
  • 支持日志搜索
  • 支持日志上下文查询

原理

日志统一收集,存储 (log agent、消息总线、存储后端)

常见开源方案

EKL (Elasticsearch、Logstash、Kibana)

Service Mesh

https://jimmysong.io/posts/what-is-a-service-mesh/

目标

将微服务的服务发现、断路器、RPC协议从微服务中抽离出来。微服务开发更加专注于业务开发,解耦业务与远程调用重试/超时/监控/追踪/服务发现/鉴权。并提供全局视图的可视化管理和治理

原理

  • 制定一个统一的标准和规范
  • 提供一个agent/框架/工具集提供上述功能
  • 对一系列(开源)方案的整合

常见开源方案

Envoy、Istio、Conduit等

负载均衡

目标

面对超大流量,一个实例无法cover,一定是多实例部署。此时需要负载均衡来将流量均匀的分发到每个实例中。

原理

软硬两类: 软件负载均衡(链家)、硬件负载均衡

共有3中方式:

  • DNS负载均衡
  • 4层负载均衡(TCP/UDP层) LVS
  • 7层负载均衡(HTTP层) Nginx

常见开源方案

智能DNS -> LVS -> Nginx

二进制产物版本管理

目标

对源代码的二进制产物进行管理

原理

中心仓库

常见开源方案

  • Java Maven 的 nexus
  • Python pip
  • NodeJS 的 npm

混沌工程

https://segmentfault.com/a/1190000018059404

效能平台

https://qiankunli.github.io/2018/10/15/r&d_efficiency.html

部署平台

目标

便捷的上线

原理

一般有两种方式:

  • 裸机部署:部署到虚拟机/物理机上的进程
  • 容器化部署:部署到容器中

常见的开源方案

  • 容器化部署: k8s
  • 裸机部署: 使用守护进程的方式管理