流量优化

服务器带宽流量

带宽跟流量是个怎么也不能忽略的问题, 如果无法做好流量优化, 服务端写得再好, 客户端依然会卡.

客户端卡顿分析

如果服务器与客户端之间, 平均流量为100k, 客户端的网络情况为200k, 那么平时推送客户端不会卡顿, 可是实际上客户端会生成某些数据,这些数据的生成需要大量的历史数据才能完成, 假设需要2M的历史数据. 那么实际上我们将花费10秒左右的时间才能完成此数据的推送. 这个时候整个客户端会表现为不走数据, 用户就会觉得, 这是什么鬼!!!
继续阅读

hiredis 异步

hiredis

hiredis是redis官方库, 提供了同步与异步的接口. 对于高性能的服务器, 异步的接口给我们很大的发挥空间.

同步还是异步

使用同步还是异步并没有绝对的定论, 我们可以根据一些性能表现确定使用同步或是异步. redis性能非常好, 以至于在插入或是读取单条数据的时候几乎是感觉不到差异的. 可是一旦同时插入大量数据, 同步延迟非常严重, 读取平均长度30的kv, 大约是10万/秒, 如果我们有千万级别的数据, 整个卡顿会上分钟, 而且带宽会被打满, 所以一般大数据的读取, 我们会采用异步的方法.
继续阅读

libevent zmq消息无法响应

前言

服务器使用libevent做事件循环, 然后使用zmq做线程间通讯, libevent监听zmq的消息, 一旦zmq有消息过来, 就会回调到固定的函数。使用zmq需要注意的是, 一旦zmq消息回调, 必须读空整个队列的消息. 否则下次就不会回调。

问题症状

我们使用libevent监听了多个zmq, 同时监听了别的事件(退出事件等). 其中有一个zmq消息非常繁忙, 每秒会产生上万到十万不等的数据. 这种时候会发现libevent再也无法响应其他消息。
继续阅读

mongodb 简单搭建复制集

复制集配置文件参数

|字段|类型|取值|解释|
|:— |:— |:— |:— |
|id| 整数| 从0开始|编号|
|host| 字符串| 192.168.0.235:9990|IP:Port|
|arbiterOnly|布尔值|trre/false|是否投票结点|
|priority|整数|0-1000|权重, 数字越大, 越能成为主节点, 0表示永远不会成为主节点|
|hidden|布尔值|true/false, 0/1|是否是隐藏结点, priority=0|
|votes|整数|0/1|是否能够投票|
|slaveDelay|整数|x秒(3600)|延迟结点(用来保证数据安全,如果主库删了,从库都会同步删)|
|buildIndexes|布尔值|true/false|是否同步建立索引,priority=0|
继续阅读