百度首页 | 百度空间
 
查看文章
 
从软件大会学到的一些关于系统架构的一些知识
2007-12-02 16:45
     大会的具体情况就不说了,相关的报道不少,从大会中的收获也很多, 下面谈一下会后总结到的东西。

     系统设计,一般只为当前的系统需求或者可预见的未来的需求作设计,一个原则就是先解决好最关键的功能需求,并且最多只为用户增长5-10倍做设计。这点很好理解,因为为那些不知道什么时候才有的功能作预先设计实在是费力不讨好的事情,但是这并不表示瞎设计一通,系统足够的扩展性是必须的。举个实际的例子,在一般很多互联网WEB项目中,数据库系统都会随着用户量的增长而产生单点压力瓶颈,而最普遍解决问题的做法就是根据用户的ID来对用户数据库进行分割,然后把他们部署在多个服务器上来分担压力。而走到这一步一般都是用户规模增长到了一定程度,比如100w的时候。如果在网站在上线时就采用此种方案,恐怕系统复杂度都会增加好几倍,而开发人员都要多几倍的时间来处理这些复杂度,但是却没有应有的收效。还有一种情况就是心理可能想到一个什么样的功能以后也许要做,所以现在就把数据结构设计了,一下子多处了很多暂时用不到的字段,其实这些字段对现在来说是很大的负担,并且这些字段以后会不会用到还很难说,千万不要干傻事。

       大会中学到一句话:设计就是一本艺术,关键是做好资源的平衡。

       作系统设计的时候,满足基本需求的设计是最基本的,但是系统中还有很多不良用户以及很多不稳定的因素,对付这些不良用户和让系统稳定也是设计的很大一部分。比如很多恶意的注册、登陆密码的暴力破解、高消耗操作的频繁调用、业务规则漏洞利用等,这些都需要设计时考虑到怎么对付,而在那种有利益产生的系统中,黑客攻击和用户作弊也是非常频繁的,有时候这些因素可能成为你系统设计的关键考虑因素。

       系统监控是相当重要的,监控能帮助你掌握系统运转的各个环节,让你对服务器的管理和部署得心应手。举个实际的例子,最近我们的一个系统中注册连续几个小时无法进行并且没人发现,最后被老板看到而导致他大为生气,而这样导致的损失也是很大的。这是相当糟糕的一种情况,如果能在应用中能够加上一些错误报告之类的措施,那么此类问题应该很快会被发现并解决。

        常见的系统监控方案如监控cpu/内存/磁盘/网卡流量以及数据库和WEB服务器等,相关的软件已经不少,搜索以下就能找到一些。而对网站访问速度的监控方面的监控可以使用某些专业的监控网站提供的服务,他们能从各个线路来探测你的网站速度。当然除了这些之外,应用上的监控则需要自己开发相应的程序了。
        简单总结了一些方法和技巧:1、伪装成用户来检测网站的逻辑。如果网站逻辑比较简单,那么你的监控程序可以伪装成正常用户来探测你应用的逻辑是否正确,这样可以尽量保证随着网站不断发展的情况下,网站里面的一些应用逻辑问题也能够被及时发现。2、检测数据库连接错误、SQL语句错误、文件操作错误、Socket连接错误等此类问题都可以通过在应用中插入相关错误报告代码来让问题及时被发觉。

    监控很重要,而对问题的预防也是必不可少的。你应该经常去检查服务器的健康状态,如果局部出现了问题或者有出现问题的前兆,那么你应该把那些问题处理掉,然后再提供正常服务。这让我感触比较深的就是云风介绍网易游戏服务器的维护方法。他们的做法是每周停止服务并检查服务器的状态,如果出现问题就把出问题的服务器修好,然后再启动服务,他们不做双机热备和集群之类的方案。当时听起来觉得很不可思议,其实想想,在用户能接受的情况下,这样也很好,系统部署的费用会低很多。如果说用户不能接受停机,那么你可以部署一个集群系统,然后定期对集群系统的每台服务器进行检查也是可以的。

    还有系统扩容方面的一些方案,具体扩容本身的一些问题最新的程序员增刊和DBA Notes上已经介绍了不少。还有一点需要提一下的是不要等到需要扩容的时候再去考虑,而需要事先考虑好并预备好空闲的服务器,让它随时ready,否则真遇到突发问题就会让你很难看。

    流水账就先写这么多了,下一篇可能写一些数据备份方面的想法吧。



   

类别:Web | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu