tidb 中关于 etcd go 开发的一点疑惑
type Client struct {
Cluster
KV
Lease
Watcher
Auth
Maintenance
conn *grpc.ClientConn
cfg Config
creds grpccredentials.TransportCredentials
resolver *resolver.EtcdManualResolver
mu *sync.RWMutex
ctx context.Context
cancel context.CancelFunc
// Username is a user name for authentication.
Username string
// Password is a password for authentication.
Password string
authTokenBundle credentials.Bundle
callOpts []grpc.CallOption
lgMu *sync.RWMutex
lg *zap.Logger
}
func newClient(cfg *Config) (*Client, error) {
.....
client.Cluster = NewCluster(client)
client.KV = NewKV(client)
client.Lease = NewLease(client)
client.Watcher = NewWatcher(client)
client.Auth = NewAuth(client)
client.Maintenance = NewMaintenance(client)
....
}
// NewLease 创建一个新的 Lease 实例。
func NewLease(client *clientv3.Client, purpose string) *Lease {
// 返回一个 Lease 结构体的指针。
return &Lease{
// 设置选举目的。
Purpose: purpose,
// 传入 etcd 客户端。
client: client,
// 基于主客户端创建一个专门用于租约操作的客户端。
lease: clientv3.NewLease(client),
}
}
在这个代码中,我记得一个 client 在构建的时候,会调用 newClient()通过配置好的 cfg 创建一个 client 结构体对象。那么,内部的接口已经赋值了具体的 Lease 对象“client.Lease = NewLease(client)”.
这个 NewLease 的实现是 TiDB 中的代码,代码中大量使用这种类似“职责分离”的逻辑,就是明明已经有了一个 etcd 的 client 对象了,还要额外再创加一个专门的 lease 的客户端对象。
这种代码实践是一种生产中是一种类似“最佳实践”的做法吗。
这种专门再创建一个 lease ,我能想到的理由如下:
1. 职责分离,不同的功能客户端负责各自的操作
2. 传进来的 client 可能只是一个声明好的空结构体,内部没有进行赋值。
不知道有没有看过 tidb 的大佬解惑这种设计。
type Client struct {
Cluster
KV
Lease
Watcher
Auth
Maintenance
conn *grpc.ClientConn
cfg Config
creds grpccredentials.TransportCredentials
resolver *resolver.EtcdManualResolver
mu *sync.RWMutex
ctx context.Context
cancel context.CancelFunc
// Username is a user name for authentication.
Username string
// Password is a password for authentication.
Password string
authTokenBundle credentials.Bundle
callOpts []grpc.CallOption
lgMu *sync.RWMutex
lg *zap.Logger
}
func newClient(cfg *Config) (*Client, error) {
.....
client.Cluster = NewCluster(client)
client.KV = NewKV(client)
client.Lease = NewLease(client)
client.Watcher = NewWatcher(client)
client.Auth = NewAuth(client)
client.Maintenance = NewMaintenance(client)
....
}
// NewLease 创建一个新的 Lease 实例。
func NewLease(client *clientv3.Client, purpose string) *Lease {
// 返回一个 Lease 结构体的指针。
return &Lease{
// 设置选举目的。
Purpose: purpose,
// 传入 etcd 客户端。
client: client,
// 基于主客户端创建一个专门用于租约操作的客户端。
lease: clientv3.NewLease(client),
}
}
在这个代码中,我记得一个 client 在构建的时候,会调用 newClient()通过配置好的 cfg 创建一个 client 结构体对象。那么,内部的接口已经赋值了具体的 Lease 对象“client.Lease = NewLease(client)”.
这个 NewLease 的实现是 TiDB 中的代码,代码中大量使用这种类似“职责分离”的逻辑,就是明明已经有了一个 etcd 的 client 对象了,还要额外再创加一个专门的 lease 的客户端对象。
这种代码实践是一种生产中是一种类似“最佳实践”的做法吗。
这种专门再创建一个 lease ,我能想到的理由如下:
1. 职责分离,不同的功能客户端负责各自的操作
2. 传进来的 client 可能只是一个声明好的空结构体,内部没有进行赋值。
不知道有没有看过 tidb 的大佬解惑这种设计。
[远程]轻应用服务|运维工程师 15k
公司成立于 2024 年 1 月,位于香港
专注于提供创新的 SaaS 解决方案,致力于提供包括云应用、安全数据管理、以用户为中心的应用开发以及强大的技术支持在内的高质量服务。
产品和服务范畴包括:定制应用开发、全面的服务提供、战略市场扩张、积极的业务和财务规划。
核心服务涵盖:应用服务、数据存储和管理、安全服务、广告技术支持、客户服务,以及系统整合和 API 。
通过这些产品和服务,本公司立志成为信息通信领域的创新领导者。
你的核心职责将包括:
1. 云平台维护与实施: 参与公有云(阿里云/AWS/华为云)、私有云及混合云环境的日常运维和优化工作,根据既定方案执行架构的部署与变更。
2. Kubernetes 日常运维: 负责 K8s 集群的日常稳定运行,能够独立完成应用的容器化发布、监控、配置变更和常规的扩缩容操作。
3. 高可用架构维护: 参与高可用和容灾体系的建设与维护工作,熟悉负载均衡、数据备份等常用技术,并能够执行相关的运维预案。
4. 监控与故障响应: 使用和维护团队的监控告警系统,对线上服务进行日常巡检,分析并协助处理性能问题和各类告警事件。
5. 中间件基础运维: 负责常用中间件(如 Redis, Nginx, Kafka 等)的日常部署、配置更新和基本的问题排查。
6. 运维脚本编写: 参与团队的自动化工作,能使用 Python/Shell 等脚本语言编写自动化运维脚本,以提升日常工作效率。
我们对你的期待:
- 具备 3 年及以上云平台相关运维经验,有扎实的动手能力和良好的学习能力。
待遇:
薪资 15k 左右 随面试评级 长期远程
8 小时,双休, 跟随国家法定假日
年终至少 13 薪、项目盈利分红.
邮箱:am9rZXJzc21pdGg4OUBnbWFpbC5jb20K
公司成立于 2024 年 1 月,位于香港
专注于提供创新的 SaaS 解决方案,致力于提供包括云应用、安全数据管理、以用户为中心的应用开发以及强大的技术支持在内的高质量服务。
产品和服务范畴包括:定制应用开发、全面的服务提供、战略市场扩张、积极的业务和财务规划。
核心服务涵盖:应用服务、数据存储和管理、安全服务、广告技术支持、客户服务,以及系统整合和 API 。
通过这些产品和服务,本公司立志成为信息通信领域的创新领导者。
你的核心职责将包括:
1. 云平台维护与实施: 参与公有云(阿里云/AWS/华为云)、私有云及混合云环境的日常运维和优化工作,根据既定方案执行架构的部署与变更。
2. Kubernetes 日常运维: 负责 K8s 集群的日常稳定运行,能够独立完成应用的容器化发布、监控、配置变更和常规的扩缩容操作。
3. 高可用架构维护: 参与高可用和容灾体系的建设与维护工作,熟悉负载均衡、数据备份等常用技术,并能够执行相关的运维预案。
4. 监控与故障响应: 使用和维护团队的监控告警系统,对线上服务进行日常巡检,分析并协助处理性能问题和各类告警事件。
5. 中间件基础运维: 负责常用中间件(如 Redis, Nginx, Kafka 等)的日常部署、配置更新和基本的问题排查。
6. 运维脚本编写: 参与团队的自动化工作,能使用 Python/Shell 等脚本语言编写自动化运维脚本,以提升日常工作效率。
我们对你的期待:
- 具备 3 年及以上云平台相关运维经验,有扎实的动手能力和良好的学习能力。
待遇:
薪资 15k 左右 随面试评级 长期远程
8 小时,双休, 跟随国家法定假日
年终至少 13 薪、项目盈利分红.
邮箱:am9rZXJzc21pdGg4OUBnbWFpbC5jb20K
[携程 Trip.com] 内推|前端-技术专家|酒店研发|上海|团队技术氛围浓厚
Hi 各位 V 友
携程 (这几年股价大涨,市值已超百度😂) 住宿业务 正在招聘一位**前端技术专家**( 酒店研发 方向),base 上海,携程总部。
非猎头,团队氛围好,技术挑战足,欢迎志同道合的朋友投递!
办公地点:上海市长宁区金钟路 968 号凌空 SOHO Zaha Hadid 设计的超酷办公楼,外形宛如 4 列巨型高铁蓄势待发的商业楼宇凌空 SOHO ,已经取得了美国 LEED 金级预认证。
员工食堂;享受免费健身房:跑步机、桌球、桌上足球、按摩椅、淋浴房;各式各样的餐厅、下午茶满足你对食物的绝对味蕾,更多细节欢迎来现场参观。
投递后可帮你跟进进度,非猎头。
🏢 **办公环境**
• 地标办公:上海长宁金钟路凌空 SOHO (扎哈·哈迪德设计地标建筑)
• 员工食堂 | 免费健身房(跑步机/桌球/按摩椅)| 咖啡下午茶
• LEED 金级认证绿色建筑,地铁 2 号线直达
💡 **简单介绍下**
• 主导亿级流量业务技术架构,驱动携程/ Trip.com 全端体验升级
• 技术深度×业务广度:RN/Flutter/Taro 跨端整合 + 用户体验极致优化
• 团队管理能力培养通道,接触国际化技术项目
🔍 **工作职责**
• 构建酒店业务大前端技术架构,制定高可用开发规范(覆盖 APP/H5/PC/小程序)
• 搭建高效集成开发环境,推动跨业务线技术标准落地
• 主导新技术研究(如 RN/Flutter/Taro 深度优化),通过技术驱动业务增长
• 从用户视角出发,系统性提升前端体验与性能
⭐ **任职要求**
• **5 年+** 大前端开发经验,精通 **RN/Flutter/Taro** 等跨端技术( 2 年团队管理经验加分)
• 大前端技术社区活跃贡献者/开源项目主导者优先
• 具备**性能优化全局视野**,能突破代码层解决系统性瓶颈
• 拥有大前端研发效能提升方法论,推动过大型项目架构升级
• 对用户体验有极致追求,善于产品化思维
🚀 **加分项**
• 英语流利 + 海外项目经验
• 移动端设计能力 + Node.js 服务端开发经验
• 技术影响力:发表过技术论文/大型会议演讲者
📬 **联系我(备注「前端」)**
微信:

