Quantcast
Channel: IT社区推荐资讯 - ITIndex.net
Viewing all 15891 articles
Browse latest View live

人脸识别中的活体检测 - 知乎

$
0
0
早在指纹识别应用中就有针对于活体手指的检测技术,即使机器只对真人活体指纹产生识别反应,对其他一切物质不作识别,用于指纹识别产品如考勤机、门禁系统等。 活体指纹识别的原理比较简单:如识别皮肤的温度、人体皮肤的电容值等。

本文主要是针对人脸识别应用中出现的 人脸活体检测做简要调研及论述。有关人脸检测相关内容可以参考我的另一篇文章—— 人脸检测与深度学习传送门~ 知乎专栏

引言——人脸识别技术迈向更高层次的一大障碍:活体检测

随着线上支付的不断普及,相关的人脸识别等技术正在中国不断进步。近日,麻省理工科技评论评出全球十大突破技术,其中由“刷脸支付——Paying with Your Face ”榜上有名。

技术突破:人脸识别技术如今已经可以十分精确,在网络交易等相关领域已被广泛使用。

重大意义:该技术提供了一种安全并且十分方便的支付方式,但是或许仍存在 隐私泄露问题

目前基于深度学习的发展,我认为还有一个问题就是 存在被伪造合法用户人脸的攻击的风险。

——————————————- 更新补充分割线 ————————————————

评论区有问到这方面的开源代码,我这边没有仔细找过,在github找了一些相关代码,没有验证过,汇总了一下希望对大家有帮助:

1.C++代码 https://github.com/allenyangyl/Face_Liveness_Detection

2. https://github.com/rienheuver/face-antispoofing-LBP

3. https://github.com/OeslleLucena/FASNet

4.论文Person Specific Face Anti-Spoofing with Subject Domain Adaptation 对应的代码—— https://github.com/jwyang/Person-Specific-Face-Anti-Spoofing

5. https://github.com/zboulkenafet/Face-Anti-Spoofing-using-Speeded-Up-Robust-Features-and-Fisher-Vector-Encoding

6.论文Face anti-spoofing based on color texture analysis基于颜色纹理分析的代码—— https://github.com/zboulkenafet/Face-anti-spoofing-based-on-color-texture-analysis

7. https://github.com/pp21/Guided-Scale-Texture-for-Face-Presentation-Attack-Detection

8.3d头套的 https://github.com/Marco-Z/Spoofing-Face-Recognition-With-3D-Masks

9. https://github.com/number9473/nn-algorithm/issues/37

10.下文中提到的几个数据库的下载链接: https://github.com/number9473/nn-algorithm/issues/36

11.活体检测在人脸识别系统中处于的位置,大部分现有的系统是没有活体检测的:

12.文中文献[11]的基于图像失真特征提取分析的活体检测的整体框架图:

(15年4月TIFS的提出一种基于图像失真分析(IDA)的人脸活体检测方法。IDA特征向量分别由镜面反射(打印纸张或者LCD屏幕3维)、模糊程度(重采集—散焦2维)、图像色度和对比度退化(对比度失真15维)、颜色多样性(打印机或LCD颜色分辨率有限等101维)四种典型特征组成(121维向量),通过输入基于SVM的集成分类器(ensemble classfier),训练分类出二值真伪结果(voting scheme——用于判断视频攻击的情况,超过50%帧数为真即认定为活体))

其他一些有意思的参考

1. https://github.com/4x7y/FakeImageKiller

2. https://github.com/waghaoxg/whx-temp/tree/c2801685b3188492b6693de1e361db3c52b9b7d6

——————————————— 以下正文 ——————————————————

和指纹、虹膜等生物特征相比,人脸特征是最容易获取的。人脸识别系统逐渐开始商用,并向着自动化、无人监督化的趋势发展,然而目前人脸识别技术能识别人脸图像的身份但无法准确辨别所输入人脸的真伪。那么如何自动地、高效地辨别图像真伪抵抗欺骗攻击以确保系统安全已成为人脸识别技术中一个迫切需要解决的问题。

通常意义上的活体检测是当生物特征信息从合法用户那里取得时,判断该生物信息是否从具有生物活体的合法用户身上取的。活体检测的方法主要是通过识别活体上的生理信息来进行,它把生理信息作为生命特征来区分用照片、硅胶、塑料等非生命物质伪造的生物特征。

人脸识别技术面临着三种欺诈手段:

下面通过学术论文、专利发明和企业研发等三方面进行调查:

(一) 学术论文方面

人脸活体检测的学术研究机构主要有中科院自动化所李子青团队、瑞士IDAIP研究室高级研究员Sebastien Marcel主导的Biometrics group、英国南安普顿大学机器视觉系教授Mark S. Nixon所属的视觉学习与控制研究组和国际生物特征识别著名专家Anil K. Jain所在的密歇根州立大学生物特征识别研究组。近些年上述机构所著的关于活体检测的高质量文章陆续发表在IEEE TIFS/TIP等一些顶级期刊,同时Springer于2014年出版了由Sebastien Marcel等编著的《Handbook of Biometric Anti-Spoofing》,书中深入介绍了指纹、人脸、声音、虹膜、步态等生物特征识别反欺骗的方法,还对涉及的性能评估指标、国际标准、法律层面、道德问题等作了阐述,为生物特征识别反欺骗技术的进一步发展作出重要贡献。

1. 综述文献[1]将活体检测技术分为运动信息分析、纹理信息分析、活体部位分析三种,文中讨论了基于真伪图像存在的非刚性运动、噪声差异、人脸背景依赖等特性形成的分类器性能。

2. 文献[2]介绍了一个公开的人脸活体检测验证数据库(PHOTO-ATTACK),在数据库(PRINT-ATTACK)的基础上进行了扩展,添加移动手机拍摄照片和高分辨率屏幕照片。同时文中提出了一种基于光流法的前后景相关性分析来辨别影像真伪,取得较好的性能。

3. 文献[3]针对多生物识别欺骗稳健性的提高,提出一种异常检测新技术,首先通过中值滤波器来提高传统集成方法中求和准则的容差,再通过一种基于bagging策略的检测算法提高检测拒绝度,该算法融合了2D-Gabor特征、灰度共生矩阵(GLCM)多种特征、傅里叶变换的频域信息,特征提取后得到3种特征向量,使用主成分分析(PCA)降维选取形成混合特征,输入bagging分类器并获得检测结果,实验表明算法具有较高准确性。

4. 文献[4]提出一种基于颜色纹理分析的活体检测算法,通过LBP描述子提取联合颜色(RGB、HSV和YCbCr)纹理信息来表征图像,将信息输入SVM分类器进行真伪辨别。

5. 14年TIP的文献[5]提出一种基于图像质量评价的方法来增强生物特征识别的安全性,使用25种图像质量分析指标(列出较关键的几个有:像素差异性分析、相关性分析、边缘特征分析、光谱差异性、结构相似性、失真程度分析、自然影像估计),该方法只需要一张图片就可以区别真伪,适用于多种生物特征识别场合,速度快,实时性强,且不需要附近设备及交互信息。

6. 14年12月发表在TIFS的文献[6]提出一种反欺骗能力评估框架—Expected Performance and Spoofability (EPS)Framework,针对现有反欺骗系统作性能评估,创新性地指出在一定条件下验证系统将失去二值特性转变为三类:活体合法用户、无用攻击者(zero-effort)和欺骗攻击者,EPS框架主要通过测量系统期望达到的FAR(错误接受无用率)和SFAR(错误接受欺骗率)及两者之间的范围,同时考虑系统被欺骗的成本和系统存在的弱点,并量化为单一的值用来评价系统优劣。

7. 15年5月发表在TIFS的文章[7]针对视频回放攻击提出一种基于visual rhythm analysis的活体检测方法,文中指出:由于静态背景易获得,基于背景的方法显得容易被破解;利用照片的旋转和扭曲也可以轻易模拟并欺骗基于光流法的活体检测系统;当攻击视频包含头部、嘴唇、眼睛等动作可以容易通过基于运动交互的系统;文中对傅里叶变换后的视频计算水平和垂直的视觉节奏,采用三种特征(LBP、灰度共生矩阵GCLM、HOG)来对visual rhythm表征与降维,利用SVM分类器和PLS(偏最小二乘)来辨别视频真伪。

8. 15年4月TIFS的文章[8]提出一种基于局部纹理特征描述子的活体检测方法,文中将现有的活体检测方法分为三类:动态特征分析(眨眼)、全局特征分析(图像质量)和局部特征分析(LBP、LBQ、Dense SIFT)。提出的方法对一系列特征向量进行独立量化或联合量化并编码得到对应的图像标量描述子,文中实验部分给出不同局部特征对应的性能。

9. 15年8月TIP的文章[9]在面向手机端的人脸识别活体检测的需求,根据伪造照片相对于活体照片有光照反射特性呈现出更加均衡扩散缓慢的特点,提出一种基于图像扩散(反射)速度模型(Diffusion Speed Model)的活体检测方法,通过引入全变差流(TV)来获得扩散速度,在得到的扩散速度图基础上利用LSP编码(类似LBP)获取的局部速度特征向量作为线性SVM分类器的输入,经分类区分输入影像的真伪。

10. 15年12月TIP文献[10]提出一种基于码本(codebook)算法的新型人脸活体检测方法,根据重采样导致伪造影像出现的条带效应和摩尔纹等噪声现象,文中通过三个步骤来完成分类,第一步:计算视频噪声残差,通过将原始视频和经高斯滤波以后的视频作残差得到噪声视频,再对其作二维傅里叶变换得到频域信息,可以看到伪造视频的幅度谱和相位谱中呈现出明显的摩尔纹及模糊等区别,计算得到相关时频描述子。第二步通过码本算法迭代选取最能表示的descriptor,经过编码将这些描述子转化成新的矩阵表示(矩阵不能直接拿来分类),故用池化(pooling)方法(列求和或取最大值)得到输入向量。第三步利用SVM分类器或PLS(偏最小二乘)对输入向量分类判断其真伪。

11. 15年4月TIFS的文献[11]提出一种基于图像失真分析(IDA)的人脸活体检测方法,同时给出了一个由多种设备采集的人脸活体检测数据库(MSU-MFSD)。IDA特征向量分别由镜面反射(打印纸张或者LCD屏幕3维)、模糊程度(重采集—散焦2维)、图像色度和对比度退化(对比度失真15维)、颜色多样性(打印机或LCD颜色分辨率有限等101维)四种典型特征组成(121维向量),通过输入基于SVM的集成分类器(ensemble classfier),训练分类出二值真伪结果(voting scheme——用于判断视频攻击的情况,超过50%帧数为真即认定为活体)。

12. 几种公开的人脸活体检测数据库:

(二)专利发明方面

对于以研发产品为主的公司来说,用户的体验是检验产品成功的最重要的标准之一。下面从用户的配合程度来分类人脸活体检测技术。

(1) 根据真人图像是一次成像的原理,其比照片包含更多的中频细节信息,专利1[12]首先采用DoG滤波器获取图像信息中的中频带信息,然后通过傅里叶变换提取关键特征,最后通过logistic回归分类器对提取和处理后的特征信息辨析和分类,已达到所识别的图像为真实人脸还是照片人脸的目的。优点:不添加额外的复制设备、不需要用户的主动配合、实现简单、计算量小且功能独立;缺点:采集的正反样本要全面,只针对照片。

(2) 专利2[13]是通过检测人脸的眼睛区域是否存在亮瞳效应来区分真实人脸和照片视频中的人脸。亮瞳效应的判断是利用亮暗瞳差分图像的眼睛区域是否存在圆形亮斑而定。另外,采集亮瞳图像所涉及的设备包括红外摄像头和由LED灯做成的红外光源。优点:照片和视频都可以,使可靠性增加;缺点:需额外的设备。

(3) 专利3[14]利用共生矩阵和小波分析进行活体人脸检测。该方案将人脸区域的灰度图像首先进行16级灰度压缩,之后分别计算4个灰度共生矩阵(取矩阵为1,角度分别为0。、45。、90。、135。),然后在灰度共生矩阵的基础上再提取能量、熵、惯性矩和相关性四个纹理特征量,再次分别对四个灰度共生矩阵的4个纹理特征量求均值和方差;同时对原始图像利用Haar小波基进行二级分解,提取子带HH1,HH2的系数矩阵后求均值和方差;最后将所有的特征值作为待检测样本送入训练后的支持向量机中进行检测,分类识别真实和假冒人脸图像。优点:不需添加额外的辅助设备、不需要用户降低了计算复杂度,提高了检测准确率;缺点:只针对照片欺骗。

(4) 专利4[15]是一种基于HSV颜色空间统计特征的人脸活体检测方法,该方案将人脸图像从RGB颜色空间转换到YCrCb;然后进行预处理(肤色分割处理、去噪处理、数学形态学处理和标定连通区域边界处理)后获取人脸矩形区域的坐标;再对待检测的人脸图像分图像块,并获取待检测的人脸图像中的左右图像块的三个颜色分量的特征值;最后将归一化的特征值作为待检测样本送入训练好的支持向量中进行检测,确定包含人脸的图像是否为活体真实人脸图像。优点:不需添加额外的辅助设备和用户的主动配合,降低了人脸认证系统延时和计算复杂度,提高了检测准确率;缺点:只针对照片欺骗,阈值的设置为经验值。

(5) 专利5[16]使用的活体识别方法为通过摄像头在一定时间内拍摄多张人脸照片,预处理后提取每张照片的面部本特征信息,将先后得到的面部特征信息进行对比分析获取特征相似度,设置合理阈值,若相似度在阈值范围内,则认为有微表情产生,识别为活体,否则为非活体。优点:不需要人脸部做大量的表情配合动作;缺点:只针对照片欺骗。

(6) 专利6[17]主要基于人脸3D模型对所述人脸形状进行归一化处理,并获得所述人脸形状相对于人脸3D模型的旋转角度,将连续多帧图像的旋转角度连成一条曲线,判断该曲线是否满足设定要求,若满足,判断角度最大的一帧图像中人脸肤色区域面积比例是否大于K,若是,则判断为真实人脸,否则为虚假人脸。优点:误报率降低,速度快,用户体验好;缺点:需较大的计算时间和空间开销。

(7) 专利7[18]公开一种基于背景比对的视频和活体人脸的鉴别方法。首先对输入视频的每一帧图像进行人脸位置检测,很据检测出的人脸位置确定背景比对区域;然后选取输入视频中和背景比对区域在尺度空间上的极致点作为背景比对区域的特征点,得到背景特征点集Pt;再用Gabor小波变换描述图像I在背景特征点集Pt的特征,根据此结果定义活体度量L;如果活体度量L大于阈值θ,判断为活体,否则视为假冒视频。优点:解决仅通过单个摄像头进行视频人脸和活体人脸的计算机自动鉴别问题,不需用户配合,实时性较好;缺点:只针对视频欺骗。

(8) 专利8[19]提供了一种具有活体检测功能的双模态人脸认证方法。首先建立存储有已知身份人脸的可见光训练图像和近红外外训练图像的数据库;然后通过图像采集模块同时采集待认证人头部的可见光图像和近红外图像;采用人的脸部的人脸近红外图像与人脸可见光图像双模态特征的联合识别。优点:提高了识别认证精度,有效避免人脸存在较大变化情况下识别失败的问题,避免照片或者模型欺骗;缺点:需红外设备。

(9) 为更好地防止活体检测中的照片和视频剪辑方式等欺诈行为,专利9[20]不同之处在于,用户并不知道系统发出何种指令,要求用户做出何种动作,而且用户实现也并不知晓系统要求的动作完成次数。原因在于,预先定义了一个动作集(包括眨眼、扬眉、闭眼、瞪眼、微笑等),用户在进行活体检测时,系统每次都从动作集中选择一种或若干种动作,随机指定完成动作的次数,要求用户在规定的时间内完成它们。优点:更好地防止活体检测中的照片和视频剪辑方式等欺骗行为,活性检测的可靠性和安全性更高;缺点:需用户主动配合,容易受外部环境影响。

(10) 专利10[21]主要利用人脸面部运动和生理性运动来判断是照片还是真实人脸。人脸检测结果框内的人脸面部运动是在眼睛和嘴附近进行判断,依据运动区域中心坐标和人脸的眼睛的位置坐标之间,以及和嘴的位置坐标之间的欧式距离是否小于预定阈值。确定人脸生理性运动是根据运动区域内的运动方向为垂直方向的原理。优点:可靠性提高;缺点:只针对照片欺骗。

(11) 专利11[22]根据光流场对物体运动比较敏感,而真实人脸的眼部在姿势校正和眨眼过程中又比照片产生更大的光流,利用LK算法计算输入视频序列中相邻两帧的光流场,求得光流幅值,得到幅值较大的像素点数所占的比重,若比例足够大则标定为眼部发生了运动,从而判定为真实人脸。优点:系统的隐蔽性和安全性增强。缺点:只针对照片欺骗。

(12) 专利12[23]也是定位眼睛和嘴巴区域。根据采集的图片帧数(包含面部中眼睛和嘴巴等关键点)和特征平均差异值(由采集的两帧图片对应的特征值的加权欧式距离获得)的计算次数与预设值的比较,以及平均差异值与阈值的比较来判定是否为真实人脸。优点:解决了采用三维深度信息进行人脸活体检测时,计算量大的问题,以及应用场景约束的情况。

(13) 专利13[24]公开一种活体人脸的快速识别方法,其方案为:首先输入连续的人脸图像(若相邻两幅人脸图像不为同一状态则予以丢弃,重新多幅连续的人脸图像),对每幅人脸图像确定瞳孔位置并裁出人眼区域;然后通过支持向量机训练方法和AdaBoost训练方法对睁眼和闭眼样本进行训练,最后判断眼珠睁闭状态,若存在眨眼过程则通过活体判别。优点:有效拒绝非真实人脸欺骗识别,计算速度提高,不受应用场景的约束;缺点:需用户主动配合。

(14) 专利14[25]通过判断连续多帧图像中所获的眼睛或嘴巴区域的属性变化值(上眼皮的距离变化值或上下嘴唇间的距离变化值)的规律是否符合真实人脸的变化规律,若是,则判断为真实人脸,否则为虚假人脸。所采用的技术核心:将当前帧与前t帧的眼睛或嘴巴区域合并成一张图,采用基于深度学习的回归方法输出两帧图像中属性变化值,重复该步骤直至获得每帧图像的属性变化值;将所有属性变化值按帧时间顺序组成一向量,对各向量的长度进行设定,然后利用SVM分类器对所述向量进行分类,再判断分类结果是否满足设定动作下的真实人脸的变化规律。优点:检测精度高、速度快,针对照片和视频欺骗;缺点:需用户主动配合。

(15) 专利15[26]是通过眨眼动作进行活体检测。首先对人脸检测与眼睛定位;然后眼部区域截取,从归一化处理后的图像中图像中计算眼睛的开合程度;运用条件随机场理论建立用于判断眨眼动作的模型。优点:可仅通过单个摄像头进行鉴别;缺点:需用户主动配合,只针对照片欺骗。


(三)企业研发应用方面

对支付宝人脸登陆系统的活体检测功能进行了实际测试(iphone5S,支付宝最新版本9.5.1,人脸识别和活体检测模块是独立的,其活体检测只有采用了眨眼模式,之前还有点头),检测结果如下:

结论:

1.根据调查结果的实际应用技术,针对三种主要的欺骗手段,目前有以下几种应用广泛的活体检测方法:

2.从用户配合、对光照影响、是否需要附加设备、抵挡攻击、用户体验等方面对比了人脸识别系统中活体检测应用较多的7类具体方法,形成下表:

3.随着人脸识别系统的发展和演进,综上所述,研究开发一种新型高效鲁棒性好的人脸活体检测技术应该满足以下几个条件:

在线实时处理。活体检测过程应与人脸识别同时进行,越来越多的移动端需求给实时性提出越来越高的要求;

受光照等外界影响小。人脸识别验证系统的应用面临着许多场景,活体检测技术应满足多场景、多终端应用的要求,鲁棒性强;

用户界面自然,交互少,欺骗代价高。基于运动等的检测方法对用户来说,增加一系列的交互操作,不仅复杂度增加,可能需要附加的硬件设备支撑,所以新型的活体检测技术应该具有良好的用户体验,同时使得欺骗攻击的代价尽可能的高,保证安全性;

对欺骗有着优异的检测能力,同时对人脸识别特征提取起辅助作用。基于纹理或图像特征的活体检测方法是未来的主要趋势,那么这些特征的提取和分类同样能给人脸识别带来益处。

4. 一种可行的人脸活体检测框架:根据总结发现,纯粹的基于和(sum-rule)的理念可能并不适合活体检测,就好比“木桶效应”,伪造攻击只要抓住了短板,一样可以破解大部分基于sum-rule的方法。一种较好的方法是与此对应的多层次结合的概念,结合文献5、8、10、11所述的相关图像特性,可以着眼于图像全局特性分析(质量)和局部特性分析(LBP等)相结合。


参考文献

[1] O. Kahm and N. Damer, “2d face liveness detection: An overview,” inb Biometrics Special Interest Group (BIOSIG), 2012 BIOSIG-Proceedings of the International Conference of the. IEEE, 2012, pp. 1–12.

[2] A. Anjos, M. M. Chakka, and S. Marcel, “Motion-based countermeasures to photo attacks in face recognition,” IET Biometrics, vol. 3,no. 3, pp. 147–158, 2013.

[3] Wild P, Radu P, Chen L, et al. Robust multimodal face and fingerprint fusion in the presence of spoofing attacks[J]. Pattern Recognition, 2016, 50: 17-25.

[4] Boulkenafet Z, Komulainen J, Hadid A. face anti-spoofing based on color texture analysis[C]//Image Processing (ICIP), 2015 IEEE International Conference on. IEEE, 2015: 2636-2640.

[5] Galbally J, Marcel S, Fierrez J. Image quality assessment for fake biometric detection: Application to iris, fingerprint, and face recognition[J]. Image Processing, IEEE Transactions on, 2014, 23(2): 710-724.

[6] Chingovska I, Rabello dos Anjos A, Marcel S. Biometrics evaluation under spoofing attacks[J]. Information Forensics and Security, IEEE Transactions on, 2014, 9(12): 2264-2276.

[7] Pinto A, Robson Schwartz W, Pedrini H, et al. Using visual rhythms for detecting video-based facial spoof attacks[J]. Information Forensics and Security, IEEE Transactions on, 2015, 10(5): 1025-1038.

[8] Gragnaniello D, Poggi G, Sansone C, et al. An investigation of local descriptors for biometric spoofing detection[J]. Information Forensics and Security, IEEE Transactions on, 2015, 10(4): 849-863.

[9] Kim W, Suh S, Han J J. Face Liveness Detection From a Single Image via Diffusion Speed Model[J]. Image Processing, IEEE Transactions on, 2015, 24(8): 2456-2465.

[10] Pinto A, Pedrini H, Robson Schwartz W, et al. Face Spoofing Detection Through Visual Codebooks of Spectral Temporal Cubes[J]. Image Processing, IEEE Transactions on, 2015, 24(12): 4726-4740.

[11] Wen D, Han H, Jain A K. Face spoof detection with image distortion analysis[J]. Information Forensics and Security, IEEE Transactions on, 2015, 10(4): 746-761.

[12] 李冀,石燕,谭晓阳.一种应用于人脸识别的活体检测方法及系统:中国,101999900.2013-04-17.

[13] 秦华标,钟启标.基于亮瞳效应的人脸活体检测方法:中国,103106397.2013-05-15.

[14] 毋立芳,曹瑜,叶澄灿等.一种基于灰度共生矩阵和小波分析的活体人脸检测方法:中国,103605958.2014-02-26.

[15] 严迪群,王让定,刘华成等.一种基于HSV颜色空间特征的活体人脸检测方法:中国,103116763.2013-05-22.

[16] 傅常顺,杨文涛,徐明亮等.一种判别活体人脸的方法:中国,104361326.2014-02-18.

[17] 陈远浩.一种基于姿态信息的活体检测方法:中国,104794465.2015-07-22.

[18] 潘纲,吴朝晖,孙霖.基于背景比对的视频和活体人脸的鉴别方法:中国,101702198.2011-11-23.

[19] 徐勇,文嘉俊,徐佳杰等.一种活体检测功能的双模态人脸认证方法和系统:中国,101964056.2012-06-27.

[20] 王先基,陈友斌.一种活体人脸检测方法与系统:中国,103440479.2013-12-11.

[21] 丁晓青,王丽婷,方驰等.一种基于人脸生理性运动的活体检测方法及系统:中国,101159016.2008-04-09.

[22] 马争鸣,李静,刘金葵等. 一种在人脸识别中应用的活体检测方法:中国,101908140.2010-12-08.

[23] 黄磊,任智杰. 一种人脸活体检测方法及系统:中国,103679118.2014-03-26.

[24] 彭飞. 一种活体人脸的快速识别方法:中国,103400122.2013-11-20.

[25] 陈元浩. 一种基于相对属性的活体检测方法:中国,104794464.2015-07-22.

[26] 吴朝晖,潘纲,孙霖. 照片人脸与活体人脸的计算机自动鉴别方法:中国,100592322.2010-02-24.


人脸相关数据库 - marleylee的博客 - CSDN博客

$
0
0

在人脸检测、人脸识别和属性分析等方面,常用的 数据库可分为以下五部分。

1、人脸检测数据库:

(1999年发布)CMU+MIT:180幅图像,共734个人脸。包含3个正面人脸 测试子集和一个旋转人脸测试子集,其中正面人脸测试子集有130幅图像,共511个人脸;旋转人脸测试子集有50幅图像,共223个人脸。


(2010年发布)FDDB:2845幅图像,共5171个人脸。

(2012年发布)AFW:205幅图像,共468个人脸。由从Flickr采集的205幅图像组成,共468个人脸,其包含复杂的背景变化和人脸姿态变化等。


(2015年发布)MALF: 5250幅图像,共11931个人脸。
(2015年发布)IJB-A:24327幅图像,共49759个人脸
(2016年发布)WIDER:32203幅图像,共393703个人脸

2、人脸关键点检测数据库:

(2001年发布)BioID :约1000幅图像,每个人脸标定20个关键点。

https://www.bioid.com/About/BioID-Face-Database

(2011年发布)LFPW:1132幅图像,每个人脸标定29个关键点

http://neerajkumar.org/databases/lfpw/

(2011年发布)AFLW:25993幅图像,每个人标定21个关键点

https://lrs.icg.tugraz.at/research/aflw/

(2013年发布)COFW:1852幅图像,每个人脸标定29个关键点

http://www.vision.caltech.edu/xpburgos/

(2014年发布)ICCV13/MVFW :2500幅图像,每个人脸标定68个关键点

