go
文章平均质量分 75
f905699146
这个作者很懒,什么都没留下…
展开
-
Golang 深度剖析 -- 理解Mutex源码实现
在golang的并发编程中,为了保证访问数据的安全性,经常会用到mutex去保证goroutine的同步,本文基于golang 1.14.6版本去分析mutex实现, golang中的mutex是一种排它锁,其实现结构如下:// A Mutex is a mutual exclusion lock.// The zero value for a Mutex is an unlocked mutex.//// A Mutex must not be copied after first use.ty原创 2021-02-24 20:31:15 · 389 阅读 · 0 评论 -
系统设计篇(三) -- 怎么设计高并发的服务(一)
高并发,高可用是服务端开发经常听到的词汇,在互联网应用中,随着用户的增加,后台服务需满足承载正常使用系统功能的用户数量。但是单机承载能力是有限的,因此通过多服务去支撑业务是必然的。但是不是所有业务都能通过简单的多服务扩展去解决,中间转换的过程会有很多问题,很多高并发服务的诞生并不是一蹴而就的,都是随着业务的扩展慢慢提高的,不同的场景遇到的问题也不一样,因此,在设计系统时需要因地制宜,根据当前业务场景去设计合适的架构。水平扩展 OR 垂直扩展网上听的最多的就是这两个词,垂直扩展好理解,就是提升单体服务的性原创 2020-11-01 13:47:33 · 511 阅读 · 2 评论 -
Golang 深度剖析 -- 理解Golang依赖注入
用过Java的都知道Spring框架,Spring核心是一个Ioc容器,各个模块都会注入到容器中,带来的优势是解耦,这样使得修改各个模块时不用管模块之间的依赖关系。举个例子,一个服务里面有日志模块,配置模块,DB模块,业务模块等,其中日志模块依赖配置模块,DB模块依赖日志模块,配置模块,业务模块依赖所有基础模块。这样带来的一个问题是,如果有模块要修改,势必会影响其他模块,如果模块很多,还需要人为的规定初始化顺序,这对大型项目的维护来说是一件很恐怖的事,因此依赖注入的引入可以减少维护依赖关系的精力,专心使开原创 2020-10-21 14:23:12 · 1515 阅读 · 0 评论 -
微服务系统设计篇(二) -- 如何做数据库选型
在微服务设计中,数据库的选型是不可缺少的一环,后台的核心是与数据打交道,在不同的业务场景选择的数据库不一样, 好的数据库选型能够解决业务的性能瓶颈,如果数据库选择不恰当,会使得服务的性能上不去,因此我们需要对一些常用的数据库有一些了解,这样才能因地制宜,发挥系统最好的性能。常见的数据库分类:数据库类型数据库名称关系型数据库Mysql,Oracle,postgresql内存数据库Redis,Memcache时序数据库TSDB文档型数据库MongoDB分布原创 2020-10-16 17:48:35 · 691 阅读 · 0 评论 -
Golang 深度剖析 -- Map的实现原理
Golang标准库实现了Map容器,在很多业务场景都会用到这个容器,但是使用不当有可能会出现问题,这里我们来探究Map底层到底是如何实现的。Map的实现在runtime/map.go,首先有这么一段介绍:// A map is just a hash table. The data is arranged// into an array of buckets. Each bucket contains up to// 8 key/elem pairs. The low-order bits of t原创 2020-10-12 09:30:50 · 692 阅读 · 0 评论 -
Golang 深度剖析 -- channel的底层实现
目录:channel 简介channel 内部结构创建channel发送数据接收数据关闭channel总结channel 简介Go语言有个很出名的话是“以通信的手段来共享内存”,channel就是其最佳的体现,channel提供一种机制,可以同步两个并发执行的函数,还可以让两个函数通过互相传递特定类型的值来通信。channel有两种初始化方式,分别是带缓存的和不带缓存的:make(chan int) // 无缓存 chanmake(chan int, 10) // 有缓存原创 2020-10-12 09:25:42 · 3153 阅读 · 1 评论 -
gRPC使用
首先安装protobuf和grpcgo get -u github.com/grpc/grpc-gogo get -u github.com/golang/protobuf/protogo-get -u github.com/golang/protobuf/protoc-gen-go //--go-out工具首先定义hello.protosyntax="proto3";option...转载 2018-09-20 14:18:02 · 653 阅读 · 0 评论 -
OpenTsdb驱动简单实现
时序时空数据库TSDB简介和使用方案可以看文档 [tsdb文档](https://www.docs4dev.com/docs/zh/opentsdb/2.3/reference) TSDB对外只提供restful api,而且TSDB作为时序数据库,在后台的微服务的使用大部分场景只做查询,数据的写入交由其他的数据采集服务负责。我们之前有个使用场景是通过canal去监听mysql binlog...原创 2019-07-19 16:08:43 · 529 阅读 · 0 评论