投递后实时跟进进度
Hi 各位 V 友
携程 (这几年股价大涨,市值已超百度😂) 住宿业务 正在招聘一位**前端技术专家**( 酒店研发 方向),base 上海,携程总部。
非猎头,团队氛围好,技术挑战足,欢迎志同道合的朋友投递!
办公地点:上海市长宁区金钟路 968 号凌空 SOHO Zaha Hadid 设计的超酷办公楼,外形宛如 4 列巨型高铁蓄势待发的商业楼宇凌空 SOHO ,已经取得了美国 LEED 金级预认证。
员工食堂;享受免费健身房:跑步机、桌球、桌上足球、按摩椅、淋浴房;各式各样的餐厅、下午茶满足你对食物的绝对味蕾,更多细节欢迎来现场参观。
投递后可帮你跟进进度,非猎头。
🏢 **办公环境**
• 地标办公:上海长宁金钟路凌空 SOHO (扎哈·哈迪德设计地标建筑)
• 员工食堂 | 免费健身房(跑步机/桌球/按摩椅)| 咖啡下午茶
• LEED 金级认证绿色建筑,地铁 2 号线直达
💡 **简单介绍下**
• 主导亿级流量业务技术架构,驱动携程/ Trip.com 全端体验升级
• 技术深度×业务广度:RN/Flutter/Taro 跨端整合 + 用户体验极致优化
• 团队管理能力培养通道,接触国际化技术项目
🔍 **工作职责**
• 构建酒店业务大前端技术架构,制定高可用开发规范(覆盖 APP/H5/PC/小程序)
• 搭建高效集成开发环境,推动跨业务线技术标准落地
• 主导新技术研究(如 RN/Flutter/Taro 深度优化),通过技术驱动业务增长
• 从用户视角出发,系统性提升前端体验与性能
⭐ **任职要求**
• **5 年+** 大前端开发经验,精通 **RN/Flutter/Taro** 等跨端技术( 2 年团队管理经验加分)
• 大前端技术社区活跃贡献者/开源项目主导者优先
• 具备**性能优化全局视野**,能突破代码层解决系统性瓶颈
• 拥有大前端研发效能提升方法论,推动过大型项目架构升级
• 对用户体验有极致追求,善于产品化思维
🚀 **加分项**
• 英语流利 + 海外项目经验
• 移动端设计能力 + Node.js 服务端开发经验
• 技术影响力:发表过技术论文/大型会议演讲者
📬 **联系我(备注「前端」)**
微信:

