Arganzheng's Blog

stay hungry, stay foolish

ElasticSearch的Analyzer

Analyzer在构建索引的时候,还有分析查询字符串(query string)时候会用到。 Lucene的Analyzer是一个pineline的机制,由一个 Tokenizer + N个 TokenFilter 构成,N>=0。Tokenizer之前还可以配置N个 CharFilter。 其中各个部件的职责如下: character filters Character fi...

如何提高服务器并发处理能力

说明 以下内容为入门级介绍,意在对老技术作较全的总结而不是较深的研究。主要参考《构建高性能Web站点》一书。 目录 什么是服务器并发处理能力 怎样衡量服务器并发处理能力 吞吐率 压力测试 怎么提高服务器的并发处理能力 提高CPU并发计算能力 多进程 & 多...

select、poll和epoll简介

说明:本篇文章是网上各种资料杂烩而成。如有雷同,纯属自然。 select select功能介绍 select系统调用的功能是对多个文件描述符进行监视,当有文件描述符的文件读写操作完成,发生异常或者超时,该调用会返回这些文件描述符。 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds,stru...

静态资源服务器迁移MFS方案

背景 目前的静态资源以普通Linux文件系统(Ext3)的方式存放在05机器上,主要是图片和新闻(以及新闻附带的图片)。每半个小时更新一次。通过rsync + cron 脚本定时同步到01。01只是备份,不提供服务。随着静态资源的增加,静态服务器的压力比较大,而且读写服务是单点,虽然有冗余容灾,但是不能同时提供服务,不具有线性拓展性。一般来说海量的文件系统都需要使用分布式文件系统。具体参见...

服务器编程模型

多进程模型 1.fork子进程在accept阻塞等待连接。 业务和网络层分离为不同进程模型。 负载均衡模型,多个进程绑定不同的端口。 多线程模型 1.主线程在accept处阻塞,当有新连接时实时创建新线程处理,处理完关闭。 2.创建线程池,都在accept处阻塞,当有新连接时notify一个线程去处理,处理完归还。 ...

Java NIO.2

五种IO模型 按照《Unix网络编程》的划分,IO模型可以分为下面五种: 阻塞IO: blocking I/O 进程处于阻塞模式时,让出CPU,进入休眠状态,直到数据到达并且被复制到应用程序缓冲区中或者发生错误才返回 Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O 非阻塞IO: no...

nginx URL rewrite与下载文件名称问题

背景 我们的APK官方下载链接原来是http://app.arganzheng.me/official/download?language=xxx。这个链接是请求到tomcat,然后在应用服务器中遍历某个目录,找到最新的apk版本,让用户下载。 /** * 下载APK。处理CDN的真正下载请求。其实应该是在静态资源服务器和nginx处理。 */ @RequestMapping("/d...

Java NIO

WHAT is Java NIO 虽然说Java NIO的真正含义是Non-Blocking IO。但是实际上它的字面意义是Java New IO,在Java 1.4的时候引入,用于区分原来老的IO方式。整个新的IO API是为服务器设计的,只与服务器相关。 WHY NIO 1. 网络IO往往是性能瓶颈 与CPU和内存相比,甚至与磁盘相比,网络都很慢。CPU与主存之间的传输速度大概是...

如何实时同步大量小文件

需求 静态资源服务器存放新闻、视频、图片,每隔一段时间定时拉取更新。为了反正静态资源服务器(现在是用MFS)挂掉,需要将静态资源同步到普通的linux文件系统做备份。这样故障的时候可以切换回去。 大概有900w+的小文件,使用rsync,在没有任何文件变更的情况下,都需要执行20多分钟(扫描对比差异)。如何实时的同步呢? 方案 1、cron + rsync [work@xxx-xx...

服务端监控方案

需求 功能性监控(availability):我们希望能够及时的发现线上的bug,异常。 性能监控与调优(performance):我们希望能够识别可能的性能瓶颈,并且有数据支撑方便对性能进行调优。比如慢速SQL,缓存命中率,链接池等。 预警报警:我们希望能够第一时间收到线上异常,进行处理。 辅助线上故障定位、故障分析 运维支持:我们系统能够有数据支撑我们进行容量规划...