Base64 编码

Base64,是一种二进制数据转换为可打印字符的编码。用于一些不支持二进制数据的场景。比如常见的 HTTP 、SMTP 协议是文本协议,其中要传递一些二进制的数据(如:AES算法加密后的数据)时就需要把其转换为文本形式的字符串。Base64编码后的数据有2个特性,其一是文本字符串,其二是这些字符还是可打印的。

二进制转换为普通文本的编码,英文称为:Binary-to-text encoding。也是有很多种形式,除了Base64,还有 BinHex,就是把二进制数据转换为16进制字符串的形式。

阅读剩余部分...

7
Jan 2019
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

Logstash 聚合插件 aggregate filter 的使用心得

在ELK常规的使用模式下,我们收集Nginx访问日志是按照单行进行的。这样比如说有10个用户请求,对应在ElasticSearch中就是10条记录(也称为10个document)。下面将分别描述此种收集方法的优缺点。

首先,这样的收集方式非常利于按照指定字段去搜索,并根据匹配的记录去查看其它字段的信息。比如统计客户端IP为 127.0.0.1 的请求有多少,使用IPhone 手机的请求有多少。当出现 499 、502 状态码时,看看这些请求的URL是什么,然后快速定位问题。这些方法都是非常非常实用而且好用的。

其次,除了上面的这些需求之外,我们还想要制作统计图,比如统计按时间范围统计总请求数,4xx 数量,5xx数量,响应时间超过 500ms的请求数,输出的字节数量,平均响应时间。特别是最后2项,时间范围跨度越长,数据量越大,计算时间就越长。据我们实际使用中的数据量,单个索引,每天 3亿的文档数量,对应就有120G左右的数据,在单个dashboard中同时展示上面的几种图标,如果时间跨度超过1小时,页面加载时间就会超过 2s 。而kibana又提供了自动刷新功能,这样如果有多个人同时使用 elasticsearch就会咔咔的慢。

阅读剩余部分...

28
Dec 2018
AUTHOR WiFeng
CATEGORY Web,Asset
COMMENTS No Comments

全局唯一 ID 如何生成?

ID 生成,提到这个词可能最快想到的就是 MySQL 数据库 insert 时的自增ID。当业务访问量剧增,单表的 insert 性能遇到瓶颈时,我们就必须使用分库、分表机制来分担这些负载到单个MySQL表上,但是我们都知道MySQL表中的主键自增是基于单表的,如果2个表中有2个自增字段,那他们默认都是从1开始自增,每次增加步长为1,那么这在有些业务场景下就不满足需求了。比如订单系统,必须要保证订单ID是全局唯一的,也就是所有订单库、表中的ID不能相同,不能用2个相同的订单ID代表不同的订单信息。

那么,我们有没有办法来解决这个问题,那肯定是有的,我想所有的方案不外乎这3种,第一,直接使用MySQL来解决,第二,依赖其他中间件生成唯一 ID(比如 redis),第三,业务中使用算法实现唯一ID。我们接下来分别来阐述这3种不同的解决方案,及其对应的优缺点。

阅读剩余部分...

28
Dec 2018
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

Javascript Ajax 跨域之 CORS 实战

众所周知,在javascript中使用ajax请求外部资源时有跨域限制。我们在讲解实战之前有必要搞清楚浏览器为什么要加这个限制,也就是要知其然也需要知其所以然。

不过,我们还应该先了解Cookie,在一个已经登录过的站点,浏览器会保存一个登录凭证,这个凭证就是保存在cookie中的其中一个值。有了登录凭证,在短时间内是不需要重新登录就可以访问该站点上属于用户的任何内容的。当我们登录了一个站点A,上面有一个按钮,其中显示“抽奖”,你也许会去点一下碰碰运气。但是这个抽奖按钮实际执行的动作也许你并不能从页面信息中准确无误的获取到,那如果这个按钮的背后行为是从你的银行账户转出一笔金额到一个盗窃者账户,现在你还敢点那个按钮吗? 

阅读剩余部分...

18
Nov 2018
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

搭建调用链路监控系统

现在微服务非常盛行的年代,在公司内,有各种各样的微服务相关的实践。今天我们不展开微服务具体是什么,只需要了解在一个互联网服务系统内部可能是由N多个子服务组成,每个子服务独立开发、部署、维护,通过API/RPC与其他服务通信,而不是直接共同操作相同的数据库、表来实现数据交互。在这样的架构之下,服务间的调用链路关系可能是这样的:

a -> b -> d -> e
a -> c -> d -> b -> f

