- 博客(91)
- 资源 (6)
- 收藏
- 关注
原创 游戏、网关等服务借助Docker容器化并使用Kubernetes部署、更新等
Docker容器化Build and PushKubernetes容器编排EFK (Elasticsearch + Fluentd + Kibana)游戏优雅停服细节说明首次收到SIGTERM信号,先标记停服后等待所有房间主动解散,没有房间则无需等待再次收到SIGTERM信号,触发解散现有房间调整partition来执行金丝雀发布验证测试不通过可以回滚网关得益于设计成重启几乎没有代价,客户端只会感到可能因为网络不好而触发了重连部署AB服,客户端老转新服将没有明确的时间限制
2024-09-13 21:30:01
745
1
原创 架构设计:实现负责消息转发、推送的网关服务
主要实现了接受客户端附带JWT的WebSocket连接即订阅,此协程阻塞读客户端消息保持长连接,这样系统将在需要时可以向指定用户编号推送消息(待实现),在客户端请求进入房间时创建新协程gRPC双向流连接并阻塞读游戏服务端消息mq -> gate_server -> clientclient gate_server game_server重启几乎没有代价实现优雅停服网关连接游戏时会尝试从Redis中获取在线用户所在的服务进行重连(待实现)关于web_server(待实现)
2024-09-13 21:09:52
498
原创 架构设计:负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间
重中之重就是想实现无锁!无锁!无锁!预计还会实现gate_server,接受并保持websocket长连接,按需双向流到game_server进行消息转发未来上述服务均会以容器的形式由k8s自动化部署、扩展、管理实现简单示例:自创的骰子游戏请查看主要对象的接口游戏主要接口调用时机框架开放的个别接口(赋予游戏的能力)连接即坐下,断开即站起游戏可以拒绝站起,将视为离线,框架负责识别重连全局错误码为适应各类游戏仅负责必要逻辑好用的定时器模块支持旁观关于匹配(待实现)游戏不停服更新
2024-09-13 20:48:29
1401
原创 Kubernetes 常用命令、资源配置整理
常见资源及缩写kubectlminikube非级联删除,保留PodClusterIP, NodePort, LoadBalancer, or ExternalNamesecretsconfigmapspersistentvolumeclaims无头服务(Headless Services)clusterIP: NonePod 管理策略OrderedReady vs ParallelPodAntiAffinitypoddisruptionbudgets金丝雀发布
2024-09-13 19:34:58
571
原创 RabbitMQ SDK 支持发布、消费,连接恢复,死信队列,多种使用场景
基于Example封装便于使用的SDK,支持发布、消费,连接恢复,死信队列,以及官方入门中的多种使用场景使用手动消息确认,队列和消息标记为持久,并不使用临时独占队列消费者可合理调大Qos.prefetchCount来提高吞吐率业务逻辑如下返回错误,重新投递仍失败后将进入死信队列,保证消息不丢失,还可反复消费来排查问题生产者正常退出若是等待发布接口返回消息将不丢失消费者正常退出是会等待业务逻辑处理且发送确认完成的建议业务逻辑对消息的消费支持幂等
2024-09-13 19:01:48
1066
原创 gRPC etcd 服务注册与发现、自定义负载均衡
考虑这种常见情景:服务多开,正常连接采用轮询负载均衡,但若服务有状态,重连则需进入之前的服务官方源码中roundrobin,基于baseBalancer仅实现Picker创建租约并借助Lease.KeepAlive确保服务异常退出时因未自动续期而删除通过context.WithValue携带ServiceID实现选择指定服务的连接
2024-09-13 16:52:24
814
原创 Jenkins Docker Pipeline Clone Build Deploy mysqldump
安装 Jenkins配置 Jenkins新建流水线Clone Build Deploymysqldump远程构建
2024-09-13 16:42:05
845
原创 再次整理备忘录(持续完善)
Ubuntu 22.04 LTSVirtualBox 安装 Ubuntu 支持共享文件夹修改时区设置时间Ubuntu 安装 DockerDocker Compose 部署 NSQMySQL 库表占用空间Git 相关Proxmox 制作U盘启动虚拟机硬盘扩容检测证书到期时间
2024-09-13 16:32:29
426
原创 Ready Go
编程语言: Go, C/C++, JavaScript, Solidity, SQL, Bash技术周边: Linux, Nginx, Docker, Kubernetes, Jenkins, MySQL, Redis, MongoDB, RabbitMQ, NSQ, Protobuf, gRPC, Certbot, Telegram, Git, Aliyun, Amazon, Proxmox, Ethereum, ChatGPT, 微信公众号, 微信小程序
2024-09-13 16:07:43
1487
原创 Ethereum 入门
geth --datadir --http --http.addr --http.api web3,eth,debug,personal,net --http.corsdomain --dev --vmdebug --allow-insecure-unlockgeth attach --datadirpersonal.newAccountpersonal.unlockAccounteth.sendTransactionweb3.fromWeieth.getBalance测试合约 经简单修改如下
2022-08-30 18:07:05
537
原创 运维备忘录(持续完善)
CentOS 7.x查看系统发行版本修改主机名修改时区Extra Packages for Enterprise LinuxNginxcurllsofsplitchownfusertar excludetar saltMySQLfirewalldGitLabgit 仓库迁移git 多仓库备份(检出所有分支)git lfsPHP(ThinkPHP)Beyond Compare(Mac)...
2022-08-30 17:56:47
830
原创 Nginx 反向代理配置及测试
本文关心以下内容WebSocket proxyingngx_http_proxy_modulengx_stream_proxy_modulengx_http_ssl_modulengx_stream_ssl_module配置上下文http, serverstream, server经过反向代理获取请求的HOST和客户端IP配置示例WSHTTPTCP测试HTTP & TCP 搭配 curl & telnet 进行测试WebSocket 可借助 echo 测试...
2022-08-30 17:44:45
1732
原创 服务器部署 CentOS、VeraCrypt、Docker、主从MySQL、Redis、备份等
服务器系统使用 CentOS 7.x考虑数据安全,一般会选用 VeraCrypt安装依赖官网获取对应系统的最新下载链接进行安装创建加密文件,Filesystem 请选择 Linux Ext4挂载和卸载考虑各种方便,请选用 Docker 安装 MySQL 和 Redis安装并启动拉取并开启服务带特殊符号的数据库密码,可以加单引号或使用环境变量导出和导入,确保多服务器使用相同版本Redis 配置MySQL 主配置MySQL 从配置MySQL 主从同步数据备份和恢复日志备份...
2022-08-30 17:30:31
640
原创 OpenSSL RSA 加密/解密 签名/验签 自签名证书
生成私钥导出公钥加密解密签名验签自签名证书注:* Mac中的OpenSSL是LibreSSL* 自签名常会用在内网提供HTTPS服务* 验签用在支付成功后验证第三方通知的消息* 现在应该流行 genpkey、pkey、pkeyparam、pkeyutl 相关命令* 加密分为 对称(加解密使用相同密钥) 和 非对称(加解密使用不同密钥)* 私钥加密公钥解密是没有意义的,公钥是公开的,很多人持有,达不到加密的意义......
2022-08-30 17:04:19
1131
原创 Docker Official Images 部署 MySQL、Redis、MongoDB
以后想借助 docker 快速部署项目环境依赖,就整体了解并试用了 MySQL、Redis、MongoDB整篇博客主要是为了方便自己以后快速强化或恢复记忆,若能同时帮助到他人,那自然是再好不过了为什么把它们三个放在一起,是因为它们都是我要用的且均属于 Docker Official Images,都主要由 the Docker Community 维护,因为几乎是由相同技术开发,所以它们每个版本都是由两个文件 Dockerfile、docker-entrypoint.sh 组成,我们甚至都可以下载这两个
2020-06-27 07:58:55
379
1
原创 Mac scp 使用 expect 避免输入密码 scpue
在很早之前我都研究过这块,最终的方案其实有点差强人意,可以看我那篇博客,当时需要预先写好脚本,通过调用scp2.sh进行路径名展开,对那时的我而言,能免密就已然足够了随着我手中的服务器日益增多,而且scp操作已不是固定的N条命令,此时的我需要再次寻找出路。上次的经历让我得出的重要结论就是:路径名展开 是 shell 的特性,expect 没有,只要我在terminal中输入路径名,它总会在执行脚...
2020-03-30 15:08:32
1473
1
原创 google translate 免费使用 /translate_a/single 接口翻译
前些天准备批量翻译一些用户昵称,使用 Google Cloud Translation 还需要注册账号,可能还面临收费,所以就想着在 Google 翻译 里直接翻译,本想着找出它的接口地址逐个翻译,无奈时间紧任务重的我当时选择了手动以文档方式分批翻译,约8K个昵称还让我均分成四个文档进行翻译,因为内容太多的话好像后面的就不怎么翻译啦,当时的我就在想,有时间一定要找出它的接口地址,想办法自己能直接调...
2020-02-06 11:26:25
13622
3
原创 telegram bot sendMessage 发送消息
本文内容来自以下官方文档Bots: An introduction for developersTelegram Bot APICreating a new botTelegram 添加 BotFather 进入聊天界面点击输入框中 /start回复内容中点击 /newbot阅读提示分别输入 name 和 username紧接着回复内容中包含了接下来需要使用的 token,看起来像...
2020-02-06 11:24:14
8838
原创 mysqlbinlog — Utility for Processing Binary Log Files
本文以 MySQL@5.7 经典版本为基础,官方文档 地址binary logging formatStatement-based loggingRow-based logging常用选项–verbose, -vReconstruct row events and display them as commented SQL statements. If this option is...
2020-02-06 11:22:34
283
1
原创 Golang 中 MongoDB 实现 MySQL 自动递增 AUTO_INCREMENT
大致思路就是为每一个需要自动递增的表创建辅助表记录当前编号,每次插入前总会原子的去辅助表中查且修改当前编号本文不考虑该实现的广泛可用性(集群时可能无法使用此方案)思路不限制编程语言,但这里提供 Golang 的实现package mainimport ( "context" "log" "go.mongodb.org/mongo-driver/bson" "go.mongodb...
2020-02-06 11:20:04
1687
1
原创 MongoDB 常用 Aggregation Pipeline Stages - group and lookup etc
最近有把一个小项目的底层数据库由 MySQL 修改成 MongoDB,借此更进一步熟悉了 Aggregation Pipeline Stages本文仅包含翻译小项目 SQL 版本所需的 MongoDB Aggregation Pipeline Stages 知识,成文时 MongoDB 最新版本为 V4.2db.collection.aggregate( [ { <stage> }...
2020-02-06 11:17:25
1203
1
原创 expect spawn scp * shell路径名展开
expect spawn scp * shell路径名展开一直通过 scp 同步多台服务器上配置文件,虽然已经写了 shell 脚本,但是密码还需要手动输入,终于忍不了啦,经查可以使用 expect 改变这种现状(当然不只这一种解决方案)这个错误困扰我很长时间,根本原因是 路径名展开 是 shell 的特性,expect 没有虽然网上有提供 一次仅拷贝一个文件 的替代方案即便这只是一个辅助工具,而且我也不关心效率,但我也不想如此,一个文件一次调用,建立连接等等,会慢的最后灵机一动,分享给大家...
2018-10-11 10:20:45
4902
1
原创 The Linux Command Line 前 11 章内容摘录
第二章 : 什么是 shell第三章:文件系统中跳转第四章:探究操作系统第五章:操作文件和目录第六章:使用命令第七章:重定向第八章:从 shell 眼中看世界第九章:键盘高级操作技巧第十章:权限第十一章:进程
2018-09-28 11:25:28
329
1
原创 依据官方文档源码编译Nginx实现普通TCP服务反向代理负载均衡的配置
一直没有怎么用过Nginx,用的最多的就是搭建静态网站,确实屈才啊。最近要用Nginx部署反向代理服务,网上讲解的文章太多,不能拿来直接用就觉得写的不好,随着研究的深入现整理本文,希望读到的朋友会觉得有用。现实服务很可能不只一组,想要借此实现负载均衡,就要好好理解proxy_pass这段说明啦有时线上的环境只能通过源码编译,这里给出简单过程啰哩啰唆了这么多,大家可能发现我并不是想说某一种特定需求该如何配置,而是在分享我是如何借助官方文档写出配置的历程最后说一下我对反向代理和正向代理的理解...
2018-08-23 11:45:28
927
1
原创 MongoDB Manual 3.6 The mongo Shell CRUD operations create, read, update, and delete documents(增删改查)
摘自MongoDB Manual 3.6,都是重点,本想翻译成中文,无奈确实有点忙…Insert DocumentsinsertOne(), insertMany() returns a document that includes the newly inserted documents _id field values.BehaviorIf the collection
2018-01-27 11:33:52
702
原创 阿里大于(alidayu)升级为阿里云短信服务(dysms)Golang新版SDK
最近需要接入 阿里云 短信服务 用来发送验证码。由于官方并未提供Golang相应SDK,自己就尝试实现了发送短信的接口,这里分享给大家。项目地址:https://github.com/panshiqu/dysms使用示例:其实就是翻译了 HTTP协议及签名 这篇官方API文档中的示例代码,Java -> Go
2017-12-01 09:59:56
7406
1
原创 中小型手机棋牌网络游戏服务端架构设计(带源码)
承接自己[《中小型棋牌类网络游戏服务端架构》]博文,用Golang实现基础架构逻辑后,准备再次谈谈我的想法。如果阅读起来感觉晦涩难懂,那就不妨直接看[源码]#Network包含Server,Client,RPC三个组件。#Error#ServerProxy(代理), Manager(管理), Login(登陆), Game(游戏), DB(数据库代理)。
2017-07-07 18:26:34
24929
6
原创 中小型棋牌类网络游戏服务端架构
Gateway服务器仅暴露 Gateway 监听端口,Client 与 Server 之间通讯均通过 Gateway 转发Client 与 Gateway 仅建立一条连接,Gateway 可与多种 Server(Login、Game)建立连接,初步设想同一时间仅保留一条连接,内网连接的切换代价不高,当然同时保留多条连接也行Gateway 应具备以下功能:加密与解密、压缩与解压,我个人认为没有太
2017-04-14 17:24:08
10640
1
原创 带癞子麻将查表判断胡牌高效率低内存算法
在我未查阅相关资料时,最初我有两种想法(本文只深入讨论第二种想法)* 像我当初做斗地主智能出牌机器人拆解手牌那样,拆解手牌后判定是否符合条件进而判定输赢。* 组合出所有赢的手牌,构造 map,判定输赢只需查表即可,键值初步设想的是排序并拼接成的 string。
2017-03-02 16:15:20
13501
5
原创 Go语言圣经:Goroutines、Channels及基于共享变量的并发
Go语言中的并发程序可以用两种手段来实现。这一章会讲解goroutine和channel,其支持“顺序进程通信”(communicating sequential processes)或被简称为CSP。CSP是一个现代的并发编程模型,在这种编程模型中值会在不同的运行实例(goroutine)中传递,尽管大多数情况下被限制在单一实例中。在Go语言中,每一个并发的执行单元叫作一个goroutine
2017-02-14 16:11:58
3379
1
原创 Go语言圣经:基础数据类型、复合数据类型、函数、方法章节摘录
Go语言圣经:整型、浮点数、复数、布尔型、字符串、常量、数组、Slice、Map、结构体、JSON、文本和HTML模板、函数声明、递归、多返回值、错误、函数值、匿名函数,可变参数、Deferred函数、Panic异常、Recover捕获异常、方法声明、基于指针对象的方法、通过嵌入结构体来扩展类型、方法值和方法表达式、Bit数组、封装
2017-01-19 12:02:47
944
原创 Golang 在 Mac、Linux、Windows 下如何交叉编译
Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。Mac 下编译 Linux 和 Windows 64位可执行程序CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
2016-12-21 17:44:19
188847
14
原创 MySQL 5.7 Reference Manual Chapter 13 Functions and Operators 参考手册第十三章函数与操作符内容总结
MySQL 5.7 Reference Manual Chapter 13 Functions and Operators 参考手册第十三章函数与操作符内容总结
2016-12-01 18:18:28
600
原创 跨平台可定制查找重复文件工具
我认为具有如下优点* 跨平台(支持 Windows, Linux, Mac)* 可定制(若你会点编程可轻松扩展你的需求)工具特性* 跳过 `.` 开头目录* 跳过大小为 `0` 的文件* 打印后缀为 `rar zip iso tar gz` 的文件* 通过比对文件内容 `md5` 值判定是否重复* 多个相同文件一起打印,相同文件有序打印,整体有序打印,便于查看...
2016-11-30 15:27:48
891
原创 U盘容量变小如何解决
其实这种情况我已经是第二次遇见啦,第一次我是采用下载量产工具解决的,用了很长时间,步骤很烦琐,现在我都忘记当初是如何操作的,所以这次我依然求助百度,发现一个很简单的方法,连软件都不需要下载,重点是很快,现在记录一下,分享给大家。具体操作如下: Windows管理员身份运行命令行(Win+R)diskpartlist diskclean
2016-11-26 11:59:27
832
原创 nsq 快速入门经验分享
nsq 是什么东西,这里就不长篇大论啦我在 Mac 上尝试 nsq.io 中提供的 QUICK START 遇到问题,这里作简要说明
2016-11-24 10:36:21
10149
1
原创 Golang 获取文件 md5 校验和的方法及效率比较
近期有一个需求:获取多个文件 md5 校验和判断是否存在重复文件,因为文件数量较多,有的文件还比较大,需要处理的文件还没有到位,我就考虑了一下效率的问题。目前我已知的 Golang 中获取 md5 校验和的方法有两个,这里直接给出实现源码。
2016-11-17 17:16:48
19411
1
原创 MySQL 5.7 Use The JSON Data Type(MySQL 使用 JSON 数据类型)
文章摘译自 MySQL 5.7 Reference Manual / Data Types / The JSON Data Type自 MySQL 5.7.8 起,MySQL 支持 JSON 数据类型,优势如下 * 自动验证数据合法 * 优化存储格式存储
2016-11-14 18:11:53
8319
1
原创 MySQL 5.7 Reference Manual Chapter 10 Language Structure 参考手册第十章语言结构内容总结
MySQL 5.7 Reference Manual Chapter 10 Language Structure 参考手册第十章语言结构内容总结
2016-11-11 16:59:34
612
原创 MySQL 5.7 Reference Manual Chapter 4 Tutorial 参考手册第四章教程内容总结
MySQL 5.7 Reference Manual Chapter 4 Tutorial参考手册第四章教程内容总结
2016-11-07 15:30:18
598
跨平台可定制查找重复文件工具
2016-11-30
MFC对话框如何使用工具栏并修改工具栏的背景颜色与自绘对话框统一
2013-08-29
MFC中使用自定义CObject派生类重载= ==操作符 解决errorC2248 errorC2678
2013-08-01
MFC中使用自定义CObject派生类重载“=”“==”操作符 errorC2248 errorC2678
2013-08-01
MFC桌面右下角弹窗不抢当前窗口焦点同时不抢父窗口焦点
2013-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人