云存储+CDN

什么是云存储(Cloud Storage)?

云存储,诸如Dropbox、Google Drive、苹果的iCloud和微软的SkyDrive,都是非常棒的轻松共享文件的方式。云存储的主要目标是在线存储文件,用户不管采用何种设备,都能够随时随地地访问文件,处理工作。你可以将其类比为一款基于云的USB闪存驱动器。

云存储如何工作?

云存储涉及用户通过互联网连接的一个或多个数据服务器。用户通过全球互联网以人工或自动方式将文件发送到数据服务器,数据服务器将信息转发到多个服务器。然后,可以通过基于Web界面访问存储的数据。
云存储系统涉及大量数据服务器以确保其可用性。这样,如果一台服务器需要维护或失败,用户可以放心,数据已在其他地方复制以确保可用性。例如,亚马逊AWS公共云目前涵盖18个地理区域的55个可用性区域。
虽然公共云中的数据在不同的物理位置被复制以用于容错和灾难恢复目的,但是主要或本地位置往往更靠近企业的设施,因此可以更快地以更低的成本处理数据,比如选择在全球范围内的主要位置。

云存储的优势

通过将数据存储在云中,IT 部门可以在以下三个方面实现转变:

  • 总体拥有成本。 利用云存储,您无需购买硬件、预配置存储或将资本用于“偶发”场景。您可以根据需求添加或删除容量、快速更改性能和保留特性,并且只需为您实际使用的存储付费。系统甚至可以根据可审核的规则将访问频率较低的数据自动迁移到成本更低的层,从而实现规模经济效益。
  • 部署时间。 当开发团队准备就绪时,基础设施不应降低其工作速度。利用云存储,IT 人员可以在需要时快速交付所需的确切存储量。这样一来,IT 人员能够集中精力解决复杂的应用程序问题,而无需管理存储系统。
  • 信息管理。 在云中集中存储创造了一个有力的杠杆点,可以支持许多新的使用案例。通过使用云存储生命周期管理策略,您可以执行庞大的信息管理任务,包括自动分层或锁定数据以支持合规性要求。

什么是CDN?

谈到CDN的作用,可以用8年买火车票的经历来形象比喻:

8年前,还没有火车票代售点一说,12306.cn更是无从说起。那时候火车票还只能在火车站的售票大厅购买,而我所住的小县城并不通火车,火车票都要去市里的火车站购买,而从县城到市里,来回就是4个小时车程,简直就是浪费生命。后来就好了,小县城里出现了火车票代售点,可以直接在代售点购买火车,方便了不少,全市人民再也不用在一个点苦逼的排队买票了。

CDN就可以理解为分布在每个县城的火车票代售点,用户在浏览网站的时候,CDN会选择一个离用户最近的CDN边缘节点来响应用户的请求,这样海南移动用户的请求就不会千里迢迢跑到北京电信机房的服务器(假设源站部署在北京电信机房)上了。

CDN的优势很明显:(1)CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低;(2)大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载。

CDN的简单测试

比如我以前做过的电商平台,没有使用CDN技术,用一张图片进行网络测试:
https://www.17ce.com/

CDN测试

CDN目前不需要写代码来实现,云计算厂家基本上都已经提供,只需要修改相应的配置即可

云存储接入

    1. 注册阿里云账号(略)
    1. 免费领取OSS套餐(见下面链接)
    1. 创建Bucket(存储桶)
获取如下信息:
Bucket Name=suorontest
Bucket 域名: suorontest.oss-cn-shanghai.aliyuncs.com
AccessKey ID:lVtPLrcuuyDhyKzA
Access Key Secret   :m6RaZGFv4eQSmThprcrdWLBV6TMbVH
    1. 管理界面上传图片、测试图片压缩
OSS图片处理示例:

https://suorontest.oss-cn-shanghai.aliyuncs.com/u%3D2483975330%2C1440849296%26fm%3D26%26gp%3D0.jpg?x-oss-process=image/resize,w_150

    1. 下载java demo,测试文本及图片上传、删除
public class HelloOSS {
    static Logger logger = Logger.getLogger(HelloOSS.class);

