什么是服务治理?
相信每一个软件公司(企业)都希望可以确保开发及项目运行流程可以顺利,但是如果要完美完结那么需要其中会有很多的因素存在。包括,最佳实践、架构原则、服务治理以及其他决定性的因素。而其中服务治理指的是⽤来管理SOA(微服务)所采⽤和实现的重要环节和因素。下图就算是一个较为完整得RPC模型得服务治理体系机制。
典型的问题
- 变更管理:变更⼀个服务通常会引起不可预⻅的后果,因为服务的消费者对服务的提供者来说是不可知的。
- 服务质量的保证:弹性添加新服务需要对这些服务给予额外的关注。
分布式应⽤的治理
服务注册与发现
单体服务拆分为微服务,如果微服务之间存在调⽤依赖,就需要得到⽬标服务的服务地址,也就是微服务治理的”服务发现“。要完成服务发现,就需要将服务信息存储到某个载体(实例),载体本身是微服务治理的”服务注册中⼼“,存储到载体的动作即是”服务注册“。
服务得可观测性
微服务由于较单体应⽤有了更多的部署实例,需要对众多服务间的调⽤关系、状态有清晰的掌控。
可观测性就包括了调⽤拓扑关系、监控(Metrics)、⽇志(Logging)、调⽤追踪(Trace)等,所下图所示,可以通过采用中心进行流量控制得限流控制能力。
服务流量管控
微服务本身存在不同版本,在版本迭代得过程中,需要对微服务间调⽤进⾏控制,以完成微服务版本更迭的平滑。
流量管控主要是根据流量的特征(访问参数等)、百分⽐向不同版本服务分发,这也孵化出灰度发布、蓝绿发布、A/B测试等服务治理的主题,
面向的统计流量范围,主要包含请求打进来的流量管理和微服务之间的流量管理
服务安全控制
安全
不同微服务承载⾃身独有的业务职责,对于业务敏感的微服务,需要对其他服务的访问进⾏认证与鉴权,也就是安全问题。
控制
当服务治理能⼒充分建设后,就需要有⾜够的控制能⼒,能实时进⾏服务治理策略向微服务分发。
监控
监控的可视化
监控的可视化,随时了解系统运⾏情况帮助我们快速定位问题。
- 通过数据采样分析进行分析对应得上报数据从而帮助我们快速定位问题。
- 通过上报数据的信息,进行多维度的指标计算,方便我们时时刻刻的进行分析系统服务,打造全方位的监控体系。
监控维度
在我们日常的实际项⽬中,我们实现了四种维度的监控。
容器实例级别的监控
针对于使用的容器服务,例如:Docker、Podman或者moby服务,k8s的pod(单pod只管理一个容器)级别,那么我们监控的就是容器内部的服务级别,可以理解为实例级别,例如下图我们的crm容器实例,下面每一个容器都是一个监控对象
针对于SpringBoot的应⽤,我们一般处了专门的监控服务,例如,夜莺、Zabbix和Promethus等,还可以参考SpringBoot-Admin,⾃⼰实现了⼀套监控界⾯,监控Spring Boot应⽤。
- Zabbix(https://www.zabbix.com/)
- Nagios(https://www.nagios.org/)
- open-falcon(https://github.com/XiaoMi/open-falcon)
主要指标
- Spring Boot Admin:https://github.com/codecentric/spring-boot-admin
- GC/threaddump/heapdump⽇志的分析:http://gceasy.io/
应⽤实例级别的监控
针对于应用级别的服务实例监控,例如我们有crm服务系统,那么如果我们集群部署、分布式部署等方式,那么会针对于将应用的整体,下图就是整体的应用体系作为一个指标对象,它的指标对象监控维度就是将所有的内部的容器实例监控指标合并。
- Prometheus(https://github.com/prometheus/prometheus, 当然Prometheus不仅能监控容器,还能监控数据库、操作系统,甚⾄可以和Spring Boot集成,但⽬前业界主要⽤来监控容器。
系统级的监控
调⽤链监控
- Sleuth + Zipkin,可选的调⽤链监控⼯具。
- SkyWalking(https://github.com/apache/incubator-skywalking),示例项⽬:http://49.4.12.44:8080/#/user/login)
- PinPoint(https://github.com/naver/pinpoint)
⽇志监控及优化
- Skywalking快速找到性能瓶颈
- ELK分析⽇志快速找到问题
JVM监控及调优工具推荐
- GCPlot(https://github.com/dmart28/gcplot):GC⽇志打印,并⽤⼯具分析
- FastThread(http://fastthread.io/):
- GCEasy(http://gceasy.io/):dump堆、dump线程,并⽤⼯具分析
- VisualVM/JDK Mission Control等⼯具帮助我们分析问题
中间件级别监控
Zabbix监控是一个老牌劲旅了。
Redis监控
- Redis Live(https://github.com/nkrode/RedisLive)
- Redis Stat(https://github.com/junegunn/redis-stat)
- Cache Cloud(https://github.com/sohutv/cachecloud)
- Prometheus(https://github.com/prometheus/prometheus)
Kafka监控
- Kafka Manager(https://github.com/yahoo/kafka-manager)
MySQL
- MyCAT(https://github.com/MyCATApache/Mycat-Server)