精华内容
下载资源
问答
  • 专为一线技术从业者学习互联网支撑亿级流量场景的三高架构师课程 本课程内容包含 互联网的发展 架构师之路高可用15次改进方案讲解。 大型互联网系统一般有如下特点: 用户多,分布广:全球用户服务;用户分布范围广...
  • 专为一线技术从业者学习互联网支撑亿级流量场景的三高架构师课程本课程授课内容为互联网支撑亿级流量场景的三高架构师训练营之有状态-幂等-分布式事务讲解大型互联网系统一般有如下特点:用户多,分布广:全球用户...
  • 大数据时代的到来给电信运营商带来了更多的机会和挑战,为从日趋庞大的数据中快速提炼出有用...总结了移动互联网数据可视化新技术的特征,并结合多个移动互联网客户画像的典型场景,深入探讨数据可视化技术的实际应用。
  • 当前工业互联网平台初步形成四大应用场景: 1)是聚焦在设备、产线、车间等工业现场,通过对实时生产数据的分析与反馈来对整个生产过程进行优化; 2)是向上延伸到企业运营层面,利用平台来打通设计、管理、供应链等...

    工业互联网平台基于互联网、移动互联网、物联网、云计算、大数据、人工智能、区块链等技术,与制造企业上下游融合,实现工业现场的生产过程、企业运营的管理决策、社会化生产的资源配置、产品全生命周期的管理与服务的协同优化,真正帮助企业创造价值,实现企业智能化转型升级。

     

    当前工业互联网平台初步形成四大应用场景:
    1)是聚焦在设备、产线、车间等工业现场,通过对实时生产数据的分析与反馈来对整个生产过程进行优化;
    2)是向上延伸到企业运营层面,利用平台来打通设计、管理、供应链等各环节数据,并基于大数据挖掘分析实现管理决策优化;
    3)是在整个产业层面,将供需信息、制造资源、创新资源汇聚到平台中,通过基于数据分析的重新组织,实现资源优化配置与协同;
    4)是从产品全生命周期流程入手,在平台中进行产品设计、生产、服务等数据的集成管理和优化应用。

     

    1、面向工业现场的生产过程优化的应用场景:聚焦在设备、产线、车间等工业现场,有效采集和汇聚设备运行数据、工艺参数、质量检测数据、物料配送数据和进度管理数据等生产现场数据,通过对实时生产数据的分析与反馈来对整个生产过程进行优化。
    2、面向企业运营的管理决策优化的应用场景:可打通生产现场数据、企业管理数据和供应链数据,提升决策效率,并基于大数据挖掘分析实现管理决策优化。
    3、面向社会化生产的资源优化配置与协同的应用场景:可实现制造企业与外部用户需求、创新资源、生产能力的全面对接,通过数据分析推动设计、制造、供应和服务环节的协同优化。
    4、面向产品全生命周期的管理与服务优化的应用场景:从产品全生命周期流程入手,将产品设计、生产、运行和服务数据进行全面集成管理和优化应用,在设计环节实现可制造性预测,在使用环节实现健康管理,并通过生产与使用数据的反馈改进产品设计。

     

    1、在工业现场的生产过程优化场景中,通过对工艺参数、设备运行等数据进行综合分析,找出生产过程中的最优参数,提升制造品质;通过对生产进度、物料管理、企业管理等数据进行分析,提升排产、进度、物料、人员等方面管理的准确性;通过产品检验数据和“人机料法环”等过程数据进行关联性分析,实现在线质量监测和异常分析,降低产品不良率;通过设备历史数据与实时运行数据构建数字孪生,及时监控设备运行状态,并实现设备预测性维护;通过现场能耗数据的采集与分析,对设备、产线、场景能效使用进行合理规划,提高能源使用效率,实现节能减排。
    2、在企业运营的管理决策优化场景中,通过实时跟踪现场物料消耗,结合库存情况安排供应商进行精准配货,实现零库存管理,有效降低库存成本;通过进行业务管理系统和生产执行系统集成,实现企业管理和现场生产的协同优化;通过对企业内部数据的全面感知和综合分析,有效支撑企业智能决策。
    3、在社会化生产的资源优化配置与协同场景中,通过有效集成不同设计企业、生产企业及供应链企业的业务系统,实现设计、生产的并行实施,大幅缩短产品研发设计与生产周期,降低成本;通过对外开放空闲制造能力,实现制造能力的在线租用和利益分配;通过企业与用户的无缝对接,形成满足用户需求的个性化定制方案,提升产品价值,增强用户粘性。
    4、在产品全生命周期的管理与服务优化场景中,通过借助标识技术记录产品生产、物流、服务等各类信息,综合形成产品档案,为全生命周期管理应用提供支撑;通过将产品/装备的实时运行数据与其设计数据、制造数据、历史维护数据进行融合,提供运行决策和维护建议,实现设备故障的提前预警、远程维护等设备健康管理应用;通过将产品运行和用户使用行为数据反馈到设计和制造阶段,从而改进设计方案,加速创新迭代。

    展开全文
  • 工业互联网平台是面向制造业数字化、网络化、智能化需求,构建基于海量数据采集、汇聚、分析的服务体系,支撑制造资源泛在连接、弹性供给、高效配置的工业云平台。其本质是通过构建精准、实时、高效的数据采集互联...

    工业互联网平台是面向制造业数字化、网络化、智能化需求,构建基于海量数据采集、汇聚、分析的服务体系,支撑制造资源泛在连接、弹性供给、高效配置的工业云平台。其本质是通过构建精准、实时、高效的数据采集互联体系,建立面向工业大数据存储、集成、访问、分析、管理的开发环境,实现工业技术、经验、知识的模型化、标准化、软件化、复用化,不断优化研发设计、生产制造、运营管理等资源配置效率,形成资源富集、多方参与、合作共赢、协同演进的制造业新生态。

    工业互联网平台需要解决多类工业设备接入、多源工业数据集成、海量数据管理与处理、工业数据建模分析、工业应用创新与集成、工业知识积累迭代实现等一系列问题,涉及七大类关键技术,分别为数据集成和边缘处理技术、IaaS 技术、平台使能技术、数据管理技术、应用开发和微服务技术、工业数据建模与分析技术、安全技术。

    工业互联网平台按层级分第一层是边缘,此层是通过大范围、深层次的数据采集,以及异构数据的协议转换与边缘处理,构建工业互联网平台的数据基础。一是通过各类通信手段接入不同设备、系统和产品,采集海量数据;二是依托协议转换技术实现多源异构数据的归一化和边缘集成;三是利用边缘计算设备实现底层数据的汇聚处理,并实现数据向云端平台的集成。

    边缘计算已在《小白聊智慧制造之十四:一文轻松读懂边缘计算》详述,本篇不再涉及,主要谈谈数据集成。

     

    一、设备接入方式

    我们经常看到通过物联网实现设备联网。但设备究竟是如何联网的却语焉不详。今天我们来探讨下设备究竟是如何联网的。

    设备接入是基于工业以太网、工业总线等工业通讯协议,以太网、光纤等通用协议,3G/4G/5G、NB-IOT等无线协议将工业现场设备接入到平台的边缘层。

    设备联网有两种方式:

    第一种方式:直接接入

    直接接入网络需要满足一个要求,即设备本身具备联网的能力或者在设备端加入2G、3G、NB-IOT等通讯模组。具备通讯功能的设备,可以直接接入网络。

    第二种方式:网关接入

    设备或终端本身不具有联网能力,这就需要再本地组网后,再统一通过网关再接入网络。如终端通过Zigbee\LORA等无线组网,然后设备再通过网关统一接入到网络上。常用到的本地无线组网技术有Zigbee\lora\Ble\MeoH\sub-1GHZ等等。

    二、网关

    1、什么是网关

    网关既然如此厉害,那么什么是网关呢?网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。

    2、网关的功能

    简单地来说,网关就是一个处于本地局域网与外部接入网络之间的智能设备。网关的主要功能是网络隔离、协议转换和适配、数据内外传输,还有一项功能在工业互联网平台中很重要,就是边缘计算,它占据了50%左右的计算。而边缘计算大部分是通过网关或网关服务器来完成的。具体来说,网关主要功能包括:

    1. 广泛的接入能力
    2. 网络隔离
    3. 协议转换能力
    4. 边缘计算

    3、网关工作过程(以例说明)

    以ZigBee为例来探讨下网关。ZigBee 因其低成本、低功耗、组网灵活等众多优势,成为工业无线通信技术中备受关注的技术之一。ZigBee 是一种低速网络,传输速度为10KB/S~250KB/S,多样的互联方式使得组网方式灵活而稳健。采用ZigBee 协议,应用于工业现场短距离的无线控制、监测、数据传输等的以太网协议转换,实现远程监控、远程数据交互等。

    可通过ZigBee 以太网网关直接访问或修改仪表数据,实现现场仪表的远程监控、远程诊断等当网关接入GPRS 或因特网后,无论你身处何地都可随时访问工业现场仪表数据,实现现场仪表的远程组态、远程诊断以及远程操作等功能,使世界范围内的不同传感监测网络可以信息共享。

    一个典型的网关架构图:

    当网关接收到一个正常发往本地IP 的以太网数据包后,经过协议判断送往上层UDP(TCP)处理,最后到网关的应用程序处理网关应用程序经过分析判断,确定需要转发给ZigBee 网络中的哪个节点,经过ZigBee 端的ARP 地址解析出对应的ZigBee 中的节点MAC地址,将相应的数据包送至该节点,完成一次数据通讯。同理,当ZigBee 端收到数据包后,通过同样的解析将数据包送至对应节点或设备实现ZigBee 节点的实时访问、修改、组态等。

    三、数据传输方式

    物联网的传输层主要负责传递和处理感知层获取的信息,分为有线传输和无线传输两大类,其中无线传输是物联网的主要应用。无线传输技术按传输距离可划分为两类:一类是以Zigbee、WiFi、蓝牙等为代表的短距离传输技术,即局域网通信技术;另一类则是LPWAN(low-power Wide-Area Network,低功耗广域网),即广域网通信技术。LPWAN又可分为两类:一类是工作于未授权频谱的LoRa、Sigfox等技术;另一类是工作于授权频谱下,3GPP支持的2/3/4/5G蜂窝通信技术,比如eMTC(enhanced machine type of communication ,增强机器类通信)、NB-IoT( Narrow Band Internet of Things ,窄带物联网)。

    局域网传输设备,应用于本地的连接技术,主要有BLE、Zigbee、Z-ware、NFC、Wifi/蓝牙等。

    广域网传输设备,应用于广域和远程数据的连接技术,主要有3G/4G/5G、Ethernet、LTE、eMTC、NB-IOT等。

    根据传输速率的不同,物联网业务可分为高速率、中速率及低速率业务。其中,高速率业务主要使用3G、4G 及WiFi技术,可应用于视频监控、车载导航等场景;中速率业务主要使用蓝牙、eMTC等技术,可应用于智能家居、储物柜等高频使用场景;低速率业务,即LPWAN(低功耗广域网),主要使用NB-IoT、LoRa、Sigfox及ZigBee等技术,可能应用于智慧停车、远程抄表等使用频次低的应用场景。

    根据麦肯锡咨询所调研的数据来看,全球物联网市场有大约60%以上都属于低速率业务,这类应用需要具有支持海量连接数、低终端成本、低终端功耗和超强覆盖等能力。由于自身的发展以及成本等问题,各个企业都在向低成本、低功耗等方向发展。而在低速率领域,中国电信企业如中国移动、中国电信等都主要以发展NB-IoT(窄带物联网)为主,而LoRa在中国电信类企业之外也是发展的重点。

    四、数据解析方式

    传感器和设备信息需要通过各种不同的协议实现数据接入的。协议转换分为两个方面。一方面运用协议解析、中间件等技术兼容ModBus、OPC、CAN、Profibus等各类工业通信协议和软件通讯接口,实现数字格式转换和统一。另一方面利用HTTP、MQTT等方式从边缘层将采集的数据传输到云端,实现数据的远程接入。

     

    在转换协议中,主要有协议即用于短距离设备连接的本地协议 Modbus 以及支持物联网进行远程全局通信的可扩展互联网协议“消息队列遥测传输 (MQTT)”

    ModBus

    ModBus首次出现于 1979 年,是连接行业设备实际使用的标准协议。 是一种纯粹的“软”协议,不依赖于任何通讯介质和通讯设备。ModBus 的核心是一个串行通信协议,采用主从模式,借助 RS-485,主从机之间的通信发生在指示功能码的帧中。 该功能码可识别要操作的功能,如读取独立输入;读取先进先出队列;或执行诊断函数。然后,从机根据收到的功能码进行响应,该响应较为简单,由一组字节指示。因此,从机可以是智能设备,也可以是只有一个传感器的简单设备。

    MQTT

    MQTT 是一个开放的轻量级机器对机器协议,专为物联网交互设计。 MQTT 网络包含一个 MQTT 经纪人 (broker),负责协调 MQTT 代理之间的交互。 代理是发布器,负责发布供用户使用的信息。MQTT支持传感器、设备和云之间安全交互。

    使用 Modbus 作为本地接口来管理设备,使用 MQTT 作为全局协议来扩展设备的范围,MQTT 和 Modbus 互相补充,实现IOT的互联互通。

    五、数据接入架构

    上图为数据接入架构图。设备或传感器的信息通过ModBus等协议将数据传输到网关,又通过MQTT等协议将数据传输到云平台,在云平台上进行数据解析与存储,再通过云计算成为管理和决策的重要依据。

    结语

    工业互联网平台,数据连接是第一步,是基础。基于海量工业数据的全面感知,通过端到端的数据深度集成构成网络的边缘层,再通过建模分析,实现智能化的决策与控制指令,形成智能化生产、网络化协同、个性化定制、服务化延伸等新型制造模式。

     

                                                                        欢迎转载,请注明出处:微信公众号:物联研究

     

    展开全文
  • 人脸识别技术场景应用

    万次阅读 2018-07-19 08:43:43
    人脸识别技术场景应用   1、人脸识别(FR技术)产品的优势 1)非接触: 人脸图像的采集不同于指纹、掌纹需要接触指掌纹专用采集设备,指掌纹的采集除了对设备有一定的磨损外,也不卫生,容易引起被采集者的...

    人脸识别技术场景应用

     

    1、人脸识别(FR技术)产品的优势

    1)非接触:

    人脸图像的采集不同于指纹、掌纹需要接触指掌纹专用采集设备,指掌纹的采集除了对设备有一定的磨损外,也不卫生,容易引起被采集者的反感,而人脸图像采集的设备是摄像头,无须接触。

    2)非侵扰:

    人脸照片的采集可使用摄像头自动拍照,无须工作人员干预,也无须被采集者配合,只需以正常状态经过摄像头前即可。

    3)友好:

    人脸是一个人出生之后暴露在外的生物特征,因此它的隐私性并不像指掌纹、虹膜那样强,因此人脸的采集并不像指掌纹采集那样难以让人接受。

    4)直观:

    我们判断一个人是谁,通过看这个人的脸就是最直观的方式,不像指掌纹、虹膜等需要相关领域专家才可以判别。

    5)快速:

    从摄像头监控区域进行人脸的采集是非常快速的,因为它的非干预性和非接触性,让人脸采集的时间大大缩短。

    6)简便:

    人脸采集前端设备——摄像头随处可见,它不是专用设备,因此简单易操作。

    7)可扩展性好:

    它的采集端完全可以采用现有视频监控系统的摄像设备,后端应用的扩展性决定了人脸识别可以应用在出入控制、黑名单监控、人脸照片搜索等多领域。

    2、FR三大识别场景

    1)人脸确认(1:1):

    (1)简介:

    将某人面像与指定人员面像进行一对一的比对,根据其相似程度来判断二者是否是同一人,相似 程度一般以能否超过某一量化阀值为依据。简单的说就是A/B两张照片比对,产生的计算数值是否达到要求。

    (2)产品应用:

    快速的人脸识别比对,移动支付认证、安全性身份核对、作为身份确认的一种新方式,比如考生身份确认、公司考勤确认、各种证件照和本人确认。

    (3)实际问题:

    产品在系统设计的逻辑上,需要先考虑调取已储存对象信息的先验条件。通过界面/语音的提示,使得待认证者预先知道自己正处于被核对的过程中,且已预先了解拟核对对象的身份。

    (4)比对来源的三种主要方式:

    1. 用户自传照片,比如支付宝的人脸比对,用户自传的照片最大的问题是照片质量的合格率太低,拍照的光线、角度等因素会导致采集源的质量下降,不利于后期的大批量人脸特征码管理。

    2. 使用身份证读卡器,读取身份证上的照片,遗憾的是这张照片2K的大小,不过也是目前用最多的源照片提取方式,比较适合签到场合。

    3. 使用公安部旗下NCIIC的人脸比对接口(注意,不是网纹照片接口,这个接口已经不对外),使用的是直接的人脸比对接口。

    2)人脸辨认(1:N):

    (1)简介:

    将某人面像与数据库中的多人的人脸进行比对,并根据比对结果来鉴定此人身份,或找到其中最相似的人脸,并按相似程度的大小输出检索结果。

    (2)产品应用:

    人脸开门、人脸检索,排查犯罪嫌疑人、失踪人口的全库搜寻、一人多证的重复排查等。

    (3)实际问题:

    1、走失儿童的项目中去: 这一类系统的部署需要两个条件:A. BCD基本库(比如1000万人) B. 强大的算法硬件

    2、零售店中的刷脸支付长江,需要用户预先输入全手机号,确定用户身份再进行人脸识别,将原本为1:N的问题转化为了1:1的问题。

    (4)产品难点:

    1、1:N中的N能够支持多大

    ① 场景多样化

    从一个班级百号人刷脸签到,到一个公司千号人的刷脸打卡,再到一个学校的几万人,一个四线城市几十 万人,一个一线城市的几千万人,难度是呈指数上升的。

    ② 公司实际情况

    目前各家公司的成熟人脸识别应用能够支持几万到几百万人不等的应用场景,而且还有一个错误率的概念。比如,公司宣称千万分之一的错误率的情况下(1/10000000),人脸通过率其实只有93%,这是因为很难做到一定不发生错误,而且每个人都能识别通过。(假如一家公司说自己能做到亿分之一的错误率,通过率能做到98%以上,多半是虚假宣传,在实际使用中是很难达到的)

    2、非配合场景

    在配合场景下:比如ATM机刷脸取款,用户会自主配合,将人脸以一个理想的角度通过识别。

    而在非配合应用场景下,比如监控视频下的人脸识别,追踪违法犯罪分子的身份信息,情况就要困难得多。这种情况下,用户脸部会发生角度偏大,遮挡,光线不可控等问题。

    3、跨人种,跨年龄识别问题

    研究发现,在一个数据集上训练好的模型,想到迁移到另外一个人种上,效果会出现较大程度的下降。另 外,人脸随着年龄的变化带来的改变也给人脸识别带来不小的挑战。

    要改善这样的问题,一个必要条件是需要建立一个足够完备的跨人种,跨年龄的人脸数据库;在国内的话,是 以汉族人为主,同时跨年龄的人脸数据库也比较难收集,需要不短的时间跨度。

    4、产品体验

    ① 近来备受关注的刷脸支付,很多时候都会要求用户输入全手机号,或手机号后四位,以缩小用户搜索库大 小,实际上这是比较影响体验的。

    ② 西安一高校晨读刷脸签到,由于系统实际响应匹配时间过长,导致学生排百米长队。

    3)多人脸检索(N:N):

    (1)简介:

    1:N同时作业就是N:N了,同时相应多张照片检索需求。

    (2)实际产品问题中:

    1、在视频级N:N的校验中,如果要提高通过率,很多时候是采取降低准确率的方式,降低算法队列数量;同样在一些比赛中为了降低误识率,大大提高了准确率,所以算法在校验的过程中必须遵循至少一个固定标准,追求的是速度效率还是最高准确率。

    2、视频流的帧处理所用,对服务器的计算环境要求严苛,目前的算法系统所支撑的输出率非常有限。

    主要的限制如下:

    海量的人脸照片解析需要大量运算(目前很少看到在采集端直接解析的,都是照片剪裁) 海量的人脸照片传输需要大量的带宽(常见的720布控摄像头抓取最小的人脸照片为20K) 海量的人脸照片在后台检索需要耗费大量的运算(国内主流主机为例,最多到24路摄像头

    3、产品实战中的物理问题:

    1)光照问题

    (1)简介:

    光照问题是机器视觉重的老问题,在人脸识别中的表现尤为明显。由于人脸的3D结构,光照投射出的阴影,会加强或减弱原有的人脸特征。

    (2)解决思路:

    A、对其进行包括光照强度和方向、人脸反射属性的量化,面部阴影和照度分析等,尝试建立数学模型,以利用这些光照模型,在人脸图像预处理或者归一化阶段尽可能的补偿乃至消除其对识别性能的影响,将固有的人脸属性(反射率属性、3D表面形状属性)和光源、遮挡及高光等非人脸固有属性分离开来。

    B、基于光照子空间模型的任意光照图像生成算法,用于生成多个不同光照条件的训练样本,然后利用具有良好的学习能力的人脸识别算法,如子空间法,SVM等方法进行识别。

    2)人脸姿态问题

    (1)简介:

    与光照问题类似,姿态问题也是目前人脸识别研究中需要解决的一个技术难点。姿态问题涉及头部在三维垂直坐标系中绕三个轴的旋转造成的面部变化,其中垂直于图像平面的两个方向的深度旋转会造成面部信息的部分缺失。针对姿态的研究相对比较的少,目前多数的人脸识别算法主要针列正面、准正而人脸图像,当发生俯仰或者左右侧而比较厉害的情况下,人脸识别算法的识别率也将会急剧下降。面部幅度较大的哭、笑、愤怒等表情变化同样影像着面部识别的准确率。

    (2)解决思路:

    1、第一种思路:

    是学习并记忆多种姿态特征,这对于多姿态人脸数据可以容易获取的情况比较实用,其优点是算法与正面人脸识别统一,不需要额外的技术支持,其缺点是存储需求大,姿态泛化能力不能确定,不能用于基于单张照片的人脸识别算法中等。

    2、第二种思路:

    是基于单张视图生成多角度视图,可以在只能获取用户单张照片的情况下合成该用户的多个学习样本,可以解决训练样本较少的情况下的多姿态人脸识别问题,从而改善识别性能。

    3、第三种思路:

    是基于姿态不变特征的方法,即寻求那些不随姿态的变化而变化的特征。中科院计算所的思路是采用基于统计的视觉模型,将输入姿态图像校正为正面图像,从而可以在统一的姿态空间内作特征的提取和匹配。 

    3)遮挡问题

    对于非配合情况下的人脸图像采集,遮挡问题是一个非常严重的问题。特别是在监控环境下,往往彼监控对象都会带着眼镜,帽子等饰物,使得被采集出来的人脸图像有可能不完整,从而影响了后面的特征提取与识别,甚至会导致人脸检测算法的失效。

    4)年龄变化

    随着年龄的变化,面部外观也在变化,特别是对于青少年,这种变化更加的明显。对于不同的年龄段,人脸识别算法的识别率也不同。一个人从少年变成青年,变成老年,他的容貌可能会发生比较大的变化,从而导致识别率的下降。对于不同的年龄段,人脸识别算法的识别率也不同。

    5)人脸相似性

    不同个体之间的区别不大,所有的人脸的结构都相似,甚至人脸器官的结构外形都很相似。这样的特点对于利用人脸进行定位是有利的,但是对于利用人脸区分人类个体是不利的

    6)图像质量

    人脸图像的来源可能多种多样,由于采集设备的不同,得到的人脸图像质量也不一样,特别是对于那些低分辨率、噪声大、质量差的人脸图像(如手机摄像头拍摄的人脸图片、远程监控拍摄的图片等)如何进行有效地人脸识别是个需要关注的问题。同样的,对于高分辨图像对人脸识别算法的影响也需要进一步的研究。

    7)样本缺乏

    基于统计学习的人脸识别算法是目前人脸识别领域中的主流算法,但是统计学习方法需要大量的训练。由于人脸图像在高维空间中的分布是一个不规则的流形分布,能得到的样本只是对人脸图像空间中的一个极小部分的采样,如何解决小样本下的统计学习问题有待进一步的研究。

    8)海量数据

    传统人脸识别方法如PCA、LDA等在小规模数据中可以很容易进行训练学习。但是对于海量数据,这些方法其训练过程难以进行,甚至有可能崩溃。

    9)大规模人脸识别

    随着人脸数据库规模的增长,人脸算法的性能将呈现下降

    10)动态识别

    非配合性人脸识别的情况下,运动导致面部图像模糊或摄像头对焦不正确都会严重影响面部识别的成功率。在地铁、高速公路卡口、车站卡口、超市反扒、边检等安保和监控识别的使用中,这种困难明显突出;

    11)人脸防伪

    伪造人脸图像进行识别的主流欺骗手段是建立一个三维模型,或者是一些表情的嫁接。随着人脸防伪技术的完善、3D面部识别技术、摄像头等智能计算视觉技术的引入,伪造面部图像进行识别的成功率会大大降低。

    12)丢帧和丢脸问题

    需要的网络识别和系统的计算机识别可能会造成视频的丢帧和丢脸现象,特别是监控人流量大的区域,由于网络传输的带宽问题和计算能力问题,常常引起丢帧和丢脸问题。

    13)摄像机的头像问题

    摄像机很多技术参数影响视频图像的质量,这些因素有感光器(CCD、CMOS)、感光器的大小、DSP的处理速度、内置图像处理芯片和镜头等,同时摄像机内置的一些设置参数也将影响质量,如曝光时间、光圈、动态白平衡等参数。

    4、实战中的数据标注

    1)数据标注

    (1)一般来说,数据标注部分可以有三个角色

    1. 标注员:标注员负责标记数据。

    2. 审核员:审核员负责审核被标记数据的质量。

    3. 管理员:管理人员、发放任务、统计工资。

    只有在数据被审核员审核通过后,这批数据才能够被算法同事利用。

    (2)数据标记流程

    1. 任务分配:假设标注员每次标记的数据为一次任务,则每次任务可由管理员分批发放记录,也可将整个流程做成“抢单式”的,由后台直接分发。

    2. 标记程序设计:需要考虑到如何提升效率,比如快捷键的设置、边标记及边存等等功能都有利于提高标记效率。

    3. 进度跟踪:程序对标注员、审核员的工作分别进行跟踪,可利用“规定截止日期”的方式淘汰怠惰的人。

    4. 质量跟踪:通过计算标注人员的标注正确率和被审核通过率,对人员标注质量进行跟踪,可利用“末位淘汰”制提高标注人员质量。

    2)模型训练

    数据标记完成后,交由算法同学进行模型的训练,期间发现的问题可与产品一起商讨。训练过程中,最好能可视化一些中间结果。一来可以检测代码实现是否有Bug,二来也可以通过这些中间结果,来帮助自己更好的理解这个算法的过程。

    3)模型测试

    测试同事(一般来说算法同事也会直接负责模型测试)将未被训练过的数据在新的模型下做测试。

    如果没有后台设计,测试结果只能由人工抽样计算,抽样计算繁琐且效率较低。模型的效果,需要在精确率(识别为正确的样本数/识别出来的样本数)和召回率(识别为正确的样本数/所有样本中正确的数)中达到某一个平衡。

    测试同事需要关注特定领域内每个类别的指标,比如针对识别人脸的表情,里面有喜怒哀乐等分类,每一个分类对应的指标都是不一样的。测试同事需要将测试的结果完善地反馈给算法同事,算法同事才能找准模型效果欠缺的原因。同时,测试同事将本次模型的指标结果反馈给产品,由产品评估是否满足上线需求。

    (1)测试环境说明

    例如:

    CPU:Intel(R) Core(TM) i7-4790 CPU @ 3.60 GHz

    内存:8GB

    系统:Ubuntu 14.04 x86_64/Windows 7 SP1 64bit

    GCC版本:4.8.2

    (2)测试集和测试需求说明(比如“图片包含人脸大小应超过96*96像素,测试结果达到XX程度满足需求)

    1. 经典人脸身份识别测试集LFW,共包含13233 张图片 5749 种不同身份;世界记录99.7%。

    2. CK+ (一个人脸表情数据集),包含固定表情和自发表情,包含123个人的593个表情序列。每个序列的目标表情被FACS编码,同时添加了已验证的情感标签(生气、厌恶、害怕、快乐、悲伤、惊讶)。

    (3)需要说明“有效距离,左右角度,上下角度,速度”等参数值(范围)

    注:这和“部署的灵活性”相关——由于不同客户不同场景的需求不同,所以技术方的人脸检测模块,一般可以通过调整参数得到N种亚型,以适应不同应用场景(光照、角度、有效距离、速度) 下对运算量和有效检测距离的需求。

    (4)测试结果——欠拟合

    1、定义:模型没有很好地捕捉到数据特征,不能够很好地拟合数据

    欠拟合

    左图表示size与prize关系的数据,中间的图就是出现欠拟合的模型,不能够很好地拟合数据,如果在中间的图的模型后面再加一个二次项,就可以很好地拟合图中的数据了,如右面的图所示。

    2、解决方法:

    1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。

    2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。

    3)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

    4)尝试非线性模型,比如核SVM 、决策树、DNN等模型。

    (5)测试结果——过拟合

    1、定义:模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力太差。例如下面的例子。

    过拟合

    上面左图表示size和prize的关系,我们学习到的模型曲线如右图所示,虽然在训练的时候模型可以很好地匹配数据,但是很显然过度扭曲了曲线,不是真实的size与prize曲线。

    二、解决方法:

    从产品角度

    1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,噪音太多影响到模型效果,如果出现了过拟合就需要我们重新清洗数据。

    2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。

    从算法角度

    1)交叉检验,通过交叉检验得到较优的模型参数;

    2)特征选择,减少特征数或使用较少的特征组合,对于按区间离散化的特征,增大划分的区间;

    3)正则化,常用的有 L1、L2 正则。而且 L1正则还可以自动进行特征选择;

    4)如果有正则项则可以考虑增大正则项参数 lambda;

    5)增加训练数据可以有限的避免过拟合;

    6)Bagging ,将多个弱学习器Bagging 一下效果会好很多,比如随机森林等.

    4)标注流程中遇到的问题

    (1)项目过程中的不确定性:

    1、出现原因:

    一般情况下,只要数据标注的规范清晰,对规则的界定从一而终,标注工作的流程还是比较简单的。

    数据标注规范可能会在测试后根据结果情况进行调整,那么,规则修改前后“数据标注的一致性”就出现了问题,会导致多次返工,在时间和人工成本上颇有影响。

    2、解决方法:

    1)如是分类性质的解析工作,建议标注规则先从非常肯定的非黑即白开始;规则设定由简到繁,带有疑虑数据再另外作记号。随着规则一步步深入,可能会出现交叉影响,此时就需要放弃一些低频问题的规则,余下的未标注的数据就根据新的规则标注。

    2)如是多类规则同时进行的标注工作,需要把每类规则定得足够细致。

    3)实例:

    1、如询问机器人会干什么的语料中出现,“你说你会干什么?”可以理解为询问,也可能是嫌弃,这两类应对的策略不同,有歧义,所以不能把它归纳如询问类,需要把它从训练集里剔除。

    2、如人脸情绪识别中,一个人在流眼泪,有时可以理解为伤心落泪,有时可以理解为喜极而泣,还有时可以理解为激动落泪,甚至是感动落泪等,所以在看到此类照片时,不能简单的凭借惯性化思维将其归纳到悲伤一类中,当人眼都很难判别清楚时,需要把它从训练集里剔除。

    5、实际案例分析

    1)某领域的人脸识别监测与身份确认

    (1)案例问题:

    光照影响:过暗或过亮等非正常光照环境,会对模型的效果产生很大干扰。在解决光照影响这个问题上,可以通过两种方式:

    (2)解决方案:

    1、从产品角度控制

    A. 在用户可以更换环境的前提下(比如银行刷脸取钱等),可语音/界面提示用户目前环境不理想(头歪、头发、眼镜等),建议进行正确的正脸取照。

    B. 在用户不能控制更换环境的情况下(比如人脸识别、车辆识别等摄像头固定的场景),只能通过调试硬件设施弥补这个问题。

    C. 晚上:由于摄像头在晚上会自动切换到黑夜场景(从图片上看就是从彩色切换为黑白),因此在晚上强光下(例如路灯照射)人脸就会过曝,这时,我们可以通过强制设置摄像头环境为白天(图像为彩色)来避免。而过暗的情况,从节省成本角度看,可以在摄像头旁边增加一个光线发散、功率不高的灯来弥补。当然这两个问题也可以通过购买高质量的摄像头解决,但这样做也意味着更高的成本。

    D. 白天:白天也会出现光线过亮的情况,这种情况可以考虑用滤光片等等。

    2、从算法角度控制

    用算法将图片进行处理,可以将图片恢复得让人眼看清的程度。

    2)某款人脸年龄识别产品

    (1)案例问题:

    一款识别人脸年龄的产品对女性某个年龄阶段(25—35)的判断,误差较大,经过发现,是因为该年龄阶段有以下特点:

    A. 女性在这个年龄阶段面貌变化不是很大,有时人眼给出的判断误差都很离谱。

    B. 在这个年龄层次的女性注重打扮,化妆品很大程度上掩盖了其真实年龄,有时30多的跟20岁没多大差别;

    C. 精装打扮的和素颜的差别有时变化不大、有时变化很大。

    (2)解决方案:

    1. 补充数据:针对该年龄层次的人脸图片数据做补充。不仅补充正例(“XXX”应为多少岁),还应补充负例(“XXX”不应为多少岁)。

    2. 优化数据:修改大批以往的错误标注。

    3. 数据总结:对化妆和不化妆的人脸图片进行分析,以便调整算法参数。

    (3)需求研究:

    1. 自拍:如女性群体一般都希望自拍时,年龄的判别在心里预期中能越小越好,当在和一群人自拍中可以适当的将主人公的年龄判别结果调低至达到用户心理满足感。此时可适当降低算法的参照度。

    2. 婚恋交友:在婚恋网站交友过程中,双方都希望知道彼此的真实年龄信息,此时运用人脸年龄识别可以分析双方的年龄、皮肤等物理信息为彼此提供参考。此时的信息就不能以达到心理满足感为主了,应当追求准确度。

    3)某款AR美颜相机

    (1)无法定位出人脸:

    在背景出现多人或宠物时,相机有时并未能精确定位出目标用户,而定位到背景图片中的人、宠物、身旁的其他人;有时屏幕一片漆黑;有时显示未检测出人脸。

    1、从产品角度:

    界面提醒用户远离复杂背景,或美颜时最好屏幕中只出现一人,或给出方框图让用户自己手动选择主要定位区域进行AR美颜;屏幕一片漆黑时可提醒用户是否是光线太暗,或是摄像头被障碍物遮挡等;

    2、从算法角度:

    可对人脸关键点进行定位,计算目标用户与摄像头的距离或计算人脸在频幕的区域占比来确定目标用户(一般几何距离近的、频幕区域占比较大的为美颜目标),结合活体检测来排除背景图片人物的干扰等。

    (2)图像模糊昏暗:

    光线太暗、运动、对焦等造成模糊(摄像头距离因素,造成图像低频存在,高频流失等)

    1、从产品角度:

    可提醒用户在光线较温和的区域进行美颜操作;或是擦除前置摄像头的障碍物;或文字提示动作太快;或是更换高清前置摄像头;或提示对焦失败,给与对焦框图让用户手动对焦等。

    2、从算法角度:

    在美颜前可在后台中调取手机亮度调节功能,用算法调节光线的亮暗程度以适应美颜所需的物理条件;用算法设法补齐高频部分从而减少对照片的干扰。

    (3)人脸关键动作抓捕太慢:

    在进行AR美颜搞怪时(如张嘴动作,屏幕出现音符、唾沫星子等)对动作抓捕太慢(半天才抓捕到张嘴动作)。

    1、从产品角度:

    文字提示不支持快速移动或提示缓慢移动(如,亲!您的动作太快了,奴家还未反应过来等)

    2、从算法角度:

    人脸姿态估计、关键点定位来捕捉人脸动作。

    (4)关键位置添加虚拟物品失败(如在嘴上叼烟、耳朵吊耳环、眼镜戴墨镜、脸显红晕)

    1、从产品角度:

    文字/图片提醒用户摆正人脸位置。

    2、从算法角度:

    可利用算法对人脸关键区域进行分割并定位,来达到人脸精准定位添加虚拟物品

    4)人脸开门和人脸检索

    (1)人脸开门等跨网方案需要关注的因素

    1、远程算法更新:

    远程算法更新必然会造成本地局域网功能暂时性无法使用。因此远程算法更新的频率、时间、更新效果都需要产品在更新前精确评估。

    2、增删改人脸数据与本地数据的同步:

    本地局域网和互联网是无法直接交互的,因此用户在互联网一旦对人脸数据库进行增删改的操作,下发程序的稳定性和及时性都需要重点关注。

    3、硬件环境:

    本地存储空间的大小和GPU直接影响到本地识别的速度。服务器的稳定性影响到功能地正常使用。

    4、守护程序:

    断电等外置情况意外情况发生又被处理完善后,程序能自动恢复正常。

    (2)人脸检索等某一局域网方案需要关注的因素

    1、速度:

    除了算法识别需要消耗一定时间外,该局域网下的网速会影响到识别结果输出的速度。

    2、数据库架构:

    通过检索结果关联结构化数据。

    3、阈值的可配置性:

    在界面设置阈值功能,从产品层面输入阈值后,改变相对应的结果输出。

    4、输出结果排序:

    根据相似度排序或结构化数据排序内容地抉择

    5、云服务的稳定性

    展开全文
  • 互联网后端基础技术

    千次阅读 2019-07-05 21:32:57
    纵观整个互联网技术体系再结合公司的目前状况,笔者认为必不可少或者非常关键的后端基础技术/设施如下图所示: 这里的后端基础设施主要指的是应用在线上稳定运行需要依赖的关键组件或者服务。开发或者搭建好以上的...

    使用Java后端技术的目的就是构建业务应用,为用户提供在线或者离线服务。因此,一个业务应用需要哪些技术、依赖哪些基础设施就决定了需要掌握的后端技术有哪些。纵观整个互联网技术体系再结合公司的目前状况,笔者认为必不可少或者非常关键的后端基础技术/设施如下图所示:

    这里的后端基础设施主要指的是应用在线上稳定运行需要依赖的关键组件或者服务。开发或者搭建好以上的后端基础设施,一般情况下是能够支撑很长一段时间内的业务的。此外,对于一个完整的架构来说,还有很多应用感知不到的系统基础服务,如负载均衡、自动化部署、系统安全等,并没有包含在本章的描述范围内。

    1. 统一请求入口-API网关

    在移动APP的开发过程中,通常后端提供的接口需要以下功能的支持:

    • 负载均衡
    • API访问权限控制
    • 用户鉴权

    在这里插入图片描述

    一般的做法,使用Nginx做负载均衡,然后在每个业务应用里做API接口的访问权限控制和用户鉴权,更优化一点的方式则是把后两者做成公共类库供所有业务调用。但从总体上来看,这三种特性都属于业务的公共需求,更可取的方式则是集成到一起作为一个服务,既可以动态地修改权限控制和鉴权机制,也可以减少每个业务集成这些机制的成本。这种服务就是API网关,可以选择自己实现。也可以使用开源软件实现,如Kong和Netflix Zuul。API网关一般架构如下图所示:

    在这里插入图片描述

    但是以上方案的一个问题是由于所有API请求都要经过网关,它很容易成为系统的性能瓶颈。因此,可以采取的方案是:去掉API网关,让业务应用直接对接统一认证中心,在基础框架层面保证每个API调用都需要先通过统一认证中心的认证,这里可以采取缓存认证结果的方式避免对统一认证中心产生过大的请求压力。

    2. 业务应用和后端基础框架

    业务应用分为:在线业务应用和内部业务应用。

    • 在线业务应用:直接面向互联网用户的应用、接口等,典型的特点就是:请求量大、高并发、对故障的容忍度低。

    • 内部业务应用:主要面向公司内部用户的应用。比如,内部数据管理平台、广告投放平台等。相比起在线业务应用,其特点: 数据保密性高、压力小、并发量小、允许故障的发生。
      业务应用基于后端的基础框架开发,针对Java后端来说,应该有以下几个框架:

    • MVC框架:统一开发流程、提高开发效率、屏蔽一些关键细节的Web/后端框架。典型的如SpringMVC、Jersey以及国人开发的JFinal以及阿里的WebX。

    • IOC框架:实现依赖注入/控制反转的框架。Java中最为流行的Spring框架的核心就是IOC功能。

    • ORM框架:能够屏蔽底层数据库细节,提供统一的数据访问接口的数据库操作框架,额外地能够支持客户端主从、分库、分表等分布式特性。MyBatis是目前最为流行的ORM框架。此外,Spring ORM中提供的JdbcTemplate也很不错。当然,对于分库分表、主从分离这些需求,一般就需要自己实现,开源的则有阿里的TDDL、当当的sharding-jdbc(从datasource层面解决了分库分表、读写分离的问题,对应用透明、零侵入)。此外,为了在服务层面统一解决分库分表、读写分离、主备切换、缓存、故障恢复等问题,很多公司都是有自己的数据库中间件的,比如阿里的Cobar、360的Atlas(基于MySQL-Proxy)、网易的DDB等;开源的则有MyCat(基于Cobar)和Kingshard,其中Kingshard已经有一定的线上使用规模。MySQL官方也提供了MySQL Proxy, 可以使用lua脚本自定义主从、读写分离、分区这些逻辑,但其性能较差,目前使用较少。

    • 缓存框架:对Redis、Memcached这些缓存软件操作的统一封装,能够支持客户端分布式方案、主从等。一般使用Spring的RedisTemplate即可,也可以使用Jedis做自己的封装,支持客户端分布式方案、主从等。

    • JavaEE应用性能检测框架:对于线上的JavaEE应用,需要有一个统一的框架集成到每一个业务中检测每一个请求、方法调用、JDBC连接、Redis连接等的耗时、状态等。Jwebap是一个可以使用的性能检测工具,但由于其已经很多年没有更新,有可能的话建议基于此项目做二次开发。

    一般来说,以上几个框架即可以完成一个后端应用的雏形。

    3. 缓存、数据库、搜索引擎、消息队列

    缓存、数据库、搜索引擎、消息队列这四者都是应用依赖的后端基础服务,他们的性能直接影响到了应用的整体性能,有时候你代码写的再好也许就是因为这些服务导致应用性能无法提升上去。

    • 缓存:缓存通常被用来解决热点数据的访问问题,是提高数据查询性能的强大武器。在高并发的后端应用中,将数据持久层的数据加载到缓存中,能够隔离高并发请求与后端数据库,避免数据库被大量请求击垮。目前常用的除了在内存中的本地缓存,比较普遍的集中缓存软件有Memcached和Redis。其中Redis已经成为最主流的缓存软件。

    • 数据库:数据库可以说是后端应用最基本的基础设施。基本上绝大多数业务数据都是持久化存储在数据库中的。主流的数据库包括传统的关系型数据库(MySQL、PostgreSQL)以及最近几年开始流行的NoSQL(MongoDB、HBase)。其中HBase是用于大数据领域的列数据库,受限于其查询性能,一般并不用来做业务数据库。

    • 搜索引擎:搜索引擎是针对全文检索以及数据各种维度查询设计的软件。目前用的比较多的开源软件是Solr和Elasticsearch,都是基于Lucence来实现的,不同之处主要在于termIndex的存储、分布式架构的支持等。Elasticsearch由于对集群的良好支持以及高性能的实现,已经逐渐成为搜索引擎的主流开源方案。

    • 消息队列:数据传输的一种方式就是通过消息队列。目前用的比较普遍的消息队列包括为日志设计的Kafka(或ActiveMQ)以及重事务的RabbitMQ等。在对消息丢失不是特别敏感且并不要求消息事务的场景下,选择Kafka能够获得更高的性能;否则,RabbitMQ则是更好的选择。此外,ZeroMQ则是一种实现消息队列的网络编程Pattern库,位于Socket之上,MQ之下。

    4. 文件存储

    不管是业务应用、依赖的后端服务还是其他的各种服务,最终还是要依赖于底层文件存储的。通常来说,文件存储需要满足的特性有:可靠性、容灾性、稳定性,即要保证存储的数据不会轻易丢失,即使发生故障也能够有回滚方案,也要保证高可用。在底层可以采用传统的RAID作为解决方案,再上一层,目前Hadoop的HDFS则是最为普遍的分布式文件存储方案,当然还有NFS、Samba这种共享文件系统也提供了简单的分布式存储的特性。

    此外,如果文件存储确实成为了应用的瓶颈或者必须提高文件存储的性能从而提升整个系统的性能时,那么最为直接和简单的做法就是抛弃传统机械硬盘,用SSD硬盘替代。像现在很多公司在解决业务性能问题的时候,最终的关键点往往就是SSD。这也是用钱换取时间和人力成本最直接和最有效的方式。在数据库部分描述的SSDB就是对LevelDB封装之后,利用SSD硬盘的特性的一种高性能KV数据库。

    至于HDFS,如果要使用上面的数据,是需要通过Hadoop的。类似xx on Yarn的一些技术就是将非Hadoop技术跑在HDFS上的解决方案。

    5. 统一认证中心

    统一认证中心,主要是对APP用户、内部用户、APP等的认证服务,包括:

    • 用户的注册、登录验证、Token鉴权
    • 内部信息系统用户的管理和登录鉴权
    • APP的管理,包括APP的secret生成,APP信息的验证(如验证接口签名)等。

    之所以需要统一认证中心,就是为了能够集中对这些所有APP都会用到的信息进行管理,也给所有应用提供统一的认证服务。尤其是在有很多业务需要共享用户数据的时候,构建一个统一认证中心是非常必要的。此外,通过统一认证中心构建移动APP的单点登录也是水到渠成的事情:模仿Web的机制,将认证后的信息加密存储到本地存储中供多个APP使用。

    6. 单点登录系统

    目前很多大的在线Web网站都是有单点登录系统的,通俗的来说就是只需要一次用户登录,就能够进入多个业务应用(权限可以不相同),非常方便用户的操作。而在移动互联网公司中,内部的各种管理、信息系统甚至外部应用同样也需要单点登录系统。

    目前,比较成熟的、用的最多的单点登录系统应该是耶鲁大学开源的CAS

    基本上,单点登录的原理都类似下图所示:

    在这里插入图片描述

    7. 统一配置中心

    在Java后端应用中,一种读写配置比较通用的方式就是将配置文件写在Propeties、YAML、HCON等文件中,修改的时候只需要更新文件重新部署即可,可以做到不牵扯代码层面改动的目的。统一配置中心,则是基于这种方式之上的统一对所有业务或者基础后端服务的相关配置文件进行管理的统一服务, 具有以下特性:

    • 能够在线动态修改配置文件并生效
    • 配置文件可以区分环境(开发、测试、生产等)
    • 在Java中可以通过注解、XML配置的方式引入相关配置

    百度开源的Disconf和携程的Apollo是可以在生产环境使用的方案,也可以根据自己的需求开发自己的配置中心,一般选择Zookeeper作为配置存储。

    8. 服务治理框架

    对于外部API调用或者客户端对后端API的访问,可以使用HTTP协议或者RESTful(当然也可以直接通过最原始的socket来调用)。但对于内部服务间的调用,一般都是通过RPC机制来调用的。目前主流的RPC协议有:

    • RMI
    • Hessian
    • Thrift
    • Dubbo

    这些RPC协议各有优劣点,需要针对业务需求做出最好的选择。

    这样,当你的系统服务在逐渐增多,RPC调用链越来越复杂,很多情况下,需要不停的更新文档来维护这些调用关系。一个对这些服务进行管理的框架可以大大减少因此带来的繁琐的人力工作。

    传统的ESB(企业服务总线)本质就是一个服务治理方案,但ESB作为一种proxy的角色存在于Client和Server之间,所有请求都需要经过ESB,使得ESB很容易成为性能瓶颈。因此,基于传统的ESB,更好的一种设计如下图所示:

    在这里插入图片描述

    如图,以配置中心为枢纽,调用关系只存在于Client和提供服务的Server之间,就避免了传统ESB的性能瓶颈问题。对于这种设计,ESB应该支持的特性如下:

    • 服务提供方的注册、管理
    • 服务消费者的注册、管理
    • 服务的版本管理、负载均衡、流量控制、服务降级、资源隔离
    • 服务的容错、熔断

    阿里开源的Dubbo则对以上做了很好的实现,也是目前很多公司都在使用的方案;当当网的扩展项目Dubbox则在Dubbo之上加入了一些新特性。目前,Dubbo已经被阿里贡献给Apache,处于incubating状态。在运维监控方面,Dubbo本身提供了简单的管理控制台dubbo-admin和监控中心dubbo-monitor-simple。Github上的dubboclub/dubbokeeper则是在其之上开发的更为强大的集管理与监控于一身的服务管理以及监控系统。

    此外,Netflix的Eureka也提供了服务注册发现的功能,其配合Ribbon可以实现服务的客户端软负载均衡,支持多种灵活的动态路由和负载均衡策略。

    9. 统一调度中心

    在很多业务中,定时调度是一个非常普遍的场景,比如定时去抓取数据、定时刷新订单的状态等。通常的做法就是针对各自的业务依赖Linux的Cron机制或者Java中的Quartz。统一调度中心则是对所有的调度任务进行管理,这样能够统一对调度集群进行调优、扩展、任务管理等。Azkaban和Yahoo的Oozie是Hadoop的流式工作管理引擎,也可以作为统一调度中心来使用。当然,你也可以使用Cron或者Quartz来实现自己的统一调度中心。

    • 根据Cron表达式调度任务
    • 动态修改、停止、删除任务
    • 支持任务分片执行
    • 支持任务工作流:比如一个任务完成之后再执行下一个任务
    • 任务支持脚本、代码、url等多种形式
    • 任务执行的日志记录、故障报警

    对于Java的Quartz这里需要说明一下:这个Quartz需要和Spring Quartz区分,后者是Spring对Quartz框架的简单实现也是目前使用的最多的一种调度方式。但其并没有做高可用集群的支持。而Quartz虽然有集群的支持,但是配置起来非常复杂。现在很多方案都是使用Zookeeper来实现Spring Quartz的分布式集群。

    此外,当当网开源的elastic-job则在基础的分布式调度之上又加入了弹性资源利用等更为强大的功能。

    10. 统一日志服务

    日志是开发过程必不可少的东西。打印日志的时机、技巧是很能体现出工程师编码水平的。毕竟,日志是线上服务能够定位、排查异常最为直接的信息。

    通常的,将日志分散在各个业务中非常不方便对问题的管理和排查。统一日志服务则使用单独的日志服务器记录日志,各个业务通过统一的日志框架将日志输出到日志服务器上。

    可以通过实现Log4j或者Logback的Appender来实现统一日志框架,然后通过RPC调用将日志打印到日志服务器上。

    11. 数据基础设施

    数据是最近几年非常火的一个领域。从《精益数据分析》到《增长黑客》,都是在强调数据的非凡作用。很多公司也都在通过数据推动产品设计、市场运营、研发等。这里需要说明的一点是,只有当你的数据规模真的到了单机无法处理的规模才应该上大数据相关技术,千万不要为了大数据而大数据。很多情况下使用单机程序+MySQL就能解决的问题非得上Hadoop即浪费时间又浪费人力。

    这里需要补充一点的是,对于很多公司,尤其是离线业务并没有那么密集的公司,在很多情况下大数据集群的资源是被浪费的。因此诞了 xx on Yarn 一系列技术让非Hadoop系的技术可以利用大数据集群的资源,能够大大提高资源的利用率,如Docker on Yarn。

    • 数据高速公路
      接着上面讲的统一日志服务,其输出的日志最终是变成数据到数据高速公路上供后续的数据处理程序消费的。这中间的过程包括日志的收集和传输。

      • 收集:统一日志服务将日志打印在日志服务上之后,需要日志收集机制将其集中起来。目前,常见的日志收集方案有:Scribe、Chukwa、Kakfa和Flume。对比如下图所示:
        在这里插入图片描述
        此外,Logstash也是一个可以选择的日志收集方案,不同于以上的是,它更倾向于数据的预处理,且配置简单、清晰,经常以ELK(Elasticsearch + Logstash + Kibana)的架构用于运维场景中。
        • 传输:通过消息队列将数据传输到数据处理服务中。对于日志来说,通常选择Kafka这个消息队列即可。
        此外,这里还有一个关键的技术就是数据库和数据仓库间的数据同步问题,即将需要分析的数据从数据库中同步到诸如Hive这种数据仓库时使用的方案。可以使用Apache Sqoop进行基于时间戳的数据同步,此外,阿里开源的Canal实现了基于binlog增量同步,更加适合通用的同步场景,但是基于Canal还是需要做不少的业务开发工作。
    • 离线数据分析
      离线数据分析是可以有延迟的,一般针对的是非实时需求的数据分析工作,产生的也是延迟一天的报表。目前最常用的离线数据分析技术除了Hadoop还有Spark。相比Hadoop,Spark性能上有很大优势,当然对硬件资源要求也高。其中,Hadoop中的Yarn作为资源管理调度组件除了服务于MR还可以用于Spark(Spark on Yarn),Mesos则是另一种资源管理调度系统。
      对于Hadoop,传统的MR编写很复杂,也不利于维护,可以选择使用Hive来用SQL替代编写MR。而对于Spark,也有类似Hive的Spark SQL。
      此外,对于离线数据分析,还有一个很关键的就是数据倾斜问题。所谓数据倾斜指的是region数据分布不均,造成有的结点负载很低,而有些却负载很高,从而影响整体的性能。处理好数据倾斜问题对于数据处理是很关键的。

    • 实时数据分析
      相对于离线数据分析,实时数据分析也叫在线数据分析,针对的是对数据有实时要求的业务场景,如广告结算、订单结算等。目前,比较成熟的实时技术有Storm和Spark Streaming。相比起Storm,Spark Streaming其实本质上还是基于批量计算的。如果是对延迟很敏感的场景,还是应该使用Storm。除了这两者,Flink则是最近很火的一个分布式实时计算框架,其支持Exactly Once的语义,在大数据量下具有高吞吐低延迟的优势,并且能够很好的支持状态管理和窗口统计,但其文档、API管理平台等都还需要完善。
      实时数据处理一般情况下都是基于增量处理的,相对于离线来说并非可靠的,一旦出现故障(如集群崩溃)或者数据处理失败,是很难对数据恢复或者修复异常数据的。因此结合离线+实时是目前最普遍采用的数据处理方案。Lambda架构就是一个结合离线和实时数据处理的架构方案。
      此外,实时数据分析中还有一个很常见的场景:多维数据实时分析,即能够组合任意维度进行数据展示和分析。目前有两种解决此问题的方案:ROLAP和MOLAP。

      • ROLAP:使用关系型数据库或者扩展的关系型数据库来管理数据仓库数据,以Hive、Spark SQL、Presto为代表。
      • MOLAP:基于数据立方体的多位存储引擎,用空间换时间,把所有的分析情况都物化为物理表或者视图。以Druid、Pinot和Kylin为代表,不同于ROLAP(Hive、Spark SQL), 其原生的支持多维的数据查询。
        如上一小节所述,ROLAP的方案大多数情况下用于离线数据分析,满足不了实时的需求,因此MOLAP是多维数据实时分析的常用方案。对于其中常用的三个框架,对比如下:
        在这里插入图片描述
        其中,Druid相对比较轻量级,用的人较多,比较成熟。
    • 数据即席分析

    离线和实时数据分析产生的一些报表是给数据分析师、产品经理参考使用的,但是很多情况下,线上的程序并不能满足这些需求方的需求。这时候就需要需求方自己对数据仓库进行查询统计。针对这些需求方,SQL上手容易、易描述等特点决定了其可能是一个最为合适的方式。因此提供一个SQL的即席查询工具能够大大提高数据分析师、产品经理的工作效率。Presto、Impala、Hive都是这种工具。如果想进一步提供给需求方更加直观的ui操作界面,可以搭建内部的Hue。在这里插入图片描述

    12. 故障监控

    对于面向用户的线上服务,发生故障是一件很严重的事情。因此,做好线上服务的故障检测告警是一件非常重要的事情。可以将故障监控分为以下两个层面的监控:

    • 系统监控:主要指对主机的带宽、CPU、内存、硬盘、IO等硬件资源的监控。可以使用Nagios、Cacti等开源软件进行监控。目前,市面上也有很多第三方服务能够提供对于主机资源的监控,如监控宝等。对于分布式服务集群(如Hadoop、Storm、Kafka、Flume等集群)的监控则可以使用Ganglia。此外,小米开源的OpenFalcon也很不错,涵盖了系统监控、JVM监控、应用监控等,也支持自定义的监控机制。

    • 业务监控:是在主机资源层面以上的监控,比如APP的PV、UV数据异常、交易失败等。需要业务中加入相关的监控代码,比如在异常抛出的地方,加一段日志记录。

    监控还有一个关键的步骤就是告警。告警的方式有很多种:邮件、IM、短信等。考虑到故障的重要性不同、告警的合理性、便于定位问题等因素,有以下建议:

    • 告警日志要记录发生故障的机器ID,尤其是在集群服务中,如果没有记录机器ID,那么对于后续的问题定位会很困难。
    • 要对告警做聚合,不要每一个故障都单独进行告警,这样会对工程师造成极大的困扰。
    • 要对告警做等级划分,不能对所有告警都做同样的优先级处理。
    • 使用微信做为告警软件,能够在节省短信成本的情况下,保证告警的到达率。
      故障告警之后,那么最最关键的就是应对了。对于创业公司来说,24小时待命是必备的素质,当遇到告警的时候,需要尽快对故障做出反应,找到问题所在,并能在可控时间内解决问题。对于故障问题的排查,基本上都是依赖于日志的。只要日志打的合理,一般情况下是能够很快定位到问题所在的,但是如果是分布式服务,并且日志数据量特别大的情况下,如何定位日志就成为了难题。这里有几个方案:
    • 建立ELK(Elasticsearch + Logstash + Kibana)日志集中分析平台,便于快速搜索、定位日志。搭配Yelp开源的Elastalert可以实现告警功能。
    • 建立分布式请求追踪系统(也可以叫全链路监测系统),对于分布式系统尤是微服务架构,能够极大的方便在海量调用中快速定位并收集单个异常请求信息,也能快速定位一条请求链路的性能瓶颈。唯品会的Mercury、阿里的鹰眼、新浪的WatchMan、Twitter开源的Zipkin基本都是基于Google的Dapper论文而来,大众点评的实时应用监控平台CAT则在支持分布式请求追踪(代码侵入式)的基础上加入了细粒度的调用性能数据统计。此外,Apache正在孵化中的HTrace则是针对大的分布式系统诸如HDFS文件系统、HBase存储引擎而设计的分布式追踪方案。而如果你的微服务实现使用了Spring Cloud,那么Spring Cloud Sleuth则是最佳的分布式跟踪方案。还需要提到的是,Apache孵化中的SkyWalking是基于分布式追踪的一个完备的APM(应用性能监测)系统,其最大的一个特点就是基于Java agent + instrument api,对业务代码无任何侵入,Pinpoint则是类似的另一个已经用于生产环境的APM系统。

    13.框架介绍

    名称介绍
    Spring Framework基于IOC和AOP的构架多层j2ee系统的框架
    SpringMVCMVC框架
    Spring secutityShiro: 安全框架
    Spring session分布式Session管理
    MyBatisORM框架
    MyBatis Generator代码生成
    Druid数据库连接池
    Jsp、Velocity、Thymeleaf模板引擎
    ZooKeeper协调服务
    Dubbo分布式服务框架
    TBSchedule、elastic-job分布式调度框架
    Redis分布式缓存数据库
    Quartz作业调度框架
    Ehcache缓存框架
    ActiveMQ消息队列
    Solr、Elasticsearch分布式全文搜索引擎
    FastDFS分布式文件系统
    Log4J日志管理
    Swagger2接口文档
    sequence分布式高效ID生产 http://git.oschina.net/yu120/sequence
    AliOSS、Qiniu云存储
    Protobuf、json数据传输
    Jenkins持续集成工具
    Maven、Gradle项目构建管理
    展开全文
  • 活动简介12 月 19 日,GTC 智能增长技术专场,火山引擎将以「智能增长」为主题,为大家带来字节跳动在机器学习领域沉淀的技术经验,智能平台、数据智能、语音识别、联邦学习等场景的前沿应...
  • 互联网技术发展之路(2)- 业务如何驱动技术发展在《互联网技术发展之路(1) - 技术发展的驱动力》一文中,我们详细阐述了对于服务类的业务来说,业务发展是技术发展的驱动力。那接下来我们就看看业务究竟是如何...
  • 本文转载自云栖社区,原文标题《红包场景下,高性能本地存储技术将硬件性能发挥到极致》。链接:https://yq.aliyun.com/articles/71655 编者注:本文介绍的高性能本地存储,应该没有针对可靠性方面的设计,...
  • 区块链技术打通医疗应用场景

    千次阅读 2020-07-06 22:01:42
    国家卫生健康委办公厅近期发布《国家卫生健康委办公厅关于做好信息化支撑常态化疫情防控工作的通知》,在通知中提出要强化数据共享,探索构建患者主导的医疗数据共享机制,应用区块链等技术实现安全流动和授权访问。...
  • 互联网大厂的后端技术

    千次阅读 2020-02-22 10:28:04
    最近公司招聘海外后端研发,所以整理一份技术栈的资料给他们,但是想来这份整理也适用于所有后端研发,所以去掉了敏感内容,把它呈现于此,本文重在概述,毕竟篇幅有限,欢迎【关注】...后续可能把单点拓展成文,详细地...
  • 老王的牛逼相信很多同学已经领教过了,全球运维技术大会深圳站一个人专场讲运维能讲3个小时,而且会场还爆满,更多老王的介绍可以参考文章的最后,也可以关注老王的微信公众号:互联网运维杂谈。
  • 互联网安全防护技术综述

    千次阅读 2018-09-23 09:50:51
    **引言:**互联网技术改变了人们的生活,随着时代的发展,互联网也面临着许多的安全问题,比如恶意流量、黑客攻击、用户机成为跳板等。互联网安全也被社会、国家高度关注,本综述主要对目前一些比较成熟和未来前景...
  • 适用范围本文主要针对小型互联网公司,特别适用于手机APP的后台架构,基本可以支撑5万日活 本文会对可能用到的相关技术进行技术选型的说明,以及相对应的设备的采购。 技术指标说一下一些技术指标的计算过程可以作为...
  • 如今,“万物互联”不只是一种愿景,在很多实际的应用场景里面,已经实现了局部的物联网,如工业自动化、智慧农业、...除了这些,还有很多无线技术,它们在各自适合的场景里默默耕耘,扮演着不可或缺的角色。本文...
  • SRT互联网传输设备技术分享

    千次阅读 多人点赞 2019-06-07 15:06:27
    SRT互联网传输设备技术分享前 言序 言Chapter 1. 什么是SRT?1.1. SRT 联盟1.2. SRT传输技术1.3. SRT的典型应用模式1.3.1. 点对点单向传输和视频互动1.3.2. 点对多点传输1.3.3. 视频流协议转换与分发Chapter 2. SRT...
  • 互联网的产品大都是面向海量用户的服务,且用户分布区域广泛,其教育水平、习惯也大多不同,具有高度不确定性,我们必须非常关注用户的行为和反馈。因而,在互联网产品服务的整个用户研究,需求分析、产品研发及交付...
  • 推荐一个当前互联网很火的技术

    千次阅读 2018-09-11 17:22:56
    Spring Boot 的研发融合了微服务架构的理念,实现了在 Java 领域内微服务架构落地的技术支撑。Spring Boot 在开发、测试、部署、运维等方面都做了大量的优化,可以快速响应需求、独立完成开发部署上线。从目前众多的...
  • 4月4日,工业互联网平台宣讲团第二季第二讲继续开讲,由中国西电集团中央研究院总经理康鹏举博士为大家分享“工业互联网平台的技术内核和创新应用”。“工业互联网平台宣讲团”,在工信部信软司大力支持下,由中国...
  • 来源:智车科技摘要:驾驶场景数据是智能网联汽车研发与测试的基础数据资源,是评价智能网联汽车功能安全的重要“案例库”与“习题集”,是重新定义智能汽车等级的关键数据依据。驾驶...
  • 大型互联网技术架构4-分布式存储-II; 分布式文件系统 - Google GFS; 分布式键值系统- Alibaba Tair;分布式表格系统- Google BigTable /Megastore;分布式数据库系统-Google Spanner / F1
  • 李彦宏表示,这次组织架构的升级,有利于加速 TG 中台战略实施过程中积累的底层技术能力向云输入,更有利于加速 AIG 的 AI 能力的商业化,让技术更直接更有效率地在云平台上支撑业务。 可见,在人工智能正在走向应用...
  • 互联网中的技术中台

    千次阅读 2019-09-09 22:06:54
    在有些人眼里:中台就是技术平台,像微服务开发框架、Devops平台、PaaS平台,容器云之类的,人们都叫它“技术中台”。 在有些人眼里:中台就是微服务业务平台,像最常见的什么用户中心,订单中心,各种微服务集散地...
  • 无人驾驶技术的7大典型应用场景

    千次阅读 2019-07-23 17:28:52
    无人驾驶在矿山开采中,通过技术支撑,矿山开采整体能耗下降、综合运营效益提升,提高矿区安全生产工作,加快智慧矿区的建设。 近年来,矿山开采自动化已经成为大势所趋。 2018年6月14日 ,由洛阳钼业公司与河南跃薪...
  • 工业互联网平台架构(2017工业互联网白皮书)   工业互联架构可分为四层层:感知层、网络层、平台层和应用层。以下我们分别看看使能技术在各个层级中的应用情况。   *感知层的技术    感知层是物联网的...
  • 第二章 5G三大应用场景(外在服务) 2.1 eMBB 增强移动宽带 2.2 URLLC 超可靠低时延通信 2.3 mMTC 海量机器类通信 第三章 5G的四大特征 (内在) 3.1 泛在(网络自身的存在) 3.2 低功耗 3.3 网络虚拟化 3.4 ...
  • 互联网,又见互联网,如小李飞刀一样,互联网成了IT江湖最神奇的武器,每一IT英雄无不谈其色变,又无不为其倾倒。Google专家谈云网计算,王小川谈搜狗输入法原理,句酷CEO张跃谈语句搜索无不彰显互联网的魔力和魅力...
  • 大数据、人工智能等技术的催生,多因子身份认证成为用户安全的重要保障。什么是多因子身份认证?在互联网时代,用户身份认证是安全的第一道大门,是用户在访问各类应用的必经过程,而确保用户身份安全则是互联网业务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,185
精华内容 21,274
关键字:

互联网场景的技术支撑