是咕咕鸡

希望我分享的文章能够给每一位读者带来帮助!

0%

引言

常听到周围有人说“风控”这个词,只知道这是一个神秘的部门,对他们做的事却一知半解,只知道这个风控部门对公司非常重要,任何活动和信息都最好向风控部门报备以评估风险,尤其涉及到钱的问题。

到底什么是风控?为什么需要风控?风控到底在干什么?本文将向你解惑。

什么是风控

风控,即风险控制(Risk Control),智库·百科定义如下

风险控制是指风险管理者采取各种措施和方法,消灭或减少风险事件发生的各种可能性,或者减少风险事件发生时造成的损失。
风险控制的四种基本方法是:风险回避、损失控制、风险转移、风险保留

阅读全文 »

引言

上篇文章 性能调优——小小的 log 大大的坑 已将详细的介绍了高并发下,不正确的使用日志姿势,可能会导致服务性能急剧下降问题。文末也给各位留下了解决方案——日志级别动态调整。
本文将详细介绍“动态日志”的实现原理及源码,希望各位能在今后的生产环境中应对日志问题能“得心应手”!

背景

日志的重要性不言而喻,是我们排查问题,解决 BUG 的重要手段之一,但是在高并发环境下,又会存在悖论:
大量打印日志,消耗 I/O,导致 CPU 占用率高;减少日志,性能是下来了,但是排查问题的链路断掉了。

痛点:一方面需要借助日志可快速排查问题,另一方面要兼顾性能,二者能否得兼?
那么本文的动态日志调整实现就是为了能解决这个痛点所构思开发的。

功能特性

  • 低侵入,快速接入:以二方包(jar)的形式介入,只需要配置启用,对业务无感
  • 及时响应,随调随改:应对研发不小心在大流量入口链路打印了大量 INFO 日志,能及时调整日志级别
  • 阶梯配置支持:默认全局设置兜底,又可以支持局部 Logger 放/限流
  • 人性化操作:与操作界面,方便修改
阅读全文 »

引言

“只有被线上服务问题毒打过的人才明白日志有多重要!”
我先说结论,谁赞成,谁反对?如果你深有同感,那恭喜你是个社会人了:)

日志对程序的重要性不言而喻,轻巧、简单、无需费脑,程序代码中随处可见,帮助我们排查定位一个有一个问题问题。但看似不起眼的日志,却隐藏着各式各样的“坑”,如果使用不当,不仅不能帮助我们,反而会成为服务“杀手”。
本文主要介绍生产环境日志使用不当导致的“坑”及避坑指北,高并发系统下尤为明显。同时提供一套实现方案能让程序与日志“和谐共处”。

避坑指北

本章节我将介绍过往线上遇到的日志问题,并逐个剖析问题根因。

不规范的日志书写格式

场景

1
2
3
4
5
6
7
8
9
10
// 格式1
log.debug("get user" + uid + " from DB is Empty!");

// 格式2
if (log.isdebugEnable()) {
log.debug("get user" + uid + " from DB is Empty!");
}

// 格式3
log.debug("get user {} from DB is Empty!", uid);

如上三种写法,我相信大家或多或少都在项目代码中看到过,那么他们之前有区别呢,会对性能造成什么影响?
如果此时关闭 DEBUG 日志级别,差异就出现了,格式 1 依然还是要执行字符串拼接,即使它不输出日志,属于浪费。

阅读全文 »

引言

本文主要介绍火焰图及使用技巧,学习如何使用火焰图快速定位软件的性能卡点。
结合最佳实践实战案例,帮助读者加深刻的理解火焰图构造及原理,理解 CPU 耗时,定位性能瓶颈。

背景

当前现状

假设没有火焰图,你是怎么调优程序代码的呢?让我们来捋一下。

阅读全文 »

表达式引擎技术及比较

Drools 简介

Drools(JBoss Rules )是一个开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

除了应用了 Rete 核心算法,开源软件 License 和 100% 的 Java 实现之外,Drools 还提供了很多有用的特性。其中包括实现了 JSR94 API 和创新的规则语义系统,这个语义系统可用来编写描述规则的语言。目前,Drools 提供了三种语义模块

  • Python 模块
  • Java 模块
  • Groovy 模块

Drools 的规则是写在 drl 文件中。 对于前面的表达式,在 Drools 的 drl 文件描述为:

1
2
3
4
5
6
7
rule "Testing Comments"
when
// this is a single line comment
eval( true ) // this is a comment in the same line of a pattern
then
// this is a comment inside a semantic code block
end

When 表示条件,then 是满足条件以后,可以执行的动作,在这里可以调用任何 java 方法等。在 drools 不支持字符串的 contians 方法,只能采用正则表达式来代替。

阅读全文 »

Groovy 是什么?

Apache 的 Groovy 是 Java 平台上设计的面向对象编程语言。这门动态语言拥有类似 Python、Ruby 和 Smalltalk 中的一些特性,可以作为 Java 平台的脚本语言使用,Groovy 代码动态地编译成运行于 Java 虚拟机(JVM)上的 Java 字节码,并与其他 Java 代码和库进行互操作。

由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。Groovy 的语法与 Java 非常相似,大多数 Java 代码也符合 Groovy 的语法规则,尽管可能语义不同。 Groovy 1.0 于 2007 年 1 月 2 日发布,并于 2012 年 7 月发布了 Groovy 2.0。从版本 2 开始,Groovy 也可以静态编译,提供类型推论和 Java 相近的性能。Groovy 2.4 是 Pivotal 软件赞助的最后一个主要版本,截止于 2015 年 3 月。Groovy 已经将其治理结构更改为 Apache 软件基金会的项目管理委员会(PMC)[1]。

阅读全文 »

背景介绍

为什么需要学习 Java 并发?

从提升性能角度来说
  • 提升了对 CPU 的使用效率:目前生产的服务器大多数都是多核,标配的机器都是 8C/16G。操作系统会将不同的线程分配给不同的核心处理,理论上,有多少核心就有多少个线程并行执行。如果没有并发编程,CPU 的利用率将极大的浪费,假设当前正在处理耗时的 I/O 操作,那么整个 CPU 就会处于阻塞空闲状态,后面的指令必须等待前面的执行完才能继续执行。
  • 降低服务 RT:大型互联网访问量轻松每秒轻松过万,如果没有并发处理,所有的用户请求都会排队等待,那种体验效果你能想象么,这样的服务能力如何能留住客户?有了并发编程,充分释放 CPU 算力,操作系统让每个客户轮流使用 CPU 计算,每个客户都能得到快速的响应。
  • 容错率高:线程与线程之间的执行不会相互干扰,某个线程执行出现异常退出,不会对其它线程造成影响。
阅读全文 »

背景介绍

风控简介

二十一世纪,信息化时代到来,互联网行业的发展速度远快于其他行业。一旦商业模式跑通,有利可图,资本立刻蜂拥而至,助推更多企业不断的入场进行快速的复制迭代,企图成为下一个“行业领头羊”。

带着资本入场的玩家因为不会有资金的压力,只会更多的关注业务发展,却忽略了业务上的风险点。强大如拼多多也被“薅羊毛”大军光顾损失千万。

风控,即风险管理(risk management),是一个管理过程,包括对风险的定义、测量、评估和应对风险的策略。目的是将可避免的风险、成本及损失极小化[1]。

特征平台简介

互联网企业每时每刻都面临着黑灰产的各种攻击。业务安全团队需要事先评估业务流程中有风险的地方,再设置卡点,用来采集相关业务信息,识别当前请求是否有风险。专家经验(防控策略)就是在长期以往的对抗中产生的。

阅读全文 »