优秀系统的定义:高可扩展性、高性能、高吞吐量、高可维护性、高可靠性、高可用性、高。。。。
一家之言,轻喷。
。。以下正题開始(没有华丽的切割线):
1、按20倍正常訪问量设计、按3倍正常訪问量实现、按部署1.5倍正常訪问量部署
2、简化系统范围(按80/20原则)、简化设计(成本/扩展性折中)、简化实现(很多其它靠经验)
3、分布方式:拷贝分布(每一个机器部署相同的服务或相同的数据)、垂直分布(按业务,每一个系统提供不同功能)、水平分布(sharding)
4、设计系统时如果你手头仅仅有少量低端server或常见设备
5、使用合适的数据存储方式。而不拘泥于关系型数据库
6、尽量少用或不用重定向(即使用也要用Httpserver支持的原生配置)
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、力求达到系统的无状态;实在不行。状态信息可放到clientcookie,或者单独的分布式缓存中,或者服务化(比方用户是否购买过某物)
18、通信尽可能的使用异步。即使同步也必需要有超时时间和异常处理
19、防止消息总线拥堵,消息要少而精
20、分隔商业智能和线上事务处理系统,both Service and data
21、设计和实现时必须考虑监控和记录
22、数据库设计:不要用外键、不要delete(表加入disabled字段标示记录是否有效)
未完待续,欢迎补充。。。
。。
。