https://sites.google.com/site/junliangxing/codes

(2014年发布)OCFW: 3837幅图像,每个人脸标定68个关键点

https://sites.google.com/site/junliangxing/codes

(2016年发布)300-W :600幅图像,每个人标定68个关键点

http://ibug.doc.ic.ac.uk/resources/300-W_IMAVIS/

3、人脸识别数据库:

(2004年发布)CASPEAL:约1000个人,共约3万幅人脸图像

http://www.jdl.ac.cn/peal/index.html

(2008年发布)Multi-PIE:337个人,共约75万图像

http://www.flintbox.com/public/project/4742/

(2007年发布)LFW :5749个人,共13233幅人脸图像

http://vis-www.cs.umass.edu/lfw/

(2009年发布)PubFig :200个人,共58797幅人脸图像

http://www.cs.columbia.edu/CAVE/databases/pubfig/

(2014年发布)CASIAWebFace :10575个人,共49414幅人脸图像

http://www.cbsr.ia.ac.cn/english/CASIAWebFace-Database.html

(2014年发布)FaceScrub :530个人,共106863幅人脸图像

http://vintage.winklerbros.net/facescrub.html

(2016年发布)MegaFace :约69万个人,共约100万幅人脸图像

http://megaface.cs.washington.edu/


4、人脸属性识别数据库:

(1999年发布)JAFFE:10个人,共213幅人脸图像(表情识别)

http://www.kasrl.org/jaffe.html

(2010年发布)CK+ :123个人,共593段视频(表情识别)

http://www.pitt.edu/~emotion/ck-spread.htm

(2010年发布)MMI :75个人,共2900段视频(表情识别)

http://mmifacedb.eu/

(2003年发布)FG-NET:82个人,共1002幅人脸图像(年龄识别)

http:// www-prima.inrialpes.fr/FGnet/html/benchmarks.html 

(2006年发布)MORPH:13673个人,共55608 幅图像(年龄识别)

http://www.faceaginggroup.com/morph/

(2014年发布)Adience : 2284个人,共26580幅人脸图像(年龄、性别识别)

http://www.openu.ac.il/home/hassner/Adience/data.html

(2015年发布)IMDBWIKI :20284个人,共523051幅人脸图像(年龄、性别识别)

https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/

(2015年发布)CACD2000 :2000个人,共163446幅人脸图像(年龄识别)

http://bcsiriuschen.github.io/CARC/

(2015年发布)CelebA:10177个人,共202599幅人脸图像(属性识别)

http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html

5、其他数据库(活体检测):

YouTube 名人2008 47个人,共1910段视频

http://seqam.rutgers.edu/site/media/data_files/ytcelebrity.tar

YouTube 2011 1595个人,共3425段视频

http://www.cs.tau.ac.il/~wolf/ytfaces/

KFW 2012 533对亲属关系(KFW-I)和1000 对亲属关系(KFW-II)

http://www.kinfacew.com/download.html

CASIA 2012 50个人,每个人12段视频

http://www.cbsr.ia.ac.cn/english/FaceAntiSpoofDatabases.asp

Replay-Attack2012 50个人,每个人24段视频

https://www.idiap.ch/dataset/replayattack


活体检测数据库简介:

Database

Year of release

# subjects

# videos

Acquisition camera device

Attack type

Subject race

Subject gender

Subject age

NUAA [1]

2010

15

•24 genuine

• 33 spoof

•  Web-cam

(640 × 480)

• Printed photo

• Asian 100%

• Male 80%

• Female 20%

20 to 30

yrs

Idiap REPLAYATTACK [2][3][4]

2012

50

• 200 genuine

• 1,000 spoof

• MacBook 13’’  

camera (320 × 240)

• Printed photo

• Display photo

(mobile/HD)

• Replayed video

(mobile/HD)

• White 76%

• Asian 22%

• Black 2%

• Male 86%

• Female 14%

20 to 40

yrs

CASIA FASD [5]

2012

50

• 150 genuine

• 450 spoof

• Low-quality camera

(640 × 480)

• Normal-quality

camera (480  × 640)

• Sony NEX-5

camera (1280 × 720)

• Printed photo

Cut photo

• Replayed video

(HD)

• Asian 100%

• Male 86%

• Female 14%

20 to 35

yrs

MSU MFSD [6]

2014

55

• 110 genuine

• 330 spoof

• MacBook Air 13”

camera (640 × 480)

• Google Nexus 5

camera (720 × 480)

• Printed photo

• Replayed video

(mobile/HD)

• White 70%

• Asian 28%

• Black 2%

• Male 63%

• Female 37%

20 to 60

yrs

The Oulu-NPU face anti-spoofing  database

2016

55

• 990 genuine

• 3,960 spoof

• Front cameras of six mobile devices(1080×1920)

( Samsung Galaxy S6 edge,  HTC Desire EYEMEIZU X5ASUS Zenfone SelfieSony XPERIA C5 Ultra Dual and  OPPO N3)

• Two printed photo

• Two replayed video

(mobile/HD)

• White 4%

• Asian 96%

• Male 69%

•  Female31%

20 to 60

yrs

注:① MSU MFSD中55个人的数据,只有35个人的数据可以公开使用。

②“Cut photo attack”表示将打印图片中眼睛部位剪掉,攻击者用他的照片盖住他的脸,并且可以在洞里眨眼睛。


参考文献:
[1] 严严,陈日伟,王菡子.基于深度学习的人脸分析研究进展[J].厦门大学学报(自然科学版),2017,56(1):13-24.

[2]  Di Wen, Member, IEEE, Hu Han, Member, IEEE and Anil K. Jain, “Face Spoof Detection with Image Distortion Analysis”, in IEEE Transactions on Information Forensics and Security,2015,pp.1–16.

市场规模测算方法及影响因素

$
0
0

market-size1

市场规模简单来说就是通过货币指标来衡量一个行业的总体需求量。我们经常在一些初创公司的新闻稿,CEO讲话,行业研报中看到某一个行业是千亿级的市场,这里的千亿就是通过货币指标计算出的市场规模。
市场规模有两个特点,第一特点是量级都会很大,比如中国汽车共享出行市场规模3800亿/年,亲子游市场规模将达到492亿/年等等。这很容易理解,中国总人口数量庞大,任何消费级的市场都会非常庞大。第二个特点是同一个行业的市场规模会有很多种说法,因为这是一个估算值,没人说得清准确的规模是多大。大家都是按自己的逻辑推算出来的。那么市场规模究竟是如何计算的?不同的行业规模数字哪一个更靠谱呢?下面我们试着说明下市场规模的测算方法及影响因素有哪些。

1,常见的市场规模测算方法

市场规模的测算有两种方法,自上而下(Top Down)的方法和自下而上(Bottom Up)的方法进行测算。
第一种是自上而下的宏观推演,层层细分。先预估整体大行业的规模,然后逐层分解到自己所在行业的细分市场。比如,整个出行市场规模3800亿/年,专车市场占比30%,高端专车占其中的10%,那么高端专车市场的规模就是3800*30%*10%=114亿/年。
第二种是自下而上,先定位目标用户群和需求的频率,也就是需求量。然后再乘以单价计算出市场规模。写成公式就是(市场规模=需求量*价格)。比如亲子游的市场规模测算,国家统计局中2018年普通小学在校生8900万人,假设排除学校的活动外每年还会以家庭为单位去旅行的孩子占比10%,也就是890万人,每次旅行最少要有一个大人陪同,所以总人数再乘以2,为1780万人。假设每次旅行人均消费按3000元计算,那么亲子游市场规模为534亿/年。相比之下第二种自下而上的测算方法更强调用户,对用户的实际情况和场景的把握更准确一些,所以更多被使用。
第二种市场规模的测算方法虽然相对更准确,但细想一下还是会发现很多问题。首先推算逻辑过于简单粗暴,没有考虑各种影响因素和变量的影响。第二,其中包含很多假设条件及数据,其中任何一个假设条件出行问题都会影响最终的结果。第三,任何市场的形成都是供需匹配的结果,二者缺一不可。下面我们逐个说明。

2,不同市场类型决定了规模强弱

市场规模测算,顾名思义我们考虑的是整个需求市场的容量。但市场的形态分为很多种,每一种市场都有自己的特征和固有的天花板。市场规模的计算必须要锚定在特定的市场形态上。
已经存在的市场为存量市场,例如出行行业中的出租车市场等。之前从未出现过的叫新市场,例如专车市场,外卖市场等等。在存量市场中又可以分为强监管市场和自由竞争市场。例如金融,诊疗行业都是强监管市场,需要政府许可,相关拍照,并且受政策影响明显。餐饮,家电行业则属于自由竞争市场。
存量市场和新市场在测算市场规模时有显著的区别,新市场是从0到1对原有模式的颠覆,没有历史经验和数据可以借鉴。只能从商业模式中解决的痛点,用户的刚性进行预估。存量市场是从1到100对现有行业的改造和效率提升,价值要小于增量市场。存量市场里的强监管市场,则完全取决于政策的变化。而对于自由竞争的市场规模,我们则需要考虑市场的终极模式会是什么样子的。
除了市场的终极模式外,我们还需要动态的来看待市场和公司的变化,聪明的公司总是会想办法突破现有的天花板。例如滴滴最开始是基于出租车的存量市场,但随着与Uber的竞争进入到了专车的新增市场。

3,终极模式决定了实际市场占有率大小

每一个市场都会有竞争,市场的终极模式是指在动态的竞争过程中,最终每一家在市场中所占的份额情况。按前面的市场规模测算,如果市场终极模式是赢者通吃,一家独大的局面,那么理论上是没有问题的。但任何一个行业都很难被彻底垄断。一个充分竞争的市场,在有限的时间内能拿到5%的市场份额就已经很了不起了。
因此,市场的终局模式是一个必须考虑的因素。那么市场终局是由谁来决定呢?答案是所在的行业和商业模式。理论上需要有规模效应或网络效应的行业或模式最终都会演变为一家独大或双寡头制衡的情况。例如传统行业的电话,传真机和复印机等,使用的人越多规模效应越明显,效率提升越显著,这转换到互联网上就是QQ和微信。
而门槛较低且规模效应不明显的行业则会发展的较为分散,例如新闻,游戏,快消等行业。按照常识和人们的生活习惯,以及地域距离和成本等因素,很难有一家能够完全垄断。

4,市场驱动因素决定了市场增长瓶颈

最后再回来看文章开始列举的两个行业示例,出行市场和亲子旅游市场。在这两个市场的测算中我们的关注点都围绕在需求端。但任何一个市场的形成都是由供需共同作用的结果。从供需的角度来看,市场增长的驱动里可以来自需求端的拉动,也可以来自供给端的驱动。
通常情况下,从供给到需求驱动也是一个动态变化的过程。大部分行业刚开始的成长阶段都是由供给驱动,产能限制了能提供产品和服务的数量。到了成熟期后开始转由需求驱动。
通用的底层规律是:在开始阶段产能较弱,提供的产品较少,这时能保证产能和供给的公司会胜出,接下来产能会迅速增长,产品变得丰富,消费者面临选择恐惧,市场由供给驱动开始转向需求驱动。这时候能减少产品的方差,保证使用体验并做出品牌的公司会胜出。品牌多了以后就会更加依赖渠道触达用户,这时候渠道会有丰厚的利润,用户终端和媒体会胜出。市场最终转变为由需求驱动。
在出行市场中,出租车,专车和司机都是供给端。乘客需求增长到一定规模后供给就会成为市场规模的增长瓶颈,换句话说这时市场的整体规模就不是由乘客数量和使用频率决定了,而是有出租车,专车数量和司机数量决定了,更宏观来看可能还会受到城市路网结构和公共交通政策影响。对于亲子旅游市场也有同样的逻辑,亲子游的需求集中在寒暑假期间,在需求集中爆发时,火车和航空公司的运力,飞机数量。旅游目的地城市的酒店数量就是供给端的瓶颈。而这时市场规模的大小和增速也将由供给端决定。

5,市场规模影响因素总结

我们曾经看到有公司的创始人发文,在理想市场规模下踩过的5个深坑。理想的市场规模总是很丰满,但实际可触达的市场规模则显得有些骨感。所以,我们总结本篇文章的内容,建议你在任何场合看到或需要计算市场规模时,都请考虑以下几点:
1,当前的市场规模是如何测算的,计算逻辑是什么?
2,我们面对的是一个什么样的市场,增长潜力有多大?受哪些因素影响?
3,这个市场的终极模式会是什么样的?大概需要多长时间可以达到?
4,市场目前发展到什么阶段?驱动力是什么?增长的瓶颈可能在哪里?
—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“ 蓝鲸网站分析博客”。】—

年报季中的真实中国

$
0
0

2018年初,吉利用90亿美元收购奔驰汽车股权之后,李书福发表了长长的演说,核心思想只有一句——“中国汽车占全球市场比例还很低,我的梦想是让中国车跑遍世界。”

 

没人注意到的是,他并没有像前几年那样大谈特谈中国的市场有多么的广阔。

 

不到半年之后,中国的车市“一泄如注”。截止到今年3月份,全国的汽车销量已经连续九个月下滑。这在中国不长的汽车行业历史上,从来没有发生过。

 

同样在2018年初小米上市倒计时半年时,雷军面向员工发出了一封慷慨激昂的公开信,其中预测道,“2018年,中国手机市场规模将出现十多年来首次下降的趋势,同时品牌集中度也将进一步加剧,行业竞争将会更加惨烈。”

 

雷军在信中为小米设定的小目标——“10个季度内重返国内第一”目前还没有实现的迹象,但关于国内市场的判断却是一语成谶。

 

中国大陆的智能手机市场在2018年经历了最惨烈的出货衰退后,绝对数量重新回到了2014年的水平。而到了2019年一季度,这一销量数字再次下滑了12%。

 

身在行业中的大佬们,其实早就看到了各自行业的拐点将至。可对于普通人来说,似乎只有等看到腰斩的股价后,才会幡然醒悟——原来,盛宴已经结束了啊。

 


1

 


最近是A股的年报季。

 

看年报其实是件很有意思的事情,某种程度上来说,这是为数不多解决普通人和行业大佬之间信息不对称的途径。

 

毕竟关于年报里的这些数据,你和大佬之间的距离不过三四个月而已。

 

况且中国不像美国,没有几家公司会把管理层讨论经营情况的电话会议回放直接放在官网上。如果普通人想了解这些中国的“顶梁柱”公司们到底在想些什么,做些什么,除了被PR部门严格把控的那些宣传稿之外,几乎“唯一”的途径就是读年报了。

 

当然,公司年报的质量参差不齐。有的公司惜墨如金,除了把财务数据列一列,多一个字都不肯写;有的公司随便糊弄,让刚毕业的IR(投资者关系)同事负责写形势分析的部分。于是明明是个白酒公司,却非要从卖方研究报告里摘一段国际形势综述。

 

不过认真负责的公司总归还是有的,比如招行的定期报告就非常值得一读。

 

在去年的半年报中,招行曾经详细描述了金融去杠杆政策对于银行业乃至整个社会融资的重大影响。其逻辑层层深入,笔触冷静客观,让人叹服招行对行业困境的清楚认知之外,更钦佩其对定期报告的重视程度。

 

“随着金融去杠杆政策的持续推进,对信用的收缩效应逐步显现,金融环境呈现出显著的“宽货币、紧信用”特征。
受资管新规等新政影响,商业银行同业业务和表外资产快速收缩,而表内资产由于信贷额度、资本金约束、信用违约顾虑等原因难以充分承接表外融资需求,使得社会融资规模大幅回落,无风险利率与信贷利率的走势分化,信用利差抬升,信用风险发酵,企业违约事件不断。”招商银行2018年半年报


而今年年报中,除了被市场广为流传的“金葵花以上及以上资产客户数量只占2%,资产总额却占到零售客户的80%”这一扎心的二八定律之外,其实招行对2019年的经济展望也很有看头——

“基建投资动力有望触底回升,随着地方政府隐性债务摸底的完成,以及地方政府举债规则的明确,地方政府专项债、PPP等融资渠道有望更加通畅。
制造业投资中,采矿、冶金、石化等高能耗项目增速可能明显下降,但装备、信息等高技术投资增速有望上升,家居、建材等投资有望维持较高水平。随着进一步减税的落地,居民消费有望获得提振。”招商银行2018年度报告


除此之外,招行对分地区贷款情况的描述是这样的——

“本集团环渤海地区贷款余额占比上升较快……不良贷款主要集中在长三角地区、环渤海地区、西部地区,其中由于个别大户影响,环渤海地区不良贷款率有所上升。而从不良率来看,最高的是东北地区。”招商银行2018年度报告


哪里的经济引擎出了问题,一目了然。

 


2

 


更受关注的年度报告,当然是去年刚刚上市的新经济公司们。

 

之前只能在这些独角兽拿到融资的时候看到新闻通稿,说的无非是些用户量又增加了多少,哪些新业务发展迅速的套话。而上市之后,大家才不得不拿出真本事,写出真心话。

 

雷军照例在小米的年报前面写了一篇长长的“抒情散文”。看了他的董事长致辞之后再去看王兴或者马化腾的,会觉得索然无味。

 

不过雷军这次没有再提手机业务要重归行业老大的目标,转而表示要将公司核心战略升级为“手机+AloT”双引擎。

 

“未来五年,小米将All In AloT,专项投入至少人民币100亿元。”小米集团2018年度报告


不过去年雷军在AloT开发者大会上和“小爱同学”那段啼笑皆非的对话还让人记忆犹新,不知100亿元是否足够砸个Google Assistant出来。

 

小米还在年报中挺起胸脯宣布——

“我们终于可以骄傲地交上第一份全年答卷:2018年小米硬件综合净利率为正,小于1%……我们证明了用户利益与企业所得可以毫不对立的和谐俱存……我们失去的只是一时的硬件溢价毛利,得到的将是全世界。”小米集团2018年度报告


不知道小米的用户是否真的会感恩,股东心中又是否会五味杂陈,反正我是第一次看到上市公司把自己的净利率微薄说得如此义正言辞的。

 

当然,互联网圈的人都说这是小米的“三级火箭”战略——硬件只是第一级火箭,是流量入口,并非赚钱机器。


也罢,希望财报里只占收入10%不到的互联网服务板块,能尽快撑起小米的“载人卫星”吧。

 

美团的年报中,王兴没有写华丽的辞藻和煽动人心的话语,却明确提出会“更加审慎的投入和开展新业务”。


这对于一向在本地生活服务领域四面出击的美团来说,已经是个不寻常的说法。

 

具体来说,

“要提高网约车和共享单车业务的运营效率,并大幅缩减两者的经营亏损,以及加强与整个美团平台的战略协同作用。”美团点评2018年度报告


年报发出来没多久,我们就看到了这一战略被最高效的执行——摩拜彻底消失了,而网约车业务也明显收缩了。

 

除此之外,美团的财报还显示,其核心业务——餐饮外卖收入在2018年四季度出现了历史上的首次单季环比下跌,毛利率也环比下降了3.2%。


年报里对此的解释是——

“向一些在恶劣天气地区工作的骑手提供奖励,以确保我们在冬季的餐饮外卖配送能力和服务质量。”美团点评2018年度报告


看起来,美团对骑手的把控力并没有市场想象的那么强。

 

除了刚上市的独角兽之外,老牌互联网龙头腾讯的年报当然也备受关注。

 

看腾讯的年报,最有趣的点是在前后两年的年报中“找不同”。

 

譬如从2017年度的业绩新闻稿开始,腾讯曾经悄然改版了沿用四年的公司介绍。

 

2013-2016年版本:


“……每天,数以亿计的用户通过我们的整合平台在线沟通、分享经历、获取资讯和寻求娱乐。腾讯多元化的服务包括:社交和通信服务 QQ 及微信/WeChat、社交网络平台 QQ 空间、腾讯游戏旗下QQ 游戏平台、门户网站腾讯网(QQ.com)、腾讯新闻客户端和网络视频服务腾讯视频。通过投资创新、为合作伙伴提供双互共赢的环境和贴近用户的需求,腾讯致力与互联网共同发展。”

 

2017年一季度以来版本:


“……公司旗下社交网络及通信平台微信和 QQ  将用户连接到多元化的数字内容,包括游戏、视频、音乐和文学。腾讯自主开发的目标用户定向技术 协助广告主触达数以亿计的中国消费者。在基础设施服务方面,腾讯在移动支付、网络安全、云服务及人工智能等范畴提供与别不同的产品, 促进合作伙伴的业务增长。 腾讯大力投资于人才及推动科技创新,务求与互联网行业共同发展。”


看到没?广告成了核心,为合作伙伴提供的产品也被提到了最重要的位置。


而去年和今年的年报中,腾讯对来年业务的展望更值得玩味。


去年年报对2018年的展望是——

“采取更进取的投资策略,以增强在网络视频、支付相关服务、云服务及人工智能技术与智慧零售等领域的长期竞争优势。”腾讯控股2017年度报告


而到了今年,展望则变成了——

“投资于核心基础设施及前沿技术,以拥抱产业互联网的发展趋势。通过持续扩展及互相连接的开放型生态系统,我们助力企业合作伙伴加强与用户的连接。凭借我们的创新科技及技术能力,我们致力协助各产业实现数字化升级和转型。”腾讯控股2018年度报告


看到区别了吗?连最受益于to C端蓬勃发展的腾讯,也全面走向to B了。

 


3

 


回到开头的问题,中国的消费到底出了什么问题?地产龙头万科在年报中给出了自己的思考——

 

“从人口总量的角度看,我国的“少子化”、“老龄化”趋势已毋庸置疑。90后比80后人口少3,100万,00后又比90后少4,100万。这在很大程度上会对冲掉城市化率继续提升带来的新增需求。
而人口总量的变化,所影响的绝不仅仅是房地产的需求。2018年社会消费品零售总额增幅创出新低,乘用车、部分家电产品更出现了销售量的大幅下滑,都在一定程度上佐证着人口趋势对经济的影响。”万科2018年度报告

 

杞人忧天吗?危言耸听吗?但这并不是随便一家地产商说出来的话,而是一家在全国坐拥2500个小区物业管理,服务超过500万户家庭的 “生活服务商”的思考。


在这些小区的一花一世界里,万科又看到了什么?

 

不过,不管消费市场如何变迁,有些公司始终淡定自若。譬如茅台就在年报里说的很敞亮了——

“作为一种 稀缺资源,茅台酒供求紧张、产品短缺的特征短期内不会改变,市场基本面仍将稳定,市场需求仍会是上升趋势,将保持持续、稳定、健康发展的良好势头。”茅台集团2018年度报告


新经济公司敢把自己的业务说的天花乱坠,但有谁敢叫自己的商品是“稀缺资源”呢?


这大概也是为什么,独角兽们批量上市后,今年涨的欢的却还是传统行业的龙头公司——说到底,在一级市场混可以靠讲故事,来到二级市场可就要靠真金白银了。





律师执业风险的四个误区

$
0
0

上海前几天,宣布了一名律师在套路贷案中诈骗罪名成立。我更愿意相信,不少律师涉案,是自己实在没预测到这种刑事风险。我国刑事打击往往是滞后的,前几年去报案还不会受理的事情,过了多年,就成了恶势力黑社会了,可为天网恢恢,疏而不漏。我跳开这个案子,想写一点执业风险,以提供给年青律师参考,以免无意落入网罗。

一般指控律师参与客户犯罪,其逻辑建立在律师是明知客户系套路贷或P2P的违法经营,而提供了(法律上或法律外)帮助。公诉机关认为,不管是谁,你明知违法行为,而提供了帮助,就是参与了犯罪活动。当然,这是一种简单的逻辑。我也注意到很多律师在辩护类似案件中,会提到律师的执业豁免。但是,执业豁免也会存在误区。

第一个误区是执业豁免只针对律师保密义务和法庭内言论豁免。律师执业豁免本身,无法豁免掉,你参与犯罪,不管你是律师,还是法官,任何人都不能豁免,律师能豁免的,是涉及保密义务,如律师法规定的,如当事人告诉你一些司法机关不知道的犯罪事实,律师没有义务告诉司法机关,但是,委托人或者其他人准备或者正在实施的危害国家安全、公共安全以及其他严重危害他人人身、财产安全的犯罪事实和信息除外。另外,关于庭内律师言论的豁免,除了危害国家安全等,其他也不受追究。因此,法律上,律师执业豁免,往往只指保密义务和言论方面的。实际上指控律师执业活动中涉嫌犯罪的行为,执业豁免,很难作为防火墙,这个防火墙,实际上是指中立客观的帮助行为,后面会论述到。

第二个误区是,违法性认识不一定要认识到是犯罪,可能认识到违法性即可。有辩护人认为律师没有犯罪故意,有一个观点是,要区分认识违法行为和认识(明知)他人是犯罪行为是不同的概念。这一点在法理上有争议,关于违法性认知,很多文章认为,只要你知道违法就行了。现实中很多判决也不管你,是否知道是犯罪,只要你知道违法即可。所以,一旦认识到客户行为的违法性,你就要考虑是否继续提供法律服务?这里是本文要讨论的重点。

第三个误区是,如果我知道客户的行为是违法的,然而,我提供的行为,全部是法律上允许的,就一定不会构成共同犯罪。这大概是我们经常可以看到国外黑社会电影里,黑社会也有常用律师。他只处理黑社会组织的合法事务。在我国的司法现实,未必如此。

假如律师知道客户存在非法经营,但我只做和非法经营无关的事务,如客户既经营合法业务,也经营非法业务,如出租车辆有牌照,但金融放贷业务没牌照。你只做出租车业务方面的法律服务。那肯定没问题。如果你做金融放贷业务方面的法律诉讼,需要警惕,虽然不一定构成犯罪,但容易被人利用。在某些案件中,检察机关的指控逻辑是,你明知被人利用,也去做这些发律师函,诉讼,调解,这样等于是参与犯罪了。

如果知道客户的行为违法,还有几个罪名在等着律师,如虚假诉讼罪,如提供伪证罪,另外,P2P,套路贷,律师都有介入,做法律顾问的,有的律师没事,有的律师就出事了。作为律师,如果感觉客户的经营模式,明显违反了法律,不管你是否认识到这是犯罪,都应当予以警惕。其实,我觉得林律师的案子,不管谁去做,都不会认为这是犯罪,因为以前套路贷也是作为民间借贷去处理,现在因为问题多,引发了社会不稳定,所以,专门出台司法解释来打击,公安也开始立案了。因此,遇到这些灰色地带时,律师就该警醒。我国对律师执业伦理的讨论,远远没有深入。而我国刑法的共犯理论,确实如金宏伟律师所说,你是卖刀的,你明知客户要去杀人,你卖刀给他,你就可能构成共犯。这样简单粗暴的逻辑,也符合某种共犯理论。

