精华内容
下载资源
问答
  • 一、人脸识别技术基本认识 1、文献综述基本认识 本节来源于:人脸检测深度学习 关于人脸检测算法的文献 总结: 商用算法总结: 列举出共十七项商用算法,百度IDL提出DenseBox第三版(加粗蓝色)是...

    一些经验记录:
    经过我的实践证明,不管人脸库多大,都不要用svm或者knn去分类,相似度搜索是保证准确率的前提(某weixin群大佬如是说)

    一、人脸识别技术基本认识

    1、文献综述与基本认识

    本节来源于:人脸检测与深度学习

    关于人脸检测算法的文献 总结:
    这里写图片描述

    商用算法总结:
    这里写图片描述
    列举出共十七项商用算法,百度IDL提出DenseBox第三版(加粗蓝色)是性能最优算法。表中有十项是基于深度学习方法的人脸检测算法(加底纹),这些算法普遍比传统算法提高了十几个百分点,在误检数限制为10的情况下(基本没有误检),准确率仍能达到75%-80%,甚至有88.43%之高。在上述两表中提到的文献算法和商用算法只是为了说明深度学习方法的优势,然而相比于人脸比对评测集中许多公司刷到的99.00%+来说,FDDB人脸检测评测集还远未达到顶点(目前最高97.31%),虽然只有仅仅两个百分点左右的差距,如果用比较相似的额外数据作训练集,完全能够刷出更高的分数,但是对于算法研究和实际应用却是极难突破的,因为实际遇到的情况远比FDDB测试集上的复杂多变,随着深度学习和机器视觉技术的发展,我们可以用更好的策略、更优的特征学习、更深的网络将非约束情况下的人脸检测性能逐步提高。

    专利情况
    这里写图片描述
    .

    2、人脸检测过程

    要实现这个过程,我们需要完成下面几个关键技术的分析:

    (1)人脸检测:检测到图像中的人脸区域,快速定位。
    (2)人脸识别:识别人的身份。
    (3)人脸跟踪:定位并跟踪视频中的人脸。
    (4)姿态估计:得到人脸方向和眼睛注视位置。
    (5)表情识别:识别人的面部表情。

    检测人脸相对应的参数有:检测参数:年龄,胡须,表情,性别,眼镜,人种
    参考了 赵丽红《人脸检测方法综述》

    来源于:如何定位图像中的人脸位置?

    .


    **公众号“素质云笔记”定期更新博客内容:**
    ![这里写图片描述](https://img-blog.csdn.net/20180226155348545?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjY5MTczODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

    二、人脸识别难点与传统方法介绍

    极市平台:人脸检测与识别的趋势和分析

    1、人脸识别出现的问题

    Ø 图像质量

    人脸识别系统的主要要求是期望高质量的人脸图像,而质量好的图像则在期望条件下被采集。图像质量对于提取图像特征很重要,因此,即使是最好的识别算法也会受图像质量下降的影响;

    Ø 照明问题

    同一张脸因照明变化而出现不同,照明可以彻底改变物体的外观;

    Ø 姿势变化

    从正面获取,姿势变化会产生许多照片,姿态变化难以准确识别人脸;

    Ø 面部形状/纹理随着时间推移的变化

    有可能随着时间的推移,脸的形状和纹理可能会发生变化;

    Ø 相机与人脸的距离

    如果图像是从远处拍摄的,有时从较长的距离捕获的人脸将会遭遇质量低劣和噪音的影响;

    Ø 遮挡

    用户脸部可能会遮挡,被其他人或物体(如眼镜等)遮挡,在这种情况下很难识别这些采集的脸。

    人脸尺度多变、数量冗大、姿势多样包括俯拍人脸、戴帽子口罩等的遮挡、表情夸张、化妆伪装、光照条件恶劣、分辨率低甚至连肉眼都较难区分等

    这里写图片描述

    2、人脸检测传统方法介绍:

    • 1、基于Adaboost人脸检测

    Adaboost人脸检测算法,是基于积分图、级联检测器和Adaboost算法的方法,该方法能够检测出正面人脸且检测速度快。其核心思想是自动从多个弱分类器的空间中挑选出若干个分类器,构成一个分类能力很强的强分类器。
    缺点:而在复杂背景中,AdaBoost人脸检测算法容易受到复杂环境的影响,导致检测结果并不稳定,极易将类似人脸区域误检为人脸,误检率较高。

    • 2、基于特征的方法(引用“Summary of face detection based on video”)

    基于特征的方法实质就是利用人脸的等先验知识导出的规则进行人脸检测。

    ① 边缘和形状特征:人脸及人脸器官具有典型的边缘和形状特征,如人脸轮廓、眼睑轮廓、虹膜轮廓、嘴唇轮廓等都可以近似为常见的几何单元;

    ② 纹理特征:人脸具有特定的纹理特征,纹理是在图上表现为灰度或颜色分布的某种规律性,这种规律性在不同类别的纹理中有其不同特点;

    ③ 颜色特征:人脸的皮肤颜色是人脸表面最为显著的特征之一,目前主要有RGB,HSV,YCbCr,YIQ,HIS等彩色空间模型被用来表示人脸的肤色,从而进行基于颜色信息的人脸检测方法的研究。

    • 3、 基于模板的方法

    基于模板匹配的方法的思路就是通过计算人脸模板和待检测图像之间的相关性来实现人脸检测功能的

    • 4、基于统计理论的方法

    基于统计理论的方法是指利用统计分析与机器学习的方法分别寻找人脸与非人脸样本特征,利用这些特征构建分类,使用分类进行人脸检测。它主要包括神经网络方法,支持向量机方法和隐马尔可夫模型方法。基于统计理论的方法是通过样本学习而不是根据人们的直观印象得到的表象规律,因此可以减小由于人眼观测不完整和不精确带来的错误而不得不扩大检测的范围,但是这种方法需要大量的统计特性,样本训练费时费力。

    以上也都是通过快速阅读得到的一些结论,大部分都是直接引用文章作者的语句。其中在这些方法中,都有很多改进,比如PCA+Adaboost,HMM等。

    • 5、神经网络

    现在流行了DL架构,打破了人类的极限,又将检测,识别,跟踪等技术上升到另一个高度。
    模型有:RCNN、RINN、PCA & ANN、Evolutionary Optimization of Neural Networks、Multilayer Perceptron (MLP)
    可参考论文:《Recent Advances in Face Detection》

    .


    延伸一:Facebook的DeepFace

    DeepFace是FAIR开发的一套人脸识别系统,主要应用卷积神经网络来提取人脸特征完成识别。现在Facebook用户每天上传的图片数量达到了8亿张,拥有大量的数据供机器训练与学习。

    此外,Yann LeCun还提到了一项FAIR开发的,用于检测、分割、识别单张图像中每个物体的技术,比如在一盘菜里检测、分割、并识别出西兰花来、又或是在一堆羊群里分割出每只羊,其核心流程为以下三步

    • 1、使用DeepMask这个新型框架对物体进行检测与分割,生成初始对象掩膜(Mask,相当于一个覆盖区域);
    • 2、使用SharpMask模型优化这些对象掩膜;
    • 3、使用MutiPathNet卷积网络识别每个掩膜所框定的物体。

    MutiPathNet中使用了一种新型的对象实例分割(Instance Segmentation)框架:Mask R-CNN。它是Faster R-CNN的扩展形式,能够有效地检测图像中的目标,同时还能为每个实例生成一个高质量的分割掩膜(Segmentation Mask)。
    .

    延伸二:用Dlib 人脸识别实践

    参考:40行代码的人脸识别实践

    人脸检测解决的问题是确定一张图上有木有人脸,而人脸识别解决的问题是这个脸是谁的。可以说人脸检测是是人识别的前期工作。今天我们要做的是人脸识别。
    Dlib里面有人脸检测器,有训练好的人脸关键点检测器,也有训练好的人脸识别模型。今天我们主要目的是实现,而不是深究原理。
    girl-face-rec.py是我们的python脚本。shape_predictor_68_face_landmarks.dat是已经训练好的人脸关键点检测器。dlib_face_recognition_resnet_model_v1.dat是训练好的ResNet人脸识别模型。ResNet是何凯明在微软的时候提出的深度残差网络,获得了 ImageNet 2015 冠军,通过让网络对残差进行学习,在深度和精度上做到了比CNN 更加强大。
    .

    延伸三:用opencv检测人脸Cascade

    参考:用10行代码自己写个人脸识别程序
    github界面:https://github.com/CloudsDocker/pyFacialRecognition
    Classifer

    在机器深度学习领域,针对识别不同物体都有不同的classifier,比如有的classifier来识别洗车,还有识别飞机的classifier,有classifier来识别照片中的笑容,眼睛等等。而我们这个例子是需要去做人脸识别,因此需要一个面部识别的classifier。

    物体识别的原理

    一般来说,比如想要机器学习着去识别“人脸”,就会使用大量的样本图片来事先培训,这些图片分为两大类,positive和negative的,也就是分为包“含有人脸”的图片和“不包含人脸”的图片,这样当使用程序去一张一张的分析这些图片,然后分析判断并对这些图片“分类” (classify),即合格的图片与不合格的图片,这也就其为什么叫做 classifier , 这样学习过程中积累的"知识",比如一些判断时的到底临界值多少才能判断是positive还是negative什么的,都会存储在一个个XML文件中,这样使用这些前人经验(这里我们使用了 哈尔 分类器)来对新的图片进行‘专家判断’分析,是否是人脸或者不是人脸。

    Cascade

    这里的 Cascade是 层级分类器 的意思。为什么要 分层 呢?刚才提到在进行机器分析照片时,其实是对整个图片从上到下,从左到右,一个像素一个像素的分析,这些分析又会涉及很多的 特征分析 ,比如对于人脸分析就包含识别眼睛,嘴巴等等,一般为了提高分析的准确度都需要有成千上万个特征,这样对于每个像素要进行成千上万的分析,对于整个图片都是百万甚至千万像素,这样总体的计算量会是个天文数字。但是,科学家很聪明,就想到分级的理念,即把这些特征分层,这样分层次去验证图片,如果前面层次的特征没有通过,对于这个图片就不用判断后面的特征了。这有点像是系统架构中的 FF (Fail Fast),这样就提高了处理的速度与效率。

    import cv2,sys
    faceClassifier=cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # the HAAR cascade file, which contains the machine learned data for face detection
    objImage=cv2.imread(sys.argv[1]) # use cv2 to load image file
    cvtImage=cv2.cvtColor(objImage,cv2.COLOR_BGR2GRAY) # convert the image to gray scale
    foundFaces=faceClassifier.detectMultiScale(cvtImage,scaleFactor=1.3,minNeighbors=9,minSize=(50,50),flags = cv2.cv.CV_HAAR_SCALE_IMAGE) # to detect faces
    print(" There are {} faces in the input image".format(len(foundFaces)))
    for (x,y,w,h) in foundFaces:# to iterate each faces founded
    	cv2.rectangle(objImage,(x,y),(x+w,y+h),(0,0,255),2)
    cv2.imshow("Facial Recognition Result, click anykey of keyboard to exit", objImage) #show the image
    cv2.waitKey(0)
    

    延伸四:自编码器进行人脸数据降维

    参考实验楼实验:自编码器进行人脸数据降维
    虽然目前深度学习取得了非常不错的成果,但是由于网络结构复杂,训练非常耗时。而且目前要进行深度学习的分类训练需要大量的带标记数据,对这些数据进行标记是非常耗时耗人力的。因此我们可用无监督学习利用无标记数据提取特征,并且利用无标记数据基于无监督学习对数据进行降维后,结合有标记数据基于有监督学习进行分类训练,实现人脸识别,图像分类等任务。

    神经网络由两部分组成,第一部分为自编码器训练完毕后的编码部分,第二部分为有监督训练单层网络,在基于无监督学习的自编码器实现中我们已经详细地介绍过自编码器的原理,这里我们将运用其作为对人脸进行数据降维,再结合有监督学习结合有标记数据进行分类训练。

    自编码器结构:

    这里写图片描述

    .
    延伸五:利用opencv的CascadeClassifier

    7行Python的人脸识别

    import cv2
    
    face_patterns = cv2.CascadeClassifier('/usr/local/opt/opencv3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
    
    sample_image = cv2.imread('/Users/abel/201612.jpg')
    
    faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(100, 100))
    
    for (x, y, w, h) in faces:
        cv2.rectangle(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
    
    cv2.imwrite('/Users/abel/201612_detected.png', sample_image);
    
    • 第1行 引入 OpenCV

    开源是伟大的,使我们视野更开阔,而且不用重复造轮子。这里没有用PIL,再结合特定算法,而是直接使用了OpenCV(http://opencv.org)。OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上,轻量而且高效,用C/C++编写,同时提供了Python、Ruby、MATLAB等接口,实现了图像处理和计算机视觉方面的很多通用算法。

    • 第2行 加载分类器 cv2.CascadeClassifier

    CascadeClassifier是Opencv中做人脸检测时候的一个级联分类器,该类中封装的是目标检测机制即滑动窗口机制+级联分类器的方式。数据结构包括Data和FeatureEvaluator两个主要部分。Data中存储的是从训练获得的xml文件中载入的分类器数据;而FeatureEvaluator中是关于特征的载入、存储和计算。这里采用的训练文件是OpenCV中默认提供的haarcascadefrontalfacedefault.xml。至于Haar,LBP的具体原理,可以参考opencv的相关文档,简单地,可以理解为人脸的特征数据。

    • 第3行 加载目标图片 imread

    人脸识别系统一般分为:人脸图像采集、人脸图像预处理、人脸图像特征提取以及匹配与识别。 简化起见,之间读入图片,这是一张去年中生代北京闭门会的集体照。

    • 第4行 多尺度检测 detectMultiScale

    调用 CascadeClassifier 中的调detectMultiScale函数进行多尺度检测,多尺度检测中会调用单尺度的方法detectSingleScale。 参数说明:

    scaleFactor 是 图像的缩放因子
    minNeighbors 为每一个级联矩形应该保留的邻近个数,可以理解为一个人周边有几个人脸
    minSize 是检测窗口的大小
    这些参数都是可以针对图片进行调整的,处理结果返回一个人脸的矩形对象列表。

    • 第5行 和 第6行 为每个人脸画一个框

    循环读取人脸的矩形对象列表,获得人脸矩形的坐标和宽高, 然后在原图片中画出该矩形框,调用的是OpenCV的rectangle 方法,其中矩形框的颜色等是可调整的。

    • 第7行 保存检测后的结果

    万事具备了,调用imwrite,将检测后的结果保存到指定的位置。
    .
    延伸六:高效处理框架(人脸检测识别/关键帧/图片搜索等)

    Scanner: Efficient Video Analysis at Scale
    github地址:https://github.com/scanner-research/scanner
    视频中人脸识别、高效,而且开源
    .
    延伸七:人脸识别 + 手机推送,从此不再害怕老板背后偷袭!

    BossComing 项目地址:fendouai/BossComing

    技术介绍

    人脸识别技术

    face_recognition
    The world's simplest facial recognition api for Python and the command line
    ageitgey/face_recognition
    

    手机推送技术

    jpush-api-python-client
    JPush's officially supported Python client library for accessing JPush APIs.
    jpush/jpush-api-python-client
    

    依赖安装

    pip install face_recognition
    pip install jpush
    

    这里写图片描述

    python bosscoming.py
    

    体验人脸识别部分命令:

    python bosswatching.py
    

    打开电脑上摄像头,开始捕捉画面。然后调整角度,对准需要观察的位置。

    .

    延伸八:微动作模式(MAP)表达学习

    来源文章《深层网络面部表情的特征学习》
    面部动作编码(FACS)理论的关键成分是一个观察到的表情可以被分解成若干个局部外观的变化。为了学习高层表情具体特征,应该先编码这些后续使用的局部变化。考虑到AU的局部性,我们从所有的训练表情图像中密集采样大量的小块(即MAP原型),去共同表达由面部表情引起的所有局部变化。
    这里写图片描述

    提出了自动学习:
    (1)可提供信息的局部外观变化;
    (2)优化方法去结合局部变化;
    (3)最后表情识别的高层表达。

    所提出的AUDN由三个连续的模块组成,主要为微动作模式(MAP)表达学习、感受野构造和group-wise子网络学习。实验最后选择在CK+、MNI和SFEW三个表情数据库进行,学习的特征通过采用线性分类器,在所有数据库中都到达了优异的结果且验证了AUDN的有效性。
    .


    延伸九:深度卷积网络迁移学习的脸部表情识别

    基本数据库:
    主要根据四个面部表情数据库(CK+,JAFFE,KDEF和Pain expressionsform PICS)建立了一个面部表情数据库含有七个基本情绪状态和2062个不平衡样本。

    模型connets
    深度ConvNets由四个卷积层和最大池化层去特征提取,全连接的高层特征层和Softmax输出层预测识别类,具体如图1所示。
    这里写图片描述

    每一层的特征数量在减少,最后将高层特征层固定在120个特征,其可表达丰富的人脸信息。最后一个Softmax输出层全连接的高层特征预测1580个识别类。

    .


    延伸十:基于mtcnn和facenet的实时人脸检测与识别系统开发

    来源知乎
    文章的主要内容为:

    • 2,采用opencv2实现从摄像头读取视频帧;
    • 3,对读取的视频帧采用mtcnn方法,检测人脸;
    • 4,采用预训练的facenet对检测的人脸进行embedding,embedding成128维度的特征;
    • 5,对人脸embedding特征采用knn进行分类,实现人脸识别;
    • 6,结果与改进;
      其中截取感兴趣的一部分:

    facenet embedding
    Facenet是谷歌研发的人脸识别系统,该系统是基于百万级人脸数据训练的深度卷积神经网络,可以将人脸图像embedding(映射)成128维度的特征向量。以该向量为特征,采用knn或者svm等机器学习方法实现人脸识别。

    对人脸进行embedding后,得到128维度的特征向量 。

    其中faceNet的github(with Tensorflow r1.0):https://github.com/davidsandberg/facenet

    展开全文
  • 浅谈物联网的关键技术难点

    万次阅读 2017-10-30 14:19:41
    物联网中的核心关键技术  核心关键技术主要有RFID技术、传感器技术、无线网络技术、人工智能技术、云计算技术等。  1、RFID技术  是物联网中“让物品开口说话”的关键技术,物联网中RFID标签上存着规范...

    物联网中的核心关键技术

      核心关键技术主要有RFID技术、传感器技术、无线网络技术、人工智能技术、云计算技术等。

      1、RFID技术

      是物联网中“让物品开口说话”的关键技术,物联网中RFID标签上存着规范而具有互通性的信息,通过无线数据通信网络把他们自动采集到中央信息系统中实现物品的识别。

      

     

      2、传感器技术

      在物联网中传感器主要负责接收物品“讲话”的内容。传感器技术是从自然信源获取信息并对获取的信息进行处理、变换、识别的一门多学科交叉的现代科学与工程技术,它涉及传感器、信息处理和识别的规划设计、开发、制造、测试、应用及评价改进活动等内容。

      3、无线网络技术

      物联网中物品要与人无障碍地交流,必然离不开高速、可进行大批量数据传输的无线网络。无线网络既包括允许用户建立远距离无线连接的全球语音和数据网络,也包括近距离的蓝牙技术、红外技术和Zigbee技术。

      

     

      4、人工智能技术

      人工智能是研究是计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考和规划等)的技术。在物联网中人工智能技术主要将物品“讲话”的内容进行分析,从而实现计算机自动处理。

      5、云计算技术

      物联网的发展理离不开云计算技术的支持。物联网中的终端的计算和存储能力有限,云计算平台可以作为物联网的大脑,以实现对海量数据的存储和计算。

      

     

      物联网中的技术难点

      (1)数据安全问题

      由于传感器数据采集频繁,基本可以说是随时在采集数据,数据安全必须重点考虑。

      (2)终端问题

      物联网中的终端除了具有自己的功能外还有传感器和网络接入功能,且不同的行业千差万别,如何满足终端产品的多样化需求,对研究者和运营商都是一个巨大挑战。

    展开全文
  • PaaS作为一个综合性的平台,在以」容器+编排引擎」的基础上有诸多关键技术点和难点,本次主要以开源框架和一些市场产品为依托,主要讲述关键点的实现 1.容器技术的选择:容器技术是整个平台的基石,犹如开发web需要...

    PaaS作为一个综合性的平台,在以」容器+编排引擎」的基础上有诸多关键技术点和难点,本次主要以开源框架和一些市场产品为依托,主要讲述关键点的实现

    1.容器技术的选择:容器技术是整个平台的基石,犹如开发web需要选择开发语言一样,目前有docker和garden两种主流技术,自研技术选择时尽量选择技术相对成熟、企业应用案例相对较多、技术生态圈发展更多的技术,一般建议选择docker,如果华为的PaaS产品初期选择garden,目前也已转向了docker,docker已经成为一种事实上的标准。

    2.编排引擎的选择:编排引擎的选择一般会依赖容器技术路线的选择,比如docker容器可以选择kubernetes、swarm等框架,garden可以选择cloudfoundry,并且仅此选择。在BAT、华为、京东等互联网公司中,选择docker系的产品更多的选择了kubernetes,或许源于此框架出自google大家之手

    3.元数据存储的框架选择:由于整个PaaS的元数据需要一个高可用的存储结构,以便用作服务发现或共享元数据配置的相关元数据信息。基于zookeeper的性能和复杂性等问题考虑,更多的选择etcd框架进行使用,openshift、阿里等产品均采用了此框架

    4.PaaS容器网络的选择:容器的网络隔离是PaaS资源隔离的一个重要组成部分,每个容器的网络多采用内部SDN网络,SDN网络的实现技术各不相同,一般主要考虑因素是网络的性能和网络变化的灵活性等因素。开源kubernetes采用flannel框架,openshift的产品中考虑到网络性能等采用了openvswitch,京东在经过各种研究后采用了基于BGP路由方式的Calico

    5.日志框架的选择:在集群环境中如何管理不同节点的日志是一个重要的问题,并且目前有一套成熟的解决方案。ElasticSearch+Logstash+Kinana(ELK)已成为一种通用解决方案

    6.负载均衡的选择:负载均衡需要在容器集群的容器成员发生变化时能够自动感知和自动修改路由策略,硬件F5和软负载HAProxy、Nginx均可做负载均衡,鉴于HAProxy的灵活性,更多的产品或者企业落地均选择了HAProxy

    7.域名的使用:容器集群中的某个应用可以视作一个对外提供的服务,如果采用IP,一方面不方便记忆,一方面IP有可能改变,因此PaaS产品多采用泛域名的形式,将对外提供服务的IP地址和域名关联对应,然后再提供一个route记录对外提供服务的IP地址(frontend)和内部集群IP地址(backend),这样就可以实现从外部域名到内部集群IP地址的访问。

    PaaS平台的建设是一个长期的过程,需要不断持续的进行迭代优化,并且随着在PaaS之上运行应用系统的增多和使用经验的不断丰富,对PaaS平台会有更多深入的认知和体会。因此我们也希望论坛上从事这块研究和实践的朋友能够更多的进行技术交流,从而加深技术了解,让PaaS在企业内部更好的发挥其价值和优势。

    人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    IaaS vs PaaS vs SaaS:应该选择哪一个?
    http://www.duozhishidai.com/article-11312-1.html
    物联网4个领域的PaaS平台大盘点
    http://www.duozhishidai.com/article-10783-1.html
    五步实现云计算PaaS安全性
    http://www.duozhishidai.com/article-5319-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台

    展开全文
  • PaaS作为一个综合性的平台,在以”容器+编排引擎”的基础上有诸多关键技术点和难点,本次主要以开源框架和一些市场产品为依托,主要讲述关键点的实现 1. 容器技术的选择:容器技术是整个平台的基石,犹如...

    最近几年很多公司实现了从VMware等传统虚拟化到IaaS的转型,很多公司正在或者已经建立PaaS平台。那么从项目研发角度看,PaaS产品的系统功能应该主要涵盖哪些,又该如何更好的为应用研发人员服务呢?本文由云计算专家bryan根据社区活动中的分享交流所整理。


    一.PaaS建设的意义何在,能够给企业带来哪些价值?


    1.实现应用运行环境的标准化,提升交付速度:通过容器的镜像技术保证开发测试和生产等诸多标准化,避免因应用运行环境不一致带来的各种故障和问题,同时,通过服务编排实现运行环境的自动化运维和快速交付,避免传统方式的应用系统运行复杂、交付周期较长等问题;

    2.实现运维过程的高度自动化,降低运维成本:PaaS平台提供多种自动化运维工具管理应用集群系统,比如智能负载可以实时观测集群节点的变化并智能修改路由配置,自动伸缩可以实现不同业务负载下集群规模的自动调整等,多种管理功能的自动化减少人工运维工作量,节省运维成本;

    3.有效提升基础资源的管理水平和硬件利用效率:PaaS平台资源的容器是基于操作系统的虚拟化,与IaaS基础环境实现解耦,平台自身的实现多数是应用较广的开发框架和标准API,能够有效提升资源管理水平,有效避免厂商绑定;同时,合理调整单个操作系统之上容器密度的有效部署,可以更好提升资源使用率,降低硬件采购成本;

    4.有效实现软件研发的技术路径统一和把控研发质量:通过运行环境的标准化可真正做到全公司技术路线的精细把控,做到统一不同项目组的技术研发路线,通过部署工具的统一可以做到CI/CD思想的有效落地实施,有效提升软件研发过程的质量把控水平;

    5.有效提升公司IT架构治理:相较于传统开发运维各司其职的模式,PaaS能有效实现devops思维的落地实施,推动企业IT流程和人员架构的企业治理,更好的提升IT部门各个研发团队的整体技术水平,从而更好的响应业务需求。


    二. PaaS的主要技术有哪些?企业如何进行建设?


    PaaS主要以容器云形式实现,容器云依赖容器基础技术,目前常见的有Docker和garden两种类型,其中BAT、京东、华为和网易等互联网公司,还有一些大型商业银行更多的选择docker技术,当然也不乏garden成功案例,但较之docker案例相对较少。

    独木难成林,容器要云化形式提供服务,必须以多个容器形成集群的方式,此时如何管理和调度集群是一个重要的任务,这个任务由编排引擎进行实现,目前比较流行的有kubernetes、swarm等。因此“容器技术+编排引擎”构成了容器云最初始的框架,当然要达到企业级应用还需要做更多企业级的功能,所以就出现了诸如openshift、阿里飞天、华为等各种以开源软件为基础构建的多种产品。

    那么企业在建设云的过程中需要考虑几个问题:

    1)容器技术的选择:尽量选择市场比较流行的开源社区和生态发展比较完善的技术,编排引擎的框架选择遵循同样道理;

    2)建设模式:一种方式是购买产品进行企业落地化定制化,一种方式是基于开源框架自研,两种方式各有优劣,需要结合企业自身特点进行总体考虑;

    3)建设规划:PaaS的建设涵盖很多方面,甚至需要企业流程和企业IT架构的梳理和调整,因此对大中型企业来讲不可能一蹴而就,需要一个循序渐进的过程,这也与企业发展和自身技术特点有关系


    三. 容器云的负载均衡如何选择?


    负载均衡有硬件F5和软件HAProxy、nginx等。F5的特点是价格贵、性能好,一般在物理机和虚拟机化时间做LB;nginx是一款HTTP服务器和反向代理服务器,可以提供7层负载均衡能力,主要应用场景有web服务器、反向代理、负载均衡等

    HAProxy是一款专业的负载均衡软件,可提供4/7层负载均衡,比nginx负载均衡性能好,并发上也优于nginx。负载均衡的选择需要和企业自身特点和具体业务场景相关联,在PaaS的企业级产品中更多的选择HAproxy


    四. PaaS的日志和监控如何进行处理?


    PaaS平台的日志和监控和传统架构的管理方式没有本质区别。日志的获取或采用安装agent、或采用工具导出,业界已经都有很多成熟的产品和案例可以借鉴;监控分两部分,先要解决“监”的问题,同样也需要利用工具抓取信息,然后解决“控”,要么利用自动化运维的模式,要么采用手工的模式,目的其实一样,区别在于成本控制。

    PaaS可以从系统、网络、服务、应用监控4个层面入手:

    1.系统主要指底层基础资源,如磁盘、CPU、硬件或IaaS等基础资源

    2.网络一般采用SDN的方式实现,监控比较复杂,主要有连通性、流量、7层状态码等

    3.服务主要是指PaaS中的各种中间件服务服务,比如数据库服务、缓存服务、web应用服务等

    4.应用监控是最上层的也是非常重要的,比如应用服务质量、响应时间、请求成功率等


    五. PaaS如何更好的实现CI/CD,实现应用敏捷开发


    PaaS平台的一个核心理念是为应用提供各种基础中间件服务和进行应用集群的管理。devops是一种贯彻项目研发全生命周期的软件研发理论,打破传统的研发部门和运维部门泾渭分明的现象,尽量实现团队将研发和运维进行统一结合的模式,这种理念落地实施需要借助一定工具。CI是持续集成,可以实现代码自动化的静态检查、动态检查、安全检查和单元测试、集成测试等功能,从而实现代码的尽快尽早集成,减少后期发现问题的概率、降低项目风险;CD是持续部署或者持续发布,这种持续部署采用自动化工具,能够有效提高系统环境的部署效率和升级更新时业务的连续性。

    jenkins可视作一个平台,在这个平台中一方面可以用户定制各种插件,一方面可以将所有的工作以流程化的形式(pipeline)串联起来。这样可以将CI/CD的思维通过jenkins的落地实施来贯彻执行,同时CI/CD有多种自动化管理功能,而PaaS中的相关系统部署或者更新升级或者项目研发过程使用的环境都可以自动化,于是二者可以很好的进行关联。

    Devops理念的落地实现,可通过jinkins中配置自动化的CI/CD流程,更好的与PaaS进行深度集成,从而提高软件研发效率和软件研发质量。详情可以参考链接


    六. PaaS的研究过程中有哪些关键技术点和难点,一般市场是如何选择的?


    PaaS作为一个综合性的平台,在以”容器+编排引擎”的基础上有诸多关键技术点和难点,本次主要以开源框架和一些市场产品为依托,主要讲述关键点的实现

    1.容器技术的选择:容器技术是整个平台的基石,犹如开发web需要选择开发语言一样,目前有docker和garden两种主流技术,自研技术选择时尽量选择技术相对成熟、企业应用案例相对较多、技术生态圈发展更多的技术,一般建议选择docker,如果华为的PaaS产品初期选择garden,目前也已转向了docker,docker已经成为一种事实上的标准。

    2.编排引擎的选择:编排引擎的选择一般会依赖容器技术路线的选择,比如docker容器可以选择kubernetes、swarm等框架,garden可以选择cloud foundry,并且仅此选择。在BAT、华为、京东等互联网公司中,选择docker系的产品更多的选择了kubernetes,或许源于此框架出自google大家之手

    3.元数据存储的框架选择:由于整个PaaS的元数据需要一个高可用的存储结构,以便用作服务发现或共享元数据配置的相关元数据信息。基于zookeeper的性能和复杂性等问题考虑,更多的选择etcd框架进行使用,openshift、阿里等产品均采用了此框架

    4.PaaS容器网络的选择:容器的网络隔离是PaaS资源隔离的一个重要组成部分,每个容器的网络多采用内部SDN网络,SDN网络的实现技术各不相同,一般主要考虑因素是网络的性能和网络变化的灵活性等因素。开源kubernetes采用flannel框架,openshift的产品中考虑到网络性能等采用了open vswitch,京东在经过各种研究后采用了基于BGP路由方式的Calico

    5.CI/CD的工具选择:随着最近几年微软对docker技术的支持力度加大,各种产品,比如window server 2016、TFS等逐渐实现对docker的支持。TFS(team foundation server)的产品定位与jenkins类似。所以在CI/CD的技术落地过程中可以选择TFS或者jenkins,不过大家更广发的采用jenkins,并且有研发能力的均对其进行一定程度的插件研发和定制

    6.日志框架的选择:在集群环境中如何管理不同节点的日志是一个重要的问题,并且目前有一套成熟的解决方案。ElasticSearch+Logstash+Kinana(ELK)已成为一种通用解决方案

    7.负载均衡的选择:负载均衡需要在容器集群的容器成员发生变化时能够自动感知和自动修改路由策略,硬件F5和软负载HAProxy、Nginx均可做负载均衡,鉴于HAProxy的灵活性,更多的产品或者企业落地均选择了HAProxy

    8.域名的使用:容器集群中的某个应用可以视作一个对外提供的服务,如果采用IP,一方面不方便记忆,一方面IP有可能改变,因此PaaS产品多采用泛域名的形式,将对外提供服务的IP地址和域名关联对应,然后再提供一个route记录对外提供服务的IP地址(frontend)和内部集群IP地址(backend),这样就可以实现从外部域名到内部集群IP地址的访问。

    PaaS平台的建设是一个长期的过程,需要不断持续的进行迭代优化,并且随着在PaaS之上运行应用系统的增多和使用经验的不断丰富,对PaaS平台会有更多深入的认知和体会。因此我们也希望论坛上从事这块研究和实践的朋友能够更多的进行技术交流,从而加深技术了解,让PaaS在企业内部更好的发挥其价值和优势。

    展开全文
  • 在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法。...在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技术(有些地方也称
  • 由CSDN全力打造的“前端开发创新实践”线上峰会将于7月8日(周六)召开。峰会邀请到多位国内外知名企业前端技术专家,共话当前主流、热门前端技术,分享企业...分享内容涉及新技术的解析应用探索,让纠缠许多前...
  • 桔妹导读:滴滴导航是滴滴出行旗下基于丰富的交通大数据和领先的算法策略,面向网约车及自驾场景而打造的一款技术领先的地图产品。伴随着海量网约车司机每日8小时+的导航使用,产品积累了大量的反馈...
  • 在知识图谱关键技术概念工具的实践应用中,本课程也会讲解知识图谱的构建经验;以及达观在各行业领域系统中的产品开发和系统应用。 以下是公开课文本版整理 大家晚上好!我是达观数据的桂洪冠,负责达观的搜索...
  • ... 娱乐、社交、游戏、企业协作、教育、医疗,多媒体技术在这些领域扮演着越来越重要的角色,从用户体验,服务的稳定性,再到降低运营成本,离不开多媒体开发工程师的努力——高并发的视...
  • Photo by Lukas from Pexels语音技术的进步,让机器合成的声音不再顿挫、冰冷,在自然度和可懂度等方面取得了不错的成绩,但当前合成效果在合成音的表现力上,特别是语气和...
  • 从目前已经公开的资料来看,分布式服务化架构思想实践最早的公司应该是亚马逊。 2. 亚马逊如何做分布式服务架构的,遇到了哪些问题,以及是如何解决的? 亚马逊 CEO 杰夫·贝索斯(Jeff Bezos)就向全...
  • 深度学习的应用与实践

    千次阅读 2020-01-08 11:06:17
    深度学习中将声音转化为比特的目的类似于在计算机视觉中处理图像数据一样,转换为特征向量,图像处理不太一样的是需要对波(声音的形式)进行采样,采样的方式,采样点的个数和坐标也是关键信息,然后对这些数字...
  • 区块链关键技术研究进展

    千次阅读 2019-11-28 09:58:28
    本文介绍近年来区块链关键技术的发展现状和研究进展。首先从共识机制、互操作性、安全性、隐私保护和可监管性等方面介绍了区块链技术的现状和面临的挑战。然后重点从跨链通信技术、区块链智能合约、区块链安全性、...
  • 大数据平台建设关键技术

    千次阅读 2021-02-22 16:16:19
    平台关键技术设计 架构风格 云计算 Google在2006年率先提出“云计算”的概念。所谓“云计算”,是一种大规模的分布式模型,通过网络将抽象的、可伸缩的、便于管理的数据能源、服务、存储方式等传递给终端用户。...
  • 实时音视频技术难点及解决方案

    千次阅读 2018-07-29 15:29:30
    对于一个实时互动的音视频系统而言,存在很多技术难点,有几个比较重要的点: 首先是低延迟,如果要满足比较流畅地进行实时互动,那么单向的端到端的迟延大概要在400毫秒以下才能保证流畅沟通; 第二点就是流畅性,...
  • 思路本文将主要介绍高德在高精地图地面标识识别上的技术演进,这些技术手段在不同时期服务了高精地图产线需求,为高德地图构建高精度地图提供了基础的技术保证。1. 地面标识识别地面标识识别,指在地图道路中识别出...
  • 导读:滴滴导航是滴滴出行旗下基于丰富的交通大数据和领先的算法策略,面向网约车及自驾场景而打造的一款技术领先的地图产品。伴随着海量网约车司机每日8小时+的导航使用,产品积累了大量的反馈并持...
  • Kafka 入门与实践

    千次阅读 2018-04-12 10:44:14
    内容简介 本书以 Kafka 0.10.1.1 版本以基础,对 ...按照从抽象到具体、从点到线再到面的学习思维模式,由浅入深,理论与实践相结合,对 Kafka 进行了分析讲解。 本书中的大量实例来源于作者在实际工作中的实践,具...
  • 原文首发于微信公众号3D视觉工坊: 「3D视觉技术交流群」精华帖与关键问题 本文主要总结了「3D视觉技术交流群」自建立以来,星球内共发布交流过的技术帖及关键问题,以便大家回顾温习。 一 星球主题,主要包括: ...
  • 知识图谱关键技术及行业应用解读

    万次阅读 2017-06-20 15:49:36
    本文来自公众号PlantData知识图谱实战(ID:KGPlantData),内容整理自胡芳槐博士6月9日北理工知识图谱实战学习活动上分享的《知识图谱应用关键技术及行业应用》。 今天我要分享的主题是知识图谱应用关键技术及我们...
  • 服务运营(Service Operation)是为了交付已商定的服务给客户和用户,并且管理支持服务交付的应用、流程和技术,确保服务应用价值的实现。服务运营报告通过数据收集处理、趋势分析、事件管理、问题管理等方式为研发...
  • 大数据治理关键技术解析

    千次阅读 2017-06-30 12:04:26
    本篇文章通过分析大数据治理建设中的沟沟坎坎,总结出了大数据治理需要具备的能力和关键技术。 本文目录: 一、困难重重却充满光明的大数据治理发展之路 二、大数据治理技术需要不断革新 三、如何选择合适的大数据...
  • 并邀请专家陈星星撰写了《大数据时代背景教育企业的精准化和个性化管理及服务实践》(点击标题可阅读),为广大会员提供大数据应用相关实践借鉴,以下由陈星星将活动中提出的难点问题及解答进行总结,供更多读者参考...
  • 云计算PaaS层的技术难点解析

    千次阅读 2018-08-16 16:37:44
    最近几年很多公司实现了从VMware等传统虚拟化到IaaS的转型,很多公司正在或者已经建立PaaS平台。那么从项目研发角度看,PaaS产品的...实现应用运行环境的标准化,提升交付速度:通过容器的镜像技术保证开发测试和...
  • 5G 网络演进关键技术(1)——SR

    千次阅读 2020-04-24 18:26:44
    随着5G技术的逐步演进发展,近年来以IETF为代表的数据网研究和标准化机构,提出了许多新技术加以应对网络演进变化,不少技术已在实践应用中不断成熟,其中较为核心的包括分段路由(segment routing,SR)、以太网VPN...
  • 1 概述 ...鼓励各地加快推动开展云上创新创业,支持各类企业和创业者以云计算平台为基础,利用大数据、物联网、人工智能、区块链等新技术,积极培育新业态、新模式。 随着云计算的蓬勃发展,各个企业

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,482
精华内容 6,992
关键字:

关键技术与实践难点