Hunter的大杂烩 技术学习笔记

November 1, 2005

关于系统优化

Filed under: 闲聊 — hunter @ 10:59 am

其实就是几条原则而已:
1. 80/20 , 采集数据,分析瓶颈在哪里,数据也可以作为今后优化结果对比
2. 分离读写,互联网应用,80%都是读,将这些response cache,就可以大大减轻系统负荷
3. 按业务分类,重要的业务服务器重点保护

2005-10-31 16:38:30 某人
总算看见你了

2005-10-31 16:38:31 某人
呵呵

2005-10-31 16:38:39 某人
有空吗

2005-10-31 16:38:10 hunter

2005-10-31 16:38:49 hunter
xxx 跟我说了
(2005-10-31 16:28:43) hunter
你要描述一下现状,和希望达到的目标哦

2005-10-31 16:39:42 某人
ok

2005-10-31 16:38:59 hunter
你们遇到什么问题了?

2005-10-31 16:40:29 某人
是这样的,xxx.xxx.net现在是简单基于apapche+php+mysql这样的服务器,负载不是很均衡

2005-10-31 16:40:46 某人
用户数上来就感觉有点撑不住了

2005-10-31 16:41:04 某人
想请教一下系统架构负载均衡,和优化

2005-10-31 16:41:34 某人
希望能够满足10w/日用户这样的访问量,和下载

2005-10-31 16:41:40 某人
jar

2005-10-31 16:41:49 hunter
现在机器的硬件是什么?有多少台机器?pv多少,带宽吃了多少?

2005-10-31 16:42:40 某人
看看你能不能给我们些建议

2005-10-31 16:42:53 某人
硬件就是dell的服务器一台

2005-10-31 16:43:10 某人
pv多少,带宽吃了多少? 这些没有数据

2005-10-31 16:43:24 某人
但是目前已经接近负荷

2005-10-31 16:43:36 hunter
pv统计都没有啊?grep 一下apache log就可以得到一个初步的了

2005-10-31 16:43:44 hunter
cpu很忙?

2005-10-31 16:44:34 某人
是的

2005-10-31 16:45:17 某人
所以看看你有没有比较好的建议,如何让用户访问达到负载均衡

2005-10-31 16:45:29 某人
服务器,我们还会增加的

2005-10-31 16:46:06 某人
目前主要是怎么让http访问, mysql访问能满足大用户数的

2005-10-31 16:46:26 某人
不知道你可否有更好的建议,或idea

2005-10-31 16:46:09 hunter
做网站负载均衡有很多方法

2005-10-31 16:46:58 某人
是的

2005-10-31 16:46:26 hunter
但是首先要摸底,你什么数据都没有,很难说明优化的效果

2005-10-31 16:47:11 某人
所以想你给个比较好的建议

2005-10-31 16:46:38 hunter
很可能系统优化一下就可以了

2005-10-31 16:46:47 hunter
你能否申请一个免费的计数器?

2005-10-31 16:47:31 某人
不会这样简单瓜

2005-10-31 16:46:53 hunter
放在网站上?

2005-10-31 16:47:03 hunter
嗯,是真的

2005-10-31 16:47:50 某人
暂时没有

2005-10-31 16:48:24 某人
依你的经验,那些做法会比较ok些呢

2005-10-31 16:47:42 hunter
如果系统已经到了极限,再做负载均衡未迟,但是应用的优化往往可以延迟做平行扩展的时间

2005-10-31 16:47:52 hunter
1. 对页面做静态化cache

2005-10-31 16:48:35 某人

2005-10-31 16:48:46 某人
这个有考虑

2005-10-31 16:48:08 hunter
比如你的分类浏览,是一个比较复杂的sql查询,可以考虑cache

2005-10-31 16:48:18 hunter
很多php模板都支持cache的

2005-10-31 16:48:22 hunter
比如smarty

2005-10-31 16:49:14 某人
好的

2005-10-31 16:48:42 hunter
最简单的负载均衡,就是做DNS轮训

2005-10-31 16:49:38 某人

2005-10-31 16:48:59 hunter
两台完全一样的web server,共同访问一个db

2005-10-31 16:49:11 hunter
图片和db存再同一台机器上

2005-10-31 16:49:59 某人
这个也考虑过

2005-10-31 16:49:21 hunter
用nfs mount到这台机器上

2005-10-31 16:49:58 hunter
主要就是分离动态和静态数据

2005-10-31 16:50:44 某人
基本上会考虑apache server和mysql server独立

2005-10-31 16:50:10 hunter
用户80%的访问都是read操作

2005-10-31 16:51:08 某人
ok

2005-10-31 16:50:30 hunter
将这些最耗时的操作,cache起来,或者静态化,就可以大大减轻系统负担了

2005-10-31 16:50:55 hunter
如果你只是分离成两台机器,但是每个PHP还是直连mysql,那么很快你的mysql服务器也会成为瓶颈的

2005-10-31 16:51:56 某人
是的

2005-10-31 16:51:31 hunter
你可以到mysql上面,show full process一下,看看哪些sql出现的频率最高,就专门优化一下这些sql,或者使用这些sql的php

2005-10-31 16:52:29 某人
ok

2005-10-31 16:53:53 hunter
top一下,看看最耗cpu的几个进程是什么?

2005-10-31 16:54:48 某人

2005-10-31 16:55:08 某人
这些我都记下来了

2005-10-31 16:55:20 某人
mysql是其中之一

2005-10-31 16:55:10 hunter
嗯,那要好好分析mysql慢的原因

