2021年1月23日
gRPC是Google开源的一款RPC框架,跟具体语言无关,以protobuf作为IDL,通过protoc来编译框架代码。gRPC的Java实现的底层网络库是基于Netty开发而来,其Go实现是基于net库。 先说下Protobuf,它是一个纯粹的展示层协议,可以和各种传输层协议一起使用;Protobuf的文档也非常完善。 ………
阅读全文
2021年1月23日
Thrift是Facebook开源提供的一个高性能,轻量级RPC服务框架,其产生正是为了满足当前大数据量、分布式、跨语言、跨平台数据通讯的需求。 但是,Thrift并不仅仅是序列化协议,而是一个RPC框架。相对于JSON和XML而言,Thrift在空间开销和解析性能上有了比较大的提升,对于对性能要求比较高的分布式系统,它是一个优秀的RPC ………
阅读全文
2021年1月23日
Go语言提供了很多性能分析的工具,性能分析类型有如下几种: CPU性能分析 内存性能分析 阻塞性能分析 锁性能分析 CPU性能分析 生成profile文件 Go 的运行时性能分析接口都位于 runtime/pprof 包中。只需要调用 runtime/pprof 库即可得到我们想要的数据。 看下面的例子,随机生成了 5 组数据,并且使用冒 ………
阅读全文
2021年1月23日
Go语言反射特性(reflect)提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率,但通常降低运行效率。 Go语言中的反射 Go语言提供了一种机制在运行时更新和检查变量的值、调用变量的方法和变量支持的内在操作,但是在编译时并不知道这些变量的具体类型,这种机制被称为反射。反射也可以让我们将类 ………
阅读全文
2021年1月22日
Go 语言广泛地应用于云计算和微服务,成熟的 RPC 框架和微服务框架不少;grpc、rpcx、go-zero、go-micro 等都是非常成熟的框架。通常来说RPC 是微服务框架的一个子集,微服务框架可以自己实现 RPC ,或者选择不同的 RPC 框架作为通信基础。 为了深入学习RPC框架,我们这里模拟标准库net/rpc,自己从零开始 ………
阅读全文
2021年1月21日
通常我们写程序时需要封装,需要函数调用,函数调用通常在本程序内完成。随着计算机技术的发展和需求场景的变化,有时就需要从一台计算机上执行另外一台计算机上的程序的需求,因此发展出来了RPC技术。特别是目前随着互联网技术的快速迭代和发展,用户和需求几乎都是以指数式的方式在高速增长,这个时候绝大多数情况下程序都是部署在多台机器上,就需要在调用其他……
阅读全文
2021年1月19日
开发软件日志很重要,不管是应用的标准输出信息,还是主动打印的日志,还是被动的异常信息;都有被记录和整理的需求。大数据从哪里来,很多时候其实是从日志中来的。日志很重要,Go标准库也为日志输出内置了大量实用方法。 标准配置 标准库就提供了这些参数,按需要配置就好了: 1 2 3 4 5 6 7 8 9 10 const ( Ldate = 1 ………
阅读全文
2021年1月12日
前面我们学习了并发以及解决并发的常用方式;今天我们看看Go语言实现的三种常用并发模式;这些模式可以在实际生产应用中合理使用,免去了我们造轮子的过程。 我们说过通道的性能并不是太好,这个在大批量循环处理的时候的确有些问题。性能不是关键诉求的场景下还是可以的,他能简化编程。这里讲的三种并发模式,都需要结合使用通道和协程。 Runner 下面给 ………
阅读全文
2021年1月12日
第九篇文章我们学习了Go解决并发编程问题的三种方式。归根结底都是采用加锁,让并发变成同步访问。那么这些处理方式性能如何呢? 先介绍一个Linux下面统计时间的命令time,具体可以参考:https://www.runoob.com/linux/linux-comm-time.html 这里做一个测试,启动两个协程,一个对数执行++操作,一 ………
阅读全文
2021年1月7日
Go语言SDK内置了很多实用的工具,默认自带了单元测试、基准测试命令;今天我们来看看如何做好单元测试。 什么是单元测试 百度百科:单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软 ………
阅读全文