一次 HTTPRequest TimeOut 分析

现象:访问产品间歇性出现TimeOut

现象:访问其他网站正常,但是只要是访问公司的产品网站有时就会非常缓慢,有时候会出现504 网关超时。 这种现象也是间歇性发生

收集基础信息

所有产品对外的nginx 出口机是10.9.171.123,外网IP是123.59.83.77

以下以:www.clickhouse.com.cn (clickhouse也是配置在ucloud 上) 为例进行分析:

1
2
curl www.clickhouse.com.cn -o /dev/null
curl www.clickhouse.com.cn -o /dev/null -x 10.9.171.123:80

License 设计

介绍

不提倡什么授权、加密、混淆,不过,有开源项目,也会有商业项目。也并不是所有产品都是Saas服务,如果是有对外有项目输出,且产品采用授权使用形式的企业,那么对自己的软件产品加上授权验证必不可少

特性

  1. RSA 非对称加密,公钥加密,私钥解密,保证license信息安全; –10.31补充,RSA每次加密密文都不一致,所以machine 信息不能用非对称加密,只能选用对称加密
  2. Digital Signature公钥数字签名;
    1. 防止license被冒充签发(认证);
    2. 保证数据完整性;
    3. 数字签名具有不可抵赖性(即不可否认性)
  3. 硬件信息采集,防止程序被无限copy
  4. 授权截止时间,完成业务上授权需求
  5. 使用license的业务代码混淆加密,防止反编译替换跳过验证流程
  6. 可以加入自定义数据(授权版本、授权对象、授权功能列表)等等,方便扩展

Java Thread Life Cycle and Thread States

Java Thread Life Cycle and Thread States

一个java 线程 在它的生命周期来,可以处于下图的任何一个状态,可以是 New,Runnable,Blocked,Waiting,Timed Waiting 或 Terminated。同业也称为生命周期内的事件。

Java Thread Life Cycle Status

Java-Thraed-Life-Cycle-States


JumperServer 免密登录

JumperServer 免密登录

用了JumperServer后,每次要连远程服务器,需要选一次私钥文件,输入两次密码,输入一次ip,非常麻烦,能不能一个简短的指令就搞定呢?答案是可以的

简化步骤:

  1. 将jumperServer 私钥转换为 无密码私钥
  2. ssh-add 将私钥添加到 Keychain
  3. 设置命令 alias,简化命令

java 并发工具类CountDownLatch & CyclicBarrier

java 并发工具类CountDownLatch & CyclicBarrier

CountDownLatch

CountDownLatch 概念

CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。

CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。


python & bs4 基础

python & bs4

如果基于正则表达式来爬取网页,真的是太麻烦,而且正则要学得好,还真不容易。通过 bs4 select 或者 find 返回soup对象,可以很方便地提取出HTML或XML标签中的内容,简直不能更方便

举例:

1
2
3
4
5
req = urllib2.Request(target_url, headers = _headers)
myPage = urllib2.urlopen(req).read().decode(self.encoding)
soup = BeautifulSoup(myPage,'lxml')

dom_tag_a = soup.select('div[class*="right_wrap"] > div[class*="content"] > div[class*="phref"] > a')

Git入门与实践-读书笔记

GitHub 入门与实践 记录

《GitHub 入门与实践》 读书笔记

了解GitHub

Git 和 GitHub 的区别

在Git中,开发者将源代码存入名为“Git仓库”的资料库中,并加以使用。而GitHub则是在网络上提供Git仓库的一项服务。这也就是说Github上公开的软件源代码都是有Git进行管理。

社会化编程

SOCIAL CODING.随着GitHub的出现,让所有人都平等的拥有了更改源代码的权利,软件开发者们才真正意义上拥有了源代码.


CORS_跨来源资源共享_Ajax跨域资源共享

CORS 跨域资源共享相关技术分享

本篇包括以下内容:

  • CORS 定义
  • CORS 对比 JSONP
  • CORS,BROWSER支持情况
  • 主要用途
  • Ajax请求跨域资源的异常
  • CORS 思路
  • 安全说明
  • CORS 几种解决方案
    • 自定义CORSFilter
    • Nginx 配置支持Ajax跨域
    • 支持多域名配置的CORS Filter

keyword:cors,跨域,ajax,403,filter,RESTful,origin,http,nginx,jsonp


netty 粘包问题处理

netty 粘包问题处理

一般TCP粘包/拆包解决办法

  1. 定长消息,例如每个报文长度固定,不够补空格
  2. 使用回车换行符分割,在包尾加上分割符,例如Ftp协议
  3. 消息分割,头为长度(消息总长度或消息体长度),通常头用一个int32表示
  4. 复杂的应用层协议

netty的几种解决方案

特殊分隔符解码器:DelimiterBasedFrameDecoder

客户端发送消息


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×