Arganzheng's Blog

stay hungry, stay foolish

如何实时同步大量小文件

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

服务端监控方案

需求 功能性监控(availability):我们希望能够及时的发现线上的bug,异常。 性能监控与调优(performance):我们希望能够识别可能的性能瓶颈,并且有数据支撑方便对性能进行调优。比如慢速SQL,缓存命中率,链接池等。 预警报警:我们希望能够第一时间收到线上异常,进行处理。 辅助线上故障定位、故障分析 运维支持:我们系统能够有数据支撑我们进行容量规划、报警和扩容,等。 自动化运维:比如自动扩容;或者根据监控的数据和配置的SLA进行服务降级。等等。 监控方案 监控对象 操作系统:OP 网络监控:OP 应用监控:RD URI Spring JDBC ...

如何监控线上应用的运行状态

需求 通常我们对线上的运行状态有监控的需求。比如我们需要知道队列的大小和使用情况,缓存的命中率,链接池的大小和使用情况,每个请求的QPS、响应时间,等等。 解决方案 一般的做法如下: 对需要监控的点进行埋点做统计。可以使用AOP尽量做到对应用透明。 统计结果通过某种方式导出。比如最常见的是通过log打印出来,再去查看log。 其实上面的步骤明显的将这个过程进行了抽象: Measurement Exportor/Reportor 进一步具体化,Measurement主要有如下几个维度: Gauges: A gauge is an instantaneous measurement of a value. Counter...

配置MySQL Slave

需求 已经有一主一备,需要再增加一个只读备机。 步骤 1. 安装mysql 最好找个跟Master一样的MySQL版本(特别是主版本号)。基本不需要源码安装,到官网找到相应平台编译好的二进制包就可以了。 具体参考: 2.2 Installing MySQL on Unix/Linux Using Generic Binaries。可以不建立mysql组和用户。 shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz shell> cd /path/to/mysql-VERSION-OS shell> scripts/mysql_install_db --basedir=/path/to/mysq...

使用Redis做简单的消息队列

消息队列的好处直接,就是 1. 解耦;2. 削峰;3. 异步化。基本上和缓存一样是居家必备之良药。然而消息队列虽然重要,但是同时其实是蛮重的一个组件。 所以就想能不能先简单的通过Redis来实现消息队列呢?不考虑PubSub、分布式、持久化、事务等复杂的情况。就像JDK的各种Queue一样。答案当然是可以的,因为Redis提供的list数据结构就非常适合做消息队列。 List List是一个双向链表,支持双向的Pop/Push,江湖规矩一般从左端Push,右端Pop——LPush/RPop,而且还有Blocking的版本BLPop/BRPop,客户端可以阻塞在那直到有消息到来,所有操作都是O(1)的好孩子,可以当Message Queue来用。当多个...

Spring MVC国际化和本地化

在你的mvc-dispatcher-servlet.xml中配置如下: <!-- i18n && l10n --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:i18n/messages" /> <property name="defaultEncoding" value="UTF-8" /> </bean> <bean ...

log4j详细介绍

log4j核心概念 基本上所有的日志系统(库)对于日志记录的抽象都差不多,就是 日志记录者(Loggers)将message以某种格式(Layouts)写到某些日志文件(Appenders)中。 这里有三个关键的概念——Loggers,Layouts,Appenders,正是Log4J的三个核心概念。下面我们一一介绍一下。 一、Loggers——The ability to selectively enable or disable logging requests based on their logger. 1. Loggers是树形继承关系的,这个关系将影响到下面的Appenders,因此掌握这个概念很重要。 有且仅有一个root logger,...

log4j日志路径问题

问题 原来的log4j.properties配置文件中配置日志文件路径如下: ## File output... log4j.appender.system=org.apache.log4j.RollingFileAppender log4j.appender.system.File=../logs/system.log log4j.appender.defaultLogger.DatePattern='.'yyyy-MM-dd log4j.appender.system.layout=org.apache.log4j.PatternLayout log4j.appender.system.layout.ConversionPattern=%d [%p] [%t...

使用拦截器做简单的性能监控

需求 监控所有的Controller Handler Method,对处理时间超过阈值的邮件报警。 实现 Spring MVC提供了interceptor的机制,可以方便的进行对handler method进行AOP。具体实现如下。 首先在Spring MVC配置文件配置一下interceptor: <!-- Configures Handler Interceptors --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="me.arganzheng.study.springmvc.i...

Andriod平台推送系统设计

背景 移动互联网带来一个结果就是实时性,而消息推送就是实时性的一个重要原因。服务器经常会推送各种消息给终端,比如最新的新闻,微博,评论,等等。可以说,主动消息推送是一个越来越基本的功能了。那么怎么实现呢? 常见的实现方案有如下几种: 1. 轮询方式(PULL) 应用程序周期性的与服务器进行连接并查询是否有新的消息。你必须自己实现和服务器之前的通信,例如消息队列。 主要要考虑轮询的效率,如果太慢可能导致某些消息的延迟。如果太快,则会消耗流量和电池电量。 2. SMS 在Android平台通过拦截SMS消息。这个方案很难找到免费的短消息发送网关,因此成本相对比较高。 3. 持久连接(PUSH) 客户端通过发送心跳包,和服务器维持一个TCP连接。这个方案可...

×