• AWS 使用经验


    掐指一算,自己第一次使用 AWS 已经是两年前的事情了,这也是云计算和大数据等技术迅猛发展的两年。这期间,大抵间间断断地使用着,FreeTier Instance 也运行快一年了,马上进入收费周期。虽然中间用过一段 Aliyun 的产品(被坑了不少钱),同时现在每月给DigitalOcean 贡献 $5,但是只有AWS的培训有参加过,几个活也是用AWS完成的,算是了解得比较深入。这里且记录一下使用经验,算是总结,也是一种知识梳理。

    由于比较常用计算密集型的任务,选择EC2 Spot Instances + SQS + S3的组合较为符合需求。在不需要Auto Scaling的情况下,主要的思路如下:

    • Sending EC2 Spot Instances Requests
    • Sending Messages into SQS
    • Start python scripts on EC2 instances
    • Upload python scripts to S3 and download it on EC2 instances
    • Get Messages from SQS and saving results to S3

    SQS 是一个消息队列系统,以服务的方式提供后,对于整个架构中各模块的解耦是非常有用的。S3用于存储初始数据和处理结果,以及启动脚本。EC2 就是处理数据的节点。 

    1. S3

    s3 = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
    bucket = s3.get_bucket(DATA_BUCKET)
    key = bucket.new_key(KEY_BOOT)
    #key.set_contents_from_string(startup)
    key.set_contents_from_filename(SCRIPT_BOOT)
    

      

    2. SQS

    def send_message_sqs(q, id):
        message = q.new_message(body=simplejson.dumps({"key":id}))
        print q.write(message)
    
    sqs = boto.connect_sqs(KEY, SECRET)
    q = sqs.create_queue(REQUEST_QUEUE)
    for id in ids:
        send_message_sqs(q, str(id))
    

      

    3. EC2 Spot Instances

    request = conn.request_spot_instances(price=AWS_MAX_PRICE,
        image_id=AWS_IMAGE_ID,
        count=AWS_INSTANCE_COUNT,
        type=AWS_REQUEST_TYPE,
        key_name=AWS_KEY_NAME,
        security_groups=AWS_SECURITY_GROUPS,
        instance_type=AWS_INSTANCE_TYPE,
        placement=AWS_PLACEMENT,
        user_data=BOOTSCRIPT % {
            'KEY'    : AWS_ACCESS_KEY_ID,
            "SECRET" : AWS_SECRET_ACCESS_KEY,
            "DATA_BUCKET" : DATA_BUCKET,
            "KEY_BOOT" : KEY_BOOT,
            'BOOT_SCRIPT_PATH': SCRIPT_BOOT_PATH_SPOT
        })
    

      

    http://aws.amazon.com/ec2/purchasing-options/spot-instances/spot-and-science/

    http://www.slideshare.net/AmazonWebServices/massive-message-processing-with-amazon-sqs-and-amazon-dynamodb-arc301-aws-reinvent-2013-28431182

  • 相关阅读:
    keepAliveTime为0以及队列太小导致ThreadPoolExecutor不断创建新线程
    Python str方法
    Python 复制与赋值
    Python 使用pypi镜像源加速第三方库在线安装
    Python ez_setup.py安装错误
    Tools psr
    Python 列表生成试中的if,if else
    Python 执行方法shift+enter
    Python
    DOS 切换文件夹
  • 原文地址:https://www.cnblogs.com/huys03/p/3854466.html
Copyright © 2020-2023  润新知