高频分布式系统一些关键点记录

1,  任务调度问题问题。多线程

任务调度会遇到下面的坑:并发

    1.1,任务丢失。分布式

        业务中出现过几种任务丢失的状况。第一种,使用不熟悉的队列rabbitmq,使用不熟悉的链接池,没使用ack,io过高后出现废弃链接,任务丢失。第二种,使用队列自带超时,最后由队列推断在队列阶段丢弃了任务。高并发

    1.2,任务校验:入口参数校验,获取文件大小校验,上传文件大小校验。分布式系统都是不可靠的。被坑过几回。性能

    1.3,任务状态的变动。线程

    1.4,持久化/削峰。对于多阶段任务,须要持久化,避开跨部门或者跨小组沟通,同时方便任务从新导入。日志

    1.5,任务重发。注意去重和哈希。协程

    1.6,任务优先级问题。dns

3,批量io。注意io 合并,使用多级buff,尽可能少io。rabbitmq

4,http parse 致使cpu 过高。在高频请求的时候,解析http 请求时,尽可能使用c 库封装的库。

5,三线机器问题,注意两个点,一个是出口ip bind,一个是查询dns 的时候bind ip。

6,  日志太多,适当控制。分级别log ,能明显提升性能。

7,高并发的日志,要带上阶段 和taskid,便于查问题。多线程或者多协程,日志不带id,或者日志位置不对的,都是白打的日志,你都不知道是哪一个任务生成的。

8,链接池的单例共享。

9, 全局catch,防止全局崩溃。

10,优雅退出。通常捕捉信号,循环位标记,而后退出。

11,内存queue的去重问题。定时器从新推任务到队列前,应该看下set中是否有这个任务了。

12,队列饿死。重cpu任务,致使cpu打满,上下文不能切换,队列之间出现某些队列始终不消费的状况。

13,原子计数问题。

14,阻塞仍是非阻塞获取任务的问题。

15,业务异常的监控。对错误日志,队列等敏感信息监控。

相关文章
相关标签/搜索