数据类型映射

Protobuf数据类型描述打包C++语言映射GO语言映射
bool布尔类型1字节boolbool
double64位浮点数Ndoublefloat64
float32为浮点数Nfloatfloat32
int3232位整数Nintint32
uin32无符号32位整数Nunsignedintuint32
int6464位整数N__int64int64
uint6464为无符号整Nunsigned__int64uint64
sint3232位整数,处理负数效率更高Nint32int32
sing6464位整数处理负数效率更高N__int64int64
fixed3232位无符号整数4unsignedint32uint32
fixed6464位无符号整数8unsigned__int64uint64
sfixed3232位整数、能以更高的效率处理负数4unsignedint32int32
sfixed6464为整数8unsigned__int64int64
string只能处理ASCII字符Nstd::stringstring
bytes用于处理多字节的语言字符、如中文Nstd::string[]byte
enum可以包含一个用户自定义的枚举类型uint32N(uint32)enum结构体:struct/数据:int32
message可以包含一个用户自定义的消息类型Nobjectofclassstruct

Tips

  • N 表示打包的字节并不是固定。而是根据数据的大小或者长度。
  • 例如int32,如果数值比较小,在0~127时,使用一个字节打包。
  • 关于枚举的打包方式和uint32相同,GO情况下不同。
  • 关于message,类似于C语言中的结构包含另外一个结构作为数据成员一样。
  • 关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32。

映射到 JSON

对于前端数据交换还是用JSON会更加多一些,因此映射JSON后的结构体。

Proto3JSONJSON example
messageobject{"fooBar": v, "g": null, …}
enumstring"FOO\_BAR"
mapobject{"k": v, …}
repeated Varray[v, ...]
booltrue,falsetrue, false
stringstring"hello"
bytesbase64 string"YWJjMTIzIT8kKiYoKSctPUB+"
int32, fixed32, uint32number1, -10, 0
int64, fixed64, uint64string"1", "-10"
float, doublenumber1.1, -10.0, 0, "NaN", "Infinity"
Anyobject{"@type": "url", "f": v, … }
Timestampstring"1972-01-01T10:00:20.021Z"
Durationstring"1.000340012s", "1s"
Structobject{...}
Wrapper typesvarious types2, "2", "foo", true, "true", null, 0, …
FieldMaskstring"f.fooBar,h"
ListValuearray[foo, bar, …]
ValueValue
NullValuenull
Emptyobject{}

前提

在一次远端协助过程中,我都会比较喜欢使用Windows的远端桌面来连接远程主机,但很不巧,远程主机因安装了特殊的Windows10版本,导致远程桌面无法通过正常方式开启。

故障描述

Windows版本:Windows 10 企业版

版本号:1809

简要系统主要设置情况:Windows防火墙无法打开,Windows安全中心被删除。

Windows规格

无法选择远程选项

解决方案

其实一般远程桌面无法打开,其实一般是没有开启防火墙导致,但这次Windows安全中心直接被干掉了,所以你想开启Windows安全中心这个办法无解,只能寻找其他的解决方案。

策略组修改

Windows+R开启运行窗口,输入gpedit.msc打开本地策略组。

依次打开计算机配置 > 管理模板 > Windows组件 > 远程桌面会话主机 > 连接,找到允许用户通过使用远程桌面服务进行远程连接,此配置项修改为已启用。

修改策略组

服务

接下来打开服务,依照下列列出的服务改成对应的启动类型,并运行服务。

修改服务选项

授权远程登录组

找到本地用户和组打开,在右侧列表中找到Remote Desktop Users双击打开,添加你需要远程登录的用户即可。

图中成员是添加后的效果

重启电脑

修改完成后请重启电脑使上面设置生效。

校验设置

系统属性

依照上面设置后打开系统属性远程选项卡,会发现远程选项虽然是不可选状态,但默认选中允许远程连接到此计算机

修改成功后系统属性

如果有需要直接使用网络级别身份校验可以勾选下方的选项。

远程连接测试

打开系统自带的远程桌面连接输入地址127.0.0.2

本地测试远程地址

成功打开远程桌面(未开启网络级别身份校验)

成功打开远程桌面(开启网络级别身份校验)

上面显示分别开启或未开启网络级别身份校验的连接提示,按照提示输入你授权远程的账户密码,就可完成远程桌面授权。

参考来源

win10专业版远程桌面无法设置 - Microsoft Community

感谢

头图作者 Vlada Karpovich @pexels

大家好久不见,有一段时间没有写文了。最近刚好遇到数据迁徙,所以就有题材写了。

【真的最近给中国马克思主义灌输,所以想不出来题材了】

为什么有这次数据迁移?

因为之前一直享受阿里云的优惠活动,但是最近续费发现没有优惠了,因为优惠服务器在那个时候是可以续费到2023年的,但阿里云在没有做任何公告和提示就把优惠关闭了,刚好服务器又处于等待释放期,只能被迫续费,寻找新服务器迁移了。

基础服务迁移

由于之前就做过完好的服务容灾备份设置,再加上有一些工具辅助,博客在新服务器开设后,下午就迁移完毕了。

基础网站服务

更新解析后 10分钟后生效

[其实总的来说阿里云的延迟确实低一些(本地网络有些不稳定,样本不多,此延迟没有太大参考依据)]

网站延迟

Docker服务迁移

Docker是我最爱,很多服务或者临时测试都会在Docker上进行,也得力于Docker使得服务器环境干净,迁移Docker容器内的服务也变得十分方便,减少了很多不必要的部署麻烦。

再次也建议大家尝试Docker,会给你不一样的体验。

标准迁移