    // endpoint是访问OSS的域名。如果您已经在OSS的控制台上 创建了Bucket,请在控制台上查看域名。
    // 如果您还没有创建Bucket,endpoint选择请参看文档中心的“开发人员指南 > 基本概念 > 访问域名”,
    // 链接地址是:https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
    // endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”,注意http://后不带bucket名称,
    // 比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”,是错误的endpoint,请去掉其中的“bucket-name”。
    private static String endpoint = "http://oss-cn-shanghai.aliyuncs.com";

    // accessKeyId和accessKeySecret是OSS的访问密钥,您可以在控制台上创建和查看,
    // 创建和查看访问密钥的链接地址是:https://ak-console.aliyun.com/#/。
    // 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
    private static String accessKeyId = "lVtPLrcuuyDhyKzA";
    private static String accessKeySecret = "m6RaZGFv4eQSmThprcrdWLBV6TMbVH";

    // Bucket用来管理所存储Object的存储空间,详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。
    // Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
    private static String bucketName = "suorontest";

    // Object是OSS存储数据的基本单元,称为OSS的对象,也被称为OSS的文件。详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。
    // Object命名规范如下:使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。
    private static String firstKey = "my-first-key";

    public static void main(String[] args) {

        // 日志配置,OSS Java SDK使用log4j记录错误信息。示例程序会在工程目录下生成“oss-demo.log”日志文件,默认日志级别是INFO。
        // 日志的配置文件是“conf/log4j.properties”,如果您不需要日志,可以没有日志配置文件和下面的日志配置。
        PropertyConfigurator.configure("conf/log4j.properties");

        logger.info("Started");

        // 生成OSSClient,您可以指定一些参数,详见“SDK手册 > Java-SDK > 初始化”,
        // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/init.html?spm=5176.docoss/sdk/java-sdk/get-start
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

        try {

            // 判断Bucket是否存在。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
            if (ossClient.doesBucketExist(bucketName)) {
                System.out.println("您已经创建Bucket:" + bucketName + "。");
            } else {
                System.out.println("您的Bucket不存在,创建Bucket:" + bucketName + "。");
                // 创建Bucket。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
                // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
                ossClient.createBucket(bucketName);
            }

            // 查看Bucket信息。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
            BucketInfo info = ossClient.getBucketInfo(bucketName);
            System.out.println("Bucket " + bucketName + "的信息如下:");
            System.out.println("\t数据中心:" + info.getBucket().getLocation());
            System.out.println("\t创建时间:" + info.getBucket().getCreationDate());
            System.out.println("\t用户标志:" + info.getBucket().getOwner());

            // 把字符串存入OSS,Object的名称为firstKey。详细请参看“SDK手册 > Java-SDK > 上传文件”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
            InputStream is = new ByteArrayInputStream("Hello OSS".getBytes());
            ossClient.putObject(bucketName, firstKey, is);
            System.out.println("Object:" + firstKey + "存入OSS成功。");

            // 下载文件。详细请参看“SDK手册 > Java-SDK > 下载文件”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/download_object.html?spm=5176.docoss/sdk/java-sdk/manage_object
            OSSObject ossObject = ossClient.getObject(bucketName, firstKey);
            InputStream inputStream = ossObject.getObjectContent();
            StringBuilder objectContent = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            while (true) {
                String line = reader.readLine();
                if (line == null)
                    break;
                objectContent.append(line);
            }
            inputStream.close();
            System.out.println("Object:" + firstKey + "的内容是:" + objectContent);

            // 文件存储入OSS,Object的名称为fileKey。详细请参看“SDK手册 > Java-SDK > 上传文件”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
            String fileKey = "test.png";
            ossClient.putObject(bucketName, fileKey, new File("c:\\test.png"));
            System.out.println("Object:" + fileKey + "存入OSS成功。");

            // 查看Bucket中的Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
            ObjectListing objectListing = ossClient.listObjects(bucketName);
            List objectSummary = objectListing.getObjectSummaries();
            System.out.println("您有以下Object:");
            for (OSSObjectSummary object : objectSummary) {
                System.out.println("\t" + object.getKey());
            }

            // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
            ossClient.deleteObject(bucketName, firstKey);
            System.out.println("删除Object:" + firstKey + "成功。");
            ossClient.deleteObject(bucketName, fileKey);
            System.out.println("删除Object:" + fileKey + "成功。");

        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }

        logger.info("Completed");
    }

}

参考资料
阿里云OSS接入手册
OSS免费套餐申请
OSS如何收费
OSS通过JS上传

你可能感兴趣的:(云存储+CDN)