AWS SQS, SWF and SNS

SQS (Simple Queue Service)

  1. 概念
    1. 简单消息服务,类似于Rabbit MQ,主要作用是作为消息中间件,解耦应用程序的各个组件
    2. SQS不保证消息FIFO,但能保证消息的高可靠
  2. 消息的生命周期
    1. 生产者将消息发送到消息队列,此时消息的状态变为in-flight
    2. 消费者从消息队列中获取消息,此时消息的状态变为processed,在visibility timeout的时间段以内,其它消费者无法获取到相同的消息
    3. 消费者处理完毕消息后,从SQS中消息删除
  3. Visibility Timeout
    1. 某个消费者从消息队列中取出一个消息后,visiblity timeout开始计时,此时该消息不能被其它消费者获取。如果超时了该消息还没有被开始的消费者删除,则该消息的状态又变为in-flight,其它消费者可以获取该消息继续处理。
    2. 该机制很好理解,试想,如果某个消费者获取了某个消息,但可能某种原因处理失败了却又一直不删除此消息,该消息就会一直处于processed状态,消息即不能被删除,又不能被其它消费者处理,这就是一个问题,所以引入了timeout机制。
    3. 超时时间范围30s-12h,默认30s
  4. Delay Queue
    1. 如果设置了delay queue,所有消息都会被延时处理,直到delay的时间到了。
    2. delay的时间范围0-15m
  5. In-flight
    1. 消息被发送到queue后其状态为in-flight,默认可以有120000个in-flight消息
  6. Queue的操作,Unique IDs
    1. CreateQueue,ListQueues,DeleteQueue,SendMessage, SendMessageBatch,ReceiveMessage,DeleteMessage,DeleteMessageBatch,ChangeMessageVisibility,etc
    2. 发送消息到queue后,SQS会返回一个消息的唯一ID,该ID只是用于标识该消息,不能操作消息
    3. 从queue获取到消息后SQS会返回receipt handle,可以用此句柄操作消息,如删除消息等
  7. Queue and message identifiers
    1. Queue:queue URL,每个Queue都有个URL用于唯一标识该Queue
    2. Message ID:唯一标识消息,但不能操作消息
    3. Receipt handles:消息句柄,也能唯一标识消息,用于操作消息
  8. Message Attributes
    1. 消息属性,用于对消息的额外描述,如时间戳,签名等,可选项,不是必须设置的
  9. Long Polling
    1. 默认情况用于获取消息的逻辑是在一个循环里不停的调用ReceiveMessage,如果有消息则交专门的线程处理,如果没有则返回空。ReceiveMessage不是阻塞式的,也就是说如果没有消息其就会马上返回。这样可能有一个问题,如果一直没有消息则会陷入死循环,会增加CPU的开销。可以通过每次循环后sleep一段时间来解决,但如果有很多消息则会降低系统性能,因为每次都要sleep。
    2. Long Polling是指为SQS设置一个时间,在该时间段里调用ReceiveMessage后如果没有消息则调用会被阻塞。如果被阻塞后在该时间段内有新的消息,则立即返回消息,如果超时后还没消息则返回空。
    3. Long Polling时间范围1-20s
  10. Dead Letter Queue
    1. 将处理失败的消息放入dead letter queue,以便trouble shooting
  11. Access Control
    1. 通过创建IAM policy可以设置Queue的访问权限,例如只允许某个账号在某个时间段访问Queue等
    2. Queue就是AWS的一个资源,通过IAM policy可以准确指定访问权限
  12. Durability
    1. 如果向SQS发送消息,SQS只有确定存储完成后才会返回成功,这能保证消息的持久性,且操作简单
    2. 不像其它的异步处理系统,发送消息后会立刻返回,而不管消息是否处理成功
    3. 如果要建立SQS的异步调用,可以在SendMessage调用的上层进行处理,例如专门的线程来发送消息而不管发送结果
    4. 消息可以在Queue中存放4-14天

SWF (Simple Workflow Service)

  1. 概念
    1. 简单工作流服务,用于协调某个工作流的各个处理子流程,在各个处理流程上应用不同的处理分支来完成任务
    2. SWF支持串行处理,并行处理,同步处理和异步处理等类型
  2. Domains
    1. SWF域,是一组资源的集合和分组
    2. 一个domain可以包含多个workfkow,且workflow之间可以有交互,但一个workflow只能属于某一个domain
  3. History
    1. 通过查看workflow history可以知道详细的处理流程细节,完成时间,错误记录等
  4. Actors
    1. Workflow Starter:用于初始化和启动某个workflow
    2. Workflow Decider:用于决定下一个工作流是什么
    3. Activity Workers:用于执行具体的任务
  5. Tasks
    1. Activity tasks:执行具体的任务
    2. Lambda tasks:通过Lambda执行具体的任务
    3. Decision tasks:执行任务来决定下一个工作流是什么
  6. Task List
    1. 任务列表,可以理解为task的队列,是所有任务的集合
  7. Long Polling
    1. Decider和Activity worker与SWF相互通信的途径
    2. 与SQS的long polling有点类似,都是周期性的检查他们和SWF的状态,如果有需要处理的任务,则进行相应的处理
  8. Object Identifier
    1. Workflow Type:Domain name,version
    2. Activity Type:Domain name,version
    3. Decision and activity task:Unique task token
    4. Execution of workflow:Domain,workflow ID,run ID
  9. Execution Closure
    1. 如何结束任务:完成,取消,错误,超时
  10. 简单的workflow执行流程
    1. Starter通知SWF开始某个工作流
    2. SWF通知Decider下一步如何处理
    3. Decider返回SWF下一个处理的任务
    4. SWF通知Activity worker处理任务
    5. Activity worker处理完毕后返回SWF
    6. SWF通知Decider下一步如何处理
    7. ......
    8. Decider通知SWF任务处理完毕
    9. SWF关闭workflow执行流程,归档历史记录等

SNS (Simple Notification Service)

  1. 概念:简单通知服务,用于通知终端用户某个事件的发生,运行方式类似生产者消费者模式。
  2. 通知方式
    1. Email,发邮件
    2. SQS,向队列发消息
    3. HTTP/s,可能是通过提交http请求或者调用RESTful发送消息
    4. SMS,发短信
    5. AWS Lambda,执行Lambda程序
  3. Topic
    1. 一个topic就是一个SNS的接入点,任何想发送通知的生产者都是将通知发送到某个topic
  4. Subscription
    1. 订阅某个topic,就是将某种通知方式关联到某个topic,只要topic接受到生产者发送的通知,SNS就会将通知转发给所有订阅者
    2. 一个topic可以对应多个subscription,一个subscription只对应一个topic
  5. SNS的使用场景
    1. Fanout:通知的扇出,是指某个topic接受到某个生产者发送的消息后,SNS会将其消息转发给所有订阅者,通知被扩散了
    2. Applicaiton and system alert,应用和系统的告警,如EC2 instance异常关闭,EC2 的CPU使用率过高,系统出现异常导致无法启动服务等都可以通过SNS告知用户
    3. Push Email and Text Message:向用户群发邮件或短信,例如广告信息,通知信息等
    4. Mobilie Push Notificatoin:向应用推送更新通知,并可以包含下载链接等

你可能感兴趣的:(AWS)