对于客观中立的帮助犯,张明楷教授书中,有四种观点,入罪的认为,知道别人去犯罪,提供帮助就是共犯。第二种认为,中立行为是客观的,或者就是执业行为范围内的正常行为,就不构成犯罪。第三种观点,这种帮助行为有意识地直接促进犯罪,或行为人要明知该行为的唯一目的是犯罪,就认定是帮助犯。张明楷教授的观点是,应当通过综合考虑正犯行为的紧迫性,帮助者对法益的保护义务,行为对法益侵害所起的作用大小以及行为人对正犯行为与结果的确实性认识等要素,得出妥当结论。如果甲杀人行为并不紧迫,或者A只是大体上估计对方将来可能实施犯罪,对A的日常生活行为不宜认定为犯罪。反之,向正在行凶的人出售利刃的,成立帮助犯。(张明楷《刑法学》第五版424-425页)。从这个观点看,青海林律师的行为,应该够不上帮助犯。因为法律诉讼不紧急,加上律师对当事人实施暴力要债,也不明知。

第四个误区,关于私下收费和去搞关系的承诺。私下收费在律师业中不鲜见。但私下收费,如果加上一些有意无意的口头承诺,去搞关系。你可能认为自己是为揽业务,做点虚假广告。但一旦有证据,比如被录音,麻烦就大了。你如果不去搞关系,就可能被指控涉嫌诈骗罪,一旦真的很诚信去行贿了,罪名是行贿罪。当然,行贿罪更轻一点。真正构成诈骗罪,这点在法律上是有争议的,但就算有争议,也有几个同行被这样判了,被这样起诉了。所以,要避免风险的是,不要私下收费,更不要做任何承诺。我以上那么多提出的理论,仅仅是理论,大家都可以探讨,但是律师最好作为参与探讨的人,而不是作为被探讨的对象,到了案件当中,就算最后无罪,也被扒层皮了。更何况,我国无罪率大家都清楚,和买彩票差不多。

有时办刑事案子,发现很多执法人员涉嫌刑讯逼供,或者就是违法不让会见,但被追究的很少,往往是出了很严重的后果,才可能启动追究程序。这个一方面是立法的问题,有意留后门,你去看对执法人员入刑的门槛很高。其次,是追责的启动者,往往是刘关张关系。执法机关的头,往往也是很厉害的人,而作为头,保护好弟兄,往往是第一要务,要不然人心散了,队伍不好带了。律师们应该自知,自己的分量,角色。一个家庭培养一个律师不容易。我只提醒年青律师们,要注意风险。鉴于形势和社会越来越复杂,刑法的罗网越来越密,执行层面看,权力机构的制约也没有很有效。因此,没有一个行业的从业者是足够安全的。如前司法部长张军所说,要谨言慎行。当然,就算谨言慎行,也不能保证所有律师都是安全的,都有例外。人生唯一确定的,就是不确定性。本文只是提醒,大家看清误区,绕开陷阱。何况,如今大时代,山雨欲来风满楼,阮籍诗:适逢商风起,羽翼自摧藏。

2016年4月16日,斯伟江​​​

[译] 选择 FaaS 还是微服务?

$
0
0

作者:Christian Posta
译者:李琪
审校:孙海洲、吴钧泽
原文:https://dzone.com/articles/faas-vs-microservices

在做项目的云原生改造时我们可以采用微服务架构。DevOps和自动化构建两方面的成功经验对微服务的实践很有帮助。经过一段时间的实践,你可能会有将微服务架构推广到其他部门的想法。而你担心微服务本身的复杂性和分布式系统的高维护成本会让其他部门难以接受它。可能在我们想方设法解决微服务带来的问题时,总会有些人觉得这样做毫无意义。因为现在技术发展如此之快,总会出现更好的技术方案,你能保证自己在微服务领域所做的工作最后没有白费吗?

我认为不会白费!

现在“serverless”和“functions-as-a-service”(FAAS)还处于早期的炒作阶段。有些人觉得serverless就是下一代的微服务,所以我们应该跳过当前的微服务模式而直接采用serverless。其实这种说法是有点夸大其词。作为架构师或开发者,我们通过学习新技术来提升自身能力让自己变得更"值钱"并没有错。但我们也要以务实态度来判断是否应该采用新技术。虽然持续跟进最新技术是我们作为架构师的职责所在,但掌握在之前的产品和IT部门引用新技术的时机也很重要。我们可以通过下面的模块来理解微服务架构和serverless,从而让它们可以更好的融入我们的技术栈。

首先,我们需要知道为什么我们需要微服务。选用微服务架构的主要原因就是避免项目的体量阻碍产品的迭代,所有微服务其他的优势都是基于这点。更快的迭代速度意味着可以更快的为客户交付新功能/修改,从而更快的验证这些改动能够带来的效果。我们需要快速的知道自己所做的努力是否能够带来好的效果,如果不能就要马上调整方向。快速迭代就是微服务架构的核心优势。

对于大多数的团队而言,至少有一部分应用能从微服务的迭代过程中获益。因此作为架构师或开发者,我们不要因为采用微服务有门槛就对其失去信心。实践微服务的重要步骤就是确定和测量改进指标。改进指标一般可以为每天迭代应用的次数、保证迭代应用稳定性的方法等。

另一方面,不是所有的应用都需要用这种松散而复杂的方式来保证服务的迭代速度。如果只想简单做个应用来验证自己创意的商业价值,那你完全可以选择更加适合的架构。这时采用MVP测试(最小可行性测试)就是个很好的方案。如果你因为商业价值很低而打算放弃的话,那也只是放弃了一个MVP应用。你可以非常快的迭代它并从潜在的用户中获得反馈。在这种情况下,你可能需要根据反馈反复修改API、功能边界、组件等。所以过早就将组件功能做成分布式的服务也会拖慢产品的发布速度。你想修改分布式组件和它的api就必须在各个团队间进行协调。

上述观点能够反映出微服务架构和单体架构适用不同的场景。而事实上并没有所谓"一招鲜吃遍天“的方案。当我们在微服务架构和单体架构之间纠结时,还需要考虑到所需服务是否已经存在以及它提供服务的方式(第三方服务/公司内部服务)。我们完全可以充分利用当前已有服务来构建我们的应用,不必重新购买硬件、安装和修补操作系统,以及优化服务从而达到最高吞吐量,而这也正是云及其服务存在的意义。云供应商和他们的合作伙伴能提供数据库、消息队列、缓存、CDN和其他更高级的功能: 例如语言翻译、地图/地理空间地图、天气等。我们可以组合各种按量付费的服务来构建自己的应用。如果在使用某个服务的时候无需关心安装、参数和容量等问题,其实我们就已经在采用serverless架构了。serverless架构的特点就是可以重用已经存在的service,而无需关心运行服务需要消耗些什么。

函数即服务和serverless具有某种联系,因为它利用了缩小到单个应用程序函数的范围的计算模型,而这有助于将各种服务组合在一起构建应用。在这种模型下,功能按需分解,你只需为使用的功能付费。它特别适合对我们使用的服务进行按需计费和按量付费。这样一来我们能够构建弹性应用,而不需要考虑复杂的技术问题。将这些复杂的技术问题外包给别人可以让你更专注于为客户提供商业价值。

但是将这部分能力外包不总是可行的。如果选择云服务,我们就丧失了对程序运行时、具体功能、bug修复和接受监管的控制力。这也是需要考虑的一部分。

serverless不一定是完整的“公有云或无云”方案。如果以单个组织的角度来看,"serverless"可能只是代表整个体系的其他部分。例如:零售业务可以为组织内部其他服务或第三方提供“购买“服务以支持诸如分析、推荐以及其他使用“购买”服务的应用。利用定义良好的API和订阅并消费API的工作负载,你可以在自己的基础设施为微服务应用或单体应用提供serverless能力。在很多时候这其实就是服务向SOA架构进化的方向。但它们之间最大的不同就是在你将组织看作一个整体时,自己给自己的其他部分提供服务并不算serverless。因为此时还是需要自己手动的去安装、管理和更新应用。

最终采用哪种方案其实取决于很多因素,例如:业务、商业目标、软件部门对该技术的熟练度和历史遗留问题等。如果你觉得应该采用微服务架构,那就不要因为其他新技术而分心。我们可以持续跟进最新技术,从而保证适时的采用它们。总的来讲,不管是微服务架构、单体架构还是serverless架构,它们都有自己的应用场景。

智慧城市“黑科技”:国内厂商泰瑞SmartEarth首发数字孪生战略

$
0
0

在Gartner发布的2019年十大战略性技术趋势中,数字孪生技术(Digital Twin)被认为在未来5年将产生破坏性创新,并带来商业机遇。

只是由于比较早期,该技术依然停留在概念推广阶段。一般而言,数字孪生是现实世界或系统的数字化表现,可为真实设备构造一个虚拟模型以降低维护难度与成本,可以说,万物皆可数字孪生,人、物、设备、城市部件、建筑等,在数字世界都有孪生体平行发展互相作用。

目前在巨头中,发布此项技术的并不多(微软发布过Azure Digital Twin),但在工业场景、自动驾驶和智慧城市场景中,数字孪生将有广泛应用。

尤其在国内,虽然经历了短暂的A股热潮数字孪生、边缘计算等概念,但是真正落地的企业很少。4月17日,泰瑞数创正式发布其数字孪生战略,宣布建立数字孪生品牌“泰瑞SmartEarth”,这可能成为国内企业正式入局数字孪生的一次标志性举动。

泰瑞数创科技创始人兼 CEO刘俊伟在会上表示,泰瑞SmartEarth致力于研发并利用更好的技术生产数字孪生数据,企业将重点聚焦智慧城市、智能工业和自动驾驶三大领域。

城市“复杂巨系统”与数字孪生如何打通?

实际上,这就涉及到智慧城市中地理数据测绘方式的改变。目前业界最前沿的就是实景三维数据。

据雷锋网了解,虽然GIS(地理信息系统)在城市规划、管理中的工具属性越来越突出,但是二维的GIS因为无法完全显示地形、环境、空间结构,加上虚拟三维的成本极高,因此以地理影像技术为基础的实景三维技术成为新的升级方向。

在这个技术中,新增了连续的地面可量测影像库作为新的数据源,并通过开放的软件与GIS无缝集成。中国测绘科学研究院副院长李成名表示,实景三维将成为智慧城市建设的信息化基础设施,用以支持各类政务和行业应用的开发。未来5-10年,我国将构建好国家全息地理实体数据库,实现基础测绘的转型升级。

因此,从事智慧城市开发、数字孪生技术打磨的企业,务必是需要具备一定的测绘技术并获得地理信息数据的。基于此,泰瑞SmartEarth还宣布收购遥感测绘仪器研发领域的甲级测绘航空摄影资质企业上海航遥信息技术有限公司。泰瑞数创科技创始人兼 CEO刘俊伟表示,这很好地弥补了他们在高精度传感器的研发能力上的不足。

据悉,航遥团队核心人员来自于中国科学院上海技术物理研究所,自2012年开始他们面向市场需求,研发了系列化多视角航空摄影测量系统以及高/多光谱航摄传感装备,提供了自然资源和环保水利行业的新型变化检测技术手段。

比如,其自主研发的中国首台摆扫式立体测绘航空相机ASC4100,选用四台一亿像素中画幅航空照相机,利用下视双拼相机和后视双拼相机同时成像的原理,通过面阵凝视扫描成像技术,借助传感器扫摆实现102°大视场角成像的功能,再结合相邻航线相反方向飞行和大重叠率拍照的飞行设计方案,实现获取地面景物的顶部和前后左右多方向大重叠高分辨率的航空影像,实现三维立体测绘。

该项收购将完善泰瑞SmartEarth在前端数字孪生实景三维数据方面的采集技术能力,做到轻松完成城市级、精度可达2cm的数据采集。

数字孪生将带来智慧城市的“破坏性创新”

“现在的智慧城市建设,毫不夸张的说,有一种简单堆砌之感,就是信息化时代的各个场景,现在只是稍微做了串联,只是物理上的变化。然而数字孪生的出现,促成的是城市的化学变化,由点到线再到面,最终立体化。”中国信通院产业与规划研究所副总工程师高艳丽如此表示。

据雷锋网观察,从技术动因上来分析为什么提出数字孪生,可以发现当下AI、区块链、大数据、云计算、边缘计算、泛在感知、5G、量子通信正如日中天,且越发成熟,感知与控制及其相互作用将形成稳定的智能能力,一幅技术拼图正在形成。

对应到城市管理,物理世界和数字世界有了最好的转化模型,各种城市大脑涌现。

以分领域信息化建设为主的智慧城市,势必会需要一个成熟的大脑平台来承载技术,并横向打通数据和业务。但与之相比,数字孪生下的城市与物理城市是同步规划、同步建设的,协同的能力可能更强。

如何理解?比如当城市想建一座工厂,但不知道位置在哪里会比较合适,这时可以现在数字孪生城市中先测验,以观察其对其他城市要素带来的改变,综合评估选址的合理性。

另外,数字孪生是“在虚拟世界仿真、在物理世界执行”的技术,管理人员可以在后台智能操控比如一架无人机的使用,用以测绘、扫描、商品物流等。以虚控实,城市可进行“一盘棋”管理。

在应用上,数字孪生由小场景走向大场景:从汽车、飞机到车厂、石油厂,最后就是面临城市这个巨大、复杂的系统,进入多学科交叉的综合领域。

据了解,目前雄安新区、虚拟新加坡、法国雷恩3D城市等项目已经开展数字孪生探索实践,未来这些经验将会被有效移植。

雷锋网总结:数字孪生核心是城市信息模型

目前,我国智慧城市建设总体向好,城市多、发展快、政府决心大,只是数字孪生在广泛普及中,需要利用GIS、BIM、实景三维等技术构建统一的城市信息模型,进行数据加载和智能使用。

只有突破核心、抓住关键,城市大脑等平台才能进行综合指挥,对于政府来说,数字孪生才是一把城市治理的利器。

2张图带你看懂今日头条推荐系统

$
0
0

推荐系统是一个策略行为,本文将用两张图,来带你看懂今日头条的推荐系统。

推荐系统的“前身”

2016年,腾讯以80亿美元估值投资今日头条,结果大家都知道,张一鸣拒绝了腾讯的投资,现在大家也知道,字节跳动估值750亿美元,这一切,推荐系统功不可没。

因为搜索引擎和推荐系统太相似,相对来说也更简单(勿喷),所以我们先来了解一下搜索引擎。至于搜素引擎是不是推荐系统的前身,我很懒,没有考察。

如上图,搜索引擎分成为离线部分和在线部分,每一部分有不同的使命。

简单来说,搜索引擎的离线部分,专注于内容的搜集和处理。搜索引擎通过网络爬虫抓取网站上的原始内容,并将内容建立索引。这些内容会根据搜索系统的不同要求建立不同的索引体系,比如新闻类型的内容,会建立时效性的索引数据。

搜索引擎的在线部分,负责响应用户的搜索请求,完成内容的筛选和排序,并将最终结果返回给用户。我们举一个例子来说明这个流程:

  1. 用户在搜索引擎输入一个关键词NBA,搜索引擎搜索会对关键词进行分析、变换、扩充和纠错等处理,比如发现美职篮与NBA是同义词,就会将其扩充。
  2. 接下来,搜索引擎会通过多种方式从不同索引数据获得候选集,这个环节叫召回。
  3. 得到候选集后,搜索引擎通过更精细的计算模型对每一篇候选内容进行分值计算,对候选集的每一项进行排序。
  4. 这个时候,还不能将结果展示给用户,需要经过规则干预这一过程。这个过程服务于特定的产品目的。假如有这样一条“官方网站保护规则,确保所有品牌搜索词都可以优先返回官网”,则此时就会将官网插入并置顶,最后再将结果展示给用户。
  5. 此时,搜索引擎的工作还未结束。搜索引擎会根据用户的点击反馈去优化排序模型。比如,大部分用户都没有点击文章10,则文章10后续就不会获得更靠前的展现位置。

对以上两图进行总结就是下图,就是想让你们看的第一张图:

今日头条的推荐系统

通过上“一”张图,我们明白了搜索引擎的原理(无论怎样我都会装作你看懂了),而今日头条的这张图,就是比上图上多了一笔,考虑到这两张图高度相似,我这么懒的人,当然是不会去画的了,你们发挥想象吧。

其实,推荐系统也有离线部分和在线部分。上图(那不是图,是PNG)即是推荐系统的离线部分,与搜索引擎大同小异。

  1. 和搜索引擎一样,推荐系统也需要获取内容。推荐系统通过数据库导入、协议同步和用户提交等方式获取推荐内容。区别于搜索引擎,推荐系统获取内容的方式较多,且内容的结构化程度要远胜于搜索引擎爬虫抓取的内容。
  2. 推荐系统也需要将待推荐的内容进行索引化处理,这一点与搜索引擎较为相似。推荐系统的维度会更多。

接下来,就是推荐系统的在线部分了。天啊,看到上图,发现推荐系统真的和搜索引擎太像了,就多了一笔。

  1. 搜索引擎的输入为用户的搜索关键词,推荐系统同样需要输入,只是这个过程用户没有感知,对推荐系统来说,它的输入为场景信息,比如时间、地点和设备等。
  2. 搜索引擎获得输入后,会进行关键词处理,对于推荐系统来说,会进行用户画像查询。这个案例中,推荐系统了解到,该用户在实体词维度,对NBA感兴趣,在分类维度,对体育和科技感兴趣。
  3. 查询到用户画像后,推荐系统就进入召回环节。它通过多种方式,根据用户画像查询结果“NBA、体育和科技”,从不同索引数据里获得候选集合。
  4. 在召回完成后,和搜索引擎一样,推荐系统按照预定预估目标对候选集进行排序。
  5. 同样,推荐系统也需要经过规则干预步骤后,才会将最终结果展示给用户。
  6. 对于最后一步,用户的各种动作行为,在搜索引擎里,会持续优化排序模型,在推荐系统里,还会持续改进自身的画像。

对以上两图进行总结就是下图,就是想让你们看的第二张PNG(图):

推荐系统的本质

通过对搜索引擎和推荐系统的两张图,我们大致明白了推荐系统是怎么个一回事。实际上,推荐系统是一个策略行为。对于策略,他有四要素,分别是:

  1. 待解决问题
  2. 输入(影响解决方案的因素)
  3. 计算逻辑(将输入转换成输出的规则)
  4. 输出(具体的解决方案)

对于今日头条来说:

它待解决的问题是“从海量的内容中,找到用户喜欢的内容”;

他的输入是“用户画像和内容特征”;

计算逻辑:将这些内容特征按一定规则转化为喜欢度;

输出:将内容按喜欢度从高到低排序。

由于我推荐系统的课程还未结束,先不展开这部分内容了。后面博客会对上文进行展开,有兴趣的同学,欢迎关注。

说明:以上内容来源于个人阅读和付费课程的归纳整理。

 

本文由 @皮带 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议


9 个用于构建容错系统的开源工具

$
0
0

我一直对 Web 开发和软件架构很感兴趣,因为我希望对一个可以工作的系统有一个整体的了解。无论你正在构建移动应用程序还是 Web 应用程序,它都必须连接到互联网,以便在不同的模块之间交换数据,这意味着你需要一个 Web 服务。

如果使用云系统作为应用程序的后端,则可以利用更强大的计算能力,因为后端服务可以横向和纵向伸缩,并编排不同的服务。但是,无论你是否使用云后端,构建一个 容错系统都是非常重要的——一个有弹性、稳定、快速和安全的容错系统。

为了理解容错系统,让我们以 Facebook、Amazon、谷歌和 Netflix 为例。数以百万计的用户同时访问这些平台,同时通过点对点和用户服务器(user-to-server)网络传输大量数据,而且可以肯定,其中有恶意用户,比如黑客攻击或拒绝服务攻击(DoS)。即便如此,这些平台仍然可以一天 24 小时、一年 365 天不停机地运行。

尽管机器学习和智能算法是这些系统的核心,但它们能够在没有一分钟停机的情况下实现一致的服务,这一点值得称赞。它们昂贵的硬件和庞大的数据中心当然很重要,但支持这些服务的优雅的软件设计也同样重要。而容错系统正是构建这样一个优雅系统的原则之一。

两种导致生产问题的行为

这里有另一种考虑容错系统的方式。当你在本地运行应用程序服务时,一切似乎都很好。太棒了!但是,当你将你的服务推到生产环境时,一切都乱了套。在这种情况下,容错系统有助于解决两个问题:故障停止行为(Fail-stop behavior)和拜占庭行为(Byzantine behavior)。

故障停止行为

故障停止行为是指正在运行的系统突然停止或部分系统发生故障。服务器停机和数据库不可访问属于这一类。例如,在下面的图中,Service 1 不能与 Service 2 通信,因为 Service 2 是不可访问的:

但是,如果服务之间存在网络问题,也会出现这种问题,如下所示:

拜占庭行为

拜占庭行为是指系统持续运行,但没有产生预期的行为(例如,错误的数据或无效的值)。

如果 Service 2 损坏了数据或值,拜占庭式的故障就会发生,即使服务看起来运行得很好,就像在这个例子中:

或者,可能有一个恶意的中间人在服务之间拦截并注入不需要的数据:

无论是故障停止还是拜占庭行为都不是我们想要的情况,所以我们需要有方法可以防止或修复它们。这就是容错系统发挥作用的地方。以下 9 个开源工具可以帮助你解决这些问题。

构建容错系统的工具

尽管构建一个真正实用的容错系统涉及到深入的 分布式计算理论和复杂的计算机科学原理,但是有许多软件工具——其中有许多是开源工具,如下面这些——可以通过构建容错系统来减轻不良影响。

断路器模式:Hystrix 和 Resilience4j

断路器模式是一种技术,在服务失败时帮助返回一个准备好的虚拟响应或简单响应:

Netflix 开源的 Hystrix是最流行的断路器模式实现。

我以前工作过的许多公司都在使用这个很棒的工具。令人惊讶的是,Netflix 宣布将不再更新 Hystrix。(是的, 我知道。)相反,Netflix 建议使用另一种解决方案,如支持 Java 8 和函数式编程的 Resilence4j,或另一种方案 Adaptive Concurrency Limit

负载均衡:Nginx 和 HaProxy

负载均衡是分布式系统中最基本的概念之一,必须提供一个高质量的生产环境。要理解负载均衡器,首先需要理解 冗余的概念。每个生产质量的 Web 服务都有多个服务器以提供冗余,以便在服务器宕机时接管和保持服务。

想想现代飞机:它们的双引擎提供了冗余,即使引擎着火也能安全着陆。(大多数商用飞机拥有最先进的自动化系统,这也提供了帮助。)但是,拥有多个引擎(或服务器)意味着必须有某种调度机制,以便在发生故障时有效地路由系统。

负载均衡器是通过平衡多个服务器节点来优化高流量事务的设备或软件。例如,当数千个请求进来时,负载均衡器充当中间层,在不同的服务器之间路由和平均分配流量。如果服务器宕机,负载均衡器就将请求转发给运行良好的其他服务器。

有许多可用的负载均衡器,但最著名的两个是 Nginx 和 HaProxy。

Nginx不仅仅是一个负载均衡器。它还是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器。Groupon、Capital One、Adobe 和 NASA 等公司都在使用它。

HaProxy也很受欢迎,因为它是一个免费的、非常快速和可靠的解决方案,为基于 TCP 和 HTTP 的应用程序提供高可用性、负载均衡和代理。许多大型互联网公司,包括 GitHub、Reddit、Twitter 和 Stack Overflow 都在使用 HaProxy。是的,Red Hat Enterprise Linux 也支持 HaProxy 配置。

Actor 模型:Akka

Actor 模型是一种并发设计模式,当 actor(基本计算单元)接收到消息时,它将委托责任。一个 actor可以创建更多的 actor并将消息委托给它们。

Akka是实现了 Actor 模型的最著名的工具之一。该框架支持基于 JVM 的 Java 和 Scala。

使用消息队列实现异步、非阻塞 I/O:Kafka 和 RabbitMQ

多线程开发在过去一直很流行,但是这种实践被放弃,取而代之的是异步、非阻塞 I/O 模式。对于 Java,这在其 Enterprise Java Bean(EJB)规范中有明确说明:

企业 Bean 不能使用线程同步原语来同步多个实例的执行。

企业 Bean 不能尝试管理线程。企业 Bean 不能尝试启动、停止、挂起或恢复线程,也不能更改线程的优先级或名称。企业 Bean 不能试图管理线程组。

现在,还有其他实践,如流 API 和 Actor 模型。但是, KafkaRabbitMQ等消息队列提供了对异步、非阻塞 IO 特性的开箱即用的支持,它们是功能强大的开源工具,可以通过处理并发进程替换线程。

其他选项:Eureka 和 Chaos Monkey

其他有用的容错系统工具包括监控工具,如 Netflix 的 Eureka,压力测试工具,如 Chaos Monkey。它们的目标是通过在较低级的环境(如集成(INT)、质量保证(QA)和用户验收测试(UAT)) 中进行测试,尽早发现潜在的问题,从而在转移到生产环境之前防止潜在的问题。

你使用什么开源工具来构建容错系统?请在评论中分享你的最爱。

关于作者

Bryant Son—— Bryant Jimin Son 是 Red Hat 的顾问。Red Hat 是一家以 Linux 服务器和开源贡献而闻名的技术公司。在工作中,他致力于利用 Red Hat 技术栈(如 BPM、PAM、Openshift、Ansible)为客户构建技术,并使用 Java、Spring Framework、AngularJS 和 Material Design 进行全栈开发。在加入 Red Hat 之前,Bryant 在花旗集团的花旗云团队工作,负责构建私有基础设施即服务(IaaS)云平台,为花旗各部门的 8000 多个团队提供服务。他还在美国航空公司、IBM 和家得宝奥斯汀技术中心工作过。Bryant 毕业于德克萨斯大学奥斯汀分校,获得计算机科学和航空航天工程学士学位,辅修商业。

查看英文原文: 9 open source tools for building a fault-tolerant system

“企业服务真的热吗?99% 的 VC 都投错了”丨42章经

$
0
0

注:本文根据用友研究院院长阿朱在「42章经创投理想国」的线下分享《中国企业服务产业洞察》上的部分发言整理而来。
阿朱,用友研究院院长,在企业软件领域拥有 20 年丰富经验,曾亲历零售、医疗、汽车、地产四大行业的信息化,历任首席架构师、技术总监以及 CTO 等职位。公号“阿朱说”作者。




企业服务真的热吗?


从 2013 年开始,不论是一些成立已久的 VC 还是新的风投,都纷纷扎进了企业服务界。但不管 VC 们有没有在这个领域投出独角兽,我都想说,几乎 99% 的人都投错了。


为什么?企业服务根本不热。很多人把一些基础技术,比如云计算、大数据、人工智能和 IoT 物联网都归为企业服务,使得它看上去像一个风口。


如果按照上述逻辑,英特尔做芯片不也应该是企业服务吗?所以我希望大家理性看待,想一想,如果把上述这四大产业技术都除去,中国企业服务的投资总额还剩下多少。


那回过头来说,为什么这些基础技术开始在中国兴起?


答案是,开源。不管是 Hadoop Spark 在大数据层面,还是 Tensorflow 在人工智能领域,都有巨大的开源项目在驱动。正因为这些技术开放给了中国,这四大产业技术才能起来。


图:基础技术迭代前后对比


目前大多数国内的互联网企业,都纷纷开始使用云计算。一些大中型企业,也要求进行基础技术的换代,把过去使用的一些商用操作系统,替换成私有云,甚至混合云这类大数据部署模式。


所以中国的“企业服务热”本质上是:基础技术成体系换代的红利。


(一)

中国企业为什么进入企业服务产业?

消费者快速变化的需求和后端供给出现脱节


那中国互联网企业,包括 BAT 进入企业服务产业的原因是什么?很多人都说,中国消费者流量红利消失了,线上基本找不到蓝海,所以大家纷纷都走向 2B,这是胡扯。


要追根溯源,需要重新审视互联网这二十年。


1998 年,中国互联网的三大门户:搜狐、网易和新浪正式成立。所以我们把 1998 年定义为,中国互联网开始起步的时间点。


从 1998 年到 2018 年,这期间的 20 年又可以分为两个阶段。


图:1998-2028 年企业服务领域的时代变迁


前十年,从技术维度上,就是我们熟悉的 PC Web 互联网时代,换作企业服务的角度,属于营销时代。


但是 2008 年发生了转变,全球金融危机,中国从出口转内销。


其实过去企业主并不是特别关心广告的转化率,看到有流量就满足了。但是从 2008 年开始,这层皇帝的外衣就被剥开了,企业主变得特别务实,投出去 10 万的广告费,就希望能有相应的订单成交额。


所以从 2008 年开始,中国进入了交易时代,电子商务慢慢涌现。


不知道大家有没有注意到,天猫双十一到如今已经十周年了,回顾过去 5 年天猫的一些细分品类,销量的前 10 名并不是淘品牌或者新消费品牌,全是传统品牌商。10 年前大家都在说,海尔、美的等传统企业不懂互联网,但 5 年后,这些传统品类却成为天猫榜单前列。


2018 年,又到了”十年“这一时间节点,做了电商之后的传统企业开始面临一个问题:产品上游的生产研发设计,跟不上消费者的变化。


在过去,他们把商品研发生产出来,销售流向主要是渠道商,而且有 5-6 级渠道分销,几乎接触不到消费大众。但现在做电商后,传统企业开始和消费者零距离接触,于是消费者有什么需求和行为,都能通过后台数据洞察到。


消费者快速变化的需求能够被即时感知到,但企业后端的供给却出现了脱节。


所以, 进行上游产供研的联动,用消费者需求和订单,来倒逼上游产业链的优化,才是未来十年的主赛道,大家应该投入到主赛道上去。


”营销时代(引来了消费者)- 交易时代(消费者产生订单)- 产业链时代(产供销研一体化)“,这才是中国互联网过去波澜壮阔的 20 年,和未来 10 年的来龙去脉。


BAT ,包括头条都在进入企业服务领域,百度要做 CRM,逻辑也是一样,核心还是中国的企业主需求在发生变化。


(二)

Salesforce 为什么火?

本质上它颠覆了老牌企业软件的商业模式


提到企业服务,最火的应该是 SaaS,而 SaaS 的典型代表是 Salesforce。那 Salesforce 为什么会火起来?中国是全世界 GDP 第二的国家,大家都在讨论谁是中国的 Salesfore,但有没有人想过,Salesforce 它自己为什么不进入中国市场呢?


要回答这个问题,我们要先聊聊 Salesforce 出现之前的 ERP。ERP 的鼻祖是 SAP,它主要的营收渠道就是每年面向企业收取 15%-25% 的服务费,也就是说,一家企业购买了 SAP 软件,每 5 年花的服务费,还能再重新买一套软件。


这在国外司空见惯,但国内客户支付服务费的习惯还没培养起来,比如中国本土的 ERP 用友、金蝶可能每年只有 40% 的客户愿意缴纳服务费,甚至很大一部分企业连合同的尾款都收不回来。


所以,中国的市场根本不能适应这类商业模式。但 Salesforce 有所不同,它既不收取服务费,也不用企业购买服务器、操作系统和数据库等,只需要企业按年度订阅。


另外,Salesforce 可以实现在线试用、支付和续费全打通,而且因为绑定了企业信用卡,Salesforce 的续费是自动的。如果中国的 SaaS 平台能做到这样,那就离爆发不远了。我们知道,在中国实现续费是件很困难的事,因为涉及企业报销,而开发票就有一个复杂的审批流程,如果不自动续费,就很容易导致用户流失、续费率低的现象。


以 Salesforce 为代表的 SaaS 公司还有一个很重要的功能——在线用户跟踪,大部分用户数据都留在了后台服务器上,这就有了软件优化升级的方向。而过去的 ERP 是把软件装在本地,因为没有数据,一些软件商为了提升业绩,就想方设法提高客单价,主要通过”意淫客户需求“的方式来做产品研发。


所以,从根本上来说,SaaS 在产品的使用效率和质量上,有了大幅的质的提升。


我们再来看看,Salesforce 的进化史,以此来看看中国的 SaaS 是不是走错了路。


图:Salesforce 的商业模式和产品进化


一开始,Salesforce 做的是 SFA 销售自动化,后来做服务云,实现客户的双向关系管理,后面又开始做电子商务系统,类似 B2C 或者 B2B 的购物网站,甚至还延伸到了线下应用场景。本质上,Salesforce 完全颠覆了老牌企业管理软件的商业模式。


回顾 Saleforce 过去三年的并购,我们会发现,它不仅在增强人工智能和数据服务的能力,还在增强数字营销的技术。大家都说 Saleforce 是一个 CRM 厂商,但实际上它早已不是了,它在往电子商务的方向前进。


这也是为什么我认为,投资人不管是投了纷享销客还是销售易,实际上都是“入坑”的表现。


(三)

中国企业软件商在干什么?

ERP 移动化、SaaS 化,企业服务行业停滞的 10 年


那中国的企业软件商,这些年都在干什么?


图:中国企业软件商服务升级路径


以用友为例,我们先来聊聊企业软件商的前 30 年。


最开始,用友做的是单岗位和部门的企业软件,比如只提供给会计或者财务部使用;后来开始做 ERP 软件,服务对象扩大到了企业的各个部门各个岗位;再之后又做了集团化管控软件,统一财务、人力、流程和大数据管控。


企业服务发展了 30 年后,大多数企业软件商都认为,集团已经是一个企业组织最大的边界了,服务到集团后,还能再做些什么?大家开始迷茫了。


这个时候刚好处在 2008 年这一电子商务崛起的节点,也是移动技术快速发展的阶段。所以中国这些企业服务商们,开始决定把自己的 ERP 软件用移动技术重新做一遍。


也就是说,当中国企业们在发展电子商务,去库存,解决这些应运而生的需求时,企业服务商们却在做一些非客户需求的事,比如先做个 App 再说。那把 ERP 移动化的价值在哪里?我认为,企业软件在整个移动时代的前 5 年中,毫无建树。


而经过了这 5 年之后,也就是 2013 年,企业服务商们开始把 ERP 改造成 SaaS 技术,做云端的 ERP,但这是中国企业需要的吗?也不是,我曾在前文中提到,中国企业需要的是产供研的联动和优化。所以这 5 年时间,中国企业软件也几乎处在停滞阶段。


综上,这十年时间,99% 的企业软件商都在做 ERP 的移动化和 SaaS 化。于是,十年企业服务的“青春”啊,就这么浪费了。


只有 1% 的醒悟者,找到了正确的路。什么路?企业互联网。


大家可能第一次听到这个词,我们回到刚才的问题,当一个企业大到集团后,边界还能如何突破呢?当然是你的衣食父母,我们这些大众消费者啊。


所以,做企业互联网的第一步,也是最关键的,就是和消费者联结在一起。只有有了消费者,你才能实现所有业务的在线化。


而一旦你和消费者建立了联结,消费者产生订单,订单也可以实现在线化时,这才进入了第二个环节,产业互联网,也就是和软件产品的上游进行匹配联动。


那这么说,产业互联网是尽头吗?大家想一想,从软件商和企业进行连接,到和消费者连接,再和产业的上下游实现一体化之后,企业软件商的边界还能扩展到哪里?


答案是,社会商业化。也就是到最后,企业软件商可以和公共基础设施(譬如政府、海关、税务、工商、社保等)联动在一起。这是未来,而我只看了凤毛麟角的厂商,在往这个方向发展。


(四)

什么是产业互联网?

端到端产供销研一体化


既然下一步是产业互联网,我们就来细聊一下,什么是产业互联网。


首先,它一定是垂直细分的。产业互联网能实现通用不太可能,它不会像淘宝那样,各种商品都可以卖。但它有通用模式,也叫不同细分行业的核心规律。


这个规律是什么呢?是如下图所示的路线图。


图:产业互联网链条全剖析


我把产业互联网分为两个阶段,第一个阶段叫商业互联网,第二个阶段叫工业互联网。


商业互联网,其实就是马云”吹“的新零售,但新零售主要在于零售的终端,你看阿里巴巴旗下的一些布局:盒马鲜生在于生鲜,三江超市在于便利店,银泰百货在于百货,其实都处在消费者直接购买环节。


而我说的商业互联网是一条产业链。从会员营销到 O2O 零售门店,再到批发分销平台。分销平台类似于京东的新通路、汇通达或者阿里的零售通,也是曾鸣教授所提到的 S2B。最后一个环节是厂家订货。


整个商业互联网,也就是产业互联网的前半段,就是”平台产生会员-会员产生交易-门店到分销代理商拿货-代理商向厂家进货“这一整条产业链。


而厂家接到订单开始生产,这就迎来了产业互联网的后半段——工业互联网。这里先问大家一个问题,为什么中国的制造技术并不强,却是全世界制造业的第一大国呢?


中国制造业有一个鲜明的特征叫“区域集群协同生产”。江苏、浙江、福建和广东这些制造大省都是采用这类生产方式。我们把温州叫作一品一镇,意思是一个镇生产一种商品,这个镇生产玉山,隔壁镇生产扑克牌,再远一些的镇生产打火机。


但广东佛山不一样,我 2001 年在佛山待了 10 个月,发生当地的家家户户都开工厂,而这些工厂主要是给大厂做配套,有人生产冰箱的壳子,有人生产冰箱的包装。也就是说,在还没有协同生产平台之前,佛山就已经实行了集群式的协同生产。很多品牌大厂目前也采用类似方式。


所以工业互联网的第一个阶段,是区域集群协同生产。那为什么要用这种生产方式呢?因为现在产业链条都架构在互联网大数据上,假设我们要生产  2000 条鞋带,要怎么分配这些鞋带给厂家?把单子拆分,然后合起来总装生产,这只能在区域集群协同生产平台上才能实现。


工业互联网的第二个环节,是设备资源监控调度。我相信很多投资人都投了不少工业物联网平台,但这些平台,大多数都走错路了。为什么?仅仅把很多工业设备输出的数据输入到工业 IoT 平台上进行监控,有用吗?没用,工业设备是百年工业,如果一个设备总是出现问题,那么这个厂商早就被淘汰了。


所以这些工业物联网平台宣称自己能输出很多设备参数,能够监控设备到底什么时候被建,什么时候维修,其实没什么用。


那为什么要做设备资源的监控和调度呢?还是回到鞋带的案例。如果我生产 2000 双鞋带,本地有 50 家厂商生产鞋带,就面临一个如何分配的问题,这就需要一些算法了:


① 厂商的设备型号必须能满足生产鞋带的标准。要知道,鞋带的细分也是很重要的;

② 我要知道这批鞋带运送到某一厂商后,能不能立刻进行生产复合。设备监控只需要这两类数据就可以,并不需要提供业务参数。


有了订单和设备后,还缺物料。生产需要原材料,那该去哪里采购呢?B2B 原材料采购交易平台。


有了交易平台之后,还缺生产什么,即产品的主数据。所以工业互联网最后一个环节,是全球研发设计协同平台,如果更简单粗暴一点,其实就是云化的 PLM (Product Lifecycle Management,由产品数据管理发展而来)平台。


所以综合来看,商业互联网结合工业互联网的”八大金刚“,构成了产业互联网的主路径:产供销研,端到端一体化。


那大家可能会问,不管是区域集群协同生产,还是线下批发分销平台,阿里不都有相应的业态吗?比如淘工厂的生产模式不就类似吗?


这个时候似乎又回到 10 年前那个问题了。10 年前大家创业做移动互联网,VC 经常会问创业者一个问题,如果这件事腾讯做了,你会怎么办?我相信投资人还会继续这样问下去。


那假设企业服务 BAT 在做,京东、美团也在做,那创业公司有没有生存的可能性?很多投资人在这个坑已经有 5 年了,大家可能都想跳坑,但很现实的是,坑一定不会那么容易跳出来,我只能告诉你们如何找一些新坑。


(五)

如何找到投资新赛道?


图:企业服务投资新赛道一览


首先我想告诉大家,Mar tech 将是一个新坑。如果把 CRM 看做是 Sales Tech(销售技术),把电子商务,包括有赞的微商城,看作 Retail Tech(零售技术),把头条、百度叫做 Ad Tech(广告技术),那这中间还存在一个市场,叫 Mar Tech(营销技术),它和广告不一样。


现在的 Salesforce 就在拓展积极数字营销产品线,并购了大量数字营销的厂商。Oracle 、Adobe 和埃森哲科德的收购方向也是如此,美国市场都在奔着 Mar Tech 方向走。


而反观中国市场,其实这条产业链还没崛起。在中国做 Mar Tech 的不超过 100 家厂商,但在国外,已经有超 7000 家了,所以这是一个新坑。


当然,京东和美团在电子商务领域已经比较成熟,但是线下零售,尤其是智能零售技术仍然有大的发展机会。所以上市后的有赞,今年的重心也在打造线下零售技术。过去的两三年,无人零售概念被炒得很火,但现在才是无人零售技术开始规模化的阶段。


Retail Tech 是第二个新坑,不再赘述。我们重点来讲第三个坑,社会资源调度平台,举几个例子,菜鸟是社会化仓储物流资源调度平台,滴滴是社会化出租车资源调度平台。而分销、以及区域集群协同生产也是这类平台。本质上,这些都能产生现金流。


第四个新坑,是智能设备。就像我刚才提到的,把单企业运行的 ERP 模块升级到社会化,云化的全球研发设计平台,把本地化的物料需求管理系统,升级到 B2B 原材料采购交易平台。


当然,在这个基础上,会衍生一条资金流动的信息化链条。包括电子发票、电子合同、支付、报税和银行银企直联。很多人都说,我投了电子签名或者电子发票,但它到底有什么用?如果你把它看做一整条信息链,价值就非常大。


我相信如果有人投资了该链条,而且可以将该链条和你们的投资项目组合在一起,未来将会发挥它的强大爆发力。


另外,在信息链条基础上,企业需要云计算。目前的云计算,并不是大家过去所说的公有云计算,现在的云计算已经被层层分解,每一端都需要进行层次化计算和重构(例如, PaaS 可能会被分解为 Technical PaaS、Solution PaaS、Industry PaaS)。就像装在摄像头里的计算芯片,即便计算量和电池能量都很小,也仍然需要人工智能的视觉识别。


近段时间股市上,边缘计算受到大家关注,很多人不知道原因,其实根源就在这。大家现在对云计算的认知还停留在原来的公有云计算,未来的云计算,从云端到最终端,都会是多层的,这会是基础技术上一个新的投资赛道。


到这里,我已经把整个中国企业服务和国外企业服务发展的本质,都告诉大家了。

 


*原视频长度一小时,放出部分为精华提炼,约占总内容三分之二,视频里阿朱还从自身职业经历出发,展示了更多关于企业服务的犀利观点。



“抖音”是如何一步一步被找到的?

$
0
0

原标题为《从0到1如何避开陷阱》,作者:沈振宇,头条前资深产品经理,险峰入驻企业家,曾创办图虫网、多说网,题图来自东方IC

摘要

  • 如何发现用户的第一性需求?

  • 如何不陷入“big date”陷阱,把握更有价值的“thick date”?

  • 如何在快速低成本的试错中找到正确答案?

  • 今日头条、抖音是如何在试错迭代中诞生的?

  • 用户心智排斥及接纳哪些产品定位?

一、如何发现用户第一性需求?

创业之初,做一个产品,通常很多人想先把握产品定位。其实产品定位,绝不是在最开始需要考虑和能考虑明白的问题。 发现用户需求才是产品创建初始的线索。在用户林林总总的产品需求里,我们要发现第一性的需求。

找到市场的 Key Driver

在风口上,猪也可以飞起来。一个创业公司能崛起,不仅靠创始人的聪明才智和强执行力,还要踩对风口。这里的风口是指市场的 Key Driver。

回看过去市场上的 Key Driver,可以看到:微信崛起源于移动互联网和智能手机的风口;拼多多抓住的则是中国大量低端供应链过剩产能需被消化,及移动互联网在最近三年快速出现的下沉人口红利。近十年的成功互联网公司都是抓住了这个时代正在发生的变化而迅速发展。

如何抓住这样的关键性变化?统计数据、行业报告是最简单最低成本、唾手可得的材料,可以让我们看到近期市场发生了什么变化,说明一些问题。

比如百度指数,可以看竞品APP的流量增长;咨询报告看到行业的变化。其中,同行分享的数据,带有第一人称视角,往往更真实。

这些数据、报告在一定程度上能说明问题,但很有限。因为当大规模趋势已经体现在百度指数和整个市场头部的APP时,你再去做已经晚了。创业是要抓住属于未来三年的机会,而这个机会能通过上述看大数据的方式很难发现。 

传统的调研方法很难帮你发现机会

通常的解决思路是做调研。但一些真正关键性的机会,通过传统的调查问卷的方法难以采集到。做一个科学、有效且有前瞻性的调查问卷十分困难。受访者碍于面子不会给出真实回答、以及调研途径及用户喜好程度等原因,都会影响到调研问卷结果的真实性。

另一方面,调研方法可能因逻辑漏洞导致调研无效甚至产生错误结论。

误差一、调研受访中的“幸存者”偏差

在二战期间,人们发现幸存的轰炸机中,机翼中弹的数量很多,而机身中弹的却很少。因此人们认为应该加固机翼。

其实不然,机翼中弹多却能飞,说明机翼中弹并不影响飞机返航;而机身中弹少的现象说明了子弹打中机身将是致命的威胁,导致飞机不能返航。

这个例子说明,调研中收集到的数据可能不是真正有代表性的用户。

误差二、提问裹挟了问卷设计者的暗示

将带有暗示性的问题植入进调研问卷,往往会影响用户的选择,导致调研结果无效。

误差三、用户对自身需求缺乏认知或刻意掩饰

调研答题时,普通用户都会根据自己的喜好进行选择,或者刻意掩饰自己的真实表现。如问用户是否自律?是否热爱学习?这类问题往往得不到用户的真实答案,是无效的方式。

误差四、小样本量的不可信

我在今日头条做过一千多个数据实验,根据我个人的经验,当调研的数据量级在10万以上,数据一般能够保持比较有效的一个规律性。但是如果样本量比较少,各种规律都变得非常随机,甚至是相反的,导致整个统计结果不可信。

关注Thick Data

从Big Data(大数据)寻找机会是我们研究海量用户,统计其行为的一种思路。但因中国人口结构复杂、分层多,一旦趋势体现在大数据时,往往已是趋势的末端。要想抓住早期机会,需要去关注 Thick Data,这是我的一个原创概念, 指的是小规模用户稠密的场景数据,这些数据能反映出用户典型的需求场景和决策逻辑。

关注这些个体如何决策,如何选择,有哪些痛点,抓住这样thick的场景去分析,才有机会能够更早的看到一些关键性的机会。Big Data代表已经发生的趋势,关注个体的一些变化,从Thick Data往往可以看到未来。

二、怎么抓住Thick Data

那么如何才能有效发现用户需求?我认为, 观察和追问是最有效的手段。

为什么要观察?

因为用户的行为路径是最真实的反馈,他们每天都在用的功能足以证明他们的真正所想。创业者应以观察者的身份,在不干扰用户的前提下,观察用户每天是怎么生活的,在各种问题面前如何做选择,选择买什么样的消费品?然后思考这些用户行为反映出怎样的用户需求。

例如,早期豆瓣只有书评和豆瓣小组,产品经理发现大量的用户小组正在讨论电影,于是做了独立产品豆瓣电影;陈华观察到卡拉OK始终是中国老百姓重要的生活娱乐方式,有没有可能通过手机让用户更方便地K歌,于是有了唱吧;享物说的创始人孙硕发现生活富裕之后很多微信群里人们愿意把闲置物品免费送人,于是有了享物说。

如何追问? 要敢于问一些看似“愚蠢”的问题。

亨利福特在设计福特的汽车的时,曾这样回顾:“如果当时我去调研用户,问用户你需要什么交通工具,用户一定会告诉我,它需要一匹更快的马。” 然而通过不断追问发现,用户的根本需求是“用更短的时间、更快的到达目的地”。这就是用户的第一性需求。

上述案例并非是不做用户调研,而是要对调研和访谈的结果做刨根问底的思辩。根据我过去的创业经验,创业者仍然要去看统计数据和调研,但要改变视角,需要更多地观察用户的场景和行为方式。

用户需求并不是用户正在做的事情,不是用户想要的某种产品功能,不是统计数据,而是要洞察用户需求背后的动机,需要用同理心去体会和理解用户需求。

好的互联网产品,一定是满足用户的第一性需求,用户会选择一个能看得见的答案,而不会看告诉你那些他根本从来没听过、从来没想过的那些选择。

比如用户是喜欢玩MOBA游戏还是FPS游戏?这个问题背后的答案其实是抖音。因为不管是王者荣耀还是抖音,都在解决一个用户根本性的需求问题——杀时间,这才是用户的第一性需求。所以抖音和王者荣耀其实是一个赛道里的玩家,是最直接的竞争对手。

那么用户是需要一个更灵敏的键盘还是鼠标?乔布斯给出的回答是触摸屏。因为无论键盘还是鼠标,都是用户控制电脑的一种方式。用户的第一性需求是能够更简单、更容易的控制电脑。从专业化角度来讲,用户需要一个更简单方便的人机交互方式。

三、如何试错?

找到用户的第一性需求之后,下一步就是去检验产品能否满足用户的需求。这个过程并不一帆风顺,我们需要通过产品试错和迭代来实现。

试错究竟试的是什么?

所谓试错,是花费较少的成本,对产品的未来进一步的验证,或者是探路成本。行业里经常提一个概念叫“快速低成本的试错”。那试错到底在试什么?根据我自己的总结,主要有三个维度。

第一,用户需求场景

用户的第一性需求是什么?这个需求是不是存在?

第二,产品方案的有效性

所提出的产品解决方案,能否真正解决用户需求。

第三,量化模型

用户规模、使用频次是否足够的高?这决定了商业模式的天花板。获客成本、留存成本和客单价/ARPU,这意味着商业模式是否成立。

其中任何一个要素崩溃,整个产品方案和整个创业想法就有可能被推翻。

试错究竟试的是什么?

第一步,提出需验证的问题

在趋势刚开始之时,很多问题是极不明朗的。试错首先必须明确的提出要去验证的问题。比如2015年,头条在思考“短视频是不是更好的内容消费媒介?”这一问题时,短视频被市场视为没文化的人才看的内容。当这个问题被抖音验证之后,得到的结果是一系列雨后春笋的短视频产品。

第二步,确定验证的评估指标或判断依据

判断趋势是否成立,需要找准关键指标。这里提供一些创业公司常用的核心指标:

01、频次

频次不仅指用户使用的频次,还包括目标用户在全人群中的比例。我们要尽量回避那些看起来特别好,但非常低频的场景。低频的需求永远打不过高频需求,拿出高频的流量才是关键。

美团为什么要做外卖?易到为什么打不过滴滴?其核心逻辑就是频次。外卖是一个比去餐馆更高频的需求。商务用车的场景非常明确,但远没有大众用车的需求频次高。低频往往意味着客单量小,需要把客单价做得很高。所以如果频次不成立,商业模式就很难成立。

02、获客模式

如果获客效率极低的话,整个商业模式再好,最终也会崩溃。

这里需要提醒一点,不少创业企业在一个增长模式里,早期的用户获得可能是用特别trick的方法,带来极低的获客成本,但这种方法往往无法复制。所以对于试错来说,创业者要试的是一个可复制、可规模化、有能力能够扩展到全国的一个获客方式。

03、变现模式

变现要根据业务来具体对待,如果是做消费品,那客单价显然是最核心的一个要素。如果是做线上流量产品,用户停留时长则是最核心的指标,而不是一个用户能赚多少广告费。

对于toC的流量产品,变现通常不需要在早期关注。一方面,在早期很难做到流量变现,只有到后期才能去做有效流量变现。另一方面,因为产品只要足够好,用户停留足够长,就一定能赚到收入,所以早期关注的核心点在流量做大。

第三步,快速低成本做出产品

试错的目标是为了验证用户核心需求,而不是为了完美的产品。能不动技术开发就不动;能做小程序验证就不做app;能用线上验证就不动线下。

很多成功产品的第一个版本,从立项开发到真正上线,一般都不超过一个月时间,比如说微信、WIFI万能钥匙、猎豹清理大师以及抖音头条等。大多数的用户需求其实并不复杂,把核心的用户第一性的需求满足即可。在这个过程中,产品交互体验、产品稳定性和技术性能甚至产品名称,在一开始都不重要。只追求核心用户场景需求是否被满足,最短时间开发产品MVP(最小可用产品)

第四步,小范围高密度推广

试错的最后一环,是要把这个产品投到用户人群里面去,让用户真正能使用你的产品。最好的选择是小范围高密度的推广。 小范围意味着更低的成本。Facebook一开始只是在北美常青藤八所学校里推广,校内始于北大清华,知乎则在集中互联网人群里推广,去做模式的验证。

高密度则意味着更接近最终模式。比如打车模型,前提是有足够高的车密度,才能够形成高效率、高复用的用车调度。美团打车在南京和成都两个城市试点投放非常大量的车,去验证模式效果。如果大而广的撒网,很有可能体验效果和各种量化模型都和实际结果偏离很大。

