13种提高系统伸缩性的最佳实践

1, 尽可能地使用异步通信.
2, 为提供不同服务的硬件引入故障隔离.
3, 在多层系统中, 使用Cache.
4, 从用户角度监控你的系统性能.
5, 使用数据库复制, 降低单点读压力.
6, 根据用户和业务的不同, 将应用或数据库分片.
7, 减少使用关系型数据库的复杂特性. 尽可能把它当做是一个持久存储设备.
8, 以循序渐进的方式升级系统, 先升级小部分servers, 然后逐步升级所有servers.
9, 在一个应用进入生产环境前, 一定要做性能和负载测试.
10, 设计系统时, 应该要做容量规划与扩容方案.
11, 使系统具备回滚能力.
12, 确保团队具备根本问题分析能力.这样, 当出现问题时, 才可以方便快速的定位, 解决问题.
13, 质量是设计出来的, 不是靠测出来的.

Translate from http://akfpartners.com/techblog/2009/08/11/scalability-best-practices/

转载请注明原文链接:http://kenwublog.com/13-scalability-best-practices

2009/08/13 | Posted in Performance Tuning
  1. 指如疾风
    2009/08/26 22:34 | #1

    虽然现在不做技术了,但还是支持兄弟的博文,加油!

  2. littleJava
    2010/02/05 14:38 | #2

    看了你的这篇博文,有些不清楚的地方,麻烦您能解释吗?谢谢!
    4, 从用户角度监控你的系统性能. 用户角度关注的系统性能主要是这些:系统的实时反应?容错能力吗?

    6, 根据用户和业务的不同, 将应用或数据库分片:数据集群技术-将不同关注点的数据部署在不同的数据岛上?

    7, 减少使用关系型数据库的复杂特性. 尽可能把它当做是一个持久存储设备.–减少数据表之间(依赖)关联度? 或者是 尽量少使用存储过程实现业务逻辑?

    11, 使系统具备回滚能力.—我所在的开发团队在每次迭代升级的时候会将当前生产环境的应用做一个备份,然后将新的修改增量部署到当前环境中,来实现系统的回滚能力。你所在的开发团队是如何实现的呢?

    谢谢!

    • 2010/02/20 17:56 | #3

      4, 从用户角度监控你的系统性能. 用户角度关注的系统性能主要是这些:系统的实时反应?容错能力吗?
      性能优化,最常用的是给应用程序加缓存,但如果用户使用起来还是感觉慢,那优化就是无效的。

      6, 根据用户和业务的不同, 将应用或数据库分片:数据集群技术-将不同关注点的数据部署在不同的数据岛上?
      当一个系统的数据量成几何增长的时候,为了优化查询性能,你只能从数据本身的特征入手做优化。比如按业务分库,分表。举个例子,用户id 1-10000一个表,10001-20000一个表。

      7, 减少使用关系型数据库的复杂特性. 尽可能把它当做是一个持久存储设备.–减少数据表之间(依赖)关联度? 或者是 尽量少使用存储过程实现业务逻辑?
      关系型数据库的性能一定无法与非关系型数据库比。前者需要经历解析sql,扫描结果集两个过程。

      11, 使系统具备回滚能力.—我所在的开发团队在每次迭代升级的时候会将当前生产环境的应用做一个备份,然后将新的修改增量部署到当前环境中,来实现系统的回滚能力。你所在的开发团队是如何实现的呢?
      备份跟失败回滚是两个概念。
      所谓的失败回滚,也可以叫做是应用降级,比如你新上一个功能,通过某个开关可以直接关闭掉或限制一部分功能的使用,及依赖这个功能的功能的使用。实施难度依据系统和模块的数量及依赖程度而定。

Leave a comment

Attention: Java syntax highlighting is enable. For example: <pre lang="java"> class A {} </pre>