tidb server是无状态的,这个“无状态”如何理解?

TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。
我一直不理解这个“无状态”是什么意思?麻烦老师们指导一下,这里“状态”指的是什么?

无状态是指不存储数据,节点间没有角色的却分,比如主从,leader follow 之类的

2 个赞

不存储数据,跟应用一样,我可以启动一个进程,也可以启动多个互相之间都不影响

可以新增N 个节点,然后在能足够负载处理的情况下,可以拿掉 N 个节点,从这个视角看会比较容易…

整个过程是对服务处理无影响,,

不存储数据,处理请求时不会维持任何关于客户端状态的信息。每个请求都是独立的,服务不依赖于之前的请求状态或会话信息

无状态是指不存储具体数据,某个节点宕了也不影响整个集群使用
存储和 SQL 所依赖的计算资源是不一样的,存储会依赖 IO,而计算对 CPU 以及内存的要求会更高
在 TiDB 中 SQL 层是无状态的
具体来讲,首先你得清楚什么是“有状态”和“无状态
无状态的服务
客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份。服务端不保存任何客户端请求者信息。

无状态的好处?

  • 客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务
  • 服务端的集群和状态对客户端透明 =-服务端可以任意的迁移和伸缩 =-减小服务端存储压力

什么是有状态?
有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如 tomcat 中的 session。
例如登录:用户登录后,我们把登录者的信息保存在服务端 session 中,并且给用户一个 cookie 值,记录对应的 session。然后下次请求,用户携带 cookie 值来,我们就能识别到对应 session,从而找到用户的信息。
对于状态的理解,请参考分布式系统中的“无状态”和“有状态”详解-腾讯云开发者社区-腾讯云

对比 pd 有 leader , tikv store 有 region leader
tidb 有 gc owner 等,状态性不强

无状态变迁,无主从之分

无状态是不存储数据的,tidb server全部没了,tidb 也不会丢失数据。

无状态就是可以原地复活不掉装备。
有状态有可能会被爆装备(丢数据)。

不存储数据.

无状态就是这个节点tidb server连同机器都没了,也不会丢数据

我理解就是不存储数据,机器挂了也不丢数据,但是查询服务还是会有影响的

随便开关机,增删节点都不影响正常服务

简单点说,就是不存储TIDB Server自身的集群参数外的任何数据

服务挂了不影响数据存储

所谓无状态是指,没有数据,执行都在server内存里,不影响数据库运行。

参考官方文档,有这两方面解释
1、TiDB 实例本身无状态,实例之间无法感知到彼此的存在,也就无法确认自己的写入与别的 TiDB 实例是否存在冲突。
2、TiDB 节点都是无状态的,节点本身并不存储数据,节点之间完全对等。

无状态,就是没有要保存的数据,没有有要持久化的数据。

我是把tidbserver当成nginx理解的