Liangjf

The darkest hour is that before the dawn.

依赖注入

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...

图解性能分析

性能的分析基础

第二章 性能涉及到CPU,IO,网络,磁盘等资源。因此需要借助性能分析工具来对这些资源进行监控或者分析。准确的测量才能做出正确的性能分析。 对系统的性能测试是有方法论的,一般是通过分段查找的方法。举个例子,在排序的数组中查找某元素,通过二分查找法可以实现O(logN)的时间复杂度。这是因为每次都能过滤一段数据。 性能问题排查也是一样,通过分段来逐渐排除问题,逼近真相。性能信息是IT工程师...

限流器

剖析juju/ratelimit限流器

剖析juju/ratelimit 项目地址 源码分析地址 该项目是一个令牌桶算法实现的限流器, 众所周知, 限流器可以用于控流, 限制访问频率, 保护后端服务. 令牌桶算法实现的限流器可以较好的应对突然流量, 也可以较好的平滑请求 juju/ratelimit的实现不是像一般的使用后台线程来生成令牌, 前台来取令牌的方案. juju/ratelimit方案 1.通过逻辑时间...

图解性能优化

性能的基础知识

第一章 这本书是日本人写的,日本的技术书的风格独具一格,写得比较细腻,配图也比较生动有趣。这本书也是继承了这样的风格。趁着这个周末阅读完这本书,因此趁着这个机会就为这本书做一个小结。 整本书是围绕着“性能”来展开的。内容时符合书的名字,图解,确实书里用许多的图片来帮助读者的理解。 第一章 性能的一些基础知识。性能其实就是算法的实现和选择,书里提到了算法的好坏对性能有很大的影响。算法好坏...

mysql b+树

mysql的innodb为什么用b+树, 不用红黑树/b树/跳表/LSM[上]?

mysql的innodb为什么用b+树, 不用红黑树/b树/跳表/LSM[上]? 思路 1.对比各个数据结构的优缺点 2.描述mysql的特点, 磁盘io, 页 3.用了b+树会给innodb带来什么好处 4.对比其他数据库说出区别, MongoDB, redis, RockDB 几种树的特点 红黑树 是一棵二叉树 近乎完全平衡 具有稳定的时间复杂度O(n...

ratelimit限流器

限流器在项目中的应用

限流器在项目中的应用 mos项目(盒子/投影仪)应用到限流器的接口 1.广告列表接口[/v2/mos/adlist] 2.获取应用推荐列表[/v2/mos/app_recommend] 3.获取屏保的列表v2.0[/v2/mos/screens] 都是使用redis实现的原子计数法限流(集群计数限流), 分布式流控不可用时(例如缓存挂掉), 切到单机流控 目的是这三个接...

短连接系统设计

短连接服务原理和系统设计

短连接服务原理和系统设计 项目源码地址github 原理 长链连接映射, 301/302 算法 hash算法 原子自增(mysql/redis)[进制法] 元数据中心发号器(zk/etcd)[进制法] hash算法 todo redis原子自增分布式 负载均衡器+n个短连接服务 比如起10个短连接服务, 每个分别以0~9结尾, 负债均衡器采用轮训方式转发请求, 每次...