自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(152)
  • 资源 (1)
  • 收藏
  • 关注

原创 protobuf官方文档学习

官方地址:https://developers.google.com/protocol-buffers/docs/proto3定义一个消息类型先来看一个非常简单的例子。假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串、你感兴趣的查询结果所在的页数,以及每一页多少条查询结果。可以采用如下的方式来定义消息类型的.proto文件了syntax = "proto3";message SearchRequest { string query = 1; int32 page.

2021-08-21 22:53:58 1937

原创 docker 安装MySQL

1、下载镜像docker pull mysql:5.72、启动镜像docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。-v -v $PWD/c

2021-08-07 22:44:26 314

原创 Temporal 服务编排实例:转账服务

1、SDKTemporal GO SDK2、目标使用 Temporal Server 和Go SDK完成Temporal工作流应用程序的几次运行交互 练习检查工作流的状态 理解工作流功能的内在可靠性 学习许多Temporal的核心术语和概念3、示例介绍Temporal Server 和特定语言的SDK(本例中是Go SDK)为现代应用程序开发带来的复杂性提供了全面的解决方案。您可以将Temporal看作是一种“万能药”,可以解决作为开发人员在尝试构建可靠应用程序时所经历的痛苦。

2021-08-06 09:51:02 2163

原创 Temporal Server architecture

概述Temporal Server是高度可伸缩的和多租户的,能够同时运行数百万个工作流。它使用各种分片技术来确保内部的可伸缩性。它还能够通过在多个主机上运行多个实例进行水平扩展。Server本身并不执行应用程序代码,而是使用队列、计时器和数据库跟踪应用程序的状态。服务端拓扑架构“服务器”本身实际上是四个服务和一个数据库的集群Server的实例可以作为独立进程运行,也可以在一个或多个物理或虚拟机上分组为共享进程。但是对于正在运行的环境,要确保每个服务都是独立运行的,因为它们都...

2021-08-05 22:26:04 707

原创 Temporal Go SDK samples:Hello World

1、确保Temporal Server 运行2、创建Workflow和Activitypackage helloworldimport ( "context" "go.temporal.io/sdk/activity" "go.temporal.io/sdk/workflow" "time")// Workflow is a Hello World workflow definitionfunc Workflow(ctx workflow.Context,name string

2021-08-05 21:43:42 567

原创 Quick install Temporal Server for testing and local development

Install Docker Install docker-compose Clone thetemporalio/docker-composerepository Change directory into the root of the project. Run thedocker-compose upcommandgit clone https://github.com/temporalio/docker-compose.gitcd docker-composedocke...

2021-08-05 21:18:07 173

原创 Temporal 框架研究:一种实用的 Temporal 架构方法

本文最初发布于 Mikhail Shilkov 的个人博客,经原作者授权由 InfoQ 中文站翻译并分享。Temporal让开发人员可以构建高度可靠的应用程序,而无需担心所有的边界情况。如果你刚开始接触 Temporal,那么可以读一下我的文章《开源工作流即代码》。接下来,我将介绍如何安装和运行 Temporal。Temporal 包含多个组件。在本文中,我想概要地介绍下其主要的构建模块及它们之间的交互。最终,你将对 Temporal 以及部署到开发环境、过渡环境和生产环境的注意事项有一个总

2021-08-05 18:02:58 1778

原创 kubectl的安装以及用Kind配置本地集群

1、Install kubectl binary with curl on Linux(1)安装最新版本:curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"安装指定版本:curl -LO https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl(2)验证二进

2021-06-21 17:08:01 604

原创 kubectl的安装以及用Kind配置本地集群

1、Install kubectl binary with curl on Linux(1)安装最新版本:curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"安装指定版本:curl -LO https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl(2)验证二进

2021-06-21 17:01:12 430

原创 gRPC 拦截器简要说明及示例

InterceptorgRPC provides simple APIs to implement and install interceptors on a per ClientConn/Server basis. Interceptor intercepts the execution of each RPC call. Users can use interceptors to do logging, authentication/authorization, metrics collection

2021-06-19 23:22:07 631

原创 gRPC 的四种数据流以及metadata示例