四、头条抖音是如何试出来的

现象级的产品是来自厉害领袖或者团队的big idea吗?“今日头条”和“抖音”都证明了,客观、快速的试错,有机会“试”出伟大的产品。

头条是一家特别崇尚试错的方法论的企业,“今日头条”和“抖音”都是在一系列试错中迭代的结果。

“今日头条”是如何做出来的?

2011年张一鸣看到移动互联网热潮的趋势,提出了一个想法:“移动互联网时代,用户的内容阅读需求是否并没有被满足?”于是花了一个月左右的时间,团队快速地做了几款APP,包括搞笑囧图、内涵段子、笑多了会怀孕、搞笑视频等。当时这些APP体验还很简陋,快速将这些APP铺到应用市场上去进行试验,试图找出用户需求最旺盛的内容品类。

由于当时移动网络不够理想,视频表现效果一般,表现最好的是内涵段子。之后进一步尝试了新闻文章类产品,才有了今天的今日头条。这个过程,团队不断关注这些产品的用户留存、用户时长和DAU指标,并以此判断哪一个产品真正击中了用户的需求。

一个好的名称是产品成功的一半。但是怎么找到好的名字呢?答案是——不断试错。

其实头条系里的每一个产品在发布之前,都会做多个产品名字的实验。把同一个app用不同的多个产品名字,投到推广渠道里盲测。同样的投放条件,看哪个点击率最高,哪个点击成本最低。”今日头条“这个名字就是名字实验的结果。

”今日头条“相比其他几个备选名称,是实验中一般名字点击率的3-5倍,就意味着节省了3到5倍的推广成本。乃至今日头条在早期很长一段时间里,CPA成本都远低于竞品。一个名字帮助团队节省了数千万的推广成本。

“抖音”是如何一步一步被找到的?

2015年初,张一鸣分析市场之后提出一个假设:短视频是不是一个大机会?最简单直接方法就是在今日头条APP里面加入各种视频,成本极低,快速试验。上线后发现效果不错,进行一波优化之后,发现头条用户里面有近一半的时间都是在看视频,这是一个很关键线索。于是把视频拆出来,独立成一个APP(头条视频),也就是现在的西瓜视频。

这还不够,2016年初,当时一款直播产品“17”火爆,映客直播快速崛起,头条一个团队在春节假期加班快速做出了火山直播。但直播做了半年并不顺利。因为竞争对手做得更早更好,直播市场盘子很大,但头条进入太晚缺乏竞争优势。

之后又尝试把短视频和直播结合,试了大概两三个月。我们发现加了火山加了短视频的版本比不加短视频的版本,留存率、活跃度以及用户传播的成本都要更好。证明短视频+直播可能是一个有效的模式。

到了2016年的下半年,北美有一个产品叫Musical.ly,主要用户群是12岁到14岁的初中女生,但除了这个人群之外就没人用。行业里普遍认为musical.ly已到天花板,无法突破。公司觉得没道理,很快一个团队进入小黑屋开始封闭开发,一个多月之后推出了一款叫A.me的产品,也就是后来的抖音。

综上可以看出,头条每一次尝试都源于一个假设,然后用极短时间开发出产品,快速投到市场上,不断换各种策略去验证之前的假设。

选择清晰的产品定位

试错完成后的下一步就是——把产品推向市场。但在推向市场时,首先要面临的一个问题是如何告诉用户我是谁?能提供什么服务?这里你只能通过一个特别简单清晰的方式去打动用户。归纳下来 ,产品定位的本质是占领用户的心智。根据杰克·特劳特的定位理论, 用户心智有五个特点:疲于应对、憎恨混乱、缺乏安全感、不可改变、会丧失焦点。

心智疲于应付,一句话要能说清产品特点。

产品一定要非常简单很清晰的告诉用户,我是谁,我能解决什么问题。互联网时代,手机里面上百个APP背后可能有几万家公司在竞争。对用户来根本接受不过来,没有耐心听你说第二句话。

心智憎恨混乱,一个品牌击中一个用户需求。

用户只能接受简单的东西。复杂的呈现对用户来说是一种干扰。

心智缺乏安全感,用户倾向于做出安全的选择。

最大的玩家是最安全的选择,在用户很盲目的时候,往往去选择行业里的第一名。用户为什么要去选择拼多多?因为其中一个原因身边朋友的推荐,朋友的背书让用户觉得安全。

心智非常难改变,同质化竞争几乎必败。

用户会给每一个产品在心智留有一个位置,这个位置如果被某一品牌占据,其他品牌的机会就很小,因为去改变用户原来建立的习惯,非常困难。阿里巴巴旗下口碑就是一个典型例子,其实口碑的体验并不差,数据库也非常全面,同时优惠力度可能更大。但是大众点评这个名字和他这十几年的一个在这市场里面积累,让所有用户形成一个习惯,就是找餐厅上大众点评,口碑难以撼动用户的心智。

最后,心智会丧失焦点,越精确的定位,延展难度越大。

当产品要增加额外的功能,用户可能是不接受的。特别是当品牌名称具有明确功能属性时。比如支付宝是支付工具,饿了么是外卖服务,品牌都有清晰的功能定义。但当支付宝做起了社交,用户就会丧失焦点,因为原有品牌的价值无法覆盖新的产品功能。所以头条去做视频的时候,他会去独立开一个叫做西瓜视频的产品线。美团做电影的时候会去做一个叫猫眼电影的独立产品。

这里有一点需要指出,定位作为一个非常传统的营销理论,在有些情况下,对现在的互联网产品可能会失效。比如8848钛金手机,主打三四线乡村的土豪用户,卖了几十万部,短期内成为一个产品营销的神话。但这种神话无法在互联网时代延续,用户关注手机的核心点,在于手机的使用体验,而非产品本身的噱头,所以产品营销定位做的再出彩,不解决用户痛点就只能是空谈。

没有哪个产品生而伟大,每个优秀产品都离不开“从0到1“的过程,通过不断试错,在意想不到的地方发现价值。从0到1的方法论并不是唯一的,它们遵循的是基本原则,而非秘籍。它们不会盲目的追随那些已经成功的产品,反而用大量的时间去认真思考,思考用户缺少什么,市场需要什么。

*文章为作者独立观点,不代表虎嗅网立场

本文由险峰K2VC 授权虎嗅网 发表,并经虎嗅网编辑。转载此文请于文首标明作者姓名,保持文章完整性(包括虎嗅注及其余作者身份信息),并请附上出处(虎嗅网)及本页链接。原文链接:https://www.huxiu.com/article/294922.html 未按照规范转载者,虎嗅保留追究相应责任的权利

未来面前,你我还都是孩子,还不去下载虎嗅App猛嗅创新!

[译] 将 5 万行 Java 代码移植到 Go 学到的经验

$
0
0
  • 原文地址:

    Lessons learned porting 50k loc from Java to Go

  • 原文作者:Krzysztof Kowalczyk

  • 译文出处: https://blog.kowalczyk.info

  • 本文永久链接:

    https://github.com/gocn/translator/blob/master/2019/w15_lessions_learned_porting_50k_loc_from_java_to_go_translation.md

  • 译者:cvley

  • 校对:Ryan

我曾经签订了一个把大型的 Java 代码库迁移至 Go 的工作合同。

这份代码是 RavenDB 这一 NoSQL JSON 文档数据库的 Java 客户端。包含测试代码,一共有约 5 万行。

移植的结果是一个 Go 的客户端。

本文描述了我在这个迁移过程中学到的知识。

测试,代码覆盖率

自动化测试和代码覆盖率追踪,可以让大型项目获益匪浅。

我使用 TravisCI 和 AppVeyor 进行测试。Codecov.io 用来检测代码覆盖率。还有许多其他的类似服务。

我同时使用 AppVeyor 和 TravisCI,是因为 Travis 在一年前不再支持 Windows,而 AppVeyor 不支持 Linux。

如果现在让我重新选择这些工具,我将只使用 AppVeyor,因为它现在支持 Linux 和 Windows 平台的测试,而 TravisCI 在被私募股权公司收购并炒掉原始开发团队后,前景并不明朗。

Codecov 几乎无法胜任代码覆盖率检测。对于 Go,它将非代码的行(比如注释)当做是未执行的代码。使用这个工具不可能得到 100% 的代码覆盖率。Coveralls 看起来也有同样的问题。

聊胜于无,但这些工具可以让情况变得更好,尤其是对 Go 程序而言。

Go 的竞态检测非常棒

一部分代码使用了并发,而并发很容易出错。

Go 提供了竞态检测器,在编译时使用 -race字段可以开启它。

它会让程序变慢,但额外的检查可以探测是否在同时修改同一个内存位置。

我一直开启 -race运行测试,通过它的报警,我可以很快地修复那些竞争问题。

构建用于测试的特定工具

大型项目很难通过肉眼检查验证正确性。代码太多,你的大脑很难一次记住。

当测试失败时,仅从测试失败的信息中找到原因也是一个挑战。

数据库客户端驱动与 RavenDB 数据库服务端使用 HTTP 协议连接,传输的命令和响应的结果使用 JSON 编码。

当把 Java 测试代码移植到 Go 时,如果可以获取 Java 客户端与服务端的 HTTP 流量,并与移植到 Go 的代码生成的 HTTP 流量对比,这个信息将非常有用。

我构建了一些特定的工具,帮我完成这些工作。

为了获取 Java 客户端的 HTTP 流量,我使用 Go 构建了一个 logging HTTP 代理,Java 客户端使用这个代理与服务端交互。

对于 Go 客户端,我构建了一个可以拦截 HTTP 请求的钩子。我使用它把流量记录在文件中。

然后我就可以对比 Java 客户端与 Go 移植的客户端生成的 HTTP 流量的区别了。

移植的过程

你不能随机开始迁移 5 万行代码。我确信,如果每一个小步骤之后不进行测试和验证的话,我都会被整体代码的复杂性给打败。

对于 RavenDB 和 Java 代码库,我是新手。所以我的第一步是深入理解这份 Java 代码的工作原理。

客户端的核心是与服务端通过 HTTP 协议交互。我捕获并研究了流量,编写最简单的与服务器交互的 Go 代码。

当这么做有效果之后,我自信可以复制这些功能。

我的第一个里程碑是移植足够的代码,可以通过移植最简单的 Java 测试代码的测试。

我使用了自底向上和自上到下结合的方法。

自底向上的部分是指,我定位并移植那些用于向服务器发送命令和解析响应的调用链底层的代码。

自上到下的部分是指,我逐步跟踪要移植的测试代码,来确定需要移植实现的功能代码部分。

在成功完成第一步移植后,剩下的工作就是一次移植一个测试,同时移植可通过这个测试的所有需要的代码。

当测试移植并测试通过后,我做了一些让代码更加 Go 风格的改进。

我相信这种一步一步渐进的方法,对于完成移植工作是很重要的。

从心理学角度来看,在面对一个长年累月的项目时,设置简短的中间态里程碑是很重要的。不断的完成这些里程碑让我干劲十足。

一直让代码保持可编译、可运行和可通过测试的状态也很好。当最终要面对那些日积月累的缺陷时,你将很难下手解决。

移植 Java 到 Go 的挑战

移植的目标是要尽可能与 Java 代码库一致,因为移植的代码需要与 Java 未来的变化保持同步。

有时我吃惊于自己以一行一行的方式移植的代码量。而移植过程中,最耗费时间的部分是颠倒变量的声明顺序,Java 的声明顺序是 type name,而 Go 的声明顺序是 name type。我真心希望有工具可以帮我完成这部分工作。

String vs. string

在 Java 中, String是一个本质上是引用(指针)的对象。因此,字符串可以为  null

在 Go 中 string是一个值类型。它不可能是  nil,仅仅为空。

这并不是什么大问题,大多情况下我可以无脑地将 null替换为 ""

Errors vs. exceptions

Java 使用异常来传递错误。

Go 返回 error接口的值。

移植不难,但需要修改大量的函数签名,来支持返回错误值并在调用栈上传播。

泛型

Go (目前)并不支持泛型。

移植泛型的接口是最大的挑战。

下面是 Java 中一个泛型方法的例子:

public <T> T load(Class<T> clazz, String id) {

调用者:

Foo foo = load(Foo.class, "id")

在 Go 中,我使用两种策略。

其中之一是使用 interface{},它由值和类型组成,与 Java 中的 object类似。不推荐使用这种方法。虽然有效,但对于这个库的用户而言,操作  interface{}并不恰当。

在一些情况下我可以使用反射,上面的代码可以移植为:

func Load(result interface{}, id string) error

我可以使用反射来获取 result的类型,再从 JSON 文档中创建这个类型的值。

调用方的代码:

var result *Foo
err := Load(&result, "id")

函数重载

Go 不支持(很大可能永远不会支持)函数重载。

我不确定我是否找到了正确的方式来移植这种代码。

在一些情况下,重载用于创建更简短的帮助函数:

void foo(int a, String b) {}
void foo(int a) { foo(a, null); }

有时我会直接丢掉更简短的帮助函数。

有时我会写两个函数:

func foo(a int) {}
func fooWithB(a int, b string) {}

当潜在的参数数量很大时,有时我会这么做:

type FooArgs struct {
    A int
    B string
}
func foo(args *FooArgs) { }

继承

Go 并不是面向对象语言,没有继承。

简单情况下的继承可以使用嵌套的方法移植。

class B : A { }

有时可以移植为:

type A struct { }
type B struct {
    A
}

我们把 A嵌入到 B中,因此 B继承了 A所有的方法和字段。

这种方法对于虚函数无效。

并没有好方法移植那些使用虚函数的代码。

模拟虚函数的一个方式是将结构体和函数指针嵌套。这本质上来说,是重新实现了 Java 免费提供的,作为 object实现一部分的虚表。

另一种方式是写一个独立的函数,通过类型判断来调度给定类型的正确函数。

接口

Java 和 Go 都有接口,但它们是不一样的内容,就像苹果和意大利香肠的区别一样。

在很少的情况下,我确实会创建 Go 的接口类型来复制 Java 接口。

大多数情况下,我放弃使用接口,而是在 API 中暴露具体的结构体。

依赖包的循环引入

Java 允许包的循环引入。

Go 不允许。

结果就是,我无法在移植中复制 Java 代码的包结构。

为了简化,我使用一个包。这种方法不太理想,因为这个包最后会变得很臃肿。实际上,这个包臃肿到在 Windows 下 Go 1.10 无法处理单个包内的那么多源文件。幸运的是,Go 1.11 修复了这个问题。

私有(private)、公开(public)、保护(protected)

Go 的设计师们被低估了。他们简化概念的能力是无与伦比的,权限控制就是其中的一个例子。

其他语言倾向于细粒度的权限控制:(每个类的字段和方法)指定最小可能粒度的公开、私有和保护。

结果就是当外部代码使用这个库时,这个库实现的一些功能和这个库中其他的类有一样的访问权限。

Go 简化了这个概念,只拥有公开和私有,访问的范围限制在包的级别。

这更合理一些。

当我想要写一个库,比如说,解析 markdown,我不想把内部实现暴漏给这个库的使用者。但对于我自己隐藏这些内部实现,效果恰恰相反。

Java 开发者注意到这个问题,有时会使用接口作为修复过度暴漏的类的技巧。通过返回一个接口,而不是具体的类,这个类的使用者就无法看到一些可用的公开接口。

并发

简单来说,Go 的并发是最好的,内建的竞态检测器非常有助于解决并发的问题。

我刚才说过,我进行的第一个移植是模拟 Java 接口。比如,我实现了 Java CompletableFuture类的复制。

只有在代码可以运行后,我才会重新组织代码,让代码更加符合 Go 的风格。

流畅的函数链式调用

RavenDB 拥有复杂的查询能力。Java 客户端使用链式方法构建查询:

List<ReduceResult> results = session.query(User.class)
                        .groupBy("name")
                        .selectKey()
                        .selectCount()
                        .orderByDescending("count")
                        .ofType(ReduceResult.class)
                        .toList();

链式调用仅在通过异常进行错误交互的语言中有效。当一个函数额外返回一个错误,就没法向上面那样进行链式调用。

为了在 Go 中复制链式调用,我使用了一个“状态错误(stateful error)”的方法:

type Query struct {
    err error
}

func (q *Query) WhereEquals(field string, val interface{}) *Query {
    if q.err != nil {
        return q
    }
    // logic that might set q.err
    return q
}

func (q *Query) GroupBy(field string) *Query {
    if q.err != nil {
        return q
    }
    // logic that might set q.err
    return q
}

func (q *Query) Execute(result inteface{}) error {
    if q.err != nil {
        return q.err
    }
    // do logic
}

链式调用可以这么写:

var result *Foo
err := NewQuery().WhereEquals("Name", "Frank").GroupBy("Age").Execute(&result)

JSON 解析

Java 没有内建的 JSON 解析函数,客户端使用 Jackson JSON 库。

Go 在标准库中有 JSON 的支持,但它没有提供足够多的钩子函数来展现 JSON 解析的过程。

我并没有尝试匹配所有的 Java 功能,因为 Go 内置的 JSON 支持看起来已经足够灵活。

Go 代码更短

简短不是 Java 的属性,而是写出符合语言习惯代码的文化的属性。

在 Java 中,setter 和 getter 方法很常见。比如,Java 代码:

class Foo {
    private int bar;

    public void setBar(int bar) {
        this.bar = bar;
    }

    public int getBar() {
        return this.bar;
    }
}

Go 语言版本如下:

type Foo struct {
    Bar int
}

3 行 vs 11 行。当你有大量的类,类内有很多成员时,这么做可以不断累加这些类。

大部分其他的代码最后长度基本差不多。

使用 Notion 来组织工作

我是 Notion.so 的重度用户。用最简单的话来说,Notion 是一个多级笔记记录应用。可以把它看做是 Evernote 和 wiki 的结合,是由顶级软件设计师精心设计和实现的。

下面是我使用 Notion 组织 Go 移植工作的方式:

下面是具体的内容:

  • 我有一个没有在上面展示的带日历视图的页面,用来记录在特定时间的工作内容和花费时间的简短笔记。因为这次合约是按小时收费,所以工作时长的统计是很重要的信息。感谢这些笔记,我知道我在 11 个月里在这次开发上花费了 601 个小时。

  • 客户喜欢了解进展。我有一个页面,记录了每月的工作总结,如下所示:

这些页面与客户共享。

  • 当开始每天的工作时,短期的 todo list 很有用。

  • 我甚至用 Notion 页面管理发票,使用“导出为 PDF”功能来生成发票的 PDF 版本。

待招聘的 Go 程序员

你的公司还需要 Go 开发者吗?你可以雇用我

额外的资源

针对问题,我提供了一些额外的说明:

  • Hacker News discussion

  • /r/golang discussion

其他资料:

  • 如果你需要一个 NoSQL,JSON 文档数据库,可以试一下 RavenDB。它拥有完备的高级特性。

  • 如果你使用 Go 编程,可以免费阅读 Essential Go 这本编程书籍。

  • 如果你对 Notion 感兴趣,我是 Notion 世界级的高级用户:

    • 我逆向了 Notion API

    • 我写了一个 Notion API 的非官方的 Go 库

    • 本网站的所有内容都是使用 Notion 编写,并使用我定制化的工具链发布。

漫长To B路,华为用数字平台解局

$
0
0

数字化转型提了近十年,为何我们总是在门外徘徊?

这其中既有技术原因,不同技术栈的成熟度不一而同,技术协同效应难以爆发,也有观念原因,内部改造总是困难的,数字化转型有时CIO都难以推动,而是CEO工程。在雷锋网看来,数字化是一个漫长的过程,转型意味着旧的生产力匹配不上新的业务发展,以数字化为目的转型就要求一个长久可持续的流程再造,所以必然需要大处着眼,小处着手,以步进的姿态做转型。

提到数字化转型,必然绕不过ICT——云、大数据、IoT等等,华为提出了新ICT的理念,I代表智能,C是联接,T是数字平台,华为希望在智能、联接和数字平台方面能够起到领导者的作用。

华为企业业务全球Marketing总裁邱恒

在近日召开的第十六届华为分析师大会上,华为企业BG全球Marketing总裁邱恒在“引领新ICT:智能,联接,平台”的主题演讲中表示,“华为企业业务的新定位就是与合作伙伴一起为政府和企业客户提供无处不在的联接,无所不及的智能,并通过数字平台协同融合各种新ICT技术,构建数字世界的底座,支撑客户数字化转型成功。”

解析华为数字平台

华为企业BG 2018年营收744亿元人民币,同比增长23%,八年实现十倍增长,突破百亿美金。用华为企业BG总裁阎力大的话说,百亿美金之前是企业业务的1.0阶段,百亿之后是企业业务的2.0阶段。

“如果说2.0阶段有什么样的新想法或者新策略,最简洁来讲,在未来继续做好产品的基础之上会更多地关注于面对行业市场的客户需求,打造可复制的场景化解决方案,华为会在解决方案上有更大的发力”,阎力大表示。

数字平台正是基于此目标推出的底座型产品,底座是数字世界的底座,华为希望用数字平台实现物理世界和数字世界的融合。

对于数字化转型平台一个较为激进的判断是——企业在未来要么成为平台的一部分,要么自己成为平台。但还有一种如华为这类,做的是平台的平台,更通用当然门槛也更高,通用平台承接的是上面一层行业平台,行业平台企业不仅可以实现自己的数字化转型,还可以对外做本行业的平台产品输出,整个数字化转型其实是一个倒金字塔形生态。

数字平台是华为企业BG的代表作,简单直白,大巧不工,含义就是用新ICT为企业乃至数字世界构建一个坚实的数字化基础设施底座。

华为认为,ICT基础设施作为供给端,引入智能技术 后,形成“+智能”平台 ;另一方面,各行各业基于“+ 智能”,实现产业转型与升级,行业的联接更为紧密, 数字化转型跨越行业壁垒,跨行业融合成为常态。

联接、智能和平台构成华为企业BG的关键词,数字平台成为华为和数字世界的纽带。

挑战与应对

今年华为企业BG从理念上进行了一大升级,提出了“Huawei Inside”,有别于过去的“被集成”,“Huawei Inside”是在更深入理解聚焦行业客户的业务场景,通过主动地拓展,实现华为产品与各环节伙伴密切协作,最终面向客户创造价值。

从华为角度,华为通过更深入理解客户的需求,和伙伴、客户一起联合创新,牵引自身打造更有竞争力的产品和数字平台,提供更易集成,易安装,易维护,易服务的产品和方案。同时发挥产业化和标准化的优势,联合伙伴把解决方案标准化,规模复制,并进一步共同定义形成产业标准。

从伙伴支持角度,“Huawei Inside“包含“Huawei技术Inside”和“Huawei能力Inside”。“Huawei技术Inside”是华为把产品技术Design In进伙伴面向客户的商业解决方案中,联合创新,助力客户数字化转型;“Huawei能力Inside”是华为培养使用华为技术的伙伴能力团队,使能伙伴更好的使用华为技术服务客户。

横亘在数字化转型的挑战繁多,相关调查显示,“业务价值难以体现,转型驱动力不足”、“企业自身技术能力不足”和“新ICT系统资金投入不足”等等都是CXO提出的问题,概括起来就是生产系统未有效联接,核心数据难以挖掘;技术门槛高,缺乏应用新技术的手段;新旧业务系统之间难衔接,新ICT投入不足。

华为的应对之道有三:

首先是“Cloud Only,实现线上线下的无缝对接与连通”。去年华为公司内部对云业务进行了充分的研讨,达成了共识。认为数字化解决方案一定是长在云上的,不仅是公有云,还包括私有云、混合云,华为还明确所有云要遵循“5同”原则,即同架构、同API、同体验、同服务、同生态。以实现客户、伙伴应用软件上云时,一次开发,一次对接,多云部署。

其次是全栈全场景普惠AI。全栈,意味着为广大AI应用开发者提供强大、经济的算力,低门槛的应用开发平台,实现AI数据建模、模型训练、应用开发更加简单、敏捷、高效;全场景,意味着实现智能无所不及,覆盖端、边、云任何商业场景。“普惠AI”是华为的目标——提供用得起、用得好、用得放心的AI,将AI拉下“神坛”。

最后也是最基础的安全和可信,当数据成为核心资产后,没有安全可信的方案是难以想象的。华为相信安全是一个系统性的工程,华为通过四方面举措来提升产品与解决方案的安全韧性——第一,通过AI加持实现智能检测,并自动处理威胁;第二,通过云容灾保持业务的连续性,支持多云管理以及公有云和私有云容灾备份;第三,通过数字平台与终端协同防止设备劫持,例如可通过检测摄像头的非法访问等多种行为防止其被劫持;第四,通过数字平台与联接协同防止网络攻击,可在发现攻击源后,为网络设备制定并指挥防止攻击的策略,例如不转发攻击数据包等。

漫长To B路

最近To B或者说产业互联网的喧闹声持续了一阵子,主要是BAT掀起的风潮,但互联网行业的To B是看起来热闹,传统做To B行业的大企业早就在这条路走了很多年,当然,互联网思维也给行业带来了不同的竞争思路和操作方法,对于整个行业来说是好事。

在华为的整体战略中,首要任务仍然是聚焦ICT基础设施,这也是华为To B一直以来的基础,比互联网行业的视角更深。雷锋网获悉,华为在2018年的战略中明确了一点,那就是企业业务将成为华为整个To B业务的增长主引擎,而To B业务中包括华为引以为豪的运营商业务。

邱恒则表示,不要小看这个主引擎中的“主”字,这说明整个公司对企业业务的战略倾斜。

对此雷锋网的理解是,华为运营商BG更多的是专注于电信行业,在电信行业纵深更深,而企业BG要求广度,去触达更多不同的行业,华为没有如电信行业一般的行业经验,而是与合作伙伴共同做大这一市场蛋糕。

在华为年报,华为对于企业业务的终极目标陈述在前:

企业业务要围绕聚焦的客户场景,以解决客户问题为出发点,和合作伙伴一起为客户提供有竞争力的解决方案,做好 Huawei Inside,并通过充分与各国政府、行业、企业的合作使我们融入当地社会,成为其中一份子 。

十大常用软件架构模式简介

$
0
0

大型的企业级系统是如何设计的呢?想必大家都曾经有过这样的疑惑。大型软件开发前,我们必须选择一种合适的架构,它既要提供我们想要的功能,质量也要过关。因此,在应用不同的架构之前,我们有必要熟悉一下这些架构。

什么是架构模式?

根据维基百科,

针对软件架构中给定上下文的常见问题,架构模式是一种通用的、可复用的解决方案。它与软件设计模式相似,但范围更广。

在这篇文章中,我将简要地说明一下10种常用的架构模式,以及它们的用法和利弊。

  1. 分层模式
  2. 客户端 – 服务端模式(cs模式)
  3. 主从模式
  4. 管道过滤器模式
  5. 代理模式
  6. 点对点模式
  7. 事件总线模式
  8. 模型-视图-控制器模式(MVC模式)
  9. 黑板模式
  10. 解释器模式

1. 分层模式

这种模式可用于构建能分解成多组子任务的程序,每个子任务处在特定的抽象级别中。每一层为更高一层提供服务。

以下是最常见的通用信息系统中的4个层次。

  • 表示层(亦称为 UI层)
  • 应用层(亦称为 服务层)
  • 业务逻辑层(亦称为 领域层)
  • 数据访问层(亦称为 持久层)

用法

  • 通用桌面应用
  • 电子商务web应用

分层模式

2. 客户端-服务端模式

该模式包含一个服务端和多个客户端。服务端组件给多个客户端组件提供服务。客户端向服务端请求服务,服务端提供相关的服务。此外,服务端会持续监听客户端的请求。

用法

  • 在线应用,例如电子邮件、文件共享和存储。

客户端-服务端模式

3. 主从模式

该模式包含两部分;主和从。主组件给相同的从属组件分配工作,并根据从 从属组件 中返回的结果计算最终结果.

用法

  • 主服务器是权威来源,从属数据库与其进行同步。
  • 在计算机系统中,外围设备连接到总线中(主驱动和从属驱动)。

主从模式

4. 管道过滤模式

该模式可用于构建生成和处理数据流的系统。每个处理步骤包含在一个过滤组件中。待处理的数据通过管道传递。这些管道可用于数据缓存或同步。

用法

  • 编译器。连续的过滤器执行词法分析,解析,语意分析,和代码生成。
  • 生物信息学中的工作流。

管道过滤模式

5. 代理模式

该模式用于构建伴有解耦组件的分布式系统。这些组件通过远程服务调用来和彼此互动。 代理组件负责协调 组件之间的通信。

服务器将其功能(服务和特性)发布到代理。客户端从代理请求服务,代理根据注册表把客户端重定向到合适的服务。

用法

代理模式

6. 点对点模式

在该模式中,相同的组件被称为对等组件。对等体既可以作为客户端,请求其他对等体的服务,也可以作为服务端,为其他对等体提供服务。一个对等体可以作为客户端、或者服务端、或者兼任两者,它能随着时间动态变更自己的角色。

用法

点对点模式

7. 事件总线模式

该模式主要处理事件,并且有4个主要组件:事件源,事件监听者,事件通道和事件总线。事件源发布消息到事件总线上的特定通道。监听者订阅特定通道。如果监听者订阅的通道有消息发布,那么监听者就会得到通知。

用法

  • 安卓开发
  • 通知服务

事件总线模式

8. 模型-视图-控制器模式(MVC模式)

该模式亦被称为MVC模式,它将交互式应用分成3个部分,

  1. 模型 – 包含核心功能和数据
  2. 视图 – 给用户展示信息(可能不止一个视图)
  3. 控制器 – 处理用户的输入 这样做的目的是将 信息的内部表示信息呈现给用户并且从用户获取的方式分离开。这样能解耦组件并且有效重用代码。

用法

  • 主要编程语言的万维网应用的体系结构。
  • web框架,例如 DjangoRails

MVC模式

9. 黑板模式

该模式可用于没有已知确定性解决方案策略的问题。黑板模式由3个主要组件组成。

  • 黑板 – 一块结构化的全局内存,包含解决方案空间的对象。
  • 知识源 – 具有各自代表性的专业模块。
  • 控制组件 – 选择,配置和执行模块。 所有组件都可以访问黑板。组件可能会生产添加进黑板的新数据对象。组件在黑板上寻找特定类型的数据,并且可能利用已有的知识源,通过模式匹配的方式来寻找数据。

用法

  • 语音识别
  • 车辆识别和追踪
  • 蛋白质结构识别
  • 海纳信号解析

黑板模式

10. 解释器模式

该模式用于设计 用来解释专用语言写成的程序 的组件。它主要指明如何评估程序的行,即用特定语言编写的语句或表达式。基本想法是为语言的每个符号设置一个类。

用法

  • 数据库查询语言,例如SQL。
  • 计算机语言用来描述通讯协议。

解释器模式

架构模式的优劣比较

下面的图表总结了各种架构模式的优劣。

各种架构模式

名字优势劣势
分层模式低层级的组件能被不同的高层级组件调用。可以清晰地定义层级,所以层级化更容易标准化。当在层级内改动时不会影响到其他层级不是普遍适用的。在某种情况下,某些层级可能会被跳过
客户端-服务端模式能很好地对客户端请求的服务进行建模请求被分到服务端的不同的线程中处理。因为不同的客户端有不同的展示形式,进程间通讯会导致额外开销。
主从模式准确性 – 服务被代理到具有不同实现的从属组件中执行从属组件彼此隔离:之间没有共享状态。主从通讯的延迟在某些场景下是个问题,例如实时系统。这种模式只可以被用来解决能被分解的问题。
管道过滤模式并行处理。当输出和输出都是流数据,过滤器一旦收到数据便开始计算。易于增加过滤器,系统扩展性好。过滤器可以复用。可以通过已有过滤器的重新组合来构建不同的管道效率会受限于最慢的过滤处理器。把数据从一个过滤器转移到另一个中时,存在数据转换的开销。
代理模式允许对象动态变化,增加、减少和迁移,并且对象分布对开发者是透明的。需要服务描述标准化。
点对点模式支持分布式计算。对于任意失败节点的高健壮性。取决于资源和计算效率的高拓展性。由于各个节点是自愿合作的,服务质量无法保证。安全性很难保证。性能取决于节点数量。
事件总线模式易于新增发布者、订阅者和连接。该模式对于高分布式应用很奏效。该模式的可拓展性可能是个问题,因为所有消息都通过同一个事件总线传输。
模型-视图-控制器模式相同的模型可以轻松拥有多个视图,可以在运行时建立连接和断开连接。复杂度增加。可能导致用户操作的许多不必要的更新。
黑板模式易于新增应用。易于扩展数据空间的结构。很难修改数据空间的结构,因为会影响所有应用。可能需要同步和访问控制。
解释器模式有可能实现高度动态行为。有利于终端用户的可编程性。提高灵活性,因为易于替换解释代码。因为解释语言的执行速度一般比编译语言慢,所以性能可能是个问题。

十大常用软件架构模式简介,首发于 文章 - 伯乐在线

唯品会实时计算平台的演进之路

$
0
0

一、实时平台现状

先介绍一下我们整个平台的现状,按计算的话,分为 Storm、Spark、Flink 三个主要的计算引擎,Flink 相应的应用数量目前少一些,不过按照整个计算引擎的发展方式,后续我们还是希望以 Flink 为主做相应的业务推进。

1、核心业务

  • 实时推荐引擎:这块是非常核心的业务,对于大数据来说这些都是个性化推荐、实时推荐;
  • 实时看板:我们称为给到总裁级别、各个业务线的运营和商务的数据,例如各个业务线上的实时销售和用户访问数据;
    实时数据,包括 MySQL binlog 数据和用户行为数据:

我们通过 VDP 将 binlog 解析后同步到 Kafka 中,给到后续业务方;

  • 用户行为数据是把 app 或者微信等埋点曝光的数据清洗出来,给后续的实时应用;
  • 金融风控与安全业务的风控;
  • 比价:大家在购买电商商品的时候会比价,我们平台方面也会做,看同样一件商品在其他电商售价多少,以决定我们自己的价格策略;
  • 监控:我们有很多实时的监控系统业务指标,需要利用到实时的指标,比如全站的 PV、UV 等。

2、实时平台的职责

整个实时平台我们可以看两大板块:

  • 实时计算平台:提供基础数据的支持,保证应用的监控数据的稳定性,提供相应的开发支持,包括应用的开发方案评审和引导;
  • 实时基础数据:很多时候我们需要提供基础数据(埋点、Binlog 数据)的清洗打宽,这方面技术性也很强,会汇集到各种业务方。此外,格式的定义、自然的监控也是我们来做,会提供技术平台和技术数据,这些体现着平台的重要职责。

二、实时平台的发展历程

1、早期

整个实时平台的发展过程中,实时这方面也是从 0 到 1,大规模开始进行实时的业务大概是在 2013、2014 年,期间在不断地产生和迭代。

  • Storm 是最早成熟的实时计算框架,最开始也是基于 Storm 做实时应用开发和推广。
  • 早期也在 Storm 尝试去做 SQL 相关的事,那时候想法挺美好,但是因为实时的 SQL 能完成的事情,包括框架的成熟度比较低的情况下,SQL 相互碰撞,步子迈得太大了一点,就死在了沙滩上,我们当时能够真正帮到业务用 SQL 完成的事情还太少。现在相对而言,实时框架上的 SQL(Flink SQL)完善了很多,可以推广使用。
  • 有段时间也做所有实时应用的对接,对我们来说最大的就是资源瓶颈,人员不足,后面还是聚焦平台为主,包括负责部分核心应用。

2、现在

整个实时平台的发展过程经历了几个阶段,具体的技术发展过程如下:

首先是有了 VRC,用于任务管理、监控、告警、数据质量。实时应用都是线上的应用,没有平台统一管控的话,实时应用是否 OK 或数据是否延迟等情况出现,就都不知道。有了实时平台之后,我们就知道实际应用运行到底怎么样。

Storm 比较完善后,计算框架增加 Spark Streaming。

很多用户会用到我们提供基础的数据,比如流量的数据、Binlog 等,并且我们会提供业务上的聚合和打宽。因为很多情况下我们用流量数据时,希望这个数据能包含的维度比较多,最典型的维度是用户过来以后,基本上有对应的设备 ID 转换成唯品会的 ID。

这个设备 ID 关联的用户的性别、姓名,或者用户的基本会员等级、用户偏好等一些基础的数据我们直接关联好,后续做实时任务就简单了很多。

2018 年我们开始推广 Flink 相关的应用,团队内部做的应用全部切到了 Flink。也是从 2018 年 6 月开始,调度开始切换到 Kubernetes 上。我们的实时平台不仅做实时相关的事,也做很多跟机器学习相关的工作,希望机器资源能更好地去共享。

机器资源对于电商来说,会有一个很明显的特征。在 618、双十一这样的大促时,随着数据量的暴增,资源的消耗量也会迅猛增长。

大促结束之后,这些应用根本就不需要这些资源,那么在平常一些时候,这些资源可以给机器学习更多的资源,通过统一资源管理框架调度系统做的这件事情,这是我们切换到 Kubernetes 上的很重要的原因。

我们一直往后面推进,里面也有很多的技术问题需要解决。

3、平台架构

实时平台来说,各家公司的架构基本上差不多。主要的核心数据就是两方面:一是数据源自用户行为的数据;另外就是线上对接的业务数据库的数据。

实时数据到达后,通过计算引擎完成业务逻辑的计算,以及和其他数据的交互,包括支持实时访问的存储系统。数据的结果可以给到实时报表、推荐引擎,也有给到机器学习平台进行模型训练。

整个数据流的过程会经历很多的环节,通过很多次计算的过程,对稳定性和可靠性都有比较高的要求,核心体系架构如下所示:

实时平台提供一个交互式开发的环境,一些简单的逻辑或者可以用 SQL 表达到的;复杂逻辑会使用计算框架的 API 进行开发。

对于任务来说,版本、数据质量以及元数据系统和离线还不太一样。离线的元数据系统都是表,任务很多都是依赖报表来完成。

实时的元数据系统就会考虑到它是在哪;我怎么可以访问到它;它里面数据的格式是怎样的。因为数据可能是 PB 格式,也可能是 JSON,我们会考虑怎么把这个数据格式对业务方透明,在上面做相应的封装来保证业务的方式比较简洁。

实时计算在从早期的荒野到现在逐步完善,我用痛并快乐来形容:痛是因为它开发的难度、开发的要求比离线和其他应用开发要难;快乐在问题解决以后,以及对业务的增长带来成就。

三、实时计算的难点和挑战

1、开发复杂度

首先说一下实时开发的挑战。比如实时所有的数据,在我们的处理中都是以流形式过来的,没有开始和结束的概念,离线的如果用 Spark SQL 去处理数据就有明确的开始结束时间。

就如我们做订单处理,其实这个订单的状态是一直变化的。如添加的购物车、下单、支付、物流和收货以及售后等。

物流之前,订单还会扭转到物流仓库。在包括售后和退货等环节后,这整个订单的持续过程会很久,它随时随地在变化。因为一个月以后订单发生的质量问题,也需要平台来处理。

整个计算链路也比较长,同时涉及到的系统有很多,对计算引擎、存储这些都会要求。

相应地,做实时开发有几个讨论的核心问题:

  • 设置各个组件的并行度是不是合理?是不是可以满足需求?怎么去评估我这是合理的还是说它太大还是太小?
  • 面对计算的结果和内部的计算中间结果数据,用什么来存储?中间是没有状态数据的,这状态数据如果量比较大,并且需要跟外部系统密切交互的时候,如果外部系统响应比较慢或者延迟比较高,就会严重影响实时处理的效率;
  • 异常处理困难,多个流之间的处理很具有挑战性,现在来说,没有一个非常完美的方案能解决多个流之间的关联关系。离线处理相对比较简单,但是在实时处理的时候,问题就复杂了很多;
  • 一致性问题:实时数据要做到 Exactly Once 也是非常有挑战的,对系统有非常高的要求;
  • 数据准确性和校验,很多时候做的实时指标都要跟离线进行对数,如何保证实时和离线一致的,需要考虑到的问题就特别多。

2、技术难度

乱序问题

多个流要关联的话,乱序问题是非常麻烦的。因为很多的数据过来的时候会存在乱序问题。有一条数据可能是早发生的,但是后收到了,因为整个数据上报过来的时候,经历了很多很多的重输,经历了各种设备,很难保证数据是严格有序的。

吞吐和延迟

延迟和吞吐 TPS 通常是矛盾的,你希望 TPS 高,怎么办?

通常加大批处理的模式,我希望一次可以处理一批数据,这样吞吐量就上去了;但是这样延迟就会增加。很多时候面临的具体是什么问题,根据具体问题来给出解决方案。

内部的状态数量

比如计算 UV,UV 的维度会非常多,甚至细到商品粒度。

我们在线的商品几百万的时候,对于商品的 UV,以及跟商品关联的的品牌、档期等,这些交叉之后所需要的计算的指标特别大,可能达到千万级的统计量。

怎么去做状态数据的存储,包括这些数据的可用性,就非常重要了。如果任务处理失败了,怎么快速的恢复等。

四、实时平台的发展方向

对于实时平台来说,这些年的发展都是在做一件事情——降低开发门槛。首先,从平台本身来说,我们做了这几件事情:

1、丰富实时基础数据——实时离线融合

提供核心基础数据

我们做的第一件事是提供核心基础数据。这个很多时候可以降低实时业务后续开发难度。因为前面我们刚刚提到了做多种实时宽表以后,业务做实时应用其实就只是处理单一流。

在前置的任务中,我们把很多特别难搞的问题都解决掉,包括关联到其他维度的数据,多个数据源之间的乱序等,关联好的数据输出到一个流中,后续实时的应用处理单一流就简单了很多。

实时和离线统一

因为大家都知道有一种 Labmda 提法,我实时地算一遍,然后用批处理去补数。

但这会面临两个问题,一是数据需要两个计算框架,工作量大了很多;二是数据重复计算,导致更多的资源消耗。

我们现在来做里面的事情,能实时处理的数据就不会再去离线处理。因为实时处理的实时清洗打宽以后,我们以五分钟的粒度写入 HDFS 的准实时表里面,离线任务就可以启动来使用这些数据了。这样,很多数据的的口径就做到了一致性。

业务方有需求要一个他们认为的实时数据指标,首先作为平台来说,就会问你一个直白的问题:你希望这个实时是什么概念?是秒级还是分钟级?

因为对于实时的时间密度大家理解是不一致的,如果在分钟级以上我们会根据这些数据通过准实时或者离线的方案来完成数据的输出。因为离线 SQL 的开发成本是最低的,可能我直接写 SQL 就能完成。

相应的,如果你真的要求数据时间非常短,那要考虑真正实时的应用怎么开发。

2、统一计算资源:基于 Kubernetes 调度实时和 AI 平台资源

前面我们也提到了在管理计算资源的时候,如果做到 Storm、Flink 或者 Spark 等任务通过 Kubernetes 统一资源的调度管理后,能快速地对应用扩收容。实时平台的管理实时应用接近 800 个,所以需要快速地提升自身应用的能力和变更。

3、新的开发模式

实时平台现在推广基于 Streaming SQL 的开发模式,底层的计算引擎以 Flink 和 Spark Structured Streaming 为主。

因为不管是 Flink 还是 Spark Structured Streaming,都支持状态存储,便于错误恢复和可靠性保障。

第二个是相应的,我们整个 API 要更高级一些。相应的,写一些代码的时候,也会有非常大的简化。

整个来说,开发平台也在预研实时的 notebook 开发环境,你可以完成相应的实时应用的开发,整个模式都是在替换 Storm 的节奏。

4、效率提升

在我们的实践中,举一些使用 Flink 带来的显著好处的案例。

UV 计算

在以 Storm 为计算框架的时候,状态存储通常是在 Redis 中,这样会需要大量的 Redis 资源。

现在完全可以用 Flink 来做,它的好处是我们有很多的计算任务,通过这样的转化,它计算的稳定性、可靠性得以提升,计算资源消耗降低 2/3。

以我们自己 UV 中品牌日这个场景为例,同时会有上百个品牌日在线,因此每个品牌日的指标需要全部的预算指标。在 Storm 为计算的时候甚至用到了 240 个以上的 Worker 节点,并且配合了 2T 的 Redis 存储。

切到了 Flink 以后,因为 Flink 所有的状态都是在内存中,这个过程中少了跟 Redis 的交互,效率会有非常大的提升。同时整个的依赖组件越少,系统稳定性就会越高。

埋点数据落地

我们很多实时的在 Kafka 里面的数据通过 Spark Streaming 写入到 HDFS 中,然后通过 Hive、Spark SQL 来访问。

在使用 Flink 里带的 Bucket Sink 模式,只需要十分之一的资源就达到了原来 Spark Streaming 就能达到相应的吞吐量,并且延迟也大幅度的降低。

5、统一数据源

1)UDM 架构

当前实时系统,机器学习平台要处理的数据分布在各种数据存储组件中,如 Kafka、Redis、Tair、HDFS 等等,如何方便高效的访问、处理、共享这些数据是一个很大的挑战,对于当前的数据访问和解析常常需要耗费很多的精力。主要的痛点包括:

  • 对于 Kafka,Redis,Tair 中的 binary(PB/Avro 等格式)数据,使用者无法快速直接的了解数据的 schema 与数据内容,采集数据内容及与写入者的沟通成本很高。
  • 由于缺少独立的统一数据系统服务,对 Kafka,Redis,Tair 等中的 binary 数据访问需要依赖写入者提供的信息,如 proto 生成类,数据格式 wiki 定义等,维护成本高,容易出错。
  • 缺乏 relational schema 使得使用者无法直接基于更高效易用的 SQL 或 LINQ 层 API 开发业务。
  • 无法通过一个独立的服务方便的发布和共享数据。
  • 实时数据无法直接提供给 Batch SQL 引擎使用。
  • 此外,对于当前大部分的数据源的访问也缺少审计,权限管理,访问监控,跟踪等特性。

UDM(统一数据管理系统)包括 Location Manager、 Schema Metastore 以及 Client Proxy 等模块,主要的功能包括:

  • 提供从名字到地址的映射服务,使用者通过抽象名字而不是具体地址访问数据。
  • 用户可以方便的通过 Web GUI 界面方便的查看数据 Schema,探查数据内容。
  • 提供支持审计,监控,溯源等附加功能的 Client API Proxy。
  • 在 Spark/Flink/Storm 等框架中,以最适合使用的形式提供这些数据源的封装。

UDM 的体系架构如下图所示:

2)基于 UDM 的开发模式

在基于 UDM 的基础上,实时和离线可以统一开发模式,其示例代码如下:

从示例可以看出,不管 Flink 还是 Spark 都是统一的开发模式,而且代码非常简洁。

Q & A

Q1:我们也是做这个的,你的大数据平台上所有的组件都是容器化的还是混合的?是属于计算类的?

A1:现在大数据的所有组件要容器化很难,存储我们还没有做容器化相关的事,更多的是做偏计算引擎,就是我计算容器化掉,能给到很多更明确的意义。

比如说我很难告诉你一个在 YARN 上的任务到底吃掉了多少 CPU,到底系统有没有问题。那现在容器化后就可以非常好地监控应用的资源消耗,也非常容易判断资源是否使用合理。

第二个,容器化以后,可以开放一些更高的权限给应用的开发者,我可以允许你进到容器里去做一些以前需要高权限才能做的事,比如说要去做一些性能分析问题的时候,在物理机上不太可能给你比较高的权限的,你进去看到的包括其他开发者的应用,操作不当可能把组件都搞挂了。

但是在容器环境下,你登录到容器里面,搞死了就是你自己把自己的应用搞死了,别人的你根本就看不到。

我们目前是计算类的。对于大数据无外乎就计算和存储两大类。存储容器化目前来说,优势不明显,反而会带来更多问题。

现在对于大数据来说,一个趋势是以前我们希望计算和存储在一起,现在由于网络带宽越来越高,我们偏好计算和存储分离。因为大的互联网公司基本上都是从至少单机万兆以上的网络。相对而言,数据的本地性重要性就没有那么高。存储和计算分离以后,计算节点扩展就更加容易。

Q2:我想问下,如果在流计算的统计过程中要维护很多状态,比如有几十亿的要维护,根据您刚刚提到的技术难点,能讲讲是怎样解决的吗?下一个问题是各个节点写入不均衡,怎么去监控,怎么解决?怎么样看数据倾斜呢?

A2:第一个问题,如果以 Storm 来说,可以做两级存储,依赖 Storm 我肯定会在自己 Worker 的 JVM 内部做一级缓存。

达到一定的时间和一定量之后,刷到外部的二级存储里面。计算维度数据的统计指标非常庞大的时候,如果直接往外部输,说得直白一点,再强悍的外部存储的性能都扛不住。你也提到了上亿的时候,每秒输出的数据都是几百万 QPS,基本上没有一个存储的引擎可以在比较合理的规模来支持这个量级(除非依赖更大规模的分布式存储引擎)。

因此一般都是两级存储,到了一定时间或者一定状态数量之后把它刷新到外部的存储引擎。这样就有一个问题,你会丢掉最近未刷新出去的那批数据,这就要求你可以从上一个刷新出去的数据状态支持恢复,或者重复处理。

Storm 完全依赖自己的状态管理,数据出现失败,或者恢复的时候,需要自己处理比较多的事情。Flink 相对而言就好很多,支持从 checkpoint 或者 savepoint 直接恢复。

第二个问题对于数据倾斜来说,基本上所有的数据倾斜的处理都是两阶段处理。即先做一级计算汇总,一级计算之后再做二级处理;或者明确知道哪些数据分布特别不均匀,把这些数据单独处理。

关于怎么样看数据倾斜,观察每一级 Task 往下一级 Task 写出的数据量的分布就可以了。在我看来,数据量最大的比最小的高了十倍就肯定是倾斜,当然也可以计算标准差。

Q3:您之前说唯品会是电商方面的,我们公司也是电商方面的。想问关于订单方面的状态您是怎么维持它的瞬时性的?

A3:对于订单,或者还是其他的业务数据,就是两种场景,一种场景要求我们自己做的工具,我们对应的同一张表,哪怕是分表的数据,同一个表或者分库分表写到同一个 Kafka 的 Topic 里面,并且根据分表做 Partition 映射,这样可以保证局部一致性,即同一个物理表的数据是严格有序的。要保证全局一致性,其实是保证不了的。

但是,对业务来说,局部的一致性就 OK 了,同一个订单只能写到同一个分表上。这样在读取数据的时候,就能做到按相应顺序消费。

第二种,像一些特殊的场景,可能还是会依赖我们自己把秒级数据抽取,即高频的以 SQL 方式去拉取最新的数据写入到 Kafka 中。

很多时候我们做订单统计,也会缓存所有的订单计算过程一些中间状态。最典型的,订单的中间状态的变化是很复杂的一件事。我下单时第一件事是拆单,一个订单能买三件商品,我们有复杂的拆单逻辑,即将这个母单会拆成三个子单,或者两个子单。

因为对应了不同的物流仓库,也可能有下的海淘的商品。在签收之前的过程中你可能又取消了一个子单,或者把三个子单都取消,那这个订单就彻底取消掉了。

因此我们算单数的时候,就要全部减掉。整订单的各种状态我们会把它缓存起来。因为像我们的订单大概有接近 40 个状态,只是有些状态可能不见得会在统计的时候用到。

作者介绍

王新春,唯品会高级经理、数据平台实时团队高级架构师,主要负责实时计算平台、实时数据、实时报表和机器学习平台等业务;曾任美团点评(原大众点评)数据平台高级架构师,负责从零开始搭建实时计算平台及数据平台工具体系开发和建设等工作。


三条简单法则,教你拆掉人际沟通中的“墙”

$
0
0

好友小丽最近有点烦,前两天因为洗碗的问题,她和老公发生了争执。事情是这样的,每次吃完晚饭,小丽都喜欢马上把碗都洗干净,这样就可以心无旁骛地忙活别的事情。

有时候老公也会帮忙洗,但他觉得吃完饭应该先休息上半个小时,刷刷手机,看看球赛,再起身去洗碗。

小丽看着老公不慌不忙的样子,自己先着了急,就跟他说:“你怎么还不去洗碗啊?要看电视到什么时候?”老公一听也急了:“我都说了一会洗,你就不能等一等吗?真是啰嗦。”

你来我往的几个回合,碗没洗,架倒先吵了半天,还顺带翻出了一堆旧账,差点闹到要离婚。

本来只是洗碗这件小事,怎么就会升级到了这般惨状?这主要是由于两个人的沟通不良所致。

配图:James Tissot,争吵

沟通是社会生活中不可或缺的成分,但并不是每个人都掌握了足够的沟通技巧。沟通不良轻则争吵不休,严重时还可能导致灾难性后果。洛杉矶警察局经过统计调查发现,“沟通不良”是导致警官枪击过失事件的主要原因。

不良或者无效沟通就像一堵堵无形的“墙”,疏远了亲密关系,降低了生活的幸福感。好在沟通能力是一种可以后天培养、锻炼的技能,只要找到合适的方法,每个人都有成为沟通高手的潜质。

