服务器端开发总结

1. 服务异步化

网络IO处理异步化(NIO, Jetty Continuation,Servlet 3)

服务的异步化(Future, Callable, Runnable, Callback)

2. 线程与协程

多线程并发或者协程支持并发,相比而言,协程在处理IO密集型更具优势

3. 缓存无处不在

前端、CGI、后台能用缓存的地方尽量使用缓存,极大的提高系统性能,包括分布式缓存,本地缓存等等

4. 消息队列

尽量使用消息队列解耦系统

5. 协议设计

二进制协议或文本协议,常用的PROTOBUF、JSON、XML,或者自定义私有协议,协议设计要尽量保持前向兼容性。

6. 核心配置化

对于常用的功能选项以及产品策略,需要做到配置化,变更做到实时下发

7. 系统模块化

大系统尽量模块化,保持模块的单一性和模块间的低耦合,提高模块的可维护性

8. 系统分层

合理的对系统进行分层,保持层次间的独立变化

9. 服务监控

随时全方位的监控服务状态,设置合理的服务告警,例如系统请求量,CPU/内存负载情况,消息队列,成功率,延时等等。

10.服务降级

对于非核心功能支持开关,紧急情况关闭开关降级服务,提供有损服务,避免服务完全不可用。开发设计过程中要区分好关键路径和非关键路径,对于非关键路径允许其失败,但不影响关键路径

11.服务依赖

对于调用第三方系统接口的情况,根据负载要提前合理设置超时时长,对于第三方系统调用自身接口,主要提前做好频率限制,防止请求量过大导致雪崩

12.独立部署

核心模块与非核心模块做到独立部署,应用适当进行拆分部署。即快慢分离,动静分离,轻重分离

13.业务日志

系统保留近期的流水日志,方便问题定位和解决

14.过载保护

前期设计时需要合理评估系统的容量,要设置系统过载阀值,当系统请求量过载时,能运用有效手段进行服务降级。超时必须设置,且要合理预估

15.负载均衡

服务器部署绝对要避免单点,不能因为一个单点的失败而使整个系统无法服务,包括接入层、逻辑层、存储层都要避免单点部署

16.容灾备份

核心数据支持跨机房容灾,甚至跨城市容灾,数据做到热备或冷备。

17.灰度发布

新特性发布尽量灰度发布,能最大程度的减少问题的影响,快速的迭代解决问题

18.服务无状态

系统尽量做到无状态,保持横向的扩展能力,避免有状态带来的升级以及维护不方便

19.合理设计

非核心业务,例如业务统计或者上报等等,可以采用无需回包的UDP上报。技术方案有时候要结合具体的业务需求,在性能、一致性等方面可以折中权衡

posted @ 2016-03-07 22:17  moonandstar08  阅读(327)  评论(0编辑  收藏  举报