优秀系统的定义:高可扩展性、高性能、高吞吐量、高可维护性、高可靠性、高可用性、高。。。。
一家之言,轻喷。。。下面正题开始(没有华丽的分割线):
1、按20倍正常访问量设计、按3倍正常访问量实现、按部署1.5倍正常访问量部署
2、简化系统范围(按80/20原则)、简化设计(成本/扩展性折中)、简化实现(更多靠经验)
3、分布方式:拷贝分布(每个机器部署同样的服务或同样的数据)、垂直分布(按业务,每个系统提供不同功能)、水平分布(sharding)
4、设计系统时假设你手头只有少量低端服务器或常见设备
5、使用合适的数据存储方式,而不拘泥于关系型数据库
6、尽量少用或不用重定向(即使用也要用Http服务器支持的原生配置)
7、CDN是分流的很好方式,适合静态内容获取
8、如果是HTML网站,重视Http expire和Cache-control头;也要充分利用服务端Cache
9、设计并实现feature时务必保证可回滚(尤其是SQL脚本的可回滚性)
10、不要使用多阶段提交事务,因为阻塞导致性能急剧下降
11、不要用select for update,因为有行级锁;可用select for read only
12、不要select *
13、合理规划系统组成失败隔离域,域之间禁止同步call,限制异步call。实际上失败隔离域的概念也是高内聚低耦合设计的体现
14、避免单点(利用active/passive, active/active, master/slave等)
15、尽量减少调用关系上是串联的组件数量(也就是减少串联深度)
16、设计系统的功能开关(即可降级指定的功能)
17、力求达到系统的无状态;实在不行,状态信息可放到客户端cookie,或者单独的分布式缓存中,或者服务化(比如用户是否购买过某物)
18、通信尽可能的使用异步,即使同步也必须要有超时时间和异常处理
19、防止消息总线拥堵,消息要少而精
20、分隔商业智能和线上事务处理系统,both Service and data
21、设计和实现时必须考虑监控和记录
22、数据库设计:不要用外键、不要delete(表添加disabled字段标示记录是否有效)
未完待续,欢迎补充。。。。。。