罗纳德·B·阿德勒和拉塞尔·F·普罗科特合著的《沟通的艺术》,就提供了一套拆掉人际沟通之“墙”的工具箱,对于提升沟通效果、改善人际关系大有助益。

作者罗纳德·B·阿德勒和拉塞尔·F·普罗科特都是大学教授,主要从事沟通领域的研究、写作和教学,已合作出版多部商务沟通、谈判、公共演讲等专业书籍。

《沟通的艺术》自出版以来,在美国有超过200万的读者,被一些高校选定位沟通学教材,并且多次再版,目前最新的版本是第15版,新增了社交媒体和大量影视剧案例。

罗纳德·B·阿德勒和拉塞尔·F·普罗科特认为, 想要拆掉人际沟通中的“墙”,成为沟通高手,三条简单的法则是非常有效的工具,即:清晰信息处方与“我”语言、倾听与无条件关注、同理心与枕头法则。接下来,我们将逐一进行说明。


一、拆“墙”术01:清晰信息的处方与善用“我”语言


人际沟通中的第一道“墙”,就是不能“好好说话”,导致人际关系中的冲突不断升级。想要建设性地解决冲突,第一步就是厘清沟通中的信息,区分出事实、推断和感受。

在钱钟书先生的《围城》中,写孙柔嘉和方鸿渐吵架,方鸿渐说:

“你狠,啊!你闹得你家里人知道不够,还要闹得邻居全知道,这时候房东家已经听见了。你新学会泼辣不要面子,我还想做人,倒要面子的。我走了。你老师来了再学点新的本领,你真是个好学生,学会了就用。……”

整个听下来,方鸿渐一直在强调“你怎样怎样”。通常来说,这种带有浓重指责意味的“你”语言,会让对方产生防卫心理,给沟通设下了更多的障碍,把关系推向了死胡同。

解决这一问题,《沟通的艺术》一书 建议使用“清晰信息的处方”,先描述具体的行为和事件,提出自己的阐释,再描述自己的情绪感受,最终提出一个可行的解决方案。这一过程中, 要善于使用“我”语言,而不是把所有的火力都集中在对方身上。

在方鸿渐的案例中,如果他用平和的语气和妻子说:

“我今天回来的时候,在门口听到了你和姑母的谈话,近来你和姑母来往比较频繁(行为),这已经对我们的夫妻关系产生了影响(结果)。她对我的一些评价让我有些不高兴(感觉),我认为夫妻之间的问题,更应当在小家庭内部协商解决,你说呢?(意图)”

通过把事实和情绪区分开来,并且提出一个可行的方案,沟通的紧张气氛得以缓和,而阐述“我”的感受和理解,会在一定程度上使妻子卸下防卫心,为冲突找到了建设性解决的出口。

在具体运用过程中,面对不同的对象和沟通事项,行为、阐释、结果、感觉、意图的顺序可以打乱,也可以根据自己的语言风格进行调整。

另外,需要说明的是,“我”语言虽然是一个好用的工具,但过多使用,也可能给人造成一种“自我中心”的感觉,所以也要结合具体情境恰当使用。


二、拆“墙”术02:有效倾听与“无条件关注”


“好好说话”是一种能力,“倾听”能力也同样重要,而后者常常被我们忽略。因此 ,沟通中常见的第二道“墙,”是会“说”不会“听”。

当先入为主的思想占据上风时,我们对对方的话语充耳不闻,无效率沟通就成了必然的结局。

比如《西游记》白骨精一回,悟空看到白骨精假变成老婆婆来扰,当头就是一棒取了妖精性命。唐僧见状十分恼怒,认为悟空是杀人成性,于是把紧箍儿咒念了20遍。悟空一直哀求:“师父别念了,有什么话好好说不行吗?”但 唐僧拒绝沟通:“有什么好说的,我这样度化你,你竟敢如此行凶。”悟空一再表示那是妖怪,但唐僧心意已决,认为他是一个“有意作恶之人”,最后赶走悟空了事。

从表面上看,悟空说的话唐僧都听到了,但 他的听是一种“隔绝性倾听”,并没有抓住悟空语言中真正有效的信息。

在现实生活中,不会“听”的表现方式有很多,包括虚伪地倾听(看上去在听,实际在想别的事情,想想在一个特别无聊的会议上的状态)、自恋地倾听(时刻想着把焦点转移到自己身上)、选择性倾听(只关注自己感兴趣的部分)、埋伏性倾听(为了搜集攻击对方的信息)等等。

最有效的倾听是怎样的呢? 心理学家罗杰斯曾经提出“无条件积极关注”的概念,当他与来访者进行咨询时,会全然地沉浸在对话中,感知对方的情绪、捕捉各种细节和信息,从而与对方建立起更深刻的咨访关系,最终起到了疗愈的效果。

在职场和生活的沟通中,不需要无时无刻做到“无条件积极关注”,但要想更有效地倾听, 《沟通的艺术》中也提出了几点建议,分别是:

少说话:更有耐心地聆听对方的发言,不要太急于插嘴和打岔。

减少外界干扰:选择安静的场所,减少身边容易分散注意力的事物,可以关掉电视或者音乐,把手机调至静音等。

不要过早评断:当对方的观点与你产生冲突时,先不要着急下结论,在确定真正理解对方的意思之后,再做判断。

寻找重点:如果对方的表达能力欠佳,或者过于夸夸其谈,不妨先在心里对谈话的内容进行梳理,找出核心观点,为后续的沟通提供帮助。


三、拆“墙”术03:同理心法则与“枕头法”


在人际沟通中,我们经常听到一句话“公说公有理,婆说婆有理”,每个人都能讲出支持自己观点的论据,双方相持不下,沟通之墙坚固无比。这时“同理心”就可以很好地发挥作用。

同理心,或者说是“共情”,指的是能够站在另一个人的角度上体验世界、重新创造个人观点的能力。它涉及观点采择、照顾对方情感、关心对方福祉三个面向。

在运用同理心法则时,可以考虑使用“枕头法”,即从四个角度、一个中心全面复盘问题,找到利益共同点,得出更好的解决方案。《沟通的艺术》中,举了关于举办婚礼的案例,女方想要一场盛大的婚礼,而男方认为一个小规模的婚礼足矣。

“枕头法”是如何起作用的呢?

1、立场1:我对他错。一辈子只结一次婚,应当邀请所有亲人好友前来见证。

2、立场2:他对我错。目前资金不够充裕,可以把钱储蓄起来,用来作购房基金。现在房价上涨快,再拖两年就买不起了。而且婚礼规模太大,两个人也疲于应付。

3、立场3:我们都对,也都错。我们的想法都有道理,但也都有偏颇之处。

4、立场4:这个议题不重要。婚礼的形式固然重要,但更重要的是我们未来的生活。

5、立场5:以上立场都有道理。举办什么样的婚礼,无关个人“输赢”,我们会把关注点放在如何维持双方积极、稳定的关系上。

开头小琳和丈夫关于洗碗的争论中,“枕头法”也是行之有效的策略。两个人都有自己的理由,但站在对方的角度考虑之后,会发现除了执着于“你输我赢”的模式外,双方可以有更有效的解决方案。

比如增加外出就餐次数、购置洗碗机,或者通过调整其他家务劳动分工比例等。既可以解决洗碗问题,也会让亲密关系更有质量。

著名心理学家欧文·亚隆说:同理心是我们试图和他人形成联结时最有效的工具,它是人际关系的黏合剂,使你能深刻了解其他人的感觉。

沟通是一个双向、流动的过程,同理心可以有效改善沟通气氛,拉近情感距离,是一种行之有效的沟通工具。


 


沟通不是万能的,不能解决我们生活中的所有问题。但在其他条件相同的情形下,沟通能力更强的人,通常获得成功的可能性也更高。

《沟通的艺术》中所介绍的清晰信息、有效倾听和同理心这三条法则,看似简单,但若能地在沟通实践中巧妙运用,也可以帮助我们拆除人际沟通中的“无形之墙”,进而提升生活和工作的幸福指数。


Hi,你好,我是桑笛,爱读书,爱写字。