1、四种数据流简单模式(Simple RPC):即客户端发起一次请求,服务端响应一个数据。 服务端数据流模式(Server-side streaming RPC):客户端发起一次请求,服务端返回一段连续的数据流。典型的例子是客户端向服务端发送一个股票代码,服务端就把该股票的实时数据源源不断的返回给客户端。 客户端数据流模式(Client-side streaming RPC):客户端源源不断的向服务端发送数据流,而在发送结束后,由服务端返回一个响应。典型的例子是物联网终端向服务器报送数据。 双向数

2021-06-19 14:46:50 1233

原创 golang http客户端实例

golang的net/http包已经提供了强大了网络操作函数,我们编写的web客户端示例如下:package mainimport ( "io/ioutil" "log" "net/http")func main() { //Get请求 res, err := http.Get("http://www.baidu.com") if err != nil { log.Fatal(err) } //利用ioutil包读取百度

2021-06-16 16:46:46 579

原创 分布式共识算法对比分析

1、分布式共识算法汇总PoW(Proof-of-Work 工作量证明):PoS(Proof-of-Stake 权益证明):DPoS()

2021-06-04 17:29:44 833 1

原创 Redis 单线程模型

1、Redis的单线程主要是指Redis的网络IO和键值对的读写是由一个线程来完成的,这也是Redis对外提供键值存储服务的主要流程。但是Redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以,严格上来说,Redis并不是单线程的。2、Redis高性能的原因 Redis大部分操作是在内存上完成的,同时采用了高效的数据结构,例如哈希表和跳表。 Redis采用了多路复用机制,使其在网络IO操作中能并发处理大量的客户请求,实现高吞吐量..

2021-05-31 10:30:42 384

原创 GO语言GPM模型

原文地址:https://studygolang.com/articles/29227

2021-05-30 23:32:41 371

原创 Redis基本数据结构

1、基本数据结构 String(字符串) List(列表) Hash(哈希) Set(集合) Sorted Set(有序集合) 上面都是Redis键值对中值的数据类型,也就是数据的保存形式。 2、底层数据结构底层数据结构一共有6种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。3、键和值本身用什么结构组织?为了实现从键到值的快速方法,Redis使用了一个哈希表来保存所有的键值对。一个哈希表,其实就是一个数..

2021-05-30 23:13:16 290 1

原创 Redis 知识框架

Redis是一个非常优秀的系统,它在CPU使用、内存组织、存储持久化和网络通信这四大方面的设计非常经典。为了能够在较短的时间内,掌握Redis的核心知识,必须形成系统guan

2021-05-28 20:43:08 170

原创 grpc auth interceptor+ Identifier Type设计模式+JWT验证

1、自定义 grpc interceptorconst ( authorizationHeader = "authorization" bearerPrefix = "Bearer ")//Interceptor creates a grpc auth interceptor.func Interceptor(publicKeyFile string) (grpc.UnaryServerInterceptor, error) { f, err := os.Open(publ

2021-05-27 23:38:48 332

原创 K8s架构概览

1、k8s集群K8s集群中主要有两类角色:Master节点和Worker节点。简单讲,Maser节点主要是用来管理和调度集群资源的,worker节点是资源的提供者。在一个高可用的K8s集群中,Mater节点和Worker节点一般有多个节点构成。这些节点可以是物理机,也可以是虚拟机。Worker节点所提供的资源单位叫做Pod,简单理解,Pod就是K8s云平台它所提供的虚拟机。Pod里面驻的是应用容器,比如说docker容器。容器是CPU和内存的资源隔离单位。大部分场景中,一个Pod里面只驻.

2021-05-27 14:56:07 4472

原创 golang面试题:Sum of Squares

package mainimport "fmt"func SumOfSquares(c, quit chan int) { y := 1 for { select { case c <- y * y: y++ case <-quit: return } }}func main() { sumChan := make(chan int) quitChan := make(chan int) sum := 0 go func() ...

2021-05-24 23:29:11 173

原创 golang 字符串相等比较

fmt.Println("go"=="go")fmt.Println("GO"=="go")fmt.Println(strings.Compare("GO","go"))fmt.Println(strings.Compare("go","go"))fmt.Println(strings.EqualFold("GO","go"))输出结果truefalse-10true内建方法"==”,区分大小写,最简单的方法 Compare函数,区分大小写,比内建方法“==”的速度要快.

2021-05-23 20:32:17 1079

原创 golang find file

1、查找文本文件package mainimport ( "fmt" "log" "os" "path/filepath")func main() { var files []string root := "/your/file/path" err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if er

2021-05-22 23:41:15 680

原创 Golang Read Write Create and Delete text file

package mainimport ( "fmt" "io" "os")var path = "test.txt"func main() { createFile() writeFile() readFile() deleteFile()}func createFile() { // check if file exists var _, err = os.Stat(path) // create fi.

2021-05-22 23:13:37 178 2

原创 二叉树后序非递归遍历

package mainimport ( tree "awesomeProject/interview/Tree" "fmt")func postorderTraversal(root *tree.Node) []int { if root == nil { return nil } result := make([]int, 0) stack := make([]*tree.Node, 0) var lastVisit *tree.Node //弹出过的节点,保证根节点必须.

2021-05-20 23:29:13 108 1

原创 二叉树中序非递归遍历

package mainimport ( tree "awesomeProject/interview/Tree" "fmt")//非递归中序遍历(left->root->right)func inorderTraversal(root *tree.Node) []int { result := make([]int, 0) if root == nil { return result } stack := make([]*tree.Node, 0) //首先判断.

2021-05-18 23:46:15 146

原创 理解队列

1、基本含义队列其实可以通过数组来实现的。可以用一个抽象数组来描述一个队列。为了实现队列功能,可以给数组添加两个指针变量:一个称为头指针,它指示当前消费的位置,例如图中0-2三个元素已经消费出队列了。每次消费一个元素,头指针的值加1。一个称为尾指针,表示下一个入队列的位置,每次生产者生产一个元素或是入队列一个元素,尾指针就会加1队列的特性要求,尾指针的值必须大于等于头指针的值,如果两种是相等的 ,表示当前队列为空。如果两者不相等,那么尾指针的值减去头指针的值的差值就是当前队列中未消费

2021-05-18 12:58:04 155

原创 golang 生成JWTToken

package tokenimport ( "crypto/rsa" "time" "github.com/dgrijalva/jwt-go")// JWTTokenGen generates a JWT token.type JWTTokenGen struct { privateKey *rsa.PrivateKey issuer string nowFunc func() time.Time}// NewJWTTokenGen new JWT token.

2021-05-17 23:16:07 1168

原创 RSA非对称加密流程说明

说明:图例中,红框:需要保密的文本;绿框:不需要保密的文本。所谓非对称,指的是:用PrivateKey加密,就必须用PublicKey解密。用PublicKey加密,就必须用PrivateKey解密。1、加密如果A需要把文件Text,通过不安全的网络 ,发送到B,则需要加密。为了解决对称加密的密码泄露的问题,使用非对称加密。图中,红色框表示的B模块中的BPrivateKey和Text只有B知道,绿色框代表的BPublicKey网络上任何人都可以知道。A通过BPublicKey和Tex

2021-05-16 23:37:12 889 3

原创 分布式系统设计总体流程步骤

2021-05-15 23:28:10 420

原创 二叉树前序非递归遍历

package treetype Node struct { Val int Left *Node Right *Node}func NewNode(val int) *Node { node := &Node{ Val: val, Left: nil, Right: nil, } return node}前序遍历:package mainimport ( tree "awesomeProject/interview/Tree" ".

2021-05-15 22:48:54 129 1

原创 RPC和REST的区别

一句话,两者并不是一个层面意义上的东西。1、定义REST 是Representational State Transfer的简称,是一种软件架构风格,中文描述为表述性状态转移(是指某个瞬时状态的资源数据的快照,包括资源数据的内容、表述格式(XML、JSON)等信息)。这种风格的典型应用就是HTTP。RPC 是 Remote Procedure Call 的缩写形式,中文描述为远程过程调用,用来屏蔽远程调用跟本地调用的区别,是解决应用间通信的一种方式。RPC可以基于TCP/UDP,也可以基于.

2021-05-12 16:00:22 2394

原创 什么是RPC?

1、基本定义RPC,全称Remote Procedure Call, 即远程过程调用。主要作用是屏蔽网络编程细节,实现调用远程方法就像调用本地方法(同一个进程中的方法)一样的体验。同时屏蔽底层网络通信的复杂性,让我们更加专注业务逻辑的开发。2、RPC通信RPC是一个远程调用,肯定是需要跨服务器而非本机,所以需要网络编程才能实现,这就带来了以下几个问题:Call ID 映射在本机的函数调用中,函数体是直接通过函数指针来指定的,当函数调用时,编译器会自动调用相应的函数指针。但是在远

2021-05-12 12:50:52 21063 1

原创 golang channel使用场景:广播通知

类似 pthread_cond_broadcast() 的功能。利用从已关闭的 channel 读取数据时总是非阻塞的特性,可以实现在一个协程中向其他多个协程广播某个事件发生的通知:package mainimport ( "fmt" "time")func main() { N := 10 exit := make(chan struct{}) done := make(chan struct{}, N) //start N worker

2021-05-11 23:11:05 850 1

原创 golang channel使用场景:条件变量(condition variable)--一对一通知

条件变量(condition variable)类型于 POSIX 接口中线程通知其他线程某个事件发生的条件变量,channel 的特性也可以用来当成协程之间同步的条件变量。因为 channel 只是用来通知,所以 channel 中具体的数据类型和值并不重要,这种场景一般用 struct{} 作为 channel 的类型。一对一通知类似 pthread_cond_signal() 的功能,用来在一个协程中通知另个某一个协程事件发生:package mainimport (

2021-05-11 23:03:06 436 1

原创 golang channel使用场景:futures / promises

golang 虽然没有直接提供futrue / promise模型的操作原语,但通过 goroutine 和 channel 可以实现类似的功能:package mainimport ( "io/ioutil" "log" "net/http")//http request promisefunc RequestFuture(url string) <-chan []byte { c := make(chan []byte, 1) go ..

2021-05-11 22:55:26 257 2

原创 用go语言控制Docker启动MongoDB并建立测试库

1、拉取MongoDB镜像(API方式)func imagePull(ctx context.Context, refStr string, c *client.Client) { pullReader, err := c.ImagePull(ctx, refStr, types.ImagePullOptions{ All: false, RegistryAuth: "", PrivilegeFunc: nil, }) if err != nil { p

2021-05-11 22:42:50 318

转载 GOB 的数据

原文在此:http://blog.golang.org/2011/03/gobs-of-data.html,来自 Golang 官方博客。Gob 是 Golang 的包中带的一个数据结构序列化的编/解码工具。在实际应用中,已经有不少的编解码工具/包/库了,为什么 Golang 还要新开发一个 Gob?又是一个重复的轮子?Gob 做了哪些工作?Gob 的优势是什么?本文做了一个较为全面的解释。—————-翻译分割线—————-Gob 的数据为了让某个数据结构能够在网络上传输或能够保存至文件,它

2021-05-10 21:59:38 394

原创 微服务与领域驱动的关系

微服务与领域驱动的简要关系:逻辑上看是划分领域。实现上看是确定上下文边界,边界内部可以有很高的耦合度,在边界之外不能有太多的交互。边界与边界之间,不同的上下文之间,会有一个映射。因为不同的领域拥有不同的名字,所以之间需要有一个映射。有了映射关系之后,再通过该映射关系,去确定微服务的边界。并不是说一个领域一个微服务,如果一个领域一个微服务的话,会落入服务太细的怪圈中。...

2021-04-29 22:07:31 388

原创 vmware 桥接模式下无法上网的终极解决方法

1、关闭防火墙关闭物理主机和虚拟机的防火墙再重试;systemctl stop firewalld # 临时关闭防火墙 systemctl disable firewalld # 禁止开机启动2、查看桥接模式下的物理网卡是否对应正确3、查看物理主机的网络属性,关键看 以下两点:1. VMware Bridge Protocol是否选择2.连接时使用的网卡是否跟虚拟机桥接模式下桥接到的网卡一致3.如果有DNE LightWeight Filter,则 取消选择..

2021-04-29 17:48:43 44250 18

原创 Property ‘getUserProfile‘ does not exist on type ‘Wx‘ 问题解决

1、在开发微信小程序,执行命令npm run tsc抛出以下错误:2、进入wx中的源码,发现无getUserProfile方法,初步怀疑版本较低的问题。3、查看package.json文件,miniprogram-api-typings配置项的版本号为"^2.8.3-1"4 、通过链接https://github.com/wechat-miniprogram/api-typings/tags查看api-typings的版本发布情况,已经达到3.X了进一步确认是.

2021-04-26 23:06:04 1361 1

Spring2.0宝典源码

Spring2.0宝典源代码,李刚著。分章节代码,注释详细,代码经过优化。

2012-02-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除