- 博客(16)
- 收藏
- 关注
原创 Nginx限速
在WEB开发中经常会遇到接口被刷的情况,如CC攻击,通过有限的ip对服务器发来大量请求,使服务器资源耗尽。使用nginx的ngx_http_limit_req_module 模块和ngx_http_limit_conn_module模块可以对统一ip的请求和连接数进行限制。 1,ngx_http_limit_req_module模块,用来限制连单位时间内连接数的模块,是对一段...
2016-05-26 11:10:35
228
原创 线上业务Redis数据迁移至SSDB
1,背景 Redis的持久化只是用于备份数据,而如果作为持久化存储会有一些问题(具体?),因此将Redis数据迁移至SSDB,命令列表见http://ssdb.io/docs/zh_cn/redis-to-ssdb.html2,策略 由于Redis存储的数据很重要,因此为了保证数据迁移的可靠性同时不对线上业务造成影响,采取分步过渡并验证的方式:3,关键点 ...
2016-01-25 10:06:51
368
原创 Redis Proxy
在Redis访问量比较大的情况,如果将请求都压在单实例上,将会造成Redis负载过高,连接数超限。因此为了平衡请求可将请求分散在通过Redis多个从库上,从库负责读,而主库负责写,redis proxy就是如何选择服务器并将请求分配的机制。 redis服务器的配置分三个维度:环境、主从、num确定一个服务器,num根据uid和app等来确定。每个app对应确定的库。在进行实例...
2016-01-25 10:06:48
501
原创 项目中的go实践
1,协程、select、channel协程间的通信同一级的多个节点是可以并发执行的。 当有节点交汇时,后续节点需要等待前面节点的信号,出现等待阻塞的情况。使用select和有缓冲的channel等待信号发生。select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。同时为了避免协程永久阻塞,加入超时机...
2016-01-08 09:29:19
260
原创 Nginx请求执行阶段
Nginx在处理请求时,按照不同的阶段依次处理,常见的阶段如rewrite、access和content依次执行。Nginx中的指令一般只注册在某一个阶段,如echo注册在content阶段,set注册在rewrite阶段,因此set总是在echo之前执行,与书写顺序无关。特殊的,geo和map指令与处理阶段无关,它们是声明性的。 1,rewrite阶段 rewri...
2015-11-09 17:02:03
283
原创 Nginx变量
Nginx变量只有一种字符串类型,变量名前使用$符号来引用变量。但不支持通过转衣服来便是$符号,可使用ngx_geo模块来表示,如: geo $dollar { default "$"; },可使用$dollar来表示$。 Nginx的set指令首先在nginx启动加载配置时创建变量,而变量的赋值发生在请求处理的时候。其可见范围为整个Ng...
2015-11-08 14:55:47
203
原创 Redis事务和脚本功能
Redis事务是指将一些命令打包,一次性按顺序执行多个命令的机制,不会出现并发的情况,将命令都执行完以后才会执行其他命令。在一定程度上满足ACID特性。 1、Redis事务原理 事务由命令MULTI开始,使执行命令的客户端切换到事务状态,之后当执行EXEC、DISCARD、WATCH、MULTI以外的命令均会将命令放在一个先进先出的队列中。当向客户端发送EXEC命...
2015-10-16 15:55:21
162
原创 Redis哨兵机制
哨兵(sentinel)是Redis高可用的解决方案,用来管理Redis实例,主要是监控、自动故障转移、通知、配置提供者。 1、sentinel的初始化 当一个 Sentinel 启动时, 它需要执行以下步骤: a) 初始化服务器。sentinel本质上是一个运行在特殊模式下的Redis实例。该模式下redis实例主要使用发布订阅、文件事件处理器、和时...
2015-10-13 21:36:38
279
原创 Redis主从复制
主服务器可以有多个从服务器。同时从服务器可以与其他的从服务器的连接,形成图状结构。Redis的复制在主服务器上是非阻塞的。这意味着从服务器执行同步时主服务器能继续处理请求。Redis的复制在从服务器上也是非阻塞的。当从服务器同步时,假如你在redis.conf中进行了相应配置,也能够继续使用旧版本的数据集处理请求。还可配置当复制流宕掉时,从服务器返回给客户端一个错误。但当同步结束后,旧...
2015-10-11 11:40:43
131
原创 后台导出码问题记录及解决
系统后台提供激活卡的导出功能,之前单次的导出量的需求最多在几万,最近尝试30W次的导出各种出现问题。下面是问题记录和解决。 问题一:后台点击导出后无反应,经查看日志出现错误Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in *** 分...
2015-09-27 23:22:48
278
原创 抢红包的实现和思考
之前做了一个抢红包的活动,由于用户量级不大因此实现的版本不难,但开发人员设计系统的目标不该只是满足当前需求。如淘宝、京东,随着用户量级的逐渐增大,技术含量完全不是一个等级。因此打算从这个角度去深入研究学习。 本文主要介绍已经实现的满足用户量级较小的系统设计,后续会补充优化的方案。1 需求 满足一定条件的用户可以在活动期间每天的固定时间点抢红包,每人最多只能领取...
2015-09-19 16:43:23
235
原创 memcache 网络驱动模型 (原创+转载)
memcache使用多线程模型程序,使用libevent事件模型,与nginx类似,由一个主线程和多个worker线程组成。1,主线程初始化。 memcache的主线程主要进行在监听套接字上注册事件监听网络中客户端的连接及处理和worker的初始化的工作。 首先初始化主线程的libevent实例,然后初始化所有worker线程,并为每个worker建立通知的管道用于主线程与...
2015-08-06 22:12:23
272
原创 redis 事件驱动机制
redis基于事件驱动构建服务,有两种事件类型,文件事件FileEvent,和时间事件TimeEvent。1,文件事件 以多路IO复用程序来同事监听多个套接字,处理网络连接的应答,读取,写入和关闭操作,并根据执行任务的不同分配不同的事件处理器来处理。 a, 结构体/* File event structure *//* 文件事件结构体 */typedef...
2015-08-06 17:33:52
1061
原创 redis与memcache php rehash机制比较分析
1,Redis rehash Redis的核心数据结构就是字典(dict),dict在数据量不断增大的过程中,会遇到HASH(key)碰撞的问题,如果DICT不够大,碰撞的概率增大,这样单个hash 桶存储的元素会越来愈多,查询效率就会变慢。如果数据量从几千万变成几万,不断减小的过程,DICT内存却会造成不必要的浪费。Redis的dict在设计的过程中充分考虑了dict自动扩容和收...
2015-07-27 09:05:36
387
原创 redis五种数据类型对象的实现及场景分析
1,redis对象的结构 type记录了对象的类型,可以使字符串,列表,哈希,集合和有序集合对象。 encoding记录的是type对象对应的底层实现,在redis中每种类型只有少两种底层实现的数据结构。通过不同的编码方式是redis可以根据不同的使用场景来选择不同的实现方式。同时不同编码在满足条件时会触发转换。 ptr是指向底层实现数据结构的指针。...
2015-07-25 17:51:53
191
原创 redis的几种数据结构
通过分析底层的数据结构,学习如何根据场景选型和设计 1,简单动态字符串 redis使用的字符串SDS有别于C语言中的字符串 a, 结构 free字段为已分配但未使用的空间 len为已使用的空间(不计入'\0') buf为char数组 b, 与C字符串区别 redis的字符环结构可以理解为将C字符串封装了...
2015-07-25 15:43:54
688
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人