- 博客(13)
- 资源 (2)
- 收藏
- 关注
原创 rpc框架之rpcx-序列化(4)
rpc框架之rpcx-序列化(4)我们一起来探寻rpcx框架,本系列会详细讲解rpcx,尽量覆盖它的所有代码,看看这款优秀的rpc框架是如何实现的。什么是序列化编码/解码对应也就是就是序列化/反序列化的过程,我们知道,网络只能传输字节。所以在rpc中,如果客户端要传输一个Person对象给服务端,客户端必须先将**Person对象转换成转换成 []byte**(这就是序列化),然后发起rpc调用,服务端在接收到请求后,将接收到的[]byte 还原成成Person对象(这就是反序列化)。type
2020-05-29 00:53:31
1035
原创 rpc框架之rpcx-远程调用(3)
rpc框架之rpcx-远程调用(3)我们一起来探寻rpcx框架,本系列会详细讲解rpcx,尽量覆盖它的所有代码,看看这款优秀的rpc框架是如何实现的。远程调用顾名思义,就是客户端发起请求,服务端接收并处理,会返回结果的过程。也就是我们说的remote procedure call(RPC)。在这个过程中会涉及到如何做服务治理,如何序列化/反序列化服务治理服务治理涉及到如何处理远程调用失败的策略: Failover、 Failfast、 Failtry、Backup。以及支持什么样的路由算法:
2020-05-26 10:20:49
1220
原创 rpc框架之rpcx-服务注册与服务发现(2)
rpc框架之rpcx-服务注册与服务发现(2)我们一起来探寻rpcx框架,本系列会详细详解rpcx的源码,会涉及到他的各个模块,看看这款优秀的rpc框架是如何实现的。概念我们先了解下几个概念注册中心:服务注册中心用来实现服务发现和服务的元数据存储。现在主流的做法是通过:zookeeper,eureka,consul,etcd 等开源框架实现。同时,注册中心需要自动剔除不可用的服务元数据。服务注册:服务端提供者将服务的元数据信息注册到注册中心的过程,这些元数据包含:服务名,监听地址,监听协议,权
2020-05-25 00:35:02
1971
原创 rpc框架之rpcx-简介(1)
我们一起来探寻rpcx框架,本系列会详细详解rpcx的源码,会涉及到他的各个模块,看看这款优秀的rpc框架是如何实现的。简介github:https://github.com/smallnest/rpcx,之所以会选择rpcx,原因有二使用简单,功能健全。rpcx框架的参照物就是java的dubbo,这对我这样十几年的java使用者来说,非常具有吸引力,况且dubbo框架是非常优秀的(成为apache的顶级项目,足以说明这一点)。这是作者对rpcx的介绍A zero cost, faster.
2020-05-22 23:59:21
2227
1
原创 viper配置框架-支持zookeeper的读取和监听(1)
接下来的几篇我们一起来学习、解读viper框架viper作为配置框架,其功能非常的强大,我们没有理由不去了解一下。我们先看官网对它的功能简介:viper是完整配置解决方案,他可以处理所有类型和格式的配置文件,他有如下功能:设置默认配置支持读取 JSON TOML YAML HCL 和 Java 属性配置文件监听配置文件变化,实时读取读取配置文件内容读取环境变量值读取远程配置系统 (etcd Consul) 和监控配置变化读取命令 Flag 值读取 buffer 值读取确切值乍一.
2020-05-21 22:59:31
588
原创 数据库事务+分布式事务
本篇讲解数据库事务的概念,以及对于分布式事务的常用解决方案ACID1.原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。2.一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。在前面的例子中,一致性确保了,即使在执行第三、四条语句之间时系统崩溃,前面执行的语句也不会生效。因为事务最终没有提交,所以事务中所做的修.
2020-05-20 13:55:48
372
原创 zap日志框架-性能篇(3)
zap日志框架分了三篇来讲解:使用篇 ,源码篇,性能篇。我们在github上可以看到如下测试结果:msg+10个fields的情况PackageTimeTime % to zapObjects Allocated⚡ zap862 ns/op+0%5 allocs/op⚡ zap (sugared)1250 ns/op+45%11 allocs/opzerolog4021 ns/op+366%76 allocs/opgo-kit454.
2020-05-20 08:27:28
924
原创 zap日志框架-源码篇(2)
分两篇来讲解zap日志框架:使用篇,源码篇。流程分析我们先看一个 logger.Error("logger", zap.String("name", "修华师")) 会走哪些代码/**入口方法,参数信息如下:msg:消息fields :结构字段信息,可以是0-N个*/func (log *Logger) Error(msg string, fields ...Field) { //校验是否需要输出 ErrorLevel 日志 if ce := log.check(ErrorLe.
2020-05-18 15:49:22
1135
1
原创 zap日志框架-使用篇(1)
分两篇来讲解zap日志框架:使用篇,源码篇。为什么选择 zap流行的日志框架中,如:logrus,go-kit,log15,都提供了结构化、非结构化输出。使用起来大同小异,正基于此,性能+扩展 成了我们选择日志框架的两个比较重要的维度。性能参考 github上的单元测试,如下:记录一个包含10个字段的日志的消耗情况PackageTimeTime % to zapObjects Allocated⚡ zap126 ns/op+0%0 allocs/op⚡.
2020-05-15 23:05:00
2012
原创 go-入门到精通系列-003-数据类型详解(2)
未来的文盲将是那些没有知识和不会更新知识的人。成年人被淘汰的最主要原因是学习能力下降—德鲁克字符串定义和其他语言不同,go的字符串,实际上是类型为byte的只读切片。以下是官方对string的定义:string是byte的集合,通常来说是采用utf-8编码。有可能为空,但不可能为nil。属于不可变类型。// string is the set of all strings of 8-b...
2020-05-05 00:26:21
176
原创 go-入门到精通系列-003-数据类型详解(1)
出于对篇幅的控制,本章节只对 布尔类型 和 整型类型 做讲解有不懂之处,欢迎留言。想交流go的其他内容,也欢迎留言。布尔类型bool 变量比较简单,以下是bool的初始化,赋值package mainimport "fmt"func main() { //默认false var a bool //赋值为true a = true //声明变量,并赋值为true va...
2020-05-02 23:24:12
124
原创 go-入门到精通系列-002-数据类型
基本数据类型和其他语言一样,如 java,python,c++,c,并没有什么特别之处,下面对go的基础数据做简单介绍数据类型分类按照属性,可以分为四类,分别是:布尔型,数字类型,字符串类型, 派生类型类型解释例子布尔型布尔型的值只可以是常量 true 或者 falsevar b bool = true数字类型整型 int 和浮点型 float32、fl...
2020-05-01 23:00:44
162
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人