加载中
一个随机数改变缓存的命中率

高负载的微服务集群,必然会用到些缓存. 缓存的过期时间很关键,太长浪费内存,太短缓存命中率下降. T := x + y * Rand() 在采用LRU算法的基础上, 用上面这个公式设定缓存过期时间,可以实现 LR...

2018/07/30 10:58
369
闭包是更好的对象---从Reload配置说起

如果项目中,到处用了一个全局对象的指针,那一定是很糟糕的. 我们假设这个对象就是Conf,也就是全局配置. 现在要改进代码,实现Reload Conf. 建议以下的改法: 也就是说,用一个GetConf()函数替代...

避免Goroutine频繁创建来提高性能

频繁的创建和销毁goroutine带来的开销不仅仅是goroutine创建和销毁本身. 更大的开销是由于goroutine的Stack一开始只有2KB, 而大部分复杂的业务都需要更多的Stack. 新创建goroutine, 还需要付...

Go的PCRE包装在启用JIT的时候遇到的问题和解决方案

用CGO包装C的库, 如果启用了JIT的话,会有一些问题. 例如pcre用了JIT动态生成代码并JIT代码引用里自己线程的JIT Stack数据. 这时会有一个问题, JIT代码的线程并不会刚好是后续Goroutine执行的...

是时候抛弃AJAX演化到基于消息的架构了

上篇Blog,我提出其实未来分布式系统是肯定要去RPC化的。 以Web系统为例,AJAX就将被websocket彻底取代。以RPC思想为核心的AJAX,其实无端增加了复杂度,把本来简单的消息通讯异化成和HTTP状...

Go Get设置代理

给git设置了全局代理,依然不起作用,可以这么设置: http_proxy=127.0.0.1:1087 go get -u -d -v xxxxx/xxxx

Go的defer和方法修饰符的一个小坑

先看代码: https://play.golang.org/p/GlM23bSW6zf 可见: 1. for 循环变量只有一份 2. 单行的defer和go都是在当前时刻求值。 如果方法的修饰符是一个指针,那么求值得到的必报是保存了这个...

从历史看未来,大规模微服务系统的困境----基于消息的架构的回归

在大规模分布式系统的架构上,微服务系统是现在很多大型互联网公司的架构方向。 这是一个务实的很好的方向,相对于旧的宏服务来说。 然而,像淘宝这种规模的系统,微服务很容易陷入一个困境,...

也谈Go的公平调度的缺陷

《记一次latency问题排查:谈Go的公平调度的缺陷》一文发现了一个现象:从网络消息可读,到读网络的goroutine被再次调度,中间花费了4.368ms !!! 很遗憾的是作者想当然的认为这是由于Go的调度...

Ubuntu下怎么安装联想LJ2205激光打印机的驱动

联想的激光打印机LJ2205在京东只卖599,确实比较便宜。 但是联想的软件研发能力一向是比大厂要弱很多的。 很遗憾的是LJ2205没有官方的Linux驱动。怎么办? 经过一番调研,我发现LJ2205其实就...

为何TLC的SSD不能用于商用数据库?

首先说明的,TLC SSD用于民用并没有什么问题。 在商用数据库场合,最大的特点就是磁盘会有持续的写入,并且是擦写。这点很重要,对SSD的性能影响很大。好,下面开始解释原因: 上面是一张San...

如何把Go调用C的性能提升10倍?

目前,当Go需要和C/C++代码集成的时候,大家最先想到的肯定是CGO。毕竟是官方的解决方案,而且简单。 但是CGO是非常慢的。因为CGO其实一个桥接器,通过自动生成代码,CGO在保留了C/C++运行时...

从设计上规避Go语言的 interface{} == nil 判断容易出错的简单办法

Go语言的interface{} 本质上是一个结构,含有一个type字段,一个pointer字段。 很多初学者会拿一个已经在某种情况下被赋予类型的interface{}和nil比较,然后惊讶的发现两者居然不等。 其实,...

基于 CSP 的设计思想和 OOP 设计思想的异同

Go语言推崇的CSP编程模型和设计思想,并没有引起很多Go开发者包括Go标准库作者的重视。标准库的很多设计保留了很浓的OOP的味道。本篇Blog想比较下从设计的角度看,CSP和OOP到底有什么区别。 ...

【GO语言】合理配置GOMAXPROCS提升一倍以上的性能

GOMAXPROCS 用默认的,就是CPU的硬件线程数目, 对于大部分File IO密集的应用是不合适的。 至少应该配置到硬件线程数目的5倍以上, 最大1024。 具体参见。 这是为什么呢? 我们来复习下Go的线...

一个不错的GO语言SHA/MD5加速库

最近有需要优化一些密集运算,在github上找了下,发现了这个。 初步看起来,还不错。重要的是minio项目用了这个库,应该BUG较少。

2017/08/01 23:10
508
Go语言可用几种消息通讯方案

mangos 基于SP/nanomsg 协议,比较难用。 ProtoActor 类似Erlang的实现,比较新,完备度较低,但是性能还不错。 最近又多了一个选择,vice 以channel为抽象的跨机器的消息层。支持NSQ/Red...

推荐一个RPC框架 hprose

hprose有十几年的历史了,稳定性和跨语言特性是非常的突出的。 hprose-golang是其go语言版本,使用方便简洁,适合任何想构建微服务集群,尤其是跨语言的微服务集群的人选用。...

Go的nanomsg实现 mangos

mangos nanomsg是一个消息协议SP ("Scalable Protocols")的c语言实现,而mangos用golang实现了SP ("Scalable Protocols")。 消息协议不同于通常我们说的消息队列,是指一个简单的传输会话协议...

基于消息的微服务和Actor模型

微服务并不是一定是基于RPC或者REST的,也可以是基于消息的。 消息不一定是走消息队列,也可以是Erlang那种Actor模型的。 在Golang、C#、JS、Java「kotlin」领域,推荐proto.actor库「该库在...

没有更多内容

加载失败,请刷新页面

返回顶部
顶部