分库分表-分页排序查询

背景:我们系统上云后,数据根据用户UDL部分数据在国内,部分数据存储在海外,因此需要考虑分库查询的分页排序问题 一、分库后带来的问题 需求根据订单创单时间进行排序分页查询,在单表中的查询SQL如下(省略...

RPC通信原理和项目解析

根据上一篇博客《单机,集群和分布式》的举的例子。 我们最终合理地通过对大型软件的合理划分,划分成不同模块,按需求(硬件需求,高并发需求)进行分布式,一台机器上的模块不能单独构成聊天系统,所有机器上...

单机,集群和分布式

集群:每一台服务器独立运行一个工程的所有模块。 分布式:一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个节点,根据节...

Go中的CGI包使用

Go中包含有CGI包,net/http/cgi,这篇文章就是来阅读和使用这个包。关于cgi的参数和运行,可以看这篇文章:CGI的一些知识点 CGI包阅读 cgi包的存在就告诉我们一件事情,cgi服务端和客户端完全可以使用Go来写 ...

golang实现依赖注入

依赖注入是软件工程中经常使用到的一种技术,它提供了一种控制反转的机制,把控制权利交给了调用方。调用方来决定使用哪些参数,哪些对象来进行具体的业务逻辑。 它有几个好处: 1 它让调用方更灵活。 2 大...

一种优雅的Golang的库插件注册加载机制

最近看到一个内部项目的插件加载机制,非常赞。当然这里说的插件并不是指的golang原生的可以在buildmode中加载指定so文件的那种加载机制。而是软件设计上的「插件」。如果你的软件是一个框架,或者一个平台性产品...

Golang的并发控制

我们考虑这么一种场景,协程A执行过程中需要创建子协程A1、A2、A3…An,协程A创建完子协程后就等待子协程退 出。针对这种场景,GO提供了三种解决方案: Channel: 使用channel控制子协程 WaitGroup : 使用信号...

Golang的RWMutex

前面我们聊了互斥锁Mutex,所谓读写锁RWMutex,完整的表述应该是读写互斥锁,可以说是Mutex的一个改进版, 在某些场景下可以发挥更加灵活的控制能力,比如:读取数据频率远远大于写数据频率的场景。 例如,程序...

Golang的mutex原理

互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了非常简单易用的Mutex,Mutex为一结构体类型,对外暴露两个方法Lock()和Unlock()分别用于加锁和解锁。 Mutex使用起来非常方便,但其内部...