服务器端开发总结
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上报。技术方案有时候要结合具体的业务需求,在性能、一致性等方面可以折中权衡