如果喜欢我的推送,欢迎关注、转发,你的支持是我持续更新的最大动力,ღ( ´・ᴗ・` )比心


有赞亿级订单同步的探索与实践

$
0
0

文 | 王启 on 订单


一、引子

有赞是提供商家 SAAS 服务,随着越来越多的商家使用有赞,搜索或详情的需求也日益增长,针对需求及场景,之前提到过的 订单管理架构演变AKF 架构等在这两篇文章里已经有所体现,而这些数据的查询来自于不同的 Nosql,怎么同步这些非实时存储系统将是一个很有趣的事情。

1.1 同步现状

当前有赞订单同步流程及业务现状如图所示,采用了 ES+HBase(tip1)架构体系去解决搜索和详情的需求,利用 canal(tip2)将数据库变更写入到 mq 中,然后利用同步系统来解决相关数据同步问题,而后续下文中将叙述有赞订单同步面临的问题及应对方案。

二、同步

2.1 实现同步基础 - 单表同步

2.1.1 乱序问题

单表同步如图所示:


业务场景中,在这任何一个序号链路中,如果并发出现同一主键的两条消息,同时在 Nosql 中没有做版本控制,都有可能造成消息乱序问题,而相反,如果通过顺序解析 binlog 的同时,为每条 statement sql 执行的结果分配一个顺序 SeqNo,该 SeqNo 保证有序(tip3),再通过 Nosql 中控制乐观锁就可以解决顺序性问题。

2.1.2 HBase 同步

Hbase 同步相对来说比较简单,Hbase 内部拥有 timestamp 协助控制每个 qualify 的版本,只要让 timestamp 传入上文所说的顺序 SeqNo,那么就可以保证每个字段读取出来的数据是最终一致性的。

2.1.3 ES 同步

ES 同步针对单表场景可以通过 index 的操作来进行写入,index 可以采用 exteneral 版本也称作外部版本号来进行控制,同样适用上述的 SeqNo 来做乐观锁去解决该问题。

2.1.4 同步过程图

2.2 实现同步进阶 - 多表同步

2.2.1 乱序问题

多表同步基于单表同步的基础上做相关的同步,如图所示:

当数据库的两张表(不关心是否在一个实例上,如果不在,还更惨,SeqNo 还不一定能够保证有序)触发了更新操作,假设 t1 生成 binlog 的 SeqNo 小于 t2 生成binlog 的 SeqNo,若 t1 这条消息因序号链路中的网络抖动或其它原因造成消费晚于 t2,也就是 t2 的 binlogSeq 先写入 Nosql 中,那么就会造成一个 t1 的数据无法写入到 Nosql 中。

2.2.2 HBase同步

其实上述多表同步乱序的问题并不是绝对的,针对 Hbase 这种自带列版本号的将会自动处理或丢弃低版本数据,同时针对这种情况,设计成每个 table 表中的字段都会列入到 Hbase 中。举个例子,针对订单的情形存入订单主表和订单商品表

场景1:1

针对订单主表,我们写入的数据以订单号做 hash,然后以 hash 值:订单号作为主键降低热点问题,同时定义单 column family,qualifiy 格式为 表:字段 value为对应的 value 值,timestamp 为 SeqNo,如图所示:

场景1:n

针对订单商品表,我们写入的数据同样以订单号生成相应的 rowkey,同时定义单 column family,qualifiy 格式为 表:字段:对应记录的 id 值 value 为对应的 value 值,timestamp 为 SeqNo,如图所示:

通过上述写入,能够针对具体到某个字段都有对应的 timestamp 值的更新,为后期写入更新数据能够更新到具体字段级别。

2.2.3 ES同步

针对上面的同步乱序问题,ES 没有 HBase 这种列版本号,ES 只有 doc 级别的 version,如果上述真的出现 SeqNo2>SeqNo1,且 SeqNo2 早于 SeqNo1 写入到 ES 中,则就会出现 SeqNo1 的内容无法写入,也就会造成顺序不一致的情况。那如何去解决这个多表同步问题呢?

既然会乱序,那让它有序就好了,数据保证有序不就能够解决这个事情嘛,让整个链路有序也就代表 canal 消费 binlog 数据保证有序且丢到 MQ 中有序,MQ 然后保证顺序投递到 Sync 消费处理程序中,通过消费一条消息然后 ack 告诉 MQ 是否成功,已达到保证所有数据全部有序(若多线程或多机器处理 MQ 中的多个分区都是会存在问题)。如图所示:

如此只要保证 t1 表的数据和 t2 表中的数据在 ES 不互相关联,每个数据写入的时候按照 update 方式写入(如果不存在需要做一次 create 操作),这样就能保证所有数据按照顺序执行。

2.3 配置化同步

上文已经讲到数据同步是由一个数据源(这个数据源可以来自于 MQ、Mysql 等)同步到另外一个数据源(Mysql、ES、HBase、Alert 等),也就是一个管道的过程。借鉴了一下 logstash 官网,同样处理流程分为 input、filter、output 组件,这些流程称之为 task 任务,如图所示:

通过这些组件,抽象化出每个组件都有对应的配置,由这些配置来进行初始化组件,驱动组件去执行流程。简单来说,只需要在页面中配置一些组件,无需开发任何一行代码就能实现同步任务。如图所示:

通过一系列的配置,就能配置出一个任务,针对业务逻辑,可以采用动态语言 groovy 来实行脚本化处理(复杂业务场景可以通过 UDF 函数来做支持),针对 mqinput 拿到的字段然后经过处理,经过过滤 filter 等,可以直接拿到相关的数据进行组装,然后配置化的写入到 ES 中,无需开发任何一行 java 代码即可实现流程自动配置化,针对复杂的需求也能够高效率支持。配置界面如图所示:

2.3.1 性能瓶颈

上述就能解决 ES 多表同步的问题,但是同样会存在一些问题:

  • 性能瓶颈问题

  • 失败堆积问题

性能瓶颈:比如写入量超级大的场景情况下,而 Sync 消费程序只能针对 MQ 中的分区(kafka 的 partition 概念)消费,每个分区只能有一个线程去执行,消费速率与消费分区成正比,与消费 RT 成反比,尤其是大促场景下就会造成数据消费不过来,数据堆积严重问题。
失败堆积:因为是顺序消费,只要某个分区的某条消息消费失败,后续消息就会全部堆积,造成数据延迟率超高。所以建议用顺序队列的场景除非是业务量没有性能瓶颈的情况下可以采取使用,而怎么去解决顺序队列或者去掉顺序队列呢?
用顺序队列无非就是保证有序,因为 ES 没有 HBase 的字段级别版本号,目前订单采用的是用 HBase 做一层中间处理层,解决该问题,如图所示:

通过借助 HBase 字段级别版本号帮助每个表保证表内部字段有序,同时 put 写入完数据之后,通过额外字段 version 做 increment 操作,当这两个写入动作完成之后立马 get 操作拿到 HBase 的数据写入到 ES 中,无论并发程度如何,最终至少有一次的 get 请求拿到的版本 version 字段是最大的,用该 version 作为 ES 的外部版本号解决 ES 版本号问题。
用此方案会有好处:

  • HBase 协助管理内部字段版本,同时根据内部操作,协助 ES 拿到对应的版本,且数据能拿到最新数据;

  • 去掉了顺序队列,HBase 具有良好的吞吐,相对于顺序队列拥有更大的吞吐量;

  • 横向拓展增大消费速率;

  • ES 可以采用 index 操作,性能更好。

当然也有弊端:HBase 存在抖动的情况,以及主备切换问题。

因为存在抖动或者准备切换问题,会造成数据不一致,我们该怎么去解决这个事情呢?

2.4 未来扩展

目前订单同步是通过加载配置文件形式来做的,也就是横向拓展的机器都会去加载同一份配置文件,各个任务通过异常解耦,理论上不会有影响,但是会存在加载任务的重要度的问题。
举个例子:

  • 我需要一台机器临时去消费数据解决线上问题;

  • 有个量级很大但又不是很重要的任务,想不影响其他任务的进行;

  • 要做对比,增量延迟对比或全量对比数据,但又不希望影响其他数据;

  • 查询日志需要所有机器查看查询(当然,公司有内部日志系统,可直接上去查看) 如此,可以让同步系统无状态化,每个任务的配置加载有任务配置平台来进行配置,指定相关的机器做相关的处理,扩容也可以动态申请扩容,如图所示,可以自由分配机器处理不同的任务。

     

三、一致性保障

上文讲了有赞在处理订单的时候怎么讲数据同步到 ES 或 HBase,数据来源于 binlog,写入到 MQ,也就是说处理的来源来自于 MQ。简单一句话来讲:我们不生产消息,我们是消息的搬运工。“搬运工”的角色可以做一些事情,同样有赞在处理数据对比也是如此,这章讲讲“搬运工”可以做什么:

3.1 数据对比

上述一般情况下不会出问题,那如果出问题了怎么办,需要做数据对比,而数据来源就是我们刚刚抛弃的顺序队列,顺序队列有个缺点就是堆积,同样我们也可以利用堆积的特性,让其第一条消息堆积十分钟,那么后续消息基本上也会堆积十分钟,然后就可以消费这个消息进行数据拉取,拿到最新的数据进行数据对比,如图所示:

通过对比结果发送到 alert 中,就可以知道哪些数据不一致,频率多少,这也是一种同步(mq->filter->alert)!

3.2 全量对比/数据刷入

上述我们讲到数据同步到 Nosql 中,但是只是讲了增量的一个过程,涉及到历史数据,就需要对历史数据进行迁移,同样,这也是一种数据同步,后面将会出相关博文怎么去做全量数据同步。

四、Tips

Tip-1:为什么采用 ES + HBase 处理搜索和详情?

一般情况下,公司达到一定规模,有类似全文检索的需求或者高频 key:value 的时候,大家会推荐 ES+HBase 的架构体系去完成搜索和详情的需求,而现实中,绝大多数情况下生产环境不会将数据直接写入到 ES 或者 Hbase,大家都会优先写入数据库,不进行双写的操作是因为增加链路影响业务。当然 Hbase 可能还好一点,ES 本身就是非实时查询系统(为什么是非实时,有兴趣的可以去看看ES读写流程),这种情况下也造就了 ES 和 HBase 的一个准实时系统。针对业务来说,准实时是可以满足相关需求的,比如商家搜索订单并不要求实时。

Tip-2:为什么有赞选 canal 解析 binlog,而不是采用业务消息进行数据同步?

  • 数据表被更改,比如修数据情况,业务消息不会触发,导致无法写入到对应的 Nosql 中造成。数据不一致

  • 顺序性问题无法得到相关保障;

  • 业务消息并不能拿到所有相关的数据进行写入到 nosql 中。

Tip-3:SeqNo 实现方式,为什么不用 binlogoffset?

因为 cana 实例与 mysql 实例是 1:N(推荐 1:1),而大部分业务场景同一种数据一般会落在同一个实例上,canal 就可以通过该台实例的时间与每秒处理的个数相结合。如:timestamp*10000+counter++,而不用 binlogoffset 的原因是 mysql 的实例挂了话,binlogoffset 可能会乱序。


五、结语

有赞交易订单管理承接了亿级流量的同步任务,面临着众多的需求挑战,从最开始的mysql到如今的产品化的同步任务,从单表同步到多表同步,从单索引到多索引,从增量到全量,都有不同的解决之道,如今新兴搜索中台更是承接亿级搜索和同步流量,如有兴趣,欢迎加入,我们一起共同探讨。


拓展阅读

  1. 有赞业务对账平台的探索与实践

  2. 赞订单导出的配置化实践

  3. 有赞订单管理的三生三世与“十面埋伏”

  4. 有赞订单搜索AKF架构演进之路


活动预告

4月27日(周六)下午13:30

有赞技术中间件团队联合Elastic中文社区

围绕Elastic的开源产品及周边技术

在杭州举办一场线下技术交流活动

本次活动免费开放,限额两百名

点击查看原文,即可报名

也可扫描下图二维码,回复“报名”参加


-The End-

Vol.178





有赞技术团队

为 442 万商家,150 个行业,330 亿电商交易额

提供技术支持


微商城|零售|美业 | 教育


微信公众号:有赞coder    微博:@有赞技术

技术博客:tech.youzan.com




The bigger the dream, 

the more important the team.


你现在发得每一条微博都将存入国家图书馆

$
0
0

4月19日,国家图书馆互联网信息战略保存项目在北京启动,首家互联网信息战略保存基地落户新浪。

国家图书馆馆长饶权饶权在致辞中表示,国家图书馆设立互联网信息战略保存项目,是立足于国家信息安全与社会信息化建设的长远发展,建设覆盖全国的分级分布式中文互联网信息资源采集与保存体系,及时、有效地记录时代文明发展脉络,提炼、积累与传承中华文明最新成果及其生动展现形式。为了达到这样的目标,图书馆需要与更多社会力量联合起来,共同推进互联网信息的社会化保存和服务。

微博CEO 王高飞王高飞在致辞中表示,参与互联网信息的保护和应用,是新浪义不容辞的责任。新浪将继续发挥新媒体的技术优势和平台优势,确保信息的存储安全,并且和国家图书馆一起探索和创新应用方式,让互联网信息更好的服务于提升公共服务精准性和有效性,服务于社会治理创新,发挥出最大的社会价值。

活动现场召开了以“互联网时代人类文化记忆保存的价值、路径和未来”为主题的圆桌论坛,北京大学信息管理系教授王子舟、北京师范大学新闻传播学院执行院长喻国明教授、国家图书馆副馆长孙一钢、中科院文献情报中心副主任张智雄教授、微博高级副总裁曹增辉围绕主题做了精彩对话。

数据分析专注非商业用途

国家图书馆互联网信息战略保存项目旨在建设覆盖全国的分级分布式中文互联网信息资源采集与保存体系,通过与国内重点数字文化生产和保存机构的合作,推动互联网信息的社会化保存与服务,构建国家互联网信息资源战略保障体系。

互联网已经成为重要的信息发布和传播平台。第43次《中国互联网络发展状况统计报告》的数据显示,截至2018年,网络新闻的网民使用率达81.4%,网络视频和音乐的使用率达70%左右,此外还有42%的网民通过微博等社交媒体获取和发布信息。

互联网信息成为人类文明和社会记忆的新载体,客观反映着一定时期内政治、经济、文化和社会等方面的变迁。易逝性和不可再生性,使互联网信息的采集和保存尤为迫切,而随着移动互联网和物联网的普及,互联网信息的规模爆炸式增长,调动社会力量参与也成为互联网信息采集和保存的趋势。

因此,国家图书馆启动互联网信息战略保存项目。在中国境内开展互联网业务、并在相关领域处于领先地位的企业机构,均可申请成为互联网信息战略保存基地共建主体。共建主体需确保其提供的信息数据完整、有效、安全,并拥有合法所有权、知识产权或已获得相应授权。

为实现国家图书馆的学术优势和互联网公司的技术优势之间的协同效应,互联网信息保存项目对信息采取社会化保存模式。信息数据仍由共建主体保存,国家图书馆根据保存规范、数据遴选机制和服务需要提供使用需求,将部分数据纳入国家文献信息战略保存体系,并与共建主体联合进行分析,服务于政策决策、学术研究等非商业用途。

推进数字资源建设与保存工作,是国家图书馆“十三五”规划的重要工作之一。从2003年起,国家图书馆就开始尝试对互联网资源进行采集和保存。2009年,国家图书馆互联网成立信息保存保护中心,对国内外政治、经济、文化、科技等领域重要网站和重大专题资源进行采集保存。截至2018年,全国各级公共图书馆累计采集网站23000余个。

国家“十三五”战略规划明确指出,要加快推动数据资源共享开放和开发应用,助力社会治理创新,深化政府数据和社会数据关联分析、融合利用,提高宏观调控、市场监管、社会治理和公共服务精准性和有效性。互联网信息战略保存项目的启动,有助于提升互联网信息采集和保护的系统性和持续性,及时有效记录时代文明发展脉络,提炼、积累与传承中华优秀文明最新成果及其展现形式,保障并促进中华优秀文明的传播,不断激发中华优秀文明在现代社会的活力,实现面向全社会的公共文化服务。

首家互联网信息战略保存基地落户新浪

在20年的发展历程中,新浪一直在引领新媒体行业发展,其内容已经多次被国家图书馆采集保存。国家图书馆与新浪共建首个互联网信息战略保存基地,看重的是新浪庞大的信息数据规模和领先的信息处理能力。

新浪网发布的新闻和微博上公开发布的博文,都将被互联网信息战略保存基地保存。截至2018年12月,新浪网累计发布新闻超过2.1亿条、图片13亿张、视频4500万个、互动总量超过80亿,微博全站发布博文超过2000亿条、图片500亿张、视频4亿个、评论和赞总量近5000亿。新浪网和微博上新发布的内容,也将持续保存。

从1998年起,新浪完整经历了中国网络媒体从门户网站到博客再到微博的进化,并在每个时期都处于领先。新浪积累的信息数据,既有对媒体报道的整合,也有专家的专业观点和网民的碎片化表达。特别是微博作为社交媒体平台,不仅记录着社会重大事件的发展进程,更凭借广泛的参与性记录下公众对重大事件的态度和情感。截至2018年12月,微博月活跃用户达4.62亿,其中22岁以下的年轻群体超过40%,来自三四线城市的活跃用户超过56%。不同年龄、不同地域、不同教育和文化背景的用户发布的内容,可以为政策决策和学术研究提供多元参考,也为从公众视角开展历史和社会研究提供了宝贵资料。

共建互联网信息战略保存基地的同时,国家图书馆还将和新浪开展一系列合作。双方将加强数据对接,联合发布互联网数据分析报告和政府公开信息分析报告。双方还将逐步开展面向不同社会群体的公益性信息服务。国家图书馆负责接收并分析用户需求,新浪负责数据检索、提取和挖掘,并向国家图书馆反馈分析结果。同时,国家图书馆和新浪还将在图书馆新媒体矩阵建设、传统文化推广等领域展开合作。

华为也看不清时代的方向

$
0
0

昨天,有人给我看了,在华为内部论坛上的一篇文章,由一线工程师提出,最终抵达任正非处,并转发全公司的一篇反思文。


不得不说,这是非常非常有价值的一篇文章。

国内的企业报道,普遍是事后报道,习惯性的带着上帝视角,“哦,他这里错了”“哦,他们这里做了一个明智的决策”。要么高颂赞歌,要么一味贬低。

华为的这篇文章由一线提出,被最高总裁办转发,之后引起大量讨论,提供了非常宝贵的真实视角。

作为当事者,身处迷局之中如何破局,如何分清主次矛盾,才是最值得大家思考和学习的。




从中,你可以看见华为作为一个擅长打硬仗的企业,在云计算这一关键战役上,如何在迷雾中前进的。


1 概念多落地少

文章作者写得很用心,用了很多举例来证明一个事实,华为云在这几年的最大问题在于,概念提的过多,落地的少。

典型例子是文章中提到华为云旗舰大会Huawei Connect

比如这边Cloud BU公有云讲专属云,那边IT私有云讲FusionCloud……一个summit一会公有云角度讲一会私有云角度讲。举个很好玩的例子,这次2018 HC大会关于“混合云”,我就看到了各种宣传露出,“FusionBridge混合云”“FCS混合云”“华为AzureStack(微软)混合云”“华为FusionCube混合云”,蹭热点技术词汇也不带这样的,想把客户搞晕吗?软件就是软件,盒子设备就是盒子设备。就一个混合云搞出这么多概念,就不能统一规划,统一呈现,产品组合管理在哪里?具体混合了啥,提供的到底是什么具体能力?解决客户什么问题也讲不清楚

转自:转发《#华为云#听从你心,无问西东》及网友跟帖


“FusionBridge混合云”“FCS混合云”“华为AzureStack(微软)混合云”“华为FusionCube混合云”四个词,不要说客户,做技术的人应该也糊吧。

这么多技术名字和方向,再同一届大会出现,本身就是个问题。会非常混淆用户认知。


那么别家是怎么做的呢?比如前段时间腾讯云架构师任易说,腾讯云的优势就在于,能够连接人、连接事、连接物,然后举了长安汽车的案例。

具体做什么?将长安集团的三万名员工迁移到企业微信,可能说到这里大家觉得没什么东西,

后来任易说,通过企业微信,能帮长安汽车员工干这些,干那些。



以员工交通车为例,员工使用企业微信扫码乘车,司机可以在企业微信中实时了解乘车情况,后台可根据扫描数据生成报表,为排班提供决策支持。


长安汽车还用企业微信实现了企业内部与上下游供应链的管理,通过企业微信连接经销商,打通供应链上下游,就意味着所有的数据都通过格式化,通过微信经过企业微信传到业务系统里。据调查,1000多家经销商中的10000多个销售顾问都在使用企业微信,这是来自销售一线的实时反馈,这又是庞大的想象空间。

如果把500家企业(人)拉到一个群里,可能撮合多少生意上的合作?

你看,腾讯云没有给我找一大堆技术名词,也没有和我科普云计算趋势。

他讲的是看起来和云计算八竿子打不着的汽车行业。

但在他讲述的过程中,我反而清晰看到了云计算的具体运用场景。

不谈是否盈利,不谈开发成本,他至少给了我一个清晰直观的现成案例。

哦,在汽车行业这块,腾讯云确实用新的互联网技术,做了这么一个方案。



如果我是别的汽车制造商呢?如果我是和汽车类似的制造业呢?如果我是上下游的供应商呢?

什么叫打穿一个行业?这就是。



讲完了问题,再来看看原因

华为云出现这种概念多落地少的原因是什么?


文章作者认为是差在了落地生态,没有阿里云腾讯云等他们拟定的追赶目标丰富。

社区里高赞回复认为是执行力太强的副作用



许多员工认为华为的企业文化有点类似军队,强调纪律性,执行力。这一点帮助他们在以往的市场无往不利。但也导致了大家没有战略思维,都等着上层拍板。


我个人,认同后者的观点。

因为华为确实是以执行力强出名,尤其是这种“不惜一切代价完成任务”的习惯。

让大家即便在遭遇困境时,也很少去质疑任务本身。

在手机这样的存量战场,刺刀见血的肉搏战中,他们靠着这一点击败小米,蚕食三星,甚至挑战苹果。

但在云计算这样的新型战场时,靠的是思维能力,单单执行做硬件还行(所以你看华为他们做硬件、做盒子很厉害)。但云计算不是这样子的,缺乏战略方面的主动性,导致他们始终无法确定明确的长期方向,多次改弦易辙之下,大量云名词堆积。


2 把品牌宣传活成了段子手

文章里提到的第二个点,是在华为云的宣传上,出现了问题

典型例子是双11的活动

我发现华为云官网针对双11这种to C市场的购物节搞得花里胡哨,什么红包雨啊,送手机啊,甚至比阿里云搞得还High。你说,双11就是人家造的,淘宝天猫这种to C搞得特别High,没有问题。我就很好奇,to B市场也是这样玩的?我们有时候学习一些新玩法,互联网,且不可High过头了。我不觉得华为云的销售是靠双11这种购物节冲刺的。云关键的还是持续运营,to B也不是这种抢购剁手的玩法。好的产品,to B的大客户,难道还要抢什么“充值200送100”的购物券?

这个其实也是我一直想说的,似乎是杜蕾斯起的坏头。但凡遇见热点事件,都要跑来发个图,编个段子。



但杜蕾斯是大众向的日用品类,加上产品本地调性就是走的非严肃类型,变成段子手没什么问题。

很多公司,包括华为云也把自己活成段子手,其实是不太对的

至少,一个TOB业务,跑来给我搞转发抽奖送手机,我觉得。。。是有点突兀的




品牌官V,要么做专业的解惑科普,要么做品牌宣传,人云亦云的把自己搞成段子手,是有点问题的。



3 赛马机制不包治百病

第三点,文章作者是对华为云各个业务部争抢客户的问题有质疑,而我认为,这实际上,这个表象的背后,应该是长期以来赛马机制的一个疑问。

前两年,腾讯如日中天时,有人总结,这是因为他们内部的赛马机制搞的好。

你看,有QQ,人家别的团队还弄出了微信,第一个拿到了移动时代的船票

有工作室做英雄挑战,也有别的工作室做王者荣耀。最后内部竞赛胜出,吃下了市场。

连做吃鸡,人家也是同时几个工作室一起上做了好几个版本。保证鸡蛋永远在篮子里。

看起来,内部赛马机制似乎是一道万能药,能有效解决大公司内部懈怠问题。


但为什么很多公司不启用呢?在作者的反思中,我们看到了最直观的体现。

记得今年有一次参与一个北京的互联网客户的交流。这家客户每年在阿里云消费3000+万,觉得每年自己花这么多,是不是自己可以建一朵自己的云,想考虑下华为的云计算。结果我们公有云、私有云重复去了一大票人,超过十几个吧。客户核心的决策和技术层人员一共3名。最后一天时间,私有云团队这边给客户针对云的建设、管理,包括跟客户系统对接讨论了一整天。公有云团队也同样准备了IaaS、PaaS、安全、EI等扫盲类介绍,完全就是打了一天酱油。

一个业务,你来两波团队给我重复科普两遍,我是客户我也疯。

甚至这还不是最严重的,在下面别的员工回复中,我看见了更夸张的



业务之间不但存在重复,居然还会互相恶性竞争。你是客户,你会怎么看待这么一家公司?组织管理都出现了问题,还谈什么专业?


我始终认为,盲目赛马不可取,腾讯是TOC的产品,所以根据不同用户给予不同团队和产品,其实是打着吃掉各类细分市场的算盘。这个思路,也可以在大众日化产品的宝洁身上看见。

而华为云,做的是企业服务,这应该讲究的是一站式服务,这个时候你跑来搞赛马,我觉得就有点迷了。尤其在客户角度,会显的非常迷糊,感到你们不专业。


顺带我提一下~百度,这个毛病更突出

百家号,百度问答,百度知道居然是分开体系的,邀请我去百度问答,居然原来的百家号用不了,要新开一个账号注册。

其实新注册也没问题~

但是后台身份证又提示重复了~我当时就觉得

“这产品肯定活不了,你注册机制逻辑都没给我认真做”



大家去看网上的企业报道,尤其是BAT,华为这样级别的企业,普遍能感到一股扑面而来的鸡汤感,比如觉得他们目标明确,意志坚定,执行力强等等,仿佛成功唾手可得。

但实际上,仔细看这篇反思的文章,以及员工们的回复,你就会发现,即便是华为,在云计算这样一个非常明确的重点战场上,目前也是对未来的概念方向不太明确,甚至连组织方向都存在极大疑问的。

有人质疑,有人反思,还有更多的人则是一片迷茫

成功,从来没有故事里说的那么容易


作为时代的旁观者,我们总是能轻易得到各种结论,各种事后的分析,仿佛一切结论都来的如此应当。

只有真正置身于时代大潮,感受被洪流裹挟的力量,才会发现,很多时候,你往往连方向都难以分清。




点击原文链接查看反思文原文

从段永平采访中得到的投资感悟

$
0
0



作者:段永平

来源:虎嗅APP


我们所有的成功,都来自于 “本分+平常心”。


平常心,就是rational(理性),就是回到事物的本原,就是做对的事情,和把事情做对。Stop Doing List(不为清单),说的是做对的事情,但做对的事情,要落实在不做不对的事情上。


很多人经常做一些明知是错的事情,是因为抵挡不了短期利益的诱惑。


举例,OPPO/vivo的Stop Doing List:没有销售部(因为不需要谈生意);不单独和客户谈价钱(所有客户一个价,省了双方非常多的时间和精力,10年20年加起来很恐怖啊);不代工(代工的产品没有大的差异化,很难有利润);没有有息贷款(永远不会倒在资金链断裂上。芒格说知道自己会在哪里死去就不去哪里,多数企业垮掉都是因为借了太多钱了。)


以下是交流实录:


1. 对你来说什么东西是最重要的?为什么?


段永平:不同年龄答案是不同的。现在是家人、亲情、友情。这还需要说为什么吗?


2. 没有销售部,那你的价格决策机制是什么?


段永平:做市场调研,在上市的时候就尽可能定准价,错了及时调整。(电子产品)竞争的本质在于产品差异化,要做别人提供不了的东西。没有差异化,就成了日用基础商品,只能靠价格来竞争,很难挣钱。


3. 你有没有试图改变过性格和思维方式?


段永平:我觉得没有,性格很难改。中欧有个统计,世界500强的CEO中什么样的性格都有,而他们只有一个共性,就是integrity(诚实)。


4. 中国民营企业应该怎么应对贸易战的挑战?


段永平:最主要的是取决于企业本身,做的好,有没有贸易战都无所谓。很多做的不好的企业,会拿贸易战当遮羞布。好的企业,危机来的时候,反而是机会。我们不贷款, 有充裕的现金流,所以每一次危机来的时候都是机会。


5. 投资早期企业的逻辑是什么?


段永平:我不投早期,只投上市企业。投黄峥是因为个人原因,他是我朋友,我了解他、相信他。 黄峥是我知道的少见的很有悟性的人,他关注事物本质。


6. 谈一谈营销方法论?


段永平:(外界)有个误解,以为我们很看重营销。其实对于我们来说,营销一点儿都不重要,最重要的还是产品。没有哪家公司的失败,是因为营销失败。公司失败,本质都是因为产品的失败。当然我不是说不要营销,事实上我们营销做得很好。


营销,就是用最简单的语言,把你想传播的信息传播出去(给你的用户)。


我这里是要强调,营销不是本质,本质是产品。营销最重要的,就是不能瞎说。企业文化最重要。广告最多只能影响20%的人,剩下80%是靠这20%影响的。 营销不好,顶多就是卖的慢一点,但是只要产品好,不论营销好坏,20年后结果都一样。


7. 中国品牌在新兴市场国家有哪些机遇?


段永平:这个我不太懂,但我不觉得会有太大差别,都是要关注用户的需求。平常心,就是回到事物的本原。


8. 巴菲特饭局上发生了什么?


段永平:我做公益,老巴(巴菲特)也做公益。我直接捐出去,和通过老巴捐出去是一样的,所以就拍下了巴菲特午餐,只当做公益了,还能向老巴学习。不一定要吃饭,看老巴在网上的视频、讲话、股东信,就可以了。 老巴(说)的东西,逻辑上很顺,听起来像音乐一样享受。


9. 现在手机(企业)有两种模式,一是小米这种先圈用户,再通过其他方式变现;二是苹果这样,靠产品本身赚钱。哪种好?


段永平:首先,圈客户的角度,苹果比小米厉害;其次,长远来看,没有什么企业是靠便宜赚钱的。性价比,都是给自己找借口。一定要把重心聚焦在用户上,也不是我们非要做高端还是低端,只是把自己能做的事情做好了,满足了一部分人群的需求。即使苹果,也没有满足所有人。


我们早年经常提性价比,直到我有一次跟一个中国通的日本人谈合作说到我们的产品性价比高时,对方很困惑地问道,什么是性价比,是“sex-price” ratio吗?我当时就愣了一下,觉得日本人的词典里似乎是没有性价比这个东西的,之后又花了很久才悟到, “性价比”实际上就是性能不够好的借口啊。我希望我们公司不会再在任何地方使用这个词了。


10. 未来的投资/创业趋势?


段永平:这个问题对我来说有点儿难。我个人不太关心前沿的东西,我一般比较滞后,看懂了好的公司再投。前沿的东西,是苹果这类公司关注的,我做的是找到苹果这样的公司。


11. 这么多手机公司,为什么苹果最成功?


段永平:苹果很难得,focus(聚焦)在自己做的事情上。苹果有利润之上的追求,就是做最好的产品。苹果文化的强度很强,有严格的“Stop Doing List”,一定要满足用户,一定做最好的产品。


我们不和苹果比,因为1000个功能里面,有一些比苹果强,说明不了什么。就像CBA篮球打不过NBA,说我们会功夫,不是扯嘛。


12. 社交方面的“Stop Doing List”,与投资的关系?


段永平:我是anti-social的,社交很累,很费时间。泛泛的社交里朋友太少,看起来认识很多人,其实很难深入了解。有时间我更喜欢去打打球。我投资只是爱好,average(平均)能beat (打败)S&P。


13. 为什么说“敢为天下后,后中争先”?


段永平: 所有的高手都是敢为天下后的,只是做的比别人更好。我们公司成功不是偶然的, 坚持自己的“Stop Doing List”,筛合伙人,筛供货商,慢慢地就会攒下好圈子,长期来看很有价值。


敢为天下后,指的是产品类别,是因为你猜市场的需求往往很难,但是别人已经把需求明确了, 你去满足这个需求,就更确定。(敢为天下后指的是产品类别,后中争先指的是做好产品的能力。或者说,敢为天下后指的是“做对的事情”,后中争先指的是“把事情做对”的能力。)


14. 有没有过一些投资错误?


段永平:投资没犯过错误,投机犯过。(投资其实也犯过,但错误很小,当时可能没想起来。)投机百度的时候被short squeeze(夹空)了,亏了1亿~2亿美金。


我学老巴:想不通的我不碰,肯定会错失很多好机会,但是保证抓住的都是对的。投资遵循老巴的逻辑:先看商业模式,理解企业怎么挣钱。95%的人投资都是focus在市场上的,这就是不懂投资。一定要focus在生意上。公司是要挣钱的。


15. 什么时候卖苹果,为什么?


段永平:好公司是不需要卖的!


16. 你来美国后,能力圈有什么提升?


段永平:能力圈不是拿金箍棒在地上画个圈,说待在里面不要出去,外面有妖怪。能力圈是:诚实对自己,知之为知之,不知为不知。有这样的态度,然后如果能看懂一个东西,那它就是在我能力圈内,否则就不是。


苹果1万亿市值?我从来不关心这个,我只关心它赚钱的能力。买公司,是不打算卖的,除非它盈利能力改变,或者有更好的标的,自己很懂,价格又很低。


17. 怎么看待创业的“坚持了才有希望”和 “Stop Doing List”?


段永平:“Stop Doing List”说的是做对的事,如果知道错了,马上要改。创业依然适用。(就是对的事情一定要坚持,错的事情一定要尽快改!)至于怎么做对,那是方法层面的,可以通过学习来解决。


要是不知对错,就是没有是非观,那这辈子很难有成就。是非观是要自己培养、坚持的,没有shortcut。比如抽烟,很多人不戒烟不是因为不知道它不好,而是抵抗不了短期诱惑。


18. 为什么不见媒体?


段永平:不希望给公众留下我掌控公司的印象,抢了CEO的成就感。不抢他们的功劳,这很重要,因为事实上我本人已经10多年没有在一线了,如果我还是CEO的话,公司很可能做不了这么好。


19. 怎么看待中美市场环境对创业的差异?


段永平:美国环境更好一点。在中国做企业更辛苦,做完自己的事,还得做警察的事、消防的事、保安的事,麻烦......


20. 你主张不贷款,不用margin,错过了机会怎么办?


段永平:贷款和用margin,赚的时候快,赔的时候更快。常在河边走,哪能不湿鞋,湿一回鞋就湿一辈子,为什么要冒这个险呢?(有些机会总是要错过的,只要保证抓住的是对的,就足够了。)我们过去的大部分竞争对手都消失了,我们还健在,道理也许就在此。


21. 你怎么看待智能手机壳行业?


段永平:我不懂。但是我知道,好东西不需要推广,你看智能手机一出来,很快就普及开了。如果你的东西推出去没有很快抓住用户,肯定是不够好,一定要回来好好思考,想自己的问题。


22. 对职场新人职业发展的建议?


段永平:做好本职工作,不要跳来跳去。硅谷很多人喜欢跳槽, 但是在苹果干30年,比跳去大多数创业公司结果都要好。


23. 如何看待创业?


段永平:如果自己都不懂自己在做什么,要让投资人相信你是不可能的。黄峥有一点特别好,会不停地问这个是什么意思,这个是什么意思,关注问题本质。


24. 企业文化?


段永平:企业文化就是Mission、Vision和Core Values。“Mission”是为什么成立;“Vision”是我们要去哪里;“Core Values”是哪些事情是对的,哪些事情是不对的。


招人分合格的人和合适的人。合适是指文化匹配, 合格是指能力。价值观不match(匹配)的人,坚决不要。给公司制造麻烦的,往往是合格但不合适的人。一群合适的普通人在一起,同心合力也能干大事。


25. 怎么看待中国企业爱弯道超车?


段永平:Alaska有句话,shortcut is the fastest way to get lost(捷径是迷路的最快的办法。)不存在什么弯道超车的事情,关注本质最重要!不然即使超过去,也会被超回来。


26. 怎么判断股价便不便宜?


段永平:这是关注短期关注市场的人才会问的问题。我不考虑这个问题。我关注长期,看不懂的不碰。任何想市场,想时机的做法,可能都是错误的,我不看市场,我看生意。你说某只股票贵,how do you know?站在现在看10年前,估计什么都是贵的。 你站在10年后看现在,能看懂而且便宜的公司,买就行了。


27. 怎么理解“Stop Doing List”?


段永平:主要讲的是做对的事情。它不是一个skill(技巧)或者formula(公式),而是思维方式: 如果发现错了,就立刻停止,因为这个时候成本是最小的。我不能告诉你对错,怎么判断对错,要自己积累。


不该骗用户,不该骗投资人,每句话都是一个promise(承诺),这你应该是知道的。你去找投资,说没生意,没skill,什么都没有,那你去找你爸。你总得有点儿什么,才能见投资人吧。如果你自己都搞不清楚要做的事,让投资人怎么相信你?


至于怎么把事情做对,要花时间去培养skill sets(就是有学习曲线的意思,要允许犯错误)。坚持“Stop Doing List”,厉害是攒出来的。OPPO跟苹果比,我们在做对的事情上是一样的,但是在把事情做对上可能有些差距。但我们有积累。我们比大多数公司厉害。


“Stop Doing List”没有shortcut(捷径),要靠自己去积累,去攒,去体悟。stop doing就是发现错,就要停,时间长了就效果很明显。很多人放不下眼前的诱惑,30年后还在那儿。错了一定要停,要抵抗住短期的诱惑。


28. 在硅谷怎么更好地带娃?


段永平:最主要的,要给孩子安全感。怎么给?就是给quality time,就是高质量的陪伴,跟他们交朋友。高质量的陪伴,就是待在一起,把手机藏起来。


要无条件的爱。中国人容易有条件的爱,“你得了第一,爸爸很爱你啊”,这两句话绝对不能放一起说。中国人也爱到处夸孩子得了第一,这容易给孩子压力。孩子会想:我得第二你是不是就不爱我了?我带孩子,坚持尽量不对孩子说“NO”,除了大是大非,涉及边界的事,其他的都让孩子大胆地探索。


29. 怎么看待老巴?


段永平:老巴是一个很好的人。他是发自内心的的对人好对人诚恳。他很睿智,任何复杂的问题,他一两句话就说到本质了。他这么睿智这么成功又对人这么好,中国企业家里我基本没见过这样的,美国企业家里也极少。


30. 为什么卖网易?


段永平:因为丁磊就是个大孩子,那么多钱放他手里不放心,虽然股价证明我可能卖错了。


31. 怎么看待特斯拉?


段永平:芒格说,马斯克是个被证明了的天才,他的IQ可能是190,但他自己认为他是250。但是run a company,you must be rational(经营一家公司,你必须要理性!)。


在我眼里, 特斯拉是一家价值为零为zero的公司,迟早要完。他的culture(企业文化)很糟糕。


32. 如何建立长期友谊?


段永平:就是和人真诚打交道。我跟老巴学到的, 人一辈子最重要的是友谊。所以要对朋友宽容,要友善,要诚实。但他也没说要有很多朋友,能有一打好朋友就足够了。


33. 怎么把culture(文化)传承下去?


段永平:没有特别的秘诀,主要在于选择,找到同道中人。因为你是没有办法说服不相信你的人的。不相信你的人,你跟他说话的时候,他的眼神是飘的,你能看出来。然后就是年年讲,月月讲,天天讲,靠年头淘汰掉不合适的。


34. 怎么样选人,包括合伙人,员工?


段永平:一次就找对那是运气。主要是要有标准,该淘汰淘汰,该散伙散伙。知道错了,要有停止的勇气。越早停止,代价越小。


35. 你的“Stop Doing List”举个例子。


段永平:我想的都不是眼前的。我是学无线电的,但我没有干这个,因为这不是我爱干的事。当年研究生毕业时找的工作说你多少年能当处长,两年能分房子,鸡鸭鱼肉有得分。但是我没有兴趣。所以我离开了。后来去的佛山无线电八厂,当年这个只有几百人的公司招了100本科生,50个研究生。大家都不满意,很多人都想走。结果我离开两年后小霸王都做出来了,回去一看,那帮人都还在(只走了一个人)。


很多人说“我没有找到更好的机会”,其实是他们没有停止做不对的事情的勇气。所以stop doing的意思,就是发现错了就要马上停,不然两年后,可能还是待在那个不好的地方。我一直想的是长远的事情。很多人都是在眼前的利益上打转,他30年后还会在那儿打转。


36. 美国对中国的误解?


段永平:美国人对中国的理解整体不错。我支持political right(政治正确),因为如果你连政治都不正确,你怎么会正确?目前美国人选的总统是让我非常困惑的,但我相信最终都会好起来的。


37. (价值)投资最重要的是什么?


段永平:right business,right people,right price。(对的生意,对的人,对的价钱。这是老巴说的。)对的生意说的就是生意模式,对的人指的就是企业文化。price没有那么重要,business和people最重要。culture跟founder(创始人)有很大关系。business model,就是赚钱的方式,这个是你必须自己去悟的,我没法儿告诉你。就像如果你不打高尔夫,我是无法告诉你它的乐趣的。


38. 创业该怎么坚持?


段永平:我的理解很简单,如果你坚持不下来了,就坚持不下来了。你坚持下来的东西,肯定是你放不下的,到时候你自己会知道。


39. 怎么看比特币/区块链?


段永平:我对不产生现金流的东西,不感兴趣。区块链我不懂,不懂不看,不懂没法下重注。但是我看不懂,不代表你看不懂,你要投自己能看懂的。


40. 怎么发现并保持平常心?


段永平:保持不难,因为它就在那儿(是内心已经有的东西)。不过,马云还说过一句话“平常人是很难有平常心的,所以平常心也是不平常心!”发现嘛,靠吃亏。 因为没有平常心,一不rational就会栽跟头。


41. 怎么找到喜欢做的事?


段永平:你如果总是待在自己不喜欢的地方,你可能永远都不会知道自己真正喜欢什么。所以发现错的事情,就要停。多去尝试,去寻找。做自己喜欢的事,就没有加班的概念了,因为你会想尽办法工作。


42. 我觉得失败是必然的,成功是偶然的,对吗?


段永平:成功肯定是有原因的。


43. 如果有机会再活一遍,什么事会做得不一样?


段永平:不知道,没这么想过这个问题。可能少喝点红酒?


44. 最想给儿子说什么?


段永平:说什么都没有用,做什么才重要(最重要是做什么)。(这是老巴说的)


45. 怎么发现对/不对的事情?


段永平:要有时间想。可能会想很久,有一天突然灵光一现,想明白是错的/对的。我们当年想小霸王的广告词,想了半年才想顺词。很多人一天到晚忙,根本没时间想,可能永远都不会明白。


46. 中国有没有大危机?


段永平:也有人微信上问我会不会有动荡啊之类的。我说我以为我们一直在动荡中呢。我觉得我们一直都有危机啊,有人危,有人机,做好自己就好了。


47. 怎么看待贸易战?


段永平:你用10年看,这件事一定会过去。股市要真出了问题,苹果那么多现金,一定更厉害啊,所以这个时候更应该买好公司。


48. 你是怎么找到你们公司的产品的 mission(使命)的?


段永平:产品角度,是慢慢摸索出来的,发现不对,赶紧停。比如苹果的充电器,说了一年了,今年没推出来。没推出来,肯定是有问题没解决。没解决就不推。


49. 男怕入错行。将来会火的、自己擅长的,自己喜欢的,选哪个?


段永平:如果你知道:会火的+擅长的+喜欢的,那肯定做那一行。问题是这很难知道, 所以优先做自己喜欢的。钱多不是好事,因为挣钱是一个很大的乐趣,钱多你就失去了一个很重要的乐趣。钱差不多就可以了,做自己喜欢的事更重要。


50. 苹果手表心电图FDA认证有价值吗?


段永平:当然有啊,首先吸引眼球,让人知道啊;其次,有了认证,医生才会承认啊。


51. 人机交互的下一个突破口?


段永平:我不知道。但是机器肯定越来越强,人已经在围棋上输了,做投机你也打不过机器。但是在投资上,机器永远打不过人,因为机器看不懂公司。


52. 怎么对待差异化定价(给不同的客户不同的价格)?


段永平:价格不一致,一是他们迟早会发现;二是客户发现能议价,会想尽办法跟你讨价还价,浪费你很多时间,这都是麻烦事。价格一致,会省很多麻烦。做产品主要是要抓住客户的需求,而不是价格。可以看看空客的John Leahy。(一个人打败了波音啊!当然背后靠的还是产品!)


53. 黄峥的什么(优势)让你投他?


段永平:我和黄峥10多年的朋友了,我了解他,我信任他!(完)


格上财富

Viewing all 15891 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>