于吉吉的技术博客

建造高性能门户网

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  65 随笔 :: 6 文章 :: 149 评论 :: 0 Trackbacks

08 2010 档案

     摘要: 记得问过身边的一些开发工程师(非前端)缓存要分几个层次,从哪里做起,答案很多,比如反向代理缓存,DNS缓存,memcached,数据库缓存等等,确实很完整,不过好像漏掉了我们用户跟我们联通的最根本的工具浏览器,确实好似很少有人把用户的浏览器当作是web站点的组成部分来看待

缓存协商
现在我们需要将用户的浏览器也纳入我们构建网站各个缓存层次中的其中一个重要层次,网站信息和内容在由web服务器生成,而将这些信息和内容作为一段二进制的文件作为本地缓存文件存放在用户的浏览器,是两个独立个体共同完成的任务,所以两者之间需要一种沟通的机制,也就是HTTP的缓存协商

Last-Modified和If-Modified-Since协商
Last-Modified和If-Modified-Since分别位于响应头信息和请求头信息中,都是记录请求的页面最后的修改时间
在第一次访问web服务器会返回200状态,并在浏览器的响应头Last-Modified上写上此页面最后修改的时间戳
使用firebug进行查看


  阅读全文
posted @ 2010-08-25 00:03 陈于喆 阅读(6427) | 评论 (0)  编辑

     摘要: 检查从服务器一般使用show slave status命令来检查

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: root
Master_Port: 3306
Connect_Retry: 3
Master_Log_File: mysql-bin.003
Read_Master_Log_Pos: 79
Relay_Log_File: mysql -relay-bin. 003
Relay_Log_Pos: 548
Relay_Master_Log_File: mysql -bin. 003
Slave_IO_Running: Yes
Slave_SQL_Ru  阅读全文
posted @ 2010-08-23 21:35 陈于喆 阅读(4074) | 评论 (0)  编辑

     摘要: 前段时间我们的系统接到新增多一个频道的需求,原本我们的系统只是针对于广州的业务,现在需要新增另一个城市上海,经过和产品人员沟通和分析,城市之间的业务逻辑除了一些小差异基本还是一样的,数据库的结构经过整合两个城市也可以达到一样的结构,但上海需要独立出另一个数据库.

我们以前发布器的做法是用作为方法的一个参数由调用者一直传到访问对象(索引或数据库),虽然这种做法一样可以很快的实现,但是将数据库,索引的选择和业务逻辑混搭在一起的设计在感觉上是比较混乱,并且不利于将来多个城市(频道)的建立,所以选了通过ThreadLocal来实现多数据源的动态切换.

ThreadLocal 是一个依赖于执行线程的存储器,对它就只有简单的一个set和get方法,不同线程之间是相互独立的。简单地讲,就是:这个线程set了一个对象入去,只有这个线程自己可以把它get出来,其它线程是get不出来的。

好了,下面是具体显示的方式

首先定义一个filter,通过filter取得域名,因为我们的域名中带有城市的标志,如广州是http://gz.***.  阅读全文
posted @ 2010-08-23 16:22 陈于喆 阅读(3459) | 评论 (1)  编辑

     摘要: 前天迁移了一个老系统,用的mysql是4.0要迁移到5.0的环境下,发现了一个问题,在password()函数上发生错误,查一查原来password()函数在mysql5.0已经发生了变换
在mysql4.0下

mysql> select password('abc');
+------------------+
| password('abc') |
+------------------+
| 7cd2b5942be28759 |
+------------------+

而在mysql5.0下

select password('abc');
+-------------------------------------------+
| password('abc') |
+-------------------------------------------+
| *  阅读全文
posted @ 2010-08-23 10:41 陈于喆 阅读(284) | 评论 (0)  编辑

     摘要: 由于系统需求需要对各个接口进行key-value缓存(以参数为key,返回的对象为value),当然对于这种情况首先考虑到的是使用aop,前段时间看过 aspectj的一些介绍,借此机会正好加以应用和体会一下,aspectj是AOP最早成熟的java实现,它稍微扩展了一下java语言,增加了一些 keyword等,具体的aspectj的基本语法见[ur=http://today.java.net/pub/a/today/2003/12 /26/ch3AspectJSyntaxBasics.html]这里[/url],进行缓存的框架使用较成熟的ehcache.
下面开始进行配置
首先是ehcache的配置文件




  阅读全文
posted @ 2010-08-23 10:35 陈于喆 阅读(8523) | 评论 (0)  编辑

     摘要: 在上一篇MySQL主从复制配置 已经介绍过几个启动时的复制参数,下面再介绍几个常用的启动选项,

(1) log-slave-updates

log-slave-updates这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器B是服务器A的从服务器,同时还作为服务器C的主服务器,那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作



(2) master-connect-retry

master-connect-retry这个参数是用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是60秒



(3) read-only

read-only是用来限制普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户依然可以对从数据库进行更新操作



(4) slave-skip-errors

在  阅读全文
posted @ 2010-08-22 23:30 陈于喆 阅读(570) | 评论 (0)  编辑

     摘要: Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。

(1)首先确保主从服务器上的Mysql版本相同

(2)在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限,如:


mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.0.99' IDENTIFIED BY

'123456';

Query OK, 0 rows affected (0.13 sec)


(3)修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务


[mysqld]

log-bin = /home/mysql/log/mysql-bin.log

server-id=1

阅读全文
posted @ 2010-08-22 23:28 陈于喆 阅读(52119) | 评论 (4)  编辑