- 博客(39)
- 收藏
- 关注
原创 简单的 k8s 部署分布式Go微服务集群实例
查看所有Pod状态(均为Running) kubectl get pods # 查看服务列表 kubectl get svc # 测试外部访问(替换为集群节点IP) curl http://节点IP:30080/api/user/health # 预期返回:{"status":"healthy"}服务发现与通信K8s通过CoreDNS组件为Service分配域名(如),服务间通过域名+端口通信,无需关心Pod动态IP。高可用保障。
2025-09-08 13:50:19
1223
原创 腾讯云TDSQL-C 与传统MySQL对比
传统MySQL是单机数据库的经典实现,适合简单、小规模场景;而TDSQL是为分布式、高并发、高可用场景设计的企业级数据库,通过兼容MySQL降低迁移成本,同时提供弹性扩展、金融级容灾等高级特性。选型建议:中小规模、简单业务优先用传统MySQL(或云数据库MySQL版,如腾讯云CVM上的MySQL);大规模、核心业务、高可用需求场景,优先选择TDSQL。
2025-09-07 13:03:10
1501
原创 Raft 协议:分布式系统的一致性解决方案
Raft 协议通过“角色划分”“任期机制”将分布式一致性问题拆解为“Leader 选举”“日志复制”“安全性保障”三个可管理的流程,核心优势是易理解、易实现、高可靠。它解决了分布式系统中“节点故障”“网络分区”等场景下的数据一致性问题,是目前工业界分布式系统的“标准一致性协议”之一,掌握 Raft 是理解分布式系统设计的关键基础。
2025-09-07 12:50:34
530
原创 分布式go项目-搭建监控和追踪方案补充-ELK日志收集
在分布式Go项目中,ELK(Elasticsearch + Logstash + Kibana)与追踪(Tracing)的结合,核心是通过(基于trace_id),实现“从日志定位追踪链路”和“从追踪链路回溯日志”的双向分析能力。
2025-09-06 22:35:52
964
原创 分布式go项目-搭建监控和追踪方案
在分布式Go项目中,监控(Monitoring)和追踪(Tracing)的核心挑战是和。由于系统由多个独立部署的Go服务组成(如API服务、业务服务、数据存储服务等),需要通过标准化工具和统一上下文传递,实现“指标可聚合、链路可追踪、问题可定位”。
2025-09-06 22:33:14
1178
原创 大型Go项目中搭建CI/CD流水线
大型Go项目的CI/CD流水线核心在于“并行化提升效率、分层化保障质量、模板化增强维护、安全合规贯穿全流程通过模块拆分、依赖缓存、多环境隔离等手段,既能适应大型项目的复杂度,又能确保流水线的稳定性和高效性。实际落地时,需根据团队规模、业务复杂度逐步迭代,初期可从核心模块的自动化构建/测试入手,再逐步扩展到全量模块和多环境部署。
2025-09-06 21:24:30
1070
原创 服务 HTTP 转 SRPC 技术方案
兼容性保障:适配层确保协议转换无感知,业务逻辑复用降低开发风险风险可控:灰度策略和回滚机制避免一次性切换导致的业务中断性能提升:SRPC 协议和 Protobuf 序列化大幅提升接口性能实施过程中需重点关注协议转换的准确性和适配层的性能瓶颈,通过充分测试和灰度验证,确保迁移后系统稳定性和性能达标。
2025-09-05 15:10:38
874
原创 服务接口压测技术方案
接口筛选:优先选择核心接口(如支付接口、下单接口)、高频接口(日调用量百万级以上)、复杂接口(多依赖、多分支逻辑)接口信息:记录接口基本信息(见下表),确保测试场景覆盖全面接口名称协议类型请求方法关键参数依赖组件(DB/缓存/外部服务)业务链路订单创建HTTPPOSTMySQL(订单表), Redis(库存缓存), 支付服务用户下单→库存扣减→订单创建→支付回调用户登录gRPCLoginMongoDB(用户表), Redis(会话)验证→生成token→返回指标类型。
2025-09-05 13:54:21
810
原创 旧服务下线方案
需全面摸清旧服务的"家底",避免遗漏关键依赖:需拉通所有关联角色,达成一致后再推进:通过"限流→拦截→禁写"三步控制流量,确保调用方平滑迁移:第一步:限流(T-7天)在网关层或服务入口设置限流规则,逐步降低旧服务的最大QPS(如每天降低20%),倒逼调用方加速切换。示例(Nginx限流配置):第二步:流量拦截(T-3天)对仍在调用旧服务的请求返回"服务下线通知"(如HTTP 410 Gone),并在响应头中携带新服务地址()。同时通过日志监控剩余调用方,主动推动其切换(如邮件/群通知)。第三步
2025-09-05 13:24:03
539
原创 资源缩容方案-考虑方向与注意点
资源缩容不是“减法”,而是“优化”——核心是“基于数据判断、基于业务保障、基于风险可控”。需避免因追求成本降低而牺牲稳定性,优先通过“负载评估→小步验证→全量落地”的流程,确保缩容后业务体验不降级、系统可用性不降低。
2025-09-05 11:53:58
868
原创 核心高并发复杂接口重构方案
本方案通过模块化重构降低业务复杂度,采用渐进式灰度发布控制风险,结合完善的监控和回滚机制保障系统稳定性。安全性:通过灰度发布和双写机制,最大限度降低重构风险可维护性:模块化设计使后续迭代成本降低60%以上性能提升:通过缓存策略和并行处理,支撑更高流量可扩展性:插件化架构支持业务快速迭代实施过程中需特别关注数据一致性和性能表现,严格按照灰度策略逐步推进,确保核心业务不受影响。
2025-09-05 09:18:58
795
原创 Go 项目中 SSO 实现技术方案
本方案基于OIDC协议在Go项目中实现了SSO功能,通过集中式的IdP和分布式的SP架构,实现了用户一次登录即可访问多个系统的目标。安全性:采用非对称加密、HTTPS传输、安全的会话管理等措施保障系统安全可扩展性:支持水平扩展,适合业务增长易用性:用户体验良好,一次登录多系统灵活性:各SP可独立管理自身权限,保持业务自主性在实际应用中,可根据项目规模和安全需求,对方案进行适当调整和优化,如增加多因素认证、集成第三方登录等功能。
2025-09-04 11:34:45
726
原创 Go 项目高并发、多线程、IO 查询场景常见问题收集整理
数据库返回 “read timeout” 时,未区分是网络问题还是数据问题);高频分配 / 释放大小不一的堆内存(如时而分配 1KB、时而分配 100KB),导致堆内存碎片化,GC 无法有效回收空闲内存,即使总空闲内存充足,仍触发 OOM;下游 IO 依赖(如数据库、Redis)升级版本后,未做兼容性测试(如 Redis 6.0 + 的 ACL 功能开启后,旧版客户端认证失败);跨服务操作(如用户下单→扣库存→减余额)未用分布式事务(如 TCC、SAGA),部分操作成功、部分失败,导致数据不一致;
2025-09-03 12:06:12
974
原创 Elasticsearch 数字字段随机取多值查询缓慢-原理分析与优化方案
ES 数字字段随机取多值查询缓慢的核心原因是BKD 树范围优化失效,触发大量单点扫描和倒排表合并。优化需遵循 “从业务到技术、从简单到复杂” 的原则:优先通过 “业务层筛选 + 拆分查询” 减少随机值数量,成本最低、效果最直接;其次优化索引设计和查询语句,适配 ES 的存储特性;最后通过集群配置和替代方案解决极端场景问题。通过分层优化,可将随机多值查询的耗时降低 5-10 倍,同时保证 ES 集群的稳定性。
2025-09-03 11:47:00
829
原创 Go singleflight 解决并发问题实践文档
singleflight 是 Go 中解决 “重复请求” 问题的轻量级工具,核心价值在于合并相同请求、避免资源浪费,尤其适合缓存击穿、重复接口调用等场景。使用时需注意:按业务拆分Group,避免key冲突;fn中必须二次检查缓存,防止数据不一致;结合context实现超时控制,避免 goroutine 泄漏;错误场景需谨慎处理,确保业务可用性。通过合理使用 singleflight,可显著降低数据库、第三方接口的压力,提升系统的并发稳定性。
2025-09-03 11:05:35
798
原创 Go 开发规范1
以上规范覆盖了 Go 开发的核心场景,通过遵循这些规范并参考正确 / 错误实例,可以显著提升代码质量、可维护性和系统稳定性。实际开发中,建议结合静态检查工具(如golint)和 CI 流程强制执行规范。
2025-09-03 10:38:17
354
原创 phpstrom-docker 远程debug配置
选择容器的php解析配置xdeug配置服务开启监听phpstorm会监听9001端口,接受数据php.ini配置[XDebug]xdebug.remote_enable = 1xdebug.remote_host = host.docker.internalxdebug.remote_port = 9001xdebug.remote_connect_back=0xdebug.remote_autostart=1xdebug.remote_log = /data/logs/xd
2022-05-10 15:21:37
534
原创 lumen 框架学习
路由基本使用# 直接返回信息或简单处理,一般很少用这个$app->get('/', function() { return 'Hello World';});# 携带参数$app->get('user/{id}', function($id) { return 'User '.$id;});# 重命名并指向控制器-经常使用$app->get('user/profile', [ 'middleware' => 'old','as' => 'profil
2022-05-05 17:02:40
596
原创 go TCP 粘包原理和解决方案
1 为什么会出现粘包主要原因是tcp 数据传递模式是留模式,在长连接过程中可以进行多次收发。数据粘包可以发生在客户端和服务端。2 解决办法出现粘包的关键在于不确定包的大小,因此可以通过封包将把的内容长度封装在包头,用固定长度的值来存储包内容长度。自己封装一个数据传输协议。如下:package protoimport ( "bufio" "bytes" "encoding/binary")// Encode 将消息编码func Encode(message stri
2022-04-11 15:11:56
3202
1
原创 PHP 基于SMTP协议+socket 简单的邮件发送
class SMTPMail{ private $user; private $host; private $port = 25; private $pass; private $socket; public function __construct($host,$port,$user,$pass){ $this->host = $host; $this->por...
2019-05-28 16:23:55
401
原创 基于times33算法的hash数据库
本地缓存数据库设计原理1、分两个文件一个索引文件 .idx,一个数据文件 .dat2、索引文件结构 : [索引指针 | 索引指针| …|索引指针|索引记录|…|索引记录]索引指针:用来记录索引记录的偏移量索引记录:hash链表 结构=》 [下一个借点指针 | key| 数据偏移量|数据长度]代码如下:亲测可用不足:1、没时间做并发控制。2、删除索引以后数据文件没有改变。针对以...
2018-12-14 16:10:45
382
原创 查询数据表的字段information_schema.COLUMNS返回失败原因
如题查询数据表字段:“select group_concat(column_name separator ‘,’) as allColumn from information_schema.COLUMNS where table_name=’”.$table."’"返回结果: false原因:1、数据库中不存在相应的表格。2、看看代码中是执行过 PDO::exec, PDO::exec会...
2018-11-28 15:32:09
3071
转载 高性能PHP应用开发-总结
[第一章 基准测试工具]一:Apache Benchmark (ab) 随 apache包一起安装 ab -n (请求数) -c (并发数,不能起过-n) -t (请求的秒数) http://url报告中最重要的是以下字段内容: ------------------------- HTML transferred 请求的内容总大小 Requests per second ...
2018-09-13 11:37:34
1260
原创 python 学习笔记(十): 数据库连接池
#!/usr/bin/python# -*- coding: utf-8 -*-from __future__ import print_functionimport Queueimport pymysqlimport loggingLOG = logging.getLogger(__name__)class ConnectionPool(object): # 实例化类...
2018-09-13 10:26:12
233
原创 python 学习笔记(九): 数据库压测编程
这个代码是利用多线程多mysql数据库批量插入数据,可用于mysql压测#!/usr/bin/python# -*- coding: utf-8 -*-from __future__ import print_functionimport argparseimport threadingimport pymysqlfrom contextlib import contextmana...
2018-09-13 10:21:19
455
原创 python 学习笔记(八):线程锁
#!/usr/bin/python# -*- coding: utf-8 -*-from __future__ import print_functionimport threadinglock = threading.Lock()num = 0def incre(count): global num while count>0: with l...
2018-09-13 10:18:03
193
原创 python 学习笔记(七):mysql 数据库连接
不废话,直接贴代码#!/usr/bin/python# -*- coding: utf-8 -*-from __future__ import print_functionimport osfrom contextlib import contextmanager'''根据环境变量导入不同的数据库模块'''if os.getenv('DB','MySQL') == 'mysq...
2018-09-13 10:16:09
208
转载 PHP array_filter()、array_map()
今天用到 array_filter() 和 array_map(),表示很少用这个有点晕菜。看了一下手册array_filter() $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];var_dump(array_filter($arr, function($k) { return $k == 'b';},...
2018-09-07 17:21:00
548
原创 python 学习笔记(六):服务器监控
在 python 生态中广泛使用的开源项目 psutil ,其提供了便利的函数获取操作系统的信息。CPUimport psutil as p# 与 cpu 相关的功能函数 p.cpu_count() # 逻辑cpu个数p.cpu_count(logical=False) # 物理cpu个数p.cpu_percent() # 获取上次调用cpu_percent 以来整体cpu的...
2018-09-07 11:38:59
270
转载 python 学习笔记(五):datetime的使用和常用时间处理
datetime在python中比较常用,主要用来处理时间日期,使用前先倒入datetime模块。下面总结下本人想到的几个常用功能。1、当前时间:>>> print datetime.datetime....
2018-09-06 11:11:28
474
原创 python 学习笔记(四):压缩包管理
python 的 tarfile 标准库提供了 tar 命令所提供的功能 。 读取压缩包文件# 打开压缩包获取压缩包里面的文件import tarfiletarfile.open('tarfile.tar') as t: for member_info in t.getmembers(): print(member_info.name) # tarfile ...
2018-09-06 09:39:04
348
原创 阿里云下载 RDS Mysql 备份数据
玛德坑爹,不知道阿里云里面有下载工具,开始差点就要用API写接口下载二进制文件了。后来在文档里面查到居然有下载工具,好呀,这下省事了。RDS MySQL备份文件下载工具 文档以及下载地址哎~教程很简单照着弄一下就好了 这里有一个坑,值得注意:工具下载下来以后千万不要在window上面解压,解压出来的是 get_rds_backup 都是二进制数据,不能用的。只有在linux上面解压才可...
2018-09-03 17:33:39
670
原创 python 学习笔记(三):文件操作
首先打开一个文件,为了避免文件句柄泄露,采用上下文管理器。上下文管理器使用原理:在类中必有 enter 和 exit 方法,在with语句中会在开始调用 enter 方法,结束的时候调用 exit 方法 来实现文件的自动关闭。我们可以通过两种方式实现上下文管理器协议:1、在类的方法里面自定义上诉两种方法。2、通过 contextlib.contextmanager 的装饰器来实现(被装饰的方法要...
2018-08-30 14:47:39
218
原创 Django 自定义模块导入
初学Django 创建了一个应用,感觉所有的model和方法都写在models和views里面很难受,这样在后期不好管理和维护 于是自定义了一下应用目录: 这样做就涉及到自定义的模块导入问题。python 的模块查找原理是这样的: 1、先在当前文件目录下查找。 2、再到标准库安装路径去查找 3、到path环境变量里面的路径去查找网上搜到自定义模块导入的方法有: 自定义库的路径添...
2018-08-24 15:43:38
6494
原创 开机自动同步centos 虚拟机时间
首先要先安装ntp# yum install ntp配置开机时自动运行时间服务# chkconfig ntpd on开启ntp服务# cd /etc/# /bin/systemctl start ntpd.service查看一下是否启动# ps -aux| grep ntpd同步时间# ntpdate -u ntp1.aliyun.com# ntp...
2018-08-23 15:46:29
1101
原创 python 学习笔记(二):文本处理
python中字符串是不可变的有序集合,所以可以通过字符运算、切片操作、格式化表达式和字符串方法来生成新的字符串。 字符串操作有:字符串操作',',join(str1,str2) # 字符串拼接'str'.strip('s') #字符串剪裁 删除特定的字符'split'.split() # 字符串拆分'replace'.replace('re','') # 字符串替换st...
2018-08-23 12:07:12
207
原创 python学习笔记(一):文件命名
初学Python 的时候一定注意文件命名,要是文件名于系统或者第三方模块名字重复 在引用模块方法的时候就会: 然后,查找错误和百度都无法知道问题。这是个巨坑。。谨记!谨记!...
2018-08-23 11:21:00
1677
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