通常如果你使用DockerHub或其他容器仓库的镜像,那么直接可以将镜像挂载卷数据复制到新服务器,重新在新服务器运行相同指令完成容器迁移就完成了。

(没错,就这么简单,下面会告诉你如何做两台服务器之间如何直接传输数据)

但仍需要注意执行在新服务器上的镜像需要和旧版本一致,建议大家在使用镜像时候最好可以指定镜像版本而不是latest

容器打包

当如果你在原有的镜像做了处理(例如在镜像内新加服务或自定义参数),那么就需要自己打包镜像迁移。

本地创建容器镜像:

docker commit 容器id 要保存的镜像名称

查看镜像:

docker images

保存镜像为文件:

docker save 新镜像id -o 要保存的tar包名称.tar 

将tar文件复制到新服务器:

docker load -i 镜像文件名.tar

镜像载入成功后,就可以正常用命令进行使用镜像创建新容器了。

容器匿名挂载数据(注意)

其中有些容器挂在后由于我没有做卷挂在,所有的数据在容器内部,所以需要打包镜像传输。

部分Dokcer镜像是由自动做数据挂载,也就是说你可能没有做数据卷挂载,但是镜像会帮你做匿名挂载

docker inspect 容器ID

"Mounts": [
            {
                "Type": "volume",
                "Name": "c7fd0e66917e4cdb2b60e450bbdaa7bfd0c2069b800db4a45066a97c60dea36e",
                "Source": "/var/lib/docker/volumes/c7fd0e66917e4cdb2b60e450bbdaa7bfd0c2069b800db4a45066a97c60dea36e/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ]

上面就是匿名挂载卷,需要注意也要自己手动打包挂在卷数据进行迁移。

如果你只打包了容器而没有打包匿名卷数据,可以说打了个寂寞~

部分特殊容器服务恢复

GitLab

镜像复制后运行却总报权限不足,无奈只能用原始备份命令

备份命令:

gitlab-rake gitlab:backup:create

还原命令:

gitlab-rake gitlab:backup:restore

但是很神奇的事情发生了,内部读取备份又提示没权限

docker exec -it gitlab update-permissions

其实在第一次点对点传输的时候就使用过这个重新声明权限但没有用,神奇的是后面用还原备份的时候再用用一次居然可以了...

最后就再执行了还原备份命令,GitLab就正常还原之前的数据了。

额外数据迁移

服务器之间数据传输 SCP

那么第一步是借助工具做了基础数据服务传输,那么其他数据【容器之类的】只能用服务器相互传输。

scp /hostpath user@127.0.0.1:/romtepath

hostpath 本机目录

user 远端用户名

romtepath 远端目录

依照提示输入远端认证就可以完成数据传输。

多命令执行 Tmux

如果细心的朋友就会发现,上面的数据传输是需要保持终端在前面运行【后台运行也是】,一旦离开终端页面传输就终止。

那么我们就需要借助Tmux来为我们在服务器产生一个内部终端可供我们后台运行。

yum i tmux -y

新建会话:

tmux new -s SESSIONNAME

查看当前目前执行会话:

tmux ls

进入某个会话:

tmux a -t SESSIONNAME

让当前会话在后台运行

先按住 Ctrl+B 全部松开后 按 D 就可以挂在后台运行了。

服务器的小调整

虚拟内存机制设置

这个服务器本身就只是为了个人用(博客)且作为一个中心点作为堡垒机,查看其它服务器是否还正常运转,所以内存我就用的比较少(2G)。

因此提高的虚拟内存的策略,为突然需要实体内存的服务留存必要的空间。

在此文件下操作:

vi etc/sysctl.conf 

虚拟内存策略:

#swappiness
vm.swappiness=60

激活设置:

sysctl -p

最后小插曲

这个中间还有个小插曲:期间专员和我联系,

我:为什么优惠活动即将停止,没有提前告知客户。

专员:我们都有在页面显示的呢,我们不会主动告诉客户,这样来说是给客户一种骚扰。

我:那为什么续费页面不告知客户呢?

专员:这样的话给用户的体验很糟糕,而且还会对服务器有计算压力。

我:续费页面都能计算优惠价格,而优惠要终止却不能续费页面告诉要结束,那现在导致客户服务器停止了,那我们损失怎么计算?你居然在和我说用户体验,难道这样的用户体验就很好?

专员:(开始循环准备句子了)

今天来水一篇文章来讲前端的一些配置。

Node.JS官方网站:https://nodejs.org/zh-cn/

切换Node.JS镜像源

npm config set registry http://registry.npm.taobao.org

全局安装Vue脚手架

npm install -g vue-cli

解锁Windows不安全脚本运行

问题如下:

PS D:\Project-Web> vue
vue : File C:\Users\Shu\AppData\Roaming\npm\vue.ps1 cannot be loaded because running scripts is disabled on this system
. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ vue
+ ~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

解决方法:

PS D:\Project-Web> set-ExecutionPolicy RemoteSigned

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):  A

输入A(全是)

卡 Building fresh packages...

项目目录下创建.npmrc(NPM)或.yarnrc(Yarn)文件,然后填入下放内容保存

registry "https://registry.npm.taobao.org"

sass_binary_site "https://npm.taobao.org/mirrors/node-sass/"
phantomjs_cdnurl "http://cnpmjs.org/downloads"
electron_mirror "https://npm.taobao.org/mirrors/electron/"
sqlite3_binary_host_mirror "https://foxgis.oss-cn-shanghai.aliyuncs.com/"
profiler_binary_host_mirror "https://npm.taobao.org/mirrors/node-inspector/"
chromedriver_cdnurl "https://cdn.npm.taobao.org/dist/chromedriver"