2005-10-31 16:55:22 hunter
通常就是sql语句或者表结构的问题

2005-10-31 16:55:28 hunter
比如没有加键

2005-10-31 16:55:40 hunter
单表数据量如果太大了,就要考虑分表

2005-10-31 16:55:47 hunter
mysql单表不要超过100w

2005-10-31 16:56:03 hunter
如果性能不行,或者内存不够,还要再少点

2005-10-31 16:56:11 hunter
机器尽量加内存,加到2G

2005-10-31 16:57:06 某人
ok

2005-10-31 16:56:29 hunter
以便让php和mysql充分利用内存做cache

2005-10-31 16:58:04 某人
hunter 16:55:47
mysql单表不要超过100w --这个还没有发生

2005-10-31 16:58:21 hunter
呵呵,其实到了50w你就要开始考虑重新改造程序,以便支持分表了

2005-10-31 16:59:33 某人
这样啊

2005-10-31 17:00:30 某人
你刚刚提到的php访问mysql,这其实是个瓶颈,有没有好的方法

2005-10-31 16:59:48 hunter
嗯,后面的数据滚动一般比较快

2005-10-31 17:00:14 hunter
php有很多cache机制啊?什么zend,smarty之类的

2005-10-31 17:00:20 hunter
我对php不大了解,可能要问问别人

2005-10-31 17:01:12 某人
又用zend

2005-10-31 17:00:34 hunter
其实如果你把大部分数据静态化之后,mysql就不是问题了

2005-10-31 17:00:38 hunter
哦,效果如何?

2005-10-31 17:01:24 某人

2005-10-31 17:01:39 某人
我大概知道了你的思路

2005-10-31 17:01:48 某人
服务器方面呢

2005-10-31 17:02:25 某人
据我知道你负责的是个很大的项目,应该有让你解决的类似问题

2005-10-31 17:02:34 某人
请说说好吗

2005-10-31 17:02:57 某人
现在我们打算重新改造,设计架构

2005-10-31 17:03:13 某人
你的经验可以对我们的一大财富啊

2005-10-31 17:03:14 某人
呵呵

2005-10-31 17:02:59 hunter
呵呵,你不用考虑太复杂

2005-10-31 17:03:48 某人
哦,是吗

2005-10-31 17:03:10 hunter
我看你们的业务也不是很复杂的

2005-10-31 17:03:57 某人
是的

2005-10-31 17:03:19 hunter
但是数据收集还是必要的

2005-10-31 17:04:08 某人
其实就是下载站

2005-10-31 17:03:28 hunter
做系统优化的时候要抓住80/20原则

2005-10-31 17:04:16 某人
ok

2005-10-31 17:03:37 hunter
重点优化最耗时的地方

2005-10-31 17:04:26 某人

2005-10-31 17:03:52 hunter
你可以用一些工具分析一下apache log,看看哪些地方访问的比较多

2005-10-31 17:04:42 某人
ok

2005-10-31 17:04:09 hunter
apache处理静态数据的话,可以支持到100Mbps/机器

2005-10-31 17:05:03 某人
哦,这样

2005-10-31 17:04:52 hunter
建议你们首先把浏览的部分和操作(写)的部分分离

2005-10-31 17:05:06 hunter
比如list, detail,都可以单独1-2台机器

2005-10-31 17:05:15 hunter
然后把业务处理部分单独一台出来

2005-10-31 17:05:30 hunter
社区和其他不重要的业务再单独一台

2005-10-31 17:06:26 某人

2005-10-31 17:05:44 hunter
db可以用好一些的机器

2005-10-31 17:05:57 hunter
mysql可以支持到 300-400个并发链接

2005-10-31 17:06:43 某人
但是用户数增长很快,这个有什么好的建议吗

2005-10-31 17:06:01 hunter
内存要大

2005-10-31 17:06:20 hunter
主要看活跃用户数量咯

2005-10-31 17:06:25 hunter
还有多少的写请求

2005-10-31 17:06:38 hunter
下载的服务器独立出来

2005-10-31 17:07:29 某人
ok

2005-10-31 17:06:56 hunter
建议用一些轻量级的web server,比如thttpd来替代apache作为下载服务器

2005-10-31 17:07:54 某人
我们这边的用户有时候是在比较集中的一段时间访问

2005-10-31 17:07:14 hunter
你运行 mysqladmin status

2005-10-31 17:07:23 hunter
看看db的平均query数量?

2005-10-31 17:08:14 某人
ok

2005-10-31 17:08:24 某人
今天不是繁忙时间

2005-10-31 17:08:25 某人
呵呵

2005-10-31 17:07:50 hunter
没关系的,静态数据分离之后,就不成问题的了

2005-10-31 17:08:01 hunter
把读写php分离到不同机器上

2005-10-31 17:08:41 某人
节假日

2005-10-31 17:08:11 hunter
读的给多些机器,写的少一点

2005-10-31 17:09:02 某人
哦可

2005-10-31 17:09:04 某人
ok

2005-10-31 17:08:31 hunter
把重要的业务DB跟一般的社区类的DB分离开

2005-10-31 17:09:26 某人
好的

2005-10-31 17:09:22 hunter
ok,大概的优化逻辑就是这样

2005-10-31 17:11:28 某人
如果你能考虑到更多的地方,请告诉我吧,

2005-10-31 17:11:44 某人
真的很谢谢你给了这么多建议

2005-10-31 17:11:50 某人
thanks a lot

2005-10-31 17:11:27 hunter
🙂

2005-10-31 17:12:22 某人
3F801A

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress