go微服务框架使用总结

记录下自己使用下来的go微服务框架,kratos go-zero kitex.

kratos

bilibili公司出品的框架,当年公司内部代码泄漏,现在开源优化已经到了v2版本.

参考了DDD,Clean Architecture 设计理念.

项目结构清晰,每一层级的角色定位清晰,没有全局变量污染,还引入了wire进行依赖倒置.

data层暴露了clean up函数对资源句柄进行回收.

框架层与业务层解耦,框架生命周期感知清晰.

组件开放接口设计,扩展性强

服务使用的是GRPC+Protocol Buffer, 同一服务进程下暴露了GRPC端口和HTTP端口.

HTTP是通过protoc组件protoc-gen-go-http反射路由到同一RPC方法.

框架整体设计比较轻量,适合自己组合微服务方案.

总结

适合团队有架构组的人使用,前期需要自己组合方案,整合组件.后期基本完善,使用体验良好. HTTP层建议使用gin框架,因为protoc-gen-go-http适合开发阶段调试用,重度需求满足不了,自己做适配一路都是新坑.

Go-zero

一个公司CTO主推项目,加入了CNCF.

HTTP单独部署一个项目,路由方法定义通过编写.api后缀文件(Go-zero定义的语法)实现.

他们的设计理念是实用性.

总结

生产上能用。对于定制化业务,直接fork他们官方的cli工具,然后公司内部修改维护该仓库.

Kitex

字节跳动公司的开源项目,分RPC框架Kitex和HTTP框架Hertz.

2个框架是2个团队的产物,设计规范不一致.

框架替换原有了go/net设计,实现高性能.(生产稳定性需要查阅官方资料验证)

IDL支持Thrift,官方对Thrift的支持度很高,因为他们内部使用Thrift,但也支持Protobuf.

他们的设计理念是高性能

总结

Kitex只是cloudwego组织下子项目,Thrift不是特别吸引我, 希望cloudwego/netpoll能封装成一个适配性高组件.

体验switch游戏

主机游戏

steam的单机游戏体验过一段时间后,随后了解到还有塞尔达传说王国之泪这样的游戏存在,有别于艾尔登法环这种 但是他只能在任天堂的switch上可以下载游玩,有别于pc游戏是主机游戏来的.

模拟器

pc上也存在着模拟switch游戏环境的模拟软件,yuzu模拟器ryujinx模拟器,接下来我将体验下ryujinx模拟器上游玩主机游戏

ryujinx模拟器体验

下载

下载模拟器https://github.com/Ryujinx/release-channel-master/releases

我选了当前最新的1.1.762版本 https://github.com/Ryujinx/release-channel-master/releases/download/1.1.762/test-ava-ryujinx-1.1.762-win_x64.zip

先决

下载安装后,看了一眼官网wikihttps://github.com/Ryujinx/Ryujinx/wiki

在模拟器的目录下新建portable目录,需要导入任天堂switch相关的KeysFirmware,即密钥和系统固件的意思,2者的版本还必须一致.

游戏格式

接下来就是导入游戏包xci格式的,就可以在模拟器的目录上看到该游戏,点击游玩即可。

游戏DLC或者游戏更新包之类的安装文件大多是nsp格式的,在游戏上进行管理导入即可。

switch游戏的外挂是金手指这个称呼,可以搜switch对应game的cheat code主题。

总结

模拟器比较吃cpu资源,很多时候成为瓶颈.相比于switch游戏画面和帧数比较高,而且还可以开作弊码,省去重复的游戏体验。

switch的优势就是携带游玩方便,类似手机于pc的存在,但是steam deck是linux系统也可以安装模拟器,也有这个优势.

另一个就是switch可以联网官方服务器游玩比较方便,但是局域网联机游玩模拟器似乎也能做到。

随着一款游戏的了解,我慢慢发现任天堂的理念是以游戏趣味性为主导,switch设备为游戏圈子所建立的生态, 其他游戏像是一座座高山,但是switch游戏就像一条弯弯曲曲的河流那样的存在

Synergy启动在登录前

介绍

Synergy是一个模拟键盘和鼠标的软件,我的win和mac都启动时可以用一套键鼠操控。 mac作为Synergy的客户端时,win作为Synergy的服务端使用。

背景

目前Synergy在登录前软件没有启动,只有登录后启动,导致登录时无法输入密码,因为我的键盘鼠标连接在win上。下面是解决办法

原理

软件在mac未登录前是root的身份运行,登录后才是选择的用户,在root身份下将软件加入mac的Launch Daemons就可以解决了

实操

synergy的存放位置是 /Applications/Synergy.app/Contents/MacOS/synergy

运行命令行启动

open  /Applications/Synergy.app/Contents/MacOS/synergy 

时,可以看到启动参数 /Applications/Synergy.app/Contents/MacOS/synergyc -f --no-tray --debug INFO --name "mac" "192.168.50.59:24800"

修改为Launch Daemons的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.hello</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/Synergy.app/Contents/MacOS/synergyc</string>
        <string>-f</string>
        <string>--no-tray</string>
        <string>--debug</string>
        <string>INFO</string>
        <string>--name</string>
        <string>mac</string>
        <string>192.168.50.59:24800</string>
    </array>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

ProgramArguments对象下是cli启动参数

Steam游戏无法识别北通手柄

每当兴冲冲下一个好玩的游戏,进入却发现手柄识别不了,或者识别不全。 一个杂牌的手柄属实是折腾人,网上兜了一圈,方法很多,但是适用自己电脑情况的还是很少。 最佳的解决方案就是买个微软的xbox手柄。

次一点的解决方案就是用软件模拟出xbox360的手柄,然后进入游戏就可以正常游玩了。下面重点写下如何达成

xOutput使用

前提

首先来个前提,游戏必须安装在无中文路径,各种微软的游戏依赖库安装齐全。网络问题的话,下个uu加速器处理下

我自己的电脑系统是win11

我使用的模拟软件是xOutput https://github.com/csutorasa/XOutput

配置

下载安装后,打开xOutput,手柄录入键位映射,把手柄的所有按键都输入一边, 然后方向轴看是否录入是否正确(我遇到一个右键上下的位置对调了,然后这个键位勾选反转就行),接下来下拉绑定选择北通的控制器,然后保存配置。 (这个的使用搜b站的视频比较方便,文字描述这里写不下.)

使用

接下来再关闭,以管理员权限打开xOutput(这点很重要!!)再点击开始,启用这个模拟的控制器

这时一般window的设备管理器,会识别出2个手柄设备,一个是北通自己的原有手柄,另一个是模拟出来的xbox360手柄

此时我们点开steam,通用的手柄管理一般也会识别出2个手柄。

配置steam

这时游戏启用steam手柄输入。

手柄设置那里关闭 playstation,任天堂switch相关。

勾选通用,xbox,xbox扩展支持就行。

这时打开游戏就能完了。如果失败,重启电脑,必须控制软件打开的先后顺序

先打开 xOutput 以管理员权限,

再打开steam,

再打开游戏。

心得

接下来是坑总结

设备管理器确保是2个,一个北通自带,一个虚拟出来的。我之前安装了ds4windows,勾选了隐藏北通的控制器,导致xOutput失效。

管理员权限运行xOutput这点也很重要

其他软件

x360ce 这个软件我也试过,用起来时灵时不灵。

如果问题还没解决,可以搜下其他的模拟xbox360的软件 https://alternativeto.net/software/x360ce/

具体可以看这篇文章,我就是在这个文章找到xOutput的

推荐

用了steam 这么久,发现2个好用软件,

一个是steam账号切换器 可以方便的管理多个steam账号,但是记住限制切号器的网络,可以用火绒来控制软件的网络

另一个是msi afterburner 可以用来显示游戏的帧率,显卡内存占用等等

Graylog搭建

克隆项目

https://github.com/Graylog2/docker-compose

配置文件

cd open-core
cp .env.example .env

修改.env

#.env
GRAYLOG_PASSWORD_SECRET="你的16位密码"

# 密钥= echo -n 你的16位密码 | shasum -a 256

GRAYLOG_ROOT_PASSWORD_SHA2="密钥"

修改docker-compose.yml

# graylog.environment -  位置
GRAYLOG_HTTP_EXTERNAL_URI: "https://你的域名.com/graylog" 

启动

docker-compose up -d

汇编学习

什么是汇编?

汇编学习

学习材料

Princeton大学汇编教程

这个pdf做的非常浅显易懂

tcoline.com-汇编语言

tcoline.com-汇编语言

这个网站的教程也不错,纯中文

w3c教程

https://www.w3cschool.cn/assembly/

函数调用原理

https://gitbook.coder.cat/function-call-principle/

学习记录

目录

  • 编程语言级别:c语言->汇编语言->机器语言
  • x86-64汇编介绍
  • 冯诺伊曼架构介绍
    • 主存
    • 寄存器
  • 汇编函数调用过程

主存

0000000000000000
...
TEXT
RODATA
DATA
BSS
HEAP
STACK
...
FFFFFFFFFFFFFFFF

备注

Data Registers