腾讯微服务平台TSF初探

本文最后更新于 2024年12月2日 晚上

腾讯微服务平台TSF

简介

腾讯微服务平台(Tencent Service Framework,TSF)是一个围绕着应用和微服务的 PaaS 平台,提供应用全生命周期管理、数据化运营、立体化监控和服务治理等功能。TSF 拥抱 Spring Cloud 、Service Mesh 微服务框架,帮助企业客户解决传统集中式架构转型的困难,打造大规模高可用的分布式系统架构,实现业务、产品的快速落地。针对原生 Spring Cloud 应用与 Mesh 方式零成本接入。

结构

tsf架构图

简单理解

  • 微服务 + 部署(主机版本/容器版本)
  • 集成了微服务常用组件,提供了SDK一键接入
  • 为运维提供了一套操作页面,用于部署发布

微服务

TSF集成了微服务中常用的组件,做到了快速集成,简化了应用开发,提高了集成效率:

  • 服务注册与发现:spring-cloud-tsf-consul-config
  • 配置中心:spring-cloud-tsf-consul-discovery
  • 服务调用:spring-cloud-starter-openfeign
  • 调用链路监控:spring-cloud-tsf-sleuth
  • 鉴权:spring-cloud-tsf-auth
  • 限流:spring-cloud-tsf-ratelimit
  • 路由:spring-cloud-tsf-route
  • 熔断:spring-cloud-tsf-circuitbreaker
  • 日志收集:spring-cloud-tsf-logger
  • 任务调度:spring-cloud-tsf-schedule
  • API文档:spring-cloud-tsf-swagger
  • 灰度发布:spring-cloud-tsf-lane

与Spring Cloud Alibaba对比:

  • Alibaba套件,仅针对开发侧,运维侧未涉及
  • Alibaba需要自己部署维护Nacos
  • 需要对微服务用到的各个组件包装
  • Alibaba没有统一的部署平台,需要搭建其他组件(Docker、Kubernetes),TSF天然支持

容器部署

TSF基于腾讯容器服务TKE,TKE基于谷歌开源的容器编排平台Kubernetes

虚机部署

基于传统虚拟机CVM部署

TKE:Tencent Kubernetes Engine

简介

腾讯云容器服务(Tencent Kubernetes Engine,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的云硬盘、负载均衡等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高了大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。容器服务提供免费使用,涉及的其他云产品另外单独计费。

简单理解:

k8s的自研UI界面

容器技术

Docker

简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

优势

  • 快速,一致地交付您的应用程序:
    Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
  • 响应式部署和扩展:Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
  • 在同一硬件上运行更多工作负载:Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

基本概念

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。

docker架构图

Kubernetes:k8s

简介

Kubernetes(简称K8S)是开源的容器集群管理系统,在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
目前 Kubernetes 已经放弃Docker,采用了Contained容器技术。

功能

  • 基于容器的应用部署、维护和滚动升级
  • 负载均衡和服务发现
  • 跨机器和跨地区的集群调度
  • 自动伸缩
  • 无状态服务和有状态服务
  • 广泛的 Volume 支持
  • 插件机制保证扩展性

架构

k8s架构图

  • etcd:保存了整个集群的状态
  • apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制
  • controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
  • scheduler:负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上
  • kubelet:负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理
  • Container runtime:负责镜像管理 Pod 和容器的真正运行(CRI)
  • kube-proxy:负责为 Service 提供 cluster 内部的服务发现和负载均衡
  • COREDNS:为集群中SVC创建一个域名IP的对应关系解析
  • INGRESS Controller:七层代理,官方只提供四层代理
1
2
3
Kubernetes有两个不同的部分构成,一个是Master,一个是Node。Master负责调度资源和为客户端提供API,客户端可以是UI界面或者CLI工具,在Kubernetes中CLI工具通常为kubectl。
Kubernetes Master接受使用YAML定义的配置文件,根据配置文件中相关信息将容器分配到其中一个Node上。
Master有三个组件:API Server、Scheduler、Controller。API Server提供了友好易用的API供外部调用,同时有很多强大的工具使得API调用更加简单

核心概念

  • pod:k8s调度的最小调度单元,一个pod中可以有多个容器,多个容器共享网络和存储卷
  • deployment:封装了pod/replicaset,可以实现指定pod副本数量,滚动更新,扩容pod,一般一个应用(服务)一个deployment
  • statefullSet:相当于有状态服务的deployment,重启后,主机名和pod的名称不会改变
  • daemonSet:在每个node节点都需要运行的pod可以使用daemonSet
  • job: 一次性任务
  • cronJob:类似于crontab定时执行任务
  • service:kubernetes抽象出来一个概念,可以理解为负载均衡器,后端接pod
  • loadbalancer: 对集群外部暴露集群内部service的一种方式,一般只有在云平台才能使用
  • cluster ip:service在集群中的ip,相当负载均衡器的ip
  • ingress: 对集群外部暴露集群内部service的一种方式
  • dns:kube-dns/coredns提供集群中的dns服务,可以解析service到cluster ip,实现服务发现
  • nodeport: 对集群外部暴露服务的第二种方式,跟随service配置,让集群中的node节点都监听相应的端口,可以通过node节点访问集群内部service
  • pv:管理员用来提前创建好的存储空间,供用户申请使用
  • pvc:用户用来申请存储空间
  • storageClass:定义存储类供pvc使用,当用户通过pvc并指定storageClass请求pv时kubernetes可以根据storageClass动态创建pv

参考资料


腾讯微服务平台TSF初探
https://www.bugfree.top/2023/01/05/tsf/tsf初探/
作者
lizhenguo
发布于
2023年1月5日
更新于
2024年12月2日
许可协议