基于ZooKeeper和etcd实现服务的注册和发现功能的原理。 ## ZooKeeper ### 服务注册 利用临时节点的特性,创建一个服务的临时节点,写入服务信息数据,不断监视节点续期,当服务不可用时会话超时,临时节点会被删除。 ### 服务发现 服务发现是利用`watch`的特性,首先获取一遍需要的服务信息,保存在本地,然后给这个服务节点添加`watch`,监视变化和更新。 ## etcd ### 服务注册 服务注册是利用了etcd租约的特性。 首先创建一个定时的租约,比如10秒,20秒等。 然后带租约存储服务信息,不断的续期租约,当服务不可用时,租约过期,服务数据就会被删除,就相当于心跳保活了。 ### 服务发现 服务发现和zookepper类似,是利用了etcd的`watch`的特性,首先获取一遍需要的服务的信息,再监视变化和更新。 下面是实现代码供参考: https://github.com/ilaziness/gopkg/tree/main/serviceregdisc...
 发布日期: 2023-01-17    分类: Go    浏览量: 731  
go的AES加密主要用`crypto/aes`和`crypto/cipher`两个库来实现。 AES加密模式又好多种,这里研究了6种模式:CBC、CFB、OFB、ECB、CTR、GCM模式。 一看到这么多模式,如果那里需要用到一下都不知道哪种好,这里大概总结一下。 如果数据通过非对称签名进行身份验证,则使用CBC,否则使用GCM。 最好的模式是GCM模式,GCM可以保证数据的保密性和完整性,其他模式只能保证保密性,不能保证完整性,具体可以去了解下AEAD。 GCM模式属于AEAD加密。 所以除了GCM模式之外其他模式最好是增加hmac哈希,用来验证数据完整性。 ECB模式不建议使用,因为这种模式不安全,go的内置库也没有去实现这种模式。 go AES 6种加密模式代码:https://github.com/ilaziness/gopkg/tree/main/crypto/aes iv值的生成可以参考cfb模式的代码,每次加密都是随机生成的。...
 发布日期: 2022-11-11    分类: Go    浏览量: 1273  
本文操作系统是ubuntu 22.04 server amd64版本,k8s是v1.25。 虚拟机配置是2核4G,一个master节点,2个node节点。 - k8s-master:192.168.184.217 - k8s-node1:192.168.184.150 - k8s-node2:192.168.184.64 ## 准备工作 - master节点添加node1和node2的hosts解析,node1和node2添加master的hosts解析 ```bash # k8s-master /etc/hosts 192.168.184.150 k8s-node1 192.168.184.64 k8s-node2 # k8s-node1、k8s-node2 /etc/hosts 192.168.184.217 k8s-master ``` - 禁用所有主机的swap ```bash # 临时禁用swap sudo swapoff -a # 永久禁用swap,注释掉swap sudo vim /etc/fs...
 发布日期: 2022-09-25    分类: 后端    浏览量: 1369  