投递后实时跟进进度
想把一个解决方案卖给前公司,可行性&如何操作
前公司 A, 现公司 B,
公司 A 和公司 B 没有任何业务联系和利益冲突,
在公司 A 的时候,业务同事提过一个需求(称为需求 X 吧),
这个需求 X 当时很多技术人员试过了都没解决,
当时我随便弄了下发现效果不好就没继续深入了,
入职 B 公司之后,看了一些新的开源技术资料,
突然找到了解决需求 X 的方法,
我突然想是不是可以包装一下然后卖给公司 A ,
毕竟也是解决了 A 公司实际的业务问题,
解决这个需求 X 对公司 A 来说经济价值很大,
问题:
1) 关于合规性,在 B 公司任职期间,接类似外包的活,是不是违规,
2) 关于公司是否可以直接采购个人的技术方案,有没有 有经验的老哥说说...
感谢
前公司 A, 现公司 B,
公司 A 和公司 B 没有任何业务联系和利益冲突,
在公司 A 的时候,业务同事提过一个需求(称为需求 X 吧),
这个需求 X 当时很多技术人员试过了都没解决,
当时我随便弄了下发现效果不好就没继续深入了,
入职 B 公司之后,看了一些新的开源技术资料,
突然找到了解决需求 X 的方法,
我突然想是不是可以包装一下然后卖给公司 A ,
毕竟也是解决了 A 公司实际的业务问题,
解决这个需求 X 对公司 A 来说经济价值很大,
问题:
1) 关于合规性,在 B 公司任职期间,接类似外包的活,是不是违规,
2) 关于公司是否可以直接采购个人的技术方案,有没有 有经验的老哥说说...
感谢
cursor remote ssh 下载 vscode 服务器很慢
如题,我使用 cursor 的 remote ssh 下载 vscode 服务器的时候,下载速度很慢,连接一台机器可能要数分钟甚至十几分钟。
关于 vscode 的这个问题,已经有充分的解决方案了,例如查找 commitid 之后执行替换脚本( https://zhuanlan.zhihu.com/p/655289233 ),然后我看似乎关于 cursor 并没有一个公认的解决方案。
cursor 的论坛上已经有很多人反应了这个问题,但是似乎目前没有一个办法来解决。( https://forum.cursor.com/t/cursor-takes-a-very-long-time-at-start-downloading-vscode-server/47684 )
求问万能的 v 友,有没有解决方案?
如题,我使用 cursor 的 remote ssh 下载 vscode 服务器的时候,下载速度很慢,连接一台机器可能要数分钟甚至十几分钟。
关于 vscode 的这个问题,已经有充分的解决方案了,例如查找 commitid 之后执行替换脚本( https://zhuanlan.zhihu.com/p/655289233 ),然后我看似乎关于 cursor 并没有一个公认的解决方案。
cursor 的论坛上已经有很多人反应了这个问题,但是似乎目前没有一个办法来解决。( https://forum.cursor.com/t/cursor-takes-a-very-long-time-at-start-downloading-vscode-server/47684 )
求问万能的 v 友,有没有解决方案?
随便做个 AI 网站给人玩,都有人 D

已经做了限流,还是轻松刷光了余额。还好本来也所剩无几。下次要加 ban ip 的措施。

已经做了限流,还是轻松刷光了余额。还好本来也所剩无几。下次要加 ban ip 的措施。
感谢 AI,我的 GoTab 新标签页终于实现了 docker 部署!
前排感慨一下 AI 的强大,对我的帮助是显而易见的,让我本不是科班出身的小白,凭借兴趣也能编写了这么一个新标签页,有不少人提到 docker 部署,但是我是一点都不了解,在 ai 的帮助下,倒腾了一天,终于算是完成了!
### 成果

### 项目地址
[https://github.com/dengxiwang/gotab-personal]( https://github.com/dengxiwang/gotab-personal)
### 官网
[https://www.gotab.cn]( https://www.gotab.cn)
### 在线预览
demo 地址:[https://test.gotab.cn]( https://test.gotab.cn)
用户名:admin ,密码:123456
## docker 部署
```
docker run -d \
--name gotab-server \
-p 8080:8080 \
-v $(pwd)/data:/app \
-e SERVER_PORT=8080 \
--restart unless-stopped \
doxwant/gotab:latest \
./gotab-server -port=8080
```
> **页面预览**



前排感慨一下 AI 的强大,对我的帮助是显而易见的,让我本不是科班出身的小白,凭借兴趣也能编写了这么一个新标签页,有不少人提到 docker 部署,但是我是一点都不了解,在 ai 的帮助下,倒腾了一天,终于算是完成了!
### 成果

### 项目地址
[https://github.com/dengxiwang/gotab-personal]( https://github.com/dengxiwang/gotab-personal)
### 官网
[https://www.gotab.cn]( https://www.gotab.cn)
### 在线预览
demo 地址:[https://test.gotab.cn]( https://test.gotab.cn)
用户名:admin ,密码:123456
## docker 部署
```
docker run -d \
--name gotab-server \
-p 8080:8080 \
-v $(pwd)/data:/app \
-e SERVER_PORT=8080 \
--restart unless-stopped \
doxwant/gotab:latest \
./gotab-server -port=8080
```
> **页面预览**


