服务治理的演进:Kubernetes横空出世、springcloud、服务网格

242 阅读3分钟

Kubernetes横空出世

解决了哪些问题

  • 如果5个服务 3个副本 那么手工管理就可以了
  • 如果大规模容器 交给k8s框架本身

Kubernetes成为事实上的编排标准

它为何这般茁壮?

  • Spring Cloud仅限于Java,而Kubernetes适用于所有编排语言,且解决更广泛的MSA的问题
  • Kubernetes还支持
    • 配置环境
    • 设置资源约束
    • RBAC
    • 管理应用程序生命周期
    • 启用自动扩展和自我修复等
    • 自带反脆弱能力

一句话总结

Kubernetes是一套容器编排系统 为服务治理 底层基础设施

k8s矩阵覆盖

image.png

配置管理

  • config map 、secrets

服务发现

  • Kubernets Service
  • Ingerss Resources

服务发布

  • Kubernets Service
  • Ingerss Resources

负载均衡

  • Kubernets Service

日志中心

EFK stack

监控指标中心

promethues grafana

链路追踪

opentracing zipkin

韧性 容错能力

  • Kubernets health check
  • resource isolation 资源隔离

自动伸缩 自愈能力

  • Kubernets health check
  • self healing 自愈
    • 如果删除pod 会自动创建出来
  • autoscaling

打包

  • Docker

部署

  • Deployment
  • statefulset
  • operater

调度

  • Kubernets scheduler 高级的调度机制

作业管理

  • Kubernets Jobs
  • Scheduled Jobs 周期性作业

自主应用

  • Kubernets Pod

kubernetes的问题

  • 没有针对不同的平台(例如 Spring Cloud for JVM)进行优化
  • 非以开发人员为中心的平台,对DevOps目标的用户具有更友好的特性

解决方案是什么?

image.png

研发人员借助 Spring cloud框架开发微服务 运维人员借助 Kubernets 以容器化的方式编排、部署、运维 微服务

带来的问题

Spring cloud和Kubernets很多东西重合了, 使得系统变得很冗余

image.png

背景 克服服务通信和治理的复杂性,例如服务发现、融合、节流和端到端跟踪的挑战,需要用到专门的微服务治理框架

  • 微服务框架,如 HSF、Dubbo 或 Spring Cloud,将这些能力打包成代码库,形成SDK
  • 程序员开发微服务时,将这些代码库内置于应用程序中,并随应用程序一起发布和维护

问题2 存在问题:库模型可能会抽象出满足微服务架构所需要的特性,但它本身仍然是一个需要维护的组件

  • 学习和使用库需要相当程度力量的投入

  • 本质上,服务通信和治理是横向连接不同部门的系统,因此与业务逻辑是正交的;

  • 但是,在微服务架构中,实现和生命周期是与业务逻辑耦合的,微服务框架的升级会导致整个服务应用的重新构建和重新部署

  • 代码库通常与特定语言绑定,因此难以支持企业应用程序的多语言实现

Sidecar

旁挂程序 边车代理

SDK的东西放到 sidecar中 每次更新 不会影响其他服务 image.png

功能分离开 自己完成自己的功能 基础网络由tcpip

image.png SDK自己发布 sidcar 不需要重新发布SDK工具 开发时遵循微服务的体系 遵循契约和规范 开发自己的代码就行了

Service Mesh 服务网格

在Kubernets的上层 加一个服务治理框架

将服务治理能力下沉到基础设施中,并将它们部署为服务消费者和服务提供者的独立流程

image.png

  • 每个服务都使用一个专用的代理Sidecar来完成高级网络功能
  • 各服务间仅通过Sidecar代理互相通信
  • 各代理之间形成了一个网状网络,2017年,William为其创建一个专用定义,并称之为Service Mesh

新一代Service Messh: 为Service Mesh中各独立工作的代理提供集中式的“控制平面

image.png

  • 实际的服务流量仍然直接在各代理之间完成,但控制平面知道每个代理实例
  • 控制平面使代理能够实现诸如访问控制和指标收集之类的事情

istio linkerd 最大程度上复用了Kubernets的能力 替代了spring cloud

“服务治理”方式的演进小结

image.png