> [containerd官方文档](https://github.com/containerd/containerd/blob/main/docs/getting-started.md) > 本文操作系统是64位的ubuntu22.04,按照官方文档通过二进制文件来安装 需要安装三个组件containerd、runc和CNI插件。 - containerd:是一个容器运行时 - runc:根据OCI规范生成和运行容器的命令行工具 - CNI插件:配置容器网络的工具,CNI全称是Container Network Interface, ## 1. 安装containerd github下载合适的包:https://github.com/containerd/containerd/releases 下载好之后解压到`/usr/local`: ```bash sudo tar Cxzvf /usr/local containerd-1.6.8-linux-amd64.tar.gz ``` > 官方github下载的二进制包仅适用于基于gl...
 发布日期: 2022-09-25    分类: 后端    浏览量: 916  
微服务知识图谱,微服务组件图,微服务结构图 ![微服务知识图谱](https://360us.net/images/2022/202208242357.png)...
 发布日期: 2022-08-25    分类: 后端    浏览量: 867  
使用Drone搭建持续集成系统 - 持续集成:自动化的测试、编译打包并且自动部署到开发或者测试环境 - 持续交付:自动化的测试、编译打包生产环境的包,但是不做自动化的生产环境部署,需要手动来做 - 持续部署:和持续交付的区别就是生产环境的部署也是自动化的。 Drone持续集成系统主要有两部分组成: - Drone服务器:这个是用来管理的一个UI界面 - runner:这个是用来执行构建动作的服务 仓库以国内的Gitee为例子。Drone版本是2。 ### 1、创建仓库访问应用 在自己的Gitee后台创建一个可以访问自己仓库的应用,位置在`个人设置-数据管理-第三方应用`。 ![gitee_oauth](https://360us.net/images/2022/gitee_token_create.png) Gihub和Gitlab也是类似的,创建一个`OAuth`的应用,方便可以通过这个密钥访问我们的仓库。 ![create](https://360us.net/images/2022/github_application_...
 发布日期: 2022-04-27    分类: 后端    浏览量: 1545  
Gin模型数据绑定验证器用的是go-playground/validator/v10。默认提示是英文内容,我们需要翻译成中文内容。 创建一个文件`validator.go`: ```go package utils import ( "github.com/gin-gonic/gin/binding" "github.com/go-playground/locales/en" "github.com/go-playground/locales/zh" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" zhtranslations "github.com/go-playground/validator/v10/translations/zh" "log" ) var trans ut.Translator //设置验证器中文翻译 func init() { if trans != nil { ...
 发布日期: 2021-12-08    分类: Go    浏览量: 1970  
go从1.11版本开始,实验性的加入了`WebAssembly`的支持。 ## `hellow world`程序 ```go package main import "fmt" func main() { fmt.Println("Hello, WebAssembly!") } ``` 设置go编译`WebAssembly`环境变量值,`GOOS=js`和`GOARCH=wasm`。 设置方法有两种: - 修改默认变量值,执行命令:`go env -w GOOS=js GOARCH=wasm` - 编译的时候指定值:`cd`到项目根目录,执行命令:`GOOS=js GOARCH=wasm go build -o main.wasm` 这时将生成一个`main.wasm`文件,`.wasm`后缀的文件可以通过`http`设置合适的`Content-Type`http头来使用。 需要注意的一点是,只能编译`main`包,否则是不能在`WebAssembly`里面使用的。 **在浏览器里面运行`main.wasm`** ...
 发布日期: 2020-01-09    分类: Go    浏览量: 3909  
protocol buffers(简称**protobuf**)是google搞的,是用来序列化数据的一种数据格式,类似于json、xml等这种。 本文其他概念不讲直接讲基本用法了。 首先需要定义数据结构,数据结构定义写在一个扩展名是`.proto`的文本文件里面,这个文件叫做`proto`文件。 protobuf的数据叫`message`,每一个消息都是一系列名值对,我们把他叫做`fields`,当然还有更复杂的结构,这就不在这里讨论了。 例如: ``` syntax = "proto3"; #版本 package tutorial; #包名 message Person { string name = 1; int32 id = 2; bool has_ponycopter = 3; } ``` `package`包名是为了避免不同项目的名字冲突。 上面就是我们定义的数据结构,然后用protobuf的编译器`protoc`去生成指定语言的数据访问代码,提供了简便的方法来操作整个结构的二进制数据。 pr...
 发布日期: 2019-06-18    分类: 后端    浏览量: 3832  
默认是有个JsonResponseFormatter的,但是呢,我们如果做APP的API的话,json响应的格式和内容,每个人的约定都是有差异的,不可能和yii2默认的相一致。之前通过搜索搜索到的答案是,给Response对象的EVENT_BEFORE_SEN事件注册一个处理函数,在发送结果之前再处理一下。原文链接:https://github.com/yiisoft/yii2/blob/master/docs/guide-zh-CN/rest-error-handling.md主要代码如下:return [     // ...     'components' => [         'response' => [             'class' => 'yii\web\Response',             'on beforeSend' => function ($event) {                 $response = $event->sender;                 if ($response-&g...
 发布日期: 2016-12-15    分类: PHP    浏览量: 4712