Liangjf

The darkest hour is that before the dawn.

hystrix

hystrix设计深究

hystrix设计深究 hystrix介绍 hystrix采用的是命令模式, 把一个请求抽象封装成一个命令, 视是同步调用还是异步调用来创建goroutine, 下面用命令来代表一次真实的请求 hystrix是状态机轮转, 断路器开-断路器关-探测断路器, 默认是关, 错误率达到阈值就转变为开, 从而触发熔断, 快速错误返回和降级, 保护资源 每个资源的断路器创建是在对应资源有请求过来...

消息乱序,重复,幂等性

语音遥控器和智能台灯项目复盘

语音遥控器和智能台灯项目复盘 遇到的问题 涉及问题: 消息乱序, 消息不重复消费, 接口幂等性 项目背景 对于这两个项目, 用户控制命令不能是重复响应, 而且控制命令不能是乱序的? 但是推送系统的消息队列使用的是nsq, 为什么用nsq? 因为架构简单分布式, 配置和运维简单, 而且大多的业务都是和顺序无关的. 想象一下, 开灯和关灯两个控制命令, 在终端的控制顺序是开灯在前, 关灯...

设计模式

设计模式在go的开源项目和实战开发的总结

设计模式在go的开源项目和实战开发的总结 以下设计模式和开发设计技巧是在工作, 学习和阅读开源项目源码时的一些总结, 会定时更新, 增加新的总结. 函数选项模式 grpc-go,go-micro,etcd……N多开源项目使用了此模式,因为go没有默认参数,并且函数选项模式可以优雅的实现了默认参数结构体,并且通过函数对象来对参数赋值。一般是Options参数结构、Option函数对象、...

nsq

nsqd的网络通信和对网络逻辑处理框架的思考

nsqd的网络通信和对网络逻辑处理框架的思考 nsqd网络通信 nsqd中关于通信的一些小点: tcp服务是用于监听客户端连接, 使用了多路复用模型(go标准库的tcp服务是基于epoll/kqueue/select等的) 暴露http服务, 提供接口直接发布消息到nsqd, 获取topic channel信息 元数据持久化元数据到...

nsq

nsq中的内部优化和技巧

nsq中的内部优化和技巧 1.内存队列和磁盘队列的选择 func (c *Channel) put(m *Message) error { select { //推入内存队列 case c.memoryMsgChan <- m: default: //内存队列满了, 走落盘的方式 b := buffer...

go设计模式

函数类型实现接口,隐式回调接口

函数类型实现接口,隐式回调接口 这是一种技巧, 用于隐式回调接口, 可以做到直接通过函数类型转换就可以实现函数相当于实现了接口. 典型特点是: 函数类型和接口入参出参一致并实现其接口 http包的应用 1.定义路由 http.HandleFunc("/v1/test", handlerTest) 2.HandleFunc的第二个参数就是func(ResponseWriter, *...

依赖注入

go依赖注入

go依赖注入 依赖注入在java框架中是一个非常重要和有用的特性,特别比如spring。依赖注入可以帮助我们免除类与类间的错综复杂的依赖关系,直接帮助我们管理类的依赖,通过内部分析,直接生成“核心”类。 在go中,其实是提倡简单明了的实现的,比如go只有区区30多个关键字,简单实用就是其特点。在实际开发中,也创造出各种“优美”的go风格的编程范式。 因为没有构造函数,所以出现了可导出的...

订单处理

vip开通处理流程

vip开通处理流程 趁着今天有时间,来复盘一下会员vip开通的流程。(此流程也适合大多数的订单流程) 开通vip, 创建订单 1.查表用户是否有打折 2.根据开通的月份,平台,打折,支付方式计算价格 3.添加支付订单(用户id, 开通月份, 价格, 平台, 订单类型, appid) 1.开启事务 2.在订单表vip_pay_order_re...

事务

事务的封装和管理

事务的封装和管理 在平时开发中, 有些业务是需要保证ACID的, 因此事务就派上用场了. 大多是否在应用中是使用orm来操作数据库的, 下面的所有例子都是使用orm为例子. 用事务, 大多数人一般是这样用的:在需要用到事务的地方, 都来一堆以下的代码: 事务业务1: var err error //开始事务 if err = o.Begin(); err != nil { ...

图解性能分析

实际系统的性能分析

第三章 应用服务 像web服务,应用服务这种一般是有access log的,会包括访问路径url,method,time,httpStatus等信息,所以可以通过监控和汇总这些信息可以得知应用系统的性能状况。 监控系统一般是会触发告警的。比如“死亡”钉钉,企业微信,短信,邮件等。然后就可以上去查看日志,通过分段定位法来时间分段,位置分段定位,这个过程可以使用一些性能工具(top,ps,vm...