精华内容
下载资源
问答
  • 对象存储OSS技术 使用背景 为了解决海量数据存储与弹性扩容,项目中我们采用云存储的解决方案- 阿里云OSS。 使用流程 1.开通对象存储oss服务 (1)申请阿里云账号 (2)实名认证 (3)开通“对象存储OSS”服务 (4)...

    对象存储OSS技术

    使用背景

    为了解决海量数据存储与弹性扩容,项目中我们采用云存储的解决方案- 阿里云OSS。

    使用流程

    1.开通对象存储oss服务

    (1)申请阿里云账号

    (2)实名认证

    (3)开通“对象存储OSS”服务

    (4)进入管理控制台

    2.创建Bucket

    3.java中使用oss技术

    1. 在配置文件中配置以下东西
    #阿里云 OSS
    #不同的服务器,地址不同
    aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
    aliyun.oss.file.keyid=your keyid
    aliyun.oss.file.keysecret=your keysecret
    #bucket可以在控制台创建,也可以使用java代码创建
    aliyun.oss.file.bucketname=sunset-education
    
    1. 创建一个类交给spring管理,同时读取配置文件的信息
    package com.sunset.oss.utils;
    
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ConstantPropertiesUtils implements InitializingBean {
        //    读取配置文件内容
        @Value("${aliyun.oss.file.endpoint}")
        private String endpoint;
        @Value("${aliyun.oss.file.keyid}")
        private String keyId;
        @Value("${aliyun.oss.file.keysecret}")
        private String keySecret;
        @Value("${aliyun.oss.file.bucketname}")
        private String bucketName;
    
        public static String END_POINT;
        public static String ACCESS_KEY_ID;
        public static String ACCESS_KEY_SECRET;
        public static String BUCKET_NAME;
        @Override
        public void afterPropertiesSet() throws Exception {
            END_POINT = endpoint;
            ACCESS_KEY_ID = keyId;
            ACCESS_KEY_SECRET = keySecret;
            BUCKET_NAME = bucketName;
        }
    }
    
    
    1. 在service层编写上传代码
    package com.sunset.oss.service.impl;
    
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.sunset.oss.service.OssService;
    import com.sunset.oss.utils.ConstantPropertiesUtils;
    import org.joda.time.DateTime;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.InputStream;
    import java.util.UUID;
    
    @Service
    public class OssServiceImpl implements OssService {
        @Override
        public String uploadFileAvatar(MultipartFile file) {
            // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            String endpoint = ConstantPropertiesUtils.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
            String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
            String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
            OSS ossClient = null;
            try {
                // 创建OSSClient实例。
                ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
                // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
                InputStream inputStream = file.getInputStream();
                String fileName = file.getOriginalFilename();
    //            在文件名中生成唯一的一个随机值
                String s = UUID.randomUUID().toString().replaceAll("-", "");
                fileName = s+fileName;
    
    //            把文件按照日期分类
    //            获取当前日期
                String date = new DateTime().toString("yyyy/MM/dd");
    //            拼接
                fileName = date +"/"+fileName;
                // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
                ossClient.putObject(bucketName, fileName, inputStream);
                //https://sunset-education.oss-cn-beijing.aliyuncs.com/%600Z%25ESLMDL%401CI%5D7%5D7GYZPP.jpg
                String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
                return url;
            }catch (Exception e){
                e.printStackTrace();
                return null;
            }finally {
                // 关闭OSSClient。
                ossClient.shutdown();
            }
    
    
    
        }
    }
    
    
    1. 在controller层中调用service层的上传代码
    package com.sunset.oss.controller;
    
    import com.sunset.commonutils.Result;
    import com.sunset.oss.service.OssService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    @RestController
    @RequestMapping("/eduoss/fileoss")
    //@CrossOrigin
    public class OssController {
        @Autowired
        private OssService ossService;
        @PostMapping
        public Result uploadOssFile(MultipartFile file){
            String url = ossService.uploadFileAvatar(file);//方法返回阿里云oss里面图片的路径
    //        获取上传文件
            return Result.ok().data("url",url);
        }
    }
    
    
    1. 启动项目并使用swaggeer进行测试
    展开全文
  • 我们希望通过OSS来将这些文件按照一定的规则存储起来,在我们需要的时候,能很快的取出来,并且应用到当前的项目中,甚至能和其他的应用系统集成起来,形成一整套的基于OSS存储的生态系统。百分点基于实践探索自主...

    编者按

    在数字政府领域,许多项目中都有各种类型的文件,它们有不同的大小、不同的用途,甚至编码方式都会千差万别。我们希望通过OSS来将这些文件按照一定的规则存储起来,在我们需要的时候,能很快的取出来,并且应用到当前的项目中,甚至能和其他的应用系统集成起来,形成一整套的基于OSS存储的生态系统。百分点基于实践探索自主研发出了OSS,可以将海量的网页内容、图片、音视频等非结构化数据,在高并发的场景下被快速、准确的存储及方便的下载。

    da9eaceef6a7b2ae33c1f00fe839d6c9.png

    对象存储服务(Object Storage Service,简称OSS),是百分点对外提供的海量、安全、低成本、高可靠的对象存储服务。用户可以通过简单的REST接口,进行数据的上传和下载。同时,OSS提供Java语言的SDK,简化用户的编程。基于OSS,用户可以搭建出各种个人和企业数据备份、业务数据应用等基于大规模数据存储的服务。同时OSS还可以与其他组件搭配使用,广泛应用于海量数据存储与备份,数据加工与处理,内容加速分发,业务数据挖掘等多种业务场景。

    1.架构设计

    基于对OSS的要求,我们设计的架构如下图所示:

    46e1e765382446437ee62ef4c04982b0.png

    我们采用了HBase+Ceph来进行底层存储,对于小于1MB的数据进入HBase,对于大于1MB的数据进入Ceph,同时数据通过Tomcat提供对外服务。基于上面的架构,我们的OSS可以实现以下的性能目标。

    1.1 高吞吐性

    OSS的底层存储充分利用各组件的性能优势,来使整个集群可以达到较高的吞吐量。

    HBase(Hadoop Database),是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。对于小于1MB的文件写入HBase是一个很棒的设计。

    那么大于1MB的文件,我们存入哪里呢?有这么几种方案可供我们选择,比如Hadoop,FastDFS,Ceph等组件。我们最终选择了Ceph做大文件存储。

    Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。Ceph的开发目标可以简单定义为以下三项:

    • 可轻松扩展到数PB容量
    • 支持多种工作负载的高性能
    • 高可靠性

    1.2 高可用性

    高可用性对文件存储系统是极为重要的,因为数据是极为宝贵的,如果数据在OSS中很容易丢失或者不可靠,那么它的存在意义就不大了。

    对于OSS的高可用,我们早就做了深思熟虑的思考。HBase的数据最终存储HDFS中,而HDFS是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(DistributedFile System)。我们可以通过定义它的多副本机制来达到它的高可用性。

    和HBase类似,Ceph也可以通过多副本机制来实现它的高可用性。

    同时,我们可以定义存储的文件的过期时间来避免存储的文件无限增长,在我们的应用中,默认设置为90天。

    1.3 可扩展性

    当系统的吞吐量越来越大,或者存储容量以及快达到OSS所能承受的流量瓶颈时,我们可以通过横向扩展相关组件来应对流量的变化。

    对于直接对外提供Rest接口的Tomcat服务,如果当Tomcat服务器达到性能瓶颈时,我们可以增加Tomcat服务器来进行横向扩展,同时为了对外提供统一的网关,我们增加了LVS+Keepalived这一层来实现,如下图所示:

    01da6cf8f75d481590ba3287e3298b85.png

    正常情况下,LVS使用DR模式代理若干台Tomcat服务器,keepalived是实现LVS的高可用的。当其中一台LVS出现故障下线后,keepalived通过虚拟IP技术快速切换到另外一台可用的LVS上。

    另外对于HBase和Ceph的扩展性是简单易于实现的,只需要增加待扩展的机器,进行相关配置,即可快速加入集群,相应的数据也会进行rebalance。

    1.4 限流算法

    在上面的功能概览中简单的说明了在某些场景中我们需要进行流量限制,那么这里将详细介绍限流的原理。

    在OSS中,我们使用Guava的RateLimiter作为限流的组件。Guava的RateLimiter的限流方式有两种:漏桶算法和令牌桶算法。我们采用的是令牌桶算法。

    对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。如图所示,令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。

    9fb208da62f9d5f01e4fb573a99695bf.png

    我们的OSS就是采用令牌桶的方式来对流量进行限制的,当客户端以某一稳定的速率来向OSS写入的时候,系统是稳定的并且大多数的时候是这样的。但是我们有时需要应对流量峰值,这个时候超过我们规定的流量就会被限制。现在问题来了,被限制的流量如果直接丢弃,那么可能重要的文件被丢弃,这样显然不符合我们对OSS定位为高可用存储系统的要求。于是在限流的逻辑中我们加入了以下处理流程:当流量达到系统的瓶颈时,我们将被限流的流量写入kafka,等到系统负载降低的时候,再从kafka中读取这部分流量重放至OSS,这样既保证了OSS的稳定性,又解决因限流带来的数据丢失问题。

    2.功能概览

    2.1 文件上传

    f370d11ce66ad67eb3ec89a9d1caaac7.png

    客户端以RESTFul接口方式向OSS服务器发送上传文件的请求,OSS将文件存储到HBase或Ceph中,然后向客户端返回存储的状态。

    我们将文件名作为存储的唯一标识,这样设计的好处有两点,第一,我们不需要返回用户文件在OSS服务器的存储路径;第二,也可以避免同名文件反复上传。

    2.2 文件下载

    90c83ed730e378a9aac7a5fcc5617935.png

    客户端以RESTFul接口方式带上需要查询的文件名请求OSS服务器,OSS根据文件名查询对应的文件,返回请求客户端。

    2.3 流量限制

    流量限制是以一种被动的方式来对流量进行控制的方式。我们可以通过压力测试来粗略估计OSS所能承受的最大压力,然后在配置文件中配置限流的数值。这里要注意的是,需要根据业务的特点对限制的流量进行处理,其一,可以完全丢弃掉被限制的流量;其二,也可以对限制的流量进行相应的处理。

    3.场景分析

    现以公司某项目做讲解来进一步说明OSS在项目中的实际应用以及最佳实践。

    3.1 项目的现状

    3.1.1 流量情况

    以中期某城市交付为基准:每秒约120Gb流量,每天1.5亿个文件,每秒大概1800个文件。

    其它各分中心的数据均为上述城市的倍数,比如A中心的比例系数为33.33,那么它每秒的流量约4000Gb,每天约34亿个文件,每秒大概6万个文件,以此类推。

    3.1.2 单机性能

    目前单机Tomcat能支撑最大12000TPS,对于各中心每秒的数据量,单机显然不能支撑这么大的数据量,我们需要采用Tomcat集群来支撑这么大的数据流量。

    3.1.3 流量峰值

    在进行机器数以及相关硬件进行评估时,需要考虑流量峰值的情况,我们一般以正常流量的2到3倍来进行规划,比如,某个分中心的流量为每秒1300Gb,那么我们设计时就需要考虑峰值的情况,也就是最大能支撑每秒3900的流量。

    3.2 集群的设计目标

    基于上面描述的项目现状,经过分析,我们的整个OSS集群需要实现以下设计目标:

    • 各中心采用Tomcat集群来支撑数据流量
    • 各中心的流量均衡达到每台Tomcat服务器
    • 负载均衡设备的高可用
    • 存储服务的稳定性

    3.3 最佳实践

    3.3.1 如何保证Tomcat单机的性能最优

    我们主要从以下几个方面来优化Tomcat的性能:

    1)JVM内存大小

    2)最大线程数(maxThreads)

    3)最大连接数(maxConnections)

    4)全连接队列长度(acceptCount)

    我们选用单台机器来测试Tomcat的性能,硬件配置如下:

    ab8f6dd0c04cbbac87ad3e17388038c7.png

    Tomcat的版本选用8.5.43。

    测试的目标:

    • 单台Tomcat支持的最大并发数
    • 单台Tomcat支持的最大TPS
    • NIO模型和APR模型的性能对比

    测试工具使用:ApacheBench。

    我们使用对比测试的方法,分别测试在上传1KB,10KB,100KB,1M,10M,100M的时候,Tomcat各项指标的数值。

    Tomcat配置:maxThreads=100,minSpareThreads=10,acceptCount=102400,maxConnections=1000000,acceptorThreadCount=2

    JVM配置:-Xmx16384m -Xms16384m

    -Xmn1024m -XX:+UseConcMarkSweepGC

    -XX:MaxPermSize=256m

    1、使用NIO模型的测试结果如下:

    e6882fc9de444da625165f3c7dc64672.png

    根据以上测试结果可得出以下结论:

    1)在上传相同文件大小的情况下,随着并发数的增大,会出现一定的丢包情况;

    2)在相同并发量的情况下,随着上传文件大小增大,吞吐量会随之下降。

    2、使用APR模型的测试结果如下:

    ca341a9625021f1451d80c8ae24f2dcf.png

    根据以上测试结果以及对比NIO模型的测试结果,我们可以得出以下结论:

    1)小文件上传APR模式不如NIO模式,大文件上传APR模式要好于NIO模式;

    2)随着并发的增加,TPS先增加后减少,平均响应时间不断增加;

    3)小文件应该关注TPS,大文件应该关注平均响应时间;

    4)小文件TPS大概在2万到3万之间,能接受的并发在300到500之间。

    3.3.2 如何保证HBase存储的稳定性

    HBase以高吞吐著称,那么我们应该如何在保证高吞吐的情况下,能保证稳定的存储。主要应该关注两个点:

    1)GC的次数以及停顿时间;

    2)HBase的compaction机制。

    3.3.2.1 GC调优

    由于HBase是使用Java编写的,所以垃圾收集(GC)对HBase的影响也是很大的,我们需要适当调整GC相关的参数,使得HBase能达到较好的性能和稳定的运行。在JVM中,有很多种垃圾收集器,我们在项目中使用的是CMS GC,下面首先介绍CMS GC的工作原理,再详细说明调优的相关细节。

    3.3.2.2 GC调优目标

    在介绍具体的调优技巧之前,有必要先来看看GC调优的最终目标和基本原则:

    1)平均Minor GC时间尽可能短;

    2)CMS GC次数越少越好。

    3.3.2.3 HBase 场景内存分析

    一般来讲,每种应用都会有自己的内存对象特性,分类来说无非就两种:一种是对象的生存期较短的工程,比如大多数的HTTP请求处理工程,这类的对象可能占到所有对象的70%左右;另一种是对象生存期居多的工程,比如类似于HBase,Flink等这类大内存工程。这里以HBase为例,来看看具体的内存对象:

    1)RPC请求对象

    2)Memstore对象

    3)BlockCache对象

    因此可以看到,HBase系统属于对象生存期居多的工程,因为GC的时候只需要将RPC这类对象生存期较短的Young区淘汰掉就可以达到最好的GC效果。

    在HBase优化中比较关键的两个GC的参数。

    1)年轻代Young区的大小;

    2)年轻代Young区中的Survivor区的大小以及进入老年代的阈值。

    3.3.2.4 生产环境中的GC配置

    假设我们机器的物理内存是80G,所以根据上面的分析,我们可以对相关的参数做如下配置:

    1)缓存模式采用BucketCache策略Offheap模式

    2)内存我们采用如下配置:

    -Xmx64g -Xms64g -Xmn4g -Xss256k

    -XX:MaxPermSize=512m

    -XX:SurvivorRatio=2

    -XX:+UseConcMarkSweepGC

    -XX:+UseParNewGC

    -XX:+CMSParallelRemarkEnabled

    -XX:MaxTenuringThreshold=15

    -XX:+UseCMSCompactAtFullCollection

    -XX:+UseCMSInitiatingOccupancyOnly

    -XX:CMSInitiatingOccupancyFraction=75

    -XX:-DisableExplicitGC

    3.3.3 如何保证大流量情况下系统稳定运行

    流量限制是以一种被动的方式来对流量进行控制的方式。我们可以通过压力测试来粗略估计OSS所能承受的最大压力,然后在配置文件中配置限流的数值。这里要注意的是,需要根据业务的特点对限制的流量进行处理,其一,可以完全丢弃掉被限制的流量;其二,也可以对限制的流量进行相应的处理。

    4.OSS监控

    OSS在运行过程中,我们需要了解相关的监控信息,比如每种文件类型在一段时间的占比,或者在一段时间的网络吞吐量等等,下面就来一一介绍我们是如何来对OSS进行监控的吧。

    4.1 以文件类型划分的指定时间段内的总存储占比

    1031a1a243848cf3fbd2c9c1e870c6fe.png

    该图表用于统计当前OSS中各文件类型存储的占比。

    4.2 以文件类型划分的指定时间段内的文件数量占比

    f8d75e9a07846086c84267db16aa8e81.png

    该图表用于统计当前OSS中各文件类型数量的占比。

    4.3 OSS服务指定时间段内的网络吞吐量

    867222984d7c4a1d799e17d1b7e09620.png

    该图表用于统计OSS的吞吐量。

    4.4 OSS服务指定时间段内的每秒并发处理数(TPS)

    e07974af5d9bbe85ebd61523d18229d4.png

    该图表用于统计当前OSS的负载情况。

    5.结语与展望

    我们认为,OSS一定会成为一个集安全性、可靠性于一体的底层存储服务。基于OSS,在公安领域可以存储天网中的卡口和视频数据,并与公安内部的其他应用形成一个基于高可用存储、多方向应用的解决方案;在社会治理方面,可以存储网络上的各种类型的数据,包括文字、音频以及视频,通过使用人工智能分析其中的关联性,为社会提供更安全的保证。

    展开全文
  • 我们希望通过 OSS 来将这些文件按照一定的规则存储起来,在我们需要的时候,能很快的取出来,并且应用到当前的项目中,甚至能和其他的应用系统集成起来,形成一整套的基于 OSS 存储的生态系统。百分点基于实践探索...

    在数字政府领域,许多项目中都有各种类型的文件,它们有不同的大小、不同的用途,甚至编码方式都会千差万别。我们希望通过 OSS 来将这些文件按照一定的规则存储起来,在我们需要的时候,能很快的取出来,并且应用到当前的项目中,甚至能和其他的应用系统集成起来,形成一整套的基于 OSS 存储的生态系统。百分点基于实践探索自主研发出了 OSS,可以将海量的网页内容、图片、音视频等非结构化数据,在高并发的场景下被快速、准确的存储及方便的下载。

    833744fdd1c27dd49b4e52d32bb0e97b.png

    对象存储服务(Object Storage Service,简称 OSS),是百分点对外提供的海量、安全、低成本、高可靠的对象存储服务。用户可以通过简单的 REST 接口,进行数据的上传和下载。同时,OSS 提供 Java 语言的 SDK,简化用户的编程。基于 OSS,用户可以搭建出各种个人和企业数据备份、业务数据应用等基于大规模数据存储的服务。同时 OSS 还可以与其他组件搭配使用,广泛应用于海量数据存储与备份,数据加工与处理,内容加速分发,业务数据挖掘等多种业务场景。

    1. 架构设计

    基于对 OSS 的要求,我们设计的架构如下图所示:

    6c3963bef1bdbdd25e4d5b320d761145.png

    我们采用了 HBase+Ceph 来进行底层存储,对于小于 1MB 的数据进入 HBase,对于大于 1MB 的数据进入 Ceph,同时数据通过 Tomcat 提供对外服务。基于上面的架构,我们的 OSS 可以实现以下的性能目标。

    1.1 高吞吐性

    OSS 的底层存储充分利用各组件的性能优势,来使整个集群可以达到较高的吞吐量。

    HBase(Hadoop Database),是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PCServer 上搭建起大规模结构化存储集群。对于小于 1MB 的文件写入 HBase 是一个很棒的设计。

    那么大于 1MB 的文件,我们存入哪里呢?有这么几种方案可供我们选择,比如 Hadoop,FastDFS,Ceph 等组件。我们最终选择了 Ceph 做大文件存储。

    Ceph 是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。Ceph 的开发目标可以简单定义为以下三项:

    • 可轻松扩展到数 PB 容量
    • 支持多种工作负载的高性能
    • 高可靠性

    1.2 高可用性

    高可用性对文件存储系统是极为重要的,因为数据是极为宝贵的,如果数据在 OSS 中很容易丢失或者不可靠,那么它的存在意义就不大了。

    对于 OSS 的高可用,我们早就做了深思熟虑的思考。HBase 的数据最终存储 HDFS 中,而 HDFS 是指被设计成适合运行在通用硬件 (commodity hardware) 上的分布式文件系统(DistributedFile System)。我们可以通过定义它的多副本机制来达到它的高可用性。

    和 HBase 类似,Ceph 也可以通过多副本机制来实现它的高可用性。

    同时,我们可以定义存储的文件的过期时间来避免存储的文件无限增长,在我们的应用中,默认设置为 90 天。

    1.3 可扩展性

    当系统的吞吐量越来越大,或者存储容量以及快达到 OSS 所能承受的流量瓶颈时,我们可以通过横向扩展相关组件来应对流量的变化。

    对于直接对外提供 Rest 接口的 Tomcat 服务,如果单 Tomcat 服务器达到性能瓶颈时,我们可以增加 Tomcat 服务器来进行横向扩展,同时为了对外提供统一的网关,我们增加了 LVS+Keepalived 这一层来实现,如下图所示:

    e1e7fc70195587ce1e6790ec88f9341f.png

    正常情况下,LVS 使用 DR 模式代理若干台 Tomcat 服务器,keepalived 是实现 LVS 的高可用的。当其中一台 LVS 出现故障下线后,keepalived 通过虚拟 IP 技术快速切换到另外一台可用的 LVS 上。

    另外对于 HBase 和 Ceph 的扩展性是简单易于实现的,只需要增加待扩展的机器,进行相关配置,即可快速加入集群,相应的数据也会进行 rebalance。

    1.4 限流算法

    在上面的功能概览中简单的说明了在某些场景中我们需要进行流量限制,那么这里将详细介绍限流的原理。

    在 OSS 中,我们使用 Guava 的 RateLimiter 作为限流的组件。Guava 的 RateLimiter 的限流方式有两种:漏桶算法和令牌桶算法。我们采用的是令牌桶算法。

    对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。如图所示,令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。

    3b087819763c7159553ac8cc830f8c75.png

    我们的 OSS 就是采用令牌桶的方式来对流量进行限制的,当客户端以某一稳定的速率来向 OSS 写入的时候,系统是稳定的并且大多数的时候是这样的。但是我们有时需要应对流量峰值,这个时候超过我们规定的流量就会被限制。现在问题来了,被限制的流量如果直接丢弃,那么可能重要的文件被丢弃,这样显然不符合我们对 OSS 定位为高可用存储系统的要求。于是在限流的逻辑中我们加入了以下处理流程:当流量达到系统的瓶颈时,我们将被限流的流量写入 kafka,等到系统负载降低的时候,再从 kafka 中读取这部分流量重放至 OSS, 这样既保证了 OSS 的稳定性,又解决因限流带来的数据丢失问题。

    2. 功能概览

    2.1 文件上传

    fa159147dc061e338d94970122430d99.png

    客户端以 RESTFul 接口方式向 OSS 服务器发送上传文件的请求,OSS 将文件存储到 HBase 或 Ceph 中,然后向客户端返回存储的状态。

    我们将文件名作为存储的唯一标识,这样设计的好处有两点,第一,我们不需要返回用户文件在 OSS 服务器的存储路径;第二,也可以避免同名文件反复上传。

    2.2 文件下载

    ad3d571b638e5cc8ac25b1341fdae68a.png

    客户端以 RESTFul 接口方式带上需要查询的文件名请求 OSS 服务器,OSS 根据文件名查询对应的文件,返回请求客户端。

    2.3 流量限制

    流量限制是以一种被动的方式来对流量进行控制的方式。我们可以通过压力测试来粗略估计 OSS 所能承受的最大压力,然后在配置文件中配置限流的数值。这里要注意的是,需要根据业务的特点对限制的流量进行处理,其一,可以完全丢弃掉被限制的流量;其二,也可以对限制的流量进行相应的处理。

    3. 场景分析

    现以公司某项目做讲解来进一步说明 OSS 在项目中的实际应用以及最佳实践。

    3.1 项目的现状

    3.1.1 流量情况

    以中期某城市交付为基准:每秒约 120Gb 流量,每天 1.5 亿个文件,每秒大概 1800 个文件。

    其它各分中心的数据均为上述城市的倍数,比如 A 中心的比例系数为 33.33,那么它每秒的流量约 4000Gb,每天约 34 亿个文件,每秒大概 6 万个文件,以此类推。

    3.1.2 单机性能

    目前单机 Tomcat 能支撑最大 12000TPS,对于各中心每秒的数据量,单机显然不能支撑这么大的数据量,我们需要采用 Tomcat 集群来支撑这么大的数据流量。

    3.1.3 流量峰值

    在进行机器数以及相关硬件进行评估时,需要考虑流量峰值的情况,我们一般以正常流量的 2 到 3 倍来进行规划,比如,某个分中心的流量为每秒 1300Gb,那么我们设计时就需要考虑峰值的情况,也就是最大能支撑每秒 3900 的流量。

    3.2 集群的设计目标

    基于上面描述的项目现状,经过分析,我们的整个 OSS 集群需要实现以下设计目标:

    • 各中心采用 Tomcat 集群来支撑数据流量
    • 各中心的流量均衡打到每台 Tomcat 服务器
    • 负载均衡设备的高可用
    • 存储服务的稳定性

    3.3 最佳实践

    3.3.1 如何保证 Tomcat 单机的性能最优

    我们主要从以下几个方面来优化 Tomcat 的性能:

    1)JVM 内存大小

    2)最大线程数(maxThreads)

    3)最大连接数(maxConnections)

    4)全连接队列长度(acceptCount)

    我们选用单台机器来测试 Tomcat 的性能,硬件配置如下:

    CPU(Product Model)CPU(Core)Mem(GB)HardDisk(Type)HardDisk(RPM)E5-2620 v22464SATA7200

    Tomcat 的版本选用 8.5.43。

    测试的目标:

    • 单台 Tomcat 支持的最大并发数
    • 单台 Tomcat 支持的最大 TPS
    • NIO 模型和 APR 模型的性能对比

    测试工具使用:ApacheBench。

    我们使用对比测试的方法,分别测试在上传 1KB,10KB,100KB,1M,10M,100M 的时候,Tomcat 各项指标的数值。

    Tomcat 配置:maxThreads=100,minSpareThreads=10,acceptCount=102400,maxConnections=1000000,acceptorThreadCount=2

    JVM 配置:-Xmx16384m -Xms16384m-Xmn1024m -XX:+UseConcMarkSweepGC-XX:MaxPermSize=256m

    1、使用 NIO 模型的测试结果如下:

    文件大小并发数TPS成功率1KB10030173.99100%1KB40031222.8299.99856%10KB10025351.94100%10KB40025931.4299.99889%100KB40011399.33100%100KB60011266.3399.99997%1MB5001091.73100%1MB7001094.17100%10MB2058.64100%10MB4059.17100%100MB24.20100%100MB504.13100%

    根据以上测试结果可得出以下结论:

    1)在上传相同文件大小的情况下,随着并发数的增大,会出现一定的丢包情况;

    2)在相同并发量的情况下,随着上传文件大小增大,吞吐量会随之下降。

    2、使用 APR 模型的测试结果如下:

    文件大小并发数TPS成功率1KB10031192.96100%1KB20031222.8299.99856%10KB30024777.2099.99739%100KB50010820.5199.992275%1MB500912.60100%10MB2069.72100%100MB25.35100%

    根据以上测试结果以及对比 NIO 模型的测试结果,我们可以得出以下结论:

    1)小文件上传 APR 模式不如 NIO 模式,大文件上传 APR 模式要好于 NIO 模式;

    2)随着并发的增加,TPS 先增加后减少,平均响应时间不断增加;

    3)小文件应该关注 TPS,大文件应该关注平均响应时间;

    4)小文件 TPS 大概在 2 万到 3 万之间,能接受的并发在 300 到 500 之间。

    3.3.2 如何保证 HBase 存储的稳定性

    HBase 以高吞吐著称,那么我们应该如何在保证高吞吐的情况下,能保证稳定的存储。主要应该关注两个点:

    1)GC 的次数以及停顿时间;

    2)HBase 的 compaction 机制。

    3.3.2.1 GC 调优

    由于 HBase 是使用 Java 编写的,所以垃圾收集(GC)对 HBase 的影响也是很大的,我们需要适当调整 GC 相关的参数,使得 HBase 能达到较好的性能和稳定的运行。在 JVM 中,有很多种垃圾收集器,我们在项目中使用的是 CMS GC,下面首先介绍 CMS GC 的工作原理,再详细说明调优的相关细节。

    3.3.2.2 GC 调优目标

    在介绍具体的调优技巧之前,有必要先来看看 GC 调优的最终目标和基本原则:

    1)平均 Minor GC 时间尽可能短;

    2)CMS GC 次数越少越好。

    3.3.2.3 HBase 场景内存分析

    一般来讲,每种应用都会有自己的内存对象特性,分类来说无非就两种:一种是对象的生存期较短的工程,比如大多数的 HTTP 请求处理工程,这类的对象可能占到所有对象的 70% 左右;另一种是对象生存期居多的工程,比如类似于 HBase,Flink 等这类大内存工程。这里以 HBase 为例,来看看具体的内存对象:

    1)RPC 请求对象

    2)Memstore 对象

    3)BlockCache 对象

    因此可以看到,HBase 系统属于对象生存期居多的工程,因为 GC 的时候只需要将 RPC 这类对象生存期较短的 Young 区淘汰掉就可以达到最好的 GC 效果。

    在 HBase 优化中比较关键的两个 GC 的参数。

    1)年轻代 Young 区的大小;

    2)年轻代 Young 区中的 Survivor 区的大小以及进入老年代的阈值。

    3.3.2.4 生产环境中的 GC 配置

    假设我们机器的物理内存是 80G,所以根据上面的分析,我们可以对相关的参数做如下配置:

    1)缓存模式采用 BucketCache 策略 Offheap 模式

    2)内存我们采用如下配置:

    -Xmx64g -Xms64g -Xmn4g -Xss256k-XX:MaxPermSize=512m

    -XX:SurvivorRatio=2-XX:+UseConcMarkSweepGC-XX:+UseParNewGC

    -XX:+CMSParallelRemarkEnabled-XX:MaxTenuringThreshold=15

    -XX:+UseCMSCompactAtFullCollection-XX:+UseCMSInitiatingOccupancyOnly

    -XX:CMSInitiatingOccupancyFraction=75-XX:-DisableExplicitGC

    3.3.3 如何保证大流量情况下系统稳定运行

    流量限制是以一种被动的方式来对流量进行控制的方式。我们可以通过压力测试来粗略估计 OSS 所能承受的最大压力,然后在配置文件中配置限流的数值。这里要注意的是,需要根据业务的特点对限制的流量进行处理,其一,可以完全丢弃掉被限制的流量;其二,也可以对限制的流量进行相应的处理。

    4.OSS 监控

    OSS 在运行过程中,我们需要了解相关的监控信息,比如每种文件类型在一段时间的占比,或者在一段时间的网络吞吐量等等,下面就来一一介绍我们是如何来对 OSS 进行监控的吧。

    4.1 以文件类型划分的指定时间段内的总存储占比

    f6be36f8bb92c8f7413c6868e716cdcf.png

    该图表用于统计当前 OSS 中各文件类型存储的占比。

    4.2 以文件类型划分的指定时间段内的文件数量占比

    50ddc5e5f3ed6c10a733d54ac137b4a3.png

    该图表用于统计当前 OSS 中各文件类型数量的占比。

    4.3 OSS 服务指定时间段内的网络吞吐量

    9a5c70b7b6422c287482057ce2bd388d.png

    该图表用于统计 OSS 的吞吐量。

    4.4 OSS 服务指定时间段内的每秒并发处理数(TPS)

    b200bee3af393a6ecbee9bfaf0980b1e.png

    该图表用于统计当前 OSS 的负载情况。

    5. 结语与展望

    我们认为,OSS 一定会成为一个集安全性、可靠性于一体的底层存储服务。基于 OSS,在公安领域可以存储天网中的卡口和视频数据,并与公安内部的其他应用形成一个基于高可用存储、多方向应用的解决方案;在社会治理方面,可以存储网络上的各种类型的数据,包括文字、音频以及视频,通过使用人工智能分析其中的关联性,为社会提供更安全的保证。

    本文转载自公众号百分点(ID:baifendian_com)。

    原文链接

    https://mp.weixin.qq.com/s/tTkNDB0yqNQiZ4vkJLfqpA

    展开全文
  • 我们希望通过OSS来将这些文件按照一定的规则存储起来,在我们需要的时候,能很快的取出来,并且应用到当前的项目中,甚至能和其他的应用系统集成起来,形成一整套的基于OSS存储的生态系统。百分点基于实践探索自主...

    编者按

    在数字政府领域,许多项目中都有各种类型的文件,它们有不同的大小、不同的用途,甚至编码方式都会千差万别。我们希望通过OSS来将这些文件按照一定的规则存储起来,在我们需要的时候,能很快的取出来,并且应用到当前的项目中,甚至能和其他的应用系统集成起来,形成一整套的基于OSS存储的生态系统。百分点基于实践探索自主研发出了OSS,可以将海量的网页内容、图片、音视频等非结构化数据,在高并发的场景下被快速、准确的存储及方便的下载。

     

    对象存储服务(Object Storage Service,简称OSS),是百分点对外提供的海量、安全、低成本、高可靠的对象存储服务。用户可以通过简单的REST接口,进行数据的上传和下载。同时,OSS提供Java语言的SDK,简化用户的编程。基于OSS,用户可以搭建出各种个人和企业数据备份、业务数据应用等基于大规模数据存储的服务。同时OSS还可以与其他组件搭配使用,广泛应用于海量数据存储与备份,数据加工与处理,内容加速分发,业务数据挖掘等多种业务场景。

    1.架构设计

    基于对OSS的要求,我们设计的架构如下图所示:

     

    我们采用了HBase+Ceph来进行底层存储,对于小于1MB的数据进入HBase,对于大于1MB的数据进入Ceph,同时数据通过Tomcat提供对外服务。基于上面的架构,我们的OSS可以实现以下的性能目标。

    1.1 高吞吐性

    OSS的底层存储充分利用各组件的性能优势,来使整个集群可以达到较高的吞吐量。

    HBase(Hadoop Database),是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。对于小于1MB的文件写入HBase是一个很棒的设计。

    那么大于1MB的文件,我们存入哪里呢?有这么几种方案可供我们选择,比如Hadoop,FastDFS,Ceph等组件。我们最终选择了Ceph做大文件存储。

    Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。Ceph的开发目标可以简单定义为以下三项:

    • 可轻松扩展到数PB容量

    • 支持多种工作负载的高性能

    • 高可靠性

    1.2 高可用性

    高可用性对文件存储系统是极为重要的,因为数据是极为宝贵的,如果数据在OSS中很容易丢失或者不可靠,那么它的存在意义就不大了。

    对于OSS的高可用,我们早就做了深思熟虑的思考。HBase的数据最终存储HDFS中,而HDFS是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(DistributedFile System)。我们可以通过定义它的多副本机制来达到它的高可用性。

    和HBase类似,Ceph也可以通过多副本机制来实现它的高可用性。

    同时,我们可以定义存储的文件的过期时间来避免存储的文件无限增长,在我们的应用中,默认设置为90天。

    1.3 可扩展性

    当系统的吞吐量越来越大,或者存储容量以及快达到OSS所能承受的流量瓶颈时,我们可以通过横向扩展相关组件来应对流量的变化。

    对于直接对外提供Rest接口的Tomcat服务,如果单Tomcat服务器达到性能瓶颈时,我们可以增加Tomcat服务器来进行横向扩展,同时为了对外提供统一的网关,我们增加了LVS+Keepalived这一层来实现,如下图所示:

     

    正常情况下,LVS使用DR模式代理若干台Tomcat服务器,keepalived是实现LVS的高可用的。当其中一台LVS出现故障下线后,keepalived通过虚拟IP技术快速切换到另外一台可用的LVS上。

    另外对于HBase和Ceph的扩展性是简单易于实现的,只需要增加待扩展的机器,进行相关配置,即可快速加入集群,相应的数据也会进行rebalance。

    1.4 限流算法

    在上面的功能概览中简单的说明了在某些场景中我们需要进行流量限制,那么这里将详细介绍限流的原理。

    在OSS中,我们使用Guava的RateLimiter作为限流的组件。Guava的RateLimiter的限流方式有两种:漏桶算法和令牌桶算法。我们采用的是令牌桶算法。

    对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。如图所示,令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。

    我们的OSS就是采用令牌桶的方式来对流量进行限制的,当客户端以某一稳定的速率来向OSS写入的时候,系统是稳定的并且大多数的时候是这样的。但是我们有时需要应对流量峰值,这个时候超过我们规定的流量就会被限制。现在问题来了,被限制的流量如果直接丢弃,那么可能重要的文件被丢弃,这样显然不符合我们对OSS定位为高可用存储系统的要求。于是在限流的逻辑中我们加入了以下处理流程:当流量达到系统的瓶颈时,我们将被限流的流量写入kafka,等到系统负载降低的时候,再从kafka中读取这部分流量重放至OSS,这样既保证了OSS的稳定性,又解决因限流带来的数据丢失问题。

    2.功能概览

    2.1 文件上传

     

    客户端以RESTFul接口方式向OSS服务器发送上传文件的请求,OSS将文件存储到HBase或Ceph中,然后向客户端返回存储的状态。

    我们将文件名作为存储的唯一标识,这样设计的好处有两点,第一,我们不需要返回用户文件在OSS服务器的存储路径;第二,也可以避免同名文件反复上传。

    2.2 文件下载

     

    客户端以RESTFul接口方式带上需要查询的文件名请求OSS服务器,OSS根据文件名查询对应的文件,返回请求客户端。

    2.3 流量限制

    流量限制是以一种被动的方式来对流量进行控制的方式。我们可以通过压力测试来粗略估计OSS所能承受的最大压力,然后在配置文件中配置限流的数值。这里要注意的是,需要根据业务的特点对限制的流量进行处理,其一,可以完全丢弃掉被限制的流量;其二,也可以对限制的流量进行相应的处理。

    3.场景分析

    现以公司某项目做讲解来进一步说明OSS在项目中的实际应用以及最佳实践。

    3.1 项目的现状

    3.1.1 流量情况

    以中期某城市交付为基准:每秒约120Gb流量,每天1.5亿个文件,每秒大概1800个文件。

    其它各分中心的数据均为上述城市的倍数,比如A中心的比例系数为33.33,那么它每秒的流量约4000Gb,每天约34亿个文件,每秒大概6万个文件,以此类推。

    3.1.2 单机性能

    目前单机Tomcat能支撑最大12000TPS,对于各中心每秒的数据量,单机显然不能支撑这么大的数据量,我们需要采用Tomcat集群来支撑这么大的数据流量。

    3.1.3 流量峰值

    在进行机器数以及相关硬件进行评估时,需要考虑流量峰值的情况,我们一般以正常流量的2到3倍来进行规划,比如,某个分中心的流量为每秒1300Gb,那么我们设计时就需要考虑峰值的情况,也就是最大能支撑每秒3900的流量。

     

    3.2 集群的设计目标

    基于上面描述的项目现状,经过分析,我们的整个OSS集群需要实现以下设计目标:

    • 各中心采用Tomcat集群来支撑数据流量

    • 各中心的流量均衡打到每台Tomcat服务器

    • 负载均衡设备的高可用

    • 存储服务的稳定性

    3.3 最佳实践

    3.3.1 如何保证Tomcat单机的性能最优

    我们主要从以下几个方面来优化Tomcat的性能:

    1)JVM内存大小

    2)最大线程数(maxThreads)

    3)最大连接数(maxConnections)

    4)全连接队列长度(acceptCount)

    我们选用单台机器来测试Tomcat的性能,硬件配置如下:

    CPU(Product Model)

    CPU(Core)

    Mem(GB)

    HardDisk(Type)

    HardDisk(RPM)

    E5-2620 v2

    24

    64

    SATA

    7200

    Tomcat的版本选用8.5.43。

    测试的目标:

    • 单台Tomcat支持的最大并发数

    • 单台Tomcat支持的最大TPS

    • NIO模型和APR模型的性能对比

    测试工具使用:ApacheBench。

    我们使用对比测试的方法,分别测试在上传1KB,10KB,100KB,1M,10M,100M的时候,Tomcat各项指标的数值。

    Tomcat配置:maxThreads=100,minSpareThreads=10,acceptCount=102400,maxConnections=1000000,acceptorThreadCount=2

    JVM配置:-Xmx16384m -Xms16384m

    -Xmn1024m -XX:+UseConcMarkSweepGC 

    -XX:MaxPermSize=256m

    1、使用NIO模型的测试结果如下:

    文件大小

    并发数

    TPS

    成功率

    1KB

    100

    30173.99

    100%

    1KB

    400

    31222.82

    99.99856%

    10KB

    100

    25351.94

    100%

    10KB

    400

    25931.42

    99.99889%

    100KB

    400

    11399.33

    100%

    100KB

    600

    11266.33

    99.99997%

    1MB

    500

    1091.73

    100%

    1MB

    700

    1094.17

    100%

    10MB

    20

    58.64

    100%

    10MB

    40

    59.17

    100%

    100MB

    2

    4.20

    100%

    100MB

    50

    4.13

    100%

    根据以上测试结果可得出以下结论:

    1)在上传相同文件大小的情况下,随着并发数的增大,会出现一定的丢包情况;

    2)在相同并发量的情况下,随着上传文件大小增大,吞吐量会随之下降。

    2、使用APR模型的测试结果如下:

    文件大小

    并发数

    TPS

    成功率

    1KB

    100

    31192.96

    100%

    1KB

    200

    31222.82

    99.99856%

    10KB

    300

    24777.20

    99.99739%

    100KB

    500

    10820.51

    99.992275%

    1MB

    500

    912.60

    100%

    10MB

    20

    69.72

    100%

    100MB

    2

    5.35

    100%

    根据以上测试结果以及对比NIO模型的测试结果,我们可以得出以下结论:

    1)小文件上传APR模式不如NIO模式,大文件上传APR模式要好于NIO模式;

    2)随着并发的增加,TPS先增加后减少,平均响应时间不断增加;

    3)小文件应该关注TPS,大文件应该关注平均响应时间;

    4)小文件TPS大概在2万到3万之间,能接受的并发在300到500之间。

    3.3.2 如何保证HBase存储的稳定性

    HBase以高吞吐著称,那么我们应该如何在保证高吞吐的情况下,能保证稳定的存储。主要应该关注两个点:

    1)GC的次数以及停顿时间;

    2)HBase的compaction机制。

    3.3.2.1 GC调优

    由于HBase是使用Java编写的,所以垃圾收集(GC)对HBase的影响也是很大的,我们需要适当调整GC相关的参数,使得HBase能达到较好的性能和稳定的运行。在JVM中,有很多种垃圾收集器,我们在项目中使用的是CMS GC,下面首先介绍CMS GC的工作原理,再详细说明调优的相关细节。

    3.3.2.2 GC调优目标

    在介绍具体的调优技巧之前,有必要先来看看GC调优的最终目标和基本原则:

    1)平均Minor GC时间尽可能短;

    2)CMS GC次数越少越好。

    3.3.2.3 HBase 场景内存分析

    一般来讲,每种应用都会有自己的内存对象特性,分类来说无非就两种:一种是对象的生存期较短的工程,比如大多数的HTTP请求处理工程,这类的对象可能占到所有对象的70%左右;另一种是对象生存期居多的工程,比如类似于HBase,Flink等这类大内存工程。这里以HBase为例,来看看具体的内存对象:

    1)RPC请求对象

    2)Memstore对象

    3)BlockCache对象

    因此可以看到,HBase系统属于对象生存期居多的工程,因为GC的时候只需要将RPC这类对象生存期较短的Young区淘汰掉就可以达到最好的GC效果。

    在HBase优化中比较关键的两个GC的参数。

    1)年轻代Young区的大小;

    2)年轻代Young区中的Survivor区的大小以及进入老年代的阈值。

    3.3.2.4 生产环境中的GC配置

    假设我们机器的物理内存是80G,所以根据上面的分析,我们可以对相关的参数做如下配置:

    1)缓存模式采用BucketCache策略Offheap模式

    2)内存我们采用如下配置:

    -Xmx64g -Xms64g -Xmn4g -Xss256k 

    -XX:MaxPermSize=512m

    -XX:SurvivorRatio=2 

    -XX:+UseConcMarkSweepGC 

    -XX:+UseParNewGC

    -XX:+CMSParallelRemarkEnabled 

    -XX:MaxTenuringThreshold=15

    -XX:+UseCMSCompactAtFullCollection

    -XX:+UseCMSInitiatingOccupancyOnly       

    -XX:CMSInitiatingOccupancyFraction=75

    -XX:-DisableExplicitGC

    3.3.3 如何保证大流量情况下系统稳定运行

    流量限制是以一种被动的方式来对流量进行控制的方式。我们可以通过压力测试来粗略估计OSS所能承受的最大压力,然后在配置文件中配置限流的数值。这里要注意的是,需要根据业务的特点对限制的流量进行处理,其一,可以完全丢弃掉被限制的流量;其二,也可以对限制的流量进行相应的处理。

    4.OSS监控

    OSS在运行过程中,我们需要了解相关的监控信息,比如每种文件类型在一段时间的占比,或者在一段时间的网络吞吐量等等,下面就来一一介绍我们是如何来对OSS进行监控的吧。

    4.1 以文件类型划分的指定时间段内的总存储占比

     

    该图表用于统计当前OSS中各文件类型存储的占比。

    4.2 以文件类型划分的指定时间段内的文件数量占比

     

    该图表用于统计当前OSS中各文件类型数量的占比。

    4.3 OSS服务指定时间段内的网络吞吐量

     

    该图表用于统计OSS的吞吐量。

    4.4 OSS服务指定时间段内的每秒并发处理数(TPS)

     

    该图表用于统计当前OSS的负载情况。

    5.结语与展望

    我们认为,OSS一定会成为一个集安全性、可靠性于一体的底层存储服务。基于OSS,在公安领域可以存储天网中的卡口和视频数据,并与公安内部的其他应用形成一个基于高可用存储、多方向应用的解决方案;在社会治理方面,可以存储网络上的各种类型的数据,包括文字、音频以及视频,通过使用人工智能分析其中的关联性,为社会提供更安全的保证。

    展开全文
  • 2.在产品种开通Oss服务 3.创建bucket java后端代码逻辑 1.使用springboot开发导入oss相关依赖和日期工具依赖 <!-- 阿里云oss依赖 --> <dependency> <groupId>com.aliyun.oss</groupId> &...
  • 时间:2006-05-29 [作者:中国电信集团广州研发中心 赵平]
  • 本文分析了电信运营商OSS面临的问题,从云计算技术产业链和云计算案例多角度分析了OSS引入云计算技术的可行性,给出OSS系统引入云计算的原则和措施,并给出远期目标框架和近期技术引进方案,最后叙述了引入云的风险...
  • 中国电信北方九省OSS系统技术方案,对进行BOSS系统开发设计提供借鉴。
  • oss上传文件以及jar包

    2017-08-18 09:16:43
    使用oss技术上传文件
  • 和空间位置有关的服务均可引入GIS技术,可提高OSS/BSS的服务效率和服务质量。结合GIS技术的发展趋势和OSS/BSS的相关理论,总结了GIS 技术OSS/BSS 中的各种应用,针对GIS 平台在电信行业运营中存在的问题进行剖析,...
  • 20160826 OSS云存储技术

    2017-08-31 11:16:35
    OSS 云存储技术 将大的文件资源存入第三方,云存储,半分布式 阿里云存储 七牛云存储 用web程序进行访问 例如:阿里云存储 产品 -> 存储 -> 对象存储OSS 获取Bucket信息 访问域名 上传文件:简单上传,表单上传,断点续...
  • 本文在分析了OSS集团-省两级互联体系紧迫性和必要性的基础上,给出了OSS两级互联架构,并重点给出了统一组织员工、全网业务语言标准化、接口服务的智能管理等实现OSS纵向贯通的关键技术,有力保障了"开通激活快捷、...
  • OSS

    2009-05-21 10:20:19
    运营支撑系统(OSS),是一个综合的业务运营和管理平台,同时也是真正融合了传统IP数据业务与移动增值业务的综合管理平台。哦OSS是电信运营商的一体化、信息资源共享的支持系统,它主要由网络管理、系统管理、计费、...
  • QoS保证是LTE网络的重要组成部分...理清了承载标识、属性描述、承载绑定和性能测量的内涵及其对应关系,指出了实现端到端分业务的资源关联和性能统计的基本方法,可为建立支持LTE QoS保证的运营支撑系统提供技术参考。
  • 4种OSS的应用架构及核心技术

    千次阅读 2017-08-29 09:04:56
    架构描述:OSS作为文件存储源,用户上传下载数据均经过ECS与OSS通信。 解决用户问题:文件空间大,ECS磁盘存储空间有限;多ECS间无法同步数据。 适用场景描述:文件较多,但文件调用次数少,对ECS资源压力较小...
  • 提升 10 倍!阿里云对象存储 OSS 可用性 SLA 技术揭秘.pdf
  • OSS 监控

    2018-10-25 15:15:28
    OSS 和云监控是两个独立的产品,但是 OSS 控制台上看到的存储容量监控以及贷款流量监控来自于云监控产品的数据。 OSS 的监控数据延迟 2-3 小时,同时云监控在采集 OSS 数据时存在窗口期,比如 5 分钟,如果超过窗口...
  • OSS 咨询

    2018-10-29 20:48:46
    本章介绍一些基本的 oss 的咨询内容,问题是一直在补充的,不定期的进行更新; 问:cdn 结合 ossoss 地址被暴露后如何处理 答: 暴露后无法组织别人访问你,先将 bucket private 设置为私有禁止读写。 在阿里 cdn...
  • OSS初识

    2018-02-02 16:02:22
    当问了一系列之后,组长终于知道我是一个技术小白了。然后就给我分了一个看官方文档的任务。  于是开启了小白的OSS之路 一、什么是OSS  阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供...
  • 经过之前的学习,我们已经开通了阿里云OSS服务并配置了测试账号权限,接下来就可以开始学习OSS的基本API了。 如何快速的掌握使用一门技术? 快速掌握使用一门技术,是每个程序员都要掌握的基本能力。一般只需要做到...
  • 下面介绍几个在进行音频编程时经常需要用到的技术指标: 采样频率  采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。采样频率的选择应该遵循奈奎斯特(Harry Nyquist)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,089
精华内容 11,235
关键字:

oss技术