以这个单向的调用为例,实际场景可能是更加复杂的网状形式。比如 a 是对用户提供服务,其内部的2个功能分别会有2个不同的调用链路。这时如果 a 检测到一个错误发生,那么怎么确定是 a 自身异常导致的,还是由于上游服务 b/d/e 异常导致的。如果不能很好的、快速的定位最根本的异常产生在哪里,那么势必会影响故障恢复时间,进而影响到服务的可用性。

阅读剩余部分...

5
Jun 2018
AUTHOR WiFeng
CATEGORY Web
COMMENTS 7 Comments

redis命令汇总

如果图片不清晰,请鼠标右键打开查看原图

19
Dec 2017
AUTHOR WiFeng
CATEGORY Web,Redis
COMMENTS No Comments

Discuz提示“帖子不存在”

在Discuz中提示帖子不存在有多种可能的情况,今天遇到一种,整理如下:

现象:
1. 帖子列表显示该帖子
2. 点击帖子提示“帖子不存在”
3. forum_thread displayorder为0
4. forum_post invisible为-1
5. forum_threadmod 有限时置顶、删除操作

结论:在删除帖子前执行过限时置顶操作,限时置顶到期后,计划任务(cron_threadexpiry_hourly.php)会自动重置 displayorder字段为 0 ,导致帖子出现在列表中,但是点击提示“帖子不存在”

解决方案:最直接的是更新mysql该行记录displayorder为-1 ,因为此贴本身应该是删除状态(如果有memcache缓存,为了实时生效,需要后台内存管理里更新相应tid fid缓存)。但是最佳优化方案还是要避免次类问题发生,后面抽时间补上方案。


相关资料:

Discuz pre_forum_thread displayorder字段

Discuz pre_forum_threadmod action字段

Discuz pre_forum_post invisible字段

Discuz! X2.5 的 forum_thread 和 forum_post 表的各标记位字段对应的值的说明


3
Feb 2017
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

Discuz pre_forum_thread displayorder字段

  • displayorder : 0  正常
  • displayorder : -1  回收站
  • displayorder : -2 待审核
  • displayorder : -4 草稿帖

3
Feb 2017
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

Discuz pre_forum_post invisible字段

  • invisible :0 正常
  • invisible :-3  已忽略
  • invisible :-2  待审核
  • invisible :-5  回收站
  • invisible : -1 主题帖在回收站中

3
Feb 2017
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

Discuz pre_forum_threadmod action字段

pre_forum_threadmod action字段定义了主题帖相关的操作,可以在这个文件中找到中文描述,source/language/forum/lang_modaction.php。

这里直接贴出来,方便直接查看

$lang = array
(

	'EDT' => '编辑',

	'DEL' => '删除',
	'DLP' => '删除回复',
	'DCM' => '删除点评',
	'PRN' => '批量删帖',
	'UDL' => '反删除',

	'DIG' => '加入精华',
	'UDG' => '解除精华',
	'EDI' => '限时精华',
	'UED' => '解除限时精华',

	'CLS' => '关闭',
	'OPN' => '打开',
	'ECL' => '限时关闭',
	'UEC' => '解除限时关闭',
	'EOP' => '限时打开',
	'UEO' => '解除限时打开',

	'STK' => '置顶',
	'UST' => '解除置顶',
	'EST' => '限时置顶',
	'UES' => '解除限时置顶',

	'SPL' => '分割',
	'MRG' => '合并',

	'HLT' => '设置高亮',
	'UHL' => '解除高亮',
	'EHL' => '限时高亮',
	'UEH' => '解除限时高亮',

	'BMP' => '提升',
	'DWN' => '下沉',

	'MOV' => '移动',
	'CPY' => '复制',
	'TYP' => '分类',

	'RFD' => '强制退款',

	'MOD' => '审核通过',

	'ABL' => '加入文集',
	'RBL' => '移除文集',

	'PTS' => '推送主题',
	'RFS' => '解除推送',
	'RMR' => '取消悬赏',
	'BNP' => '屏蔽帖子',
	'UBN' => '解除屏蔽',

	'REC' => '推荐',
	'URE' => '解除推荐',

	'WRN' => '警告',
	'UWN' => '解除警告',

	'SPA' => '添加图章',
	'SPD' => '撤销图章',

	'SLA' => '添加图标',
	'SLD' => '撤销图标',

	'REG' => '群组推荐',

	'PTA' => '生成文章',

	'MAG' => '道具',

	'REB' => '推送',

	'LIV' => '直播',
	'LIC' => '取消直播',

);


3
Feb 2017
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments