:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Posts Categorized / Ideas

cialis erfaring cialis i norge hva er kamagra cialis efeitos secundarios cialis bula viagra effekt viagra norge viagra på nett viagra nettbutikk viagra infarmed levitra comprimidos cialis uten resept cialis pris levitra eller cialis kamagra gel comprar viagra farmacia
  • Apr 26 / 2018
  • 0
Data, Events, Ideas, News

崔晓波出席爱分析中国大数据高峰论坛,总结改造行业的4大步骤

近日,TalkingData创始人兼CEO 崔晓波出席由北京爱分析科技有限公司主办的“2018·爱分析中国大数据高峰论坛”,并在会上做了题为数据智能应用和商业模式发展的演讲。

本次大会吸引了200多位行业精英与投资人共同参与,会议围绕着数据服务、大数据垂直应用、数据分析平台等多个领域进行了深入的探讨。

TalkingData创始人兼CEO 崔晓波

TalkingData创始人兼CEO 崔晓波在演讲中提到:“数据智能”在未来5到10年内是一个非常关键的概念。智能与数据相辅相成,如何运用好数据去创造智能,是企业需要在未来不断探索的方向。

同时,他又从五个方面剖析了 TalkingData 在大数据,特别是数据服务领域里的探索和思考。

一、中美市场的差异与联系

1、技术与基础设施差异

崔晓波认为:数据是链接中美智能应用的桥梁。

近两年来,TalkingData团队与世界最大的数据科学社区——Kaggle共同举办了两场活动。

第一场活动中,由TalkingData提供脱敏后的中国移动互联网行为数据集,邀请全球的数据科学家构建高准确率的人口属性预测模型。约有2600个团队参与了此次活动,共提交了约2万个模型。

通过研究可以知道数据的用法非常丰富,但既依赖于场景,又依赖于领域知识,因此中国真正缺乏的是针对如金融、地产、零售、互联网、工业等各种领域的相关知识,在这些领域里仍需要去长时间的探索。

目前,TalkingData又与Kaggle共同发起了名为:TalkingData 全球广告反欺诈算法大赛的活动。

TalkingData此次提供中国在广告反欺诈中遇到的大量相关问题和数据,而这正是很多国外的数据科学家难以遇到的。可以看出,中国在应用领域已经迈入前沿,但仍缺乏技术和基础设施。

2、数据安全上的差异

此外,中美在数据安全方面也有差异,崔晓波提到:真正拥有数据的企业不愿共享数据,而是选择垄断,因为很多技术问题尚未解决——如何安全的共享数据、以及数据合规等问题。

数据安全与网络安全情况迥异,企业IT系统由云、IDC以及内部网络构成,因此网络外面需要有一层边界,不能让黑客进来,但若该层边界都有问题,或企业出现内鬼,又如何保障数据安全呢?像 Facebook,其在数据安全上投入巨大,也出现了非常新的技术,例如可以通过网关看到企业所有的数据流动,信息如何从一点到另一点,又如何被使用。在这方面中国没有积累,技术上的差距有5到10年。

TalkingData 致力于解决这些问题,推出一套体系,在数据不流动的情况下也可以共享的解决方案。

业务的问题要回归技术,最终仍要用技术本身去解决问题,这是中国企业所欠缺的。因此崔晓波认为,中国下一阶段的数据服务需要突破技术的限制。

二、从实体物质化到虚拟数字化

崔晓波提到:“我们看世界的角度将从实体物质化转向数字虚拟化”。这将是未来的发展趋势。

未来是机器学习、深度学习的时代,Google 在2014年、2015年就将大量资源投入到机器学习研究中,因此在2016年,AlphaGo出现了。

AlphaGo将物理世界数字虚拟化,之后就可以用不断增长的计算机算法去加速学习过程,达到破局的效果。

但是在绝大部分领域还做不到这一点,因为如果一个机器或者一个算法不能帮人做决定,那么对这个行业,第一没有颠覆,第二没有价值。

自动驾驶技术达到L5(完全自动驾驶)就会颠覆了原有行业,但在L3以下就是辅助驾驶。在医疗领域,如果机器给出的结果真的能作为诊断结果,那也是颠覆,但是如果这个结果只能辅助人类诊断,其价值就有限。

要达到产生颠覆的阶段,所需要的时间远比我们想像的要长。

崔晓波认为,大家现在对人工智能过于乐观,未来几年会有所回落,但技术本身是非常具有价值的。

TalkingData创始人兼CEO 崔晓波

三、大数据通过四个步骤改造一个行业

根据TalkingData的经验,不管何种行业都可以从四个步骤去进行改造。

  • 业务数据化
  • 应用场景化
  • 流程自动化
  • 决策智能化

首先是业务数据化

根据以往经验,很多传统行业的业务流程没有真正数据化,业务好或不好都没有一套数据体系、指标体系、方法论体系去进行评估管理,而“业务数据化”就是各种大数据、商业智能等技术搅合在一起的过程。

其次是应用场景化

这里特指数据应用的场景化——在完成数据化后,考虑用何种方法提升业务,用大数据、算法模型、机器学习的方法去做应用场景化。

但目前该过程还是更多基于人工,基于分析师对业务的了解或个人经验,中国90%以上的企业还处于这样的阶段,包括互联网企业。

第三是流程自动化

已经有一些头部企业走到了这一步,比如TalkingData正在合作的某餐饮企业,其拥有50人的数据团队,非常重视数据预测——卖多少汉堡、卖多少咖啡。在TalkingData的帮助下,其预测准确率已经达到95%以上,整个过程需要运用大量的数据,包括天气、路况、客流、历史交易等等。

该餐饮企业可以据此优化第二天的排班、供应链情况,计算下来一年节省上亿元的费用。

第四是决策智能化

TalkingData也为企业选址提供帮助,因为对于下线零售商来说,店铺位置也就决定了这家店是否能成功的百分之七八十。例如TalkingData为某客户提供的选址服务,通过客户提供的三年历史收入数据,经过建模和优化,不仅能够准确预测历史收入,还能够进一步预测新店未来三年的收入,并且实现了自动化预测。之前该企业有200人的选址团队,现在只需要20人,这是TalkingData帮助优化的结果。

以上几步完成后,还有一些头部企业进入到了效益数字化的阶段,当企业完成智能化后,已经有了很强的数据能力,这时企业开始考虑能否将该能力开放给其他企业,将其做成一些指标甚至是智能APP,提供给供应商和下游,甚至将业务切出来,再覆盖产业链中的中小企业。这也是TalkingData正在研究的一个模式。

四、数据智能演进的三个阶段

从TalkingData角度来看,数据智能的演进分为三个阶段:

1)Data到Analysis:拥有大量数据,帮助开发者做分析,但从数据到分析只是浅层次重复,无法形成闭环和带来效益提升。

2)Data到Action:走不通第一阶段,尝试下一步,看数据能做什么,比如是否能优化广告和营销。这在国外可行,但国内很难,因为中国拥有太多的不透明。诺大的网络有很多不透明的算法,将数据的算法逻辑都抵消掉了。

3)Data到Data Science:现在越来越多的企业走到第三个阶段,将数据变成数据模型,证明数据在什么地方对商业有价值。对于企业来说,模型比人工更具有优势,运用之后后以前能做50个产品现在能做500个,这就是提升。

通过Data到Data Science形成闭环,依赖模型持续提升效果,现在是大家的共识。

五、数据服务价值长期才能显现

数据回报定律是指在指数级世界里,数据对商业价值的回报都是加速的,TalkingData服务的所有企业都有这个趋势。

第一年看不到数据对商业有特别明显的回报,而在第二、第三年后就很明显。

TalkingData服务的很多客户都是例证,通过数据真的可以每年节省上亿费用或带来非常可观的回报。

但目前也有很多数据企业急于求成,对客户承诺三个月或半年即可产生帮助,但其实很难做到,结果一定是两三年以后才能显现。

  • Mar 27 / 2018
  • 0
Data, Ideas

红利不再、拐点到来,人口争夺战已经打响

作者:TalkingData研发副总裁 周海鹏

本文由TalkingData原创,转载请标注来源。

近两三年来,随着经济超高速增长阶段的结束,各省市的经济增长开始产生前所未有的巨大分化。有的地区仍然在健康地增长,而许多地区则陷入了经济低迷。从马尔萨斯《人口论》等古典理论,到曼昆的《经济学原理》,都阐述过人口因素对经济发展的巨大影响力。现如今红利荡去,劳动力拐点、人口老龄化、年轻人口减少等话题逐渐走入人们视野。较之传统的人口和经济学家,如何更好、更客观全面分析人口和经济发展问题,要解决两个问题:首先要面向人口进行持续、动态观测,其次是和现代经济数据挂钩,利用新技术,探索人口和经济中的相互影响的数学原理。

从物理学基本原理来看,观察和测量静止或静态的物体是相对比较容易的,动态的、运动的对象则很难观察和测量。人口流动性大增的现世场景下,能否查准人口总量和人口结构的关键问题是人口的迁移和流动。传统的人口普查方法是人口登记有很多不足之处,无法观测人口流动方向、迁移人口总数、人口统计上存在漏报和识别问题。

随着移动互联网发展,这一点已经被弥补。人类历史上第一次出现了这样的设备——它像人体器官一样跟人共生在一起,它沉默而忠实地记录着你的上网行为,描绘你的社交关系、生活习惯等等信息。它还有很多的传感器,一部移动设备除了摄像头和麦克风之外,还有大约 10 到 15 个传感器在时时刻刻源源不断地产生数据。

这些数据无时不刻的刻画着人的生活,从大跨度的时空场景下,TalkingData 利用长时间、全球范围采集的移动数据,再加上后期的统计算法,让我们第一次可以持续、动态观测人口的基本问题,例如:城市的人口数值,城市间、省际的人口迁移等基本问题。再进一步,可以和多种经济和社会发展指标挂钩,进关联分析,尝试管窥经济发展的趋势和未来方向。

从省级人口流动看 GDP 潮起潮落

传统理论已经证实:人口集聚的背后其实是产业和资源的集聚,驱动人口流动最主要的因素是追求更好的生活,具体而言包括工作、收入、环境、社会资源等等,在这些方面经济富裕的省市无疑具有明显的优势。利用 TalkingData 的基本数据,我们可以观察人口流动的现世状态。估算出人口在不同年度的居住城市和省份,在此基础上我们可以分析一下人口流动的现象。

下图是 2016 年-2017 年,全国省级人口迁移的分布:

其中广东、江苏、山东、浙江等经济大省人口流动性非常强,像广东省 2016-2017 年度人口流动量接近 300 万。我们再看这些省 2016 年度的 GDP 情况:

可以看出,2016 年的 GDP 总值,各省的分布和上面人口的分布非常类似。将两者放在一起进行相关性分析可以得到相关性在 0.94 以上。

从省内人口虹吸看单核-多核现象

曾几何时,人们坚定地认为“一个省只有一个中心”,而这在历史上,成为国内多数省的发展模式。随着经济发展的趋势,沿海高速发展的省越来越呈现多核的状态,而中西部依然呈现单核发展的状态。我们可以尝试从人口流动的聚集效应来观察:

下图分别是多核省份:

下图分别是单核省份:

我们可以发现,多核省份基本分布属于“指数函数或者对数函数分布”,最大的城市和第二、三大城市之间的差距不算明显。但是相对而言,单核省份基本属于“幂函数分布”,可以明显看到,最大城市在人口的吸附能力上处于霸主地位,例如河南郑州、广西南宁、湖北武汉。如果我们把全国所有省的单核-多核状态进行统一的测算,可以从下图中看到:沿海经济大省基本均是多核发展态势,像中部的安徽、湖北、湖南、山西、陕西等省份正处于从单核到多核的发展道路上。

单核省的出现是一段历史的产物,既由传统的中国社会中所特有的思维定势所致,即在长期的封建社会中,对民生的冷漠,利益分配向上层倾斜,物质财富在上层聚集,或向权贵生活圈所在区域聚集,形成一种表面的、局部的虚假繁荣;又由在新中国工业化初期,为迅速实现工业化所采取的对农业的“剪刀差”政策所致。

在经济全球化和区域经济一体化趋势下,世界上一些重要区域的空间经济一体化进程,已经由原来的“单核心区”向边缘区扩散推移发展,转变为“多圈”“多核”“重叠”“共生”,最终才能达到“多核心区”的有机融合。例如:广东省工业化进程已开始进入中期阶段,珠三角地区已进入工业化成熟期,仅靠珠三角一个“核心区”来带动全省各地域发展是远远不够的,观察近些年广东省发展趋势,东西两翼沿海地带和粤北山区部分具有增长后劲和发展潜力的地区,逐步成为带动广东区域协调发展的新“核心区”,通过多圈推移、梯度推进,带动经济腹地发展。

从城市间人口流动看二线城市逆袭

马尔萨斯人口论是马尔萨斯于 1798 年所创立的关于人口增加与食物增加速度相对比的一种人口理论,其中有一个颇具争议的结论:生活资料按算术级数增加,而人口是按几何级数增长的,因此生活资料的增加赶不上人口的增长是自然的、永恒的规律,只有通过饥饿、繁重的劳动、限制结婚以及战争等手段来消灭社会“下层”,才能削弱这个规律的作用。现代城市的人口发展得利于人口的聚集,但是,一旦城市人口发展到一定程度,则物极必反。例如大城市的城市病已经极度困扰政府和老百姓。

大规模城市化让亚洲、南美洲等地的发展中国家核心城市承受了巨大的人口压力。从历史视角观察,英国这样的发达国家里,尽管城市化已达很高水平,但首都伦敦仍要面对人口和资源过度聚集带来的多方面挑战,因此英国政府多年来也致力于在首都经济圈内建设符合可持续发展理念的新城,分担人口压力、承接部分产业发展功能,同时作为推动绿色智慧城市建设的试验田。

2016 年 6 月 16 日,召开的“疏解非首都功能”会议上,北京东城、西城、朝阳、海淀、丰台、石景山及被定为“北京城市副中心”的通州,都拿出了各自人口疏解方案。这意味着,在北京已确定今年各城区人口调控指标的基础下,将人口疏解工作从计划转为实施阶段。相似的,上海、深圳、广州也进行了相应的工作。2017 年过半,我们可以观察一下一年以来,北上广深的人口疏解的效果。

从上面的数字中可以看出几个超级城市的疏解特点:

北京:

  • 北京疏解人口基本向南,也从另一面反映东北人口的外流加剧。
  • 疏解人群去向主要集中在河北,例如沧州、廊坊一带,雄安特区的设立会极大加强对这些人群的吸引。

上海、深圳、广州:

  • 深圳明显属于外向型城市,疏解的人口去向较多。
  • 广州明显属于传统型城市,疏解的人口去本省为主。
  • 上海属于中规中矩的城市,去向以江苏、浙江为主。江苏、浙江本就是富裕省份,因此财富并没有明显外流,长三角是全国经济最平衡发展的区域。
  • 深圳是新型城市,离去的人群会带走大量财富,诸如武汉、长沙、重庆等城市会迎来一定的红利。

大数据视角下的人口争夺战

以上的,我们可以看到,在人口红利下降、出生率下降、人口老龄化、房价飙升、教育压力生活压力巨大等等诸多社会现实问题面前,我们可以通过真实世界的客观数据,观察社会在发生什么。其实,在这些现实面前,世界在发生着一些貌似悄无声息的变化:

79 所大学 130 万在校大学生,数量世界第一,这一直是湖北省会武汉引以为豪的一件事。但来自武汉市人社局的数据显示,从 2013 年的留在武汉的大学生为 10.4 万人,到 2016 年的 15 万人,过去 4 年武汉的毕业生“出走”人数虽有下降,但仍是人才输出地。人才流失,一直困扰武汉。

统计表明:在最爱远距离迁移的学生中,湖北的大学毕业生首当其冲。前五大热门的跨省远距离迁移路线中,就有三条从武汉出发,分别是武汉到深圳(第一),武汉到北京(第二),武汉到广州(第五)。激烈的竞争和高昂的生活成本,为何拦不住武汉的大学毕业生“北漂”、“深漂”的决心?

而另外一方面,2017 年,第一财经旗下数据新闻项目“新一线城市研究所”在上海发布了《2017 中国城市创新力排行榜》,对 19 座一线城市和新一线城市的创新土壤做出综合评估。该榜单最终得出的中国城市创新力排名,武汉居于第 8 位,整体落后于广州、杭州、成都等副省级城市。

面对这样的发展态势,武汉市有何应对呢?2017 年 1 月 22 日,武汉市第十三次党代会,有代表提出“建设环高校创新经济带”的建议;代表程春生呼吁武汉出台更有力政策把更多大学生留下来创新创业。“留住大学生,我们不能‘顺其自然’,一定要‘刻意人为’。其后,武汉市提出“留住 100 万毕业生”的口号。

一场人口争夺战已经打响……

大数据技术的诞生和不断发展,以及移动设备数据、人本数据、环境数据的深度挖掘,让 TalkingData 在多个行业领域有了不错的积累和发展的可能。我们可以用这些数据观察群体行为喜好,可以推算广告效果,可以预测房价走势……

在人口争夺战面向,我们可以做什么呢?我们可以观察战争的进程,预测战争的结局和战后的未来。不过,在人类发展的长远视角下,我们相信这肯定不是一场零和的游戏,而是必须达到共赢的一场再平衡。

发展应该瞄准着对经济、民生发展负责的目标,无论是面向省、市的 GDP,还是面向个人发展的基本问题,大数据都可以利用它崭新的一面,帮助人类更好的认识发展的本质,更好的理解过去历史发展的挫折,更好的制定更好的未来发展的目标和路径。

  • Mar 27 / 2018
  • 0
Data, Ideas

技术专栏 | Vue源码分析之 Watcher 和 Dep

作者:TalkingData 张成斌

本文由TalkingData原创,转载请获取授权。

之前在学习 Vue 官方文档深入响应式原理(https://cn.vuejs.org/v2/guide/reactivity.html)时,大概对响应式有一个概念性的了解以及它的效果是什么样子的。最近通过阅读 Vue 的源码并查询相关资料,对响应式原理有了更进一步的认识,并且大体上可以还原出它的实现过程。因此写这篇文章记录一下自己的理解过程。

响应式原理我理解可以分为两步,第一步是依赖收集的过程,第二步是触发-重新渲染的过程。先来看依赖收集的过程,有三个很重要的类,分别是 Watcher、Dep、Observer。Watcher 是观察者模式中的观察者;我把 Dep 看成是观察者模式中的主题,它也是管理和保存观察者的地方;Observer 用来使用 Object.defineProperty 把指定属性转为 getter/setter,它是观察者模式中充当发布者的角色。对于观察者模式不熟悉的话可以查看上篇文章。

接下来,从最基本的实例化 Vue 开始讲起,本篇文章会以下面这段代码作为实际例子,来剖析依赖收集的过程。

var vm = new Vue({
el: ‘#demo’,
data: {
firstName: ‘Hello’,
fullName:
},
watch: {
firstName(val) {
this.fullName = val + ‘TalkingData’;
},
}
})

在源码中,通过还原Vue 进行实例化的过程,我把相关代码做了梳理。从实例化开始一步一步到实例化了 Watcher 类的源码依次为(省略了很多不在本篇文章讨论的代码):

var vm = new Vue({
el: ‘#demo’,
data: {
firstName: ‘Hello’,
fullName: 
},
watch: {
firstName(val) {
this.fullName = val + ‘TalkingData’;
},
}
})在源码中,通过还原Vue 进行实例化的过程,我把相关代码做了梳理。从实例化开始一步一步到实例化了 Watcher 类的源码依次为(我省略了很多不在本篇文章讨论的代码)
// src/core/instance/index.js
function Vue (options) {
if (process.env.NODE_ENV !== ‘production’ &&
!(this instanceof Vue)
) {
warn(‘Vue is a constructor and should be called with the `new` keyword’)
}
this._init(options)
}

// src/core/instance/init.js
Vue.prototype._init = function (options?: Object) {
const vm: Component = this
// …
initState(vm)
// …
}

// src/core/instance/state.js
export function initState (vm: Component) {
// …
const opts = vm.$options
if (opts.data) {
initData(vm)
}
// …
if (opts.watch && opts.watch !== nativeWatch) {
initWatch(vm, opts.watch)
}
}
function initWatch (vm: Component, watch: Object) {
for (const key in watch) {
// …
createWatcher(vm, key, handler)
}
}
function createWatcher (
vm: Component,
keyOrFn: string | Function,
handler: any,
options?: Object
{
// …
return vm.$watch(keyOrFn, handler, options)
}
Vue.prototype.$watch = function (
expOrFn: string | Function,
cb: any,
options?: Object
): Function 
{
const vm: Component = this
// …

// 注意:在这里实例化了 Watcher
const watcher = new Watcher(vm, expOrFn, cb, options)
// …
}

下面我们来看 Watcher 类究竟起了什么作用:

// src/core/observer/watcher.js
import Dep, { pushTarget, popTarget } from ‘./dep’
export default class Watcher {
constructor (
vm: Component,
expOrFn: string | Function,
cb: Function,
options?: ?Object,
isRenderWatcher?: boolean
) {
this.vm = vm
// …
if (typeof expOrFn === ‘function’) {
this.getter = expOrFn
} else {
this.getter = parsePath(expOrFn)
// …
}
this.value = this.lazy
? undefined
: this.get()
}
}

注意这里 this.getter 的赋值,实际上是把 new Vue() 时, watch 字段里键值对(key/value)的键(key)- 也就是这里的参数 expOrFn – 赋值给了 this.getter。watch 字段里键值对(key/value)的键(key)可以是字符串,也可以是函数。如果 expOrFn 是函数,那么直接让 this.getter 等于该函数。如果是我们之前示例里的代码,那么 expOrFn = ‘firstName’,它是字符串,因此会调用 parsePath 方法。

下面的代码块是 parsePath 方法:

var bailRE = /[^\w.$]/;
function parsePath (path) {
if (bailRE.test(path)) {
return
}
var segments = path.split(‘.’);
// 返回一个匿名函数
return function (obj) {
for (var i = 0; i < segments.length; i++) {
if (!obj) { return }
obj = obj[segments[i]];
}
return obj
}
}

该方法返回一个匿名函数,接受一个对象作为参数。在 Watcher类中的 get() 方法执行this.getter.call(vm,vm)时,会调用这个返回的匿名函数。在匿名函数中,segments[i]是 watch 字段里键值对(key/value)的键(key),如果 segments[i] 被 Object.defineProperty 设置了 get 方法的话,那么执行到 obj[segments[i]] 时,会触发 segments[i] 属性的 get 方法。在我们的示例里,就相当于执行了 vm[firstName],所以会触发 firstName 上的 get 方法(如果设置了的话)。

在 Watcher 的 constructor 中,除了调用了 parsePath(expOrFn),this.value= this.lazy ? undefined : this.get()还调用了 this.get() 方法。下面我们来看一下 Watcher 类里面 get 方法的代码:

// src/core/observer/watcher.js//…
get() {
pushTarget(this)

let value
const vm = this.vm
try {
value = this.getter.call(vm, vm)
}
// …
return value
}

// addDep方法,会在 Dep 类的 depend 方法中调用
addDep (dep: Dep) {
const id = dep.id
if (!this.newDepIds.has(id)) {
this.newDepIds.add(id)
this.newDeps.push(dep)
if (!this.depIds.has(id)) {
// Dep 类中的 addSub 方法
dep.addSub(this)
}
}
}

pushTarget 是 Dep 类中的方法,它的作用是给 Dep.target 赋值,所以 pushTarget 执行了之后Dep.target = 当前这个 watcher 实例,在执行到value = this.getter.call(vm, vm)时,会调用之前 parsePath 里面返回的匿名函数,这时就会调用 Observer 类通过 Object.defineProperty 给 key 设置的 get 方法,而这个 get 函数执行过程中,因为 Dep.target 已经存在,那么就会进入依赖收集的过程。Observer类相关及其 get/set 方法的内容会在之后的文章里介绍,这里只需要知道,依赖收集的过程的开始,是执行了下面的代码:

// 实例化 Dep
const dep = new Dep();
// 调用 Dep 的 depend 方法
dep.depend();

这段代码实际上是在 Observer 类的一个方法中 Object.defineProperty 时的 get 方法中的,这个也是非常重要的内容,我会在之后的文章里介绍。

接下来我们来看 Dep 类的代码:

// src/core/observer/dep.js
export default class Dep {
static target: ?Watcher;
id: number;
subs: Array<Watcher>;constructor () {
this.id = uid++
this.subs = []
}

addSub (sub: Watcher) {
this.subs.push(sub)
}

removeSub (sub: Watcher) {
remove(this.subs, sub)
}

depend () {
if (Dep.target) {
Dep.target.addDep(this)
}
}

notify () {
// stabilize the subscriber list first
const subs = this.subs.slice()
for (let i = 0, l = subs.length; i < l; i++) {
subs[i].update()
}
}
}

之前已经介绍过,Dep.target 是 Watcher 类的实例,执行 Wachter 类的 this.get() 时,就会给 Dep.target 赋值。所以开始依赖收集而执行dep.depend();时,在这里的 depend 方法就会进而执行Dep.target.addDep(this)。addDep 是之前介绍过的 Watcher 类中的方法,addDep 会反过来调用 Dep 类的 addSub 方法,向 Dep 管理的 this.subs 观察者列表里 push 进当前 Watcher 实例。当列表中添加了该属性 – 比如示例里的 firstName – 的 Watcher 实例之后,依赖收集的过程在这里就结束了。也就是下面这张图中render – touch – Data[getter] – Collect as Dependency -Watcher的这个过程结束了。

那图中的Data[setter]- Notify – Watcher – Trigger re-render的过程是体现在哪里呢?根据上篇文章介绍的观察者模式,每次被 watch 的属性即被当作依赖收集起来的属性 – 比如示例里的 firstName – 发生变化时,会触发 Observer 类中的 Object.defineProperty 给该属性设置的 set 方法。set 方法里有回调用dep.notify。该方法会遍历观察者列表中的每一个 Watcher 实例即每一个观察者,然后触发每一个观察者的 update 方法进行更新,最终能更新 Virtual DOM TREE。

介绍完了 Watcher 和 Dep 类,接下来的文章该介绍 Observer 类了。

– To be continued –

  • Mar 23 / 2018
  • 0
Data, Ideas

翻译:有效的基于数据做营销规划的五个关键步骤

作者:Sreeram Sreenivasan

原文:http://www.dataversity.net/five-key-steps-effective-data-planning/

译者:TalkingData架构师 曾晓

本译文禁止商用,转载请注明来源!

从无人驾驶汽车到聊天应用到物联网设备,每一项技术都是由数据驱动的。不管你的职业或职称是什么,你每天都会遇到某种形式的数据。然而,数据可操作性和数据质量比数据量更重要。

虽然大多数营销人员知道数据驱动决策的重要性,但他们往往不知道从何着手。根据Experian的报告,利用数据来了解顾客的需求、态度和需求是营销人员的首要任务。同时,这也是他们面临的最大挑战。

毫无疑问,品牌的每个策略都应该以客户为中心,以数据为导向。通过仔细的数据规划,营销人员可以将其丰富的数据转化为有意义的策略,以便执行更好的决策,建立持久的客户关系。

以下五个步骤可以帮助你制定恰当的数据计划:

1. 列出所有基于观点的决策

根据自己的观点创建一个你目前所做决策的列表,而不是使用数据。你可以按职位和部门进行组织,以便以后更容易管理。在接下来的几周里,与你的团队一起讨论这个清单,不断地为它添加新的项目。

完成这项任务最简单的方法之一就是浏览每周的日常任务。把每次你要在不使用数据的情况下做出的决策添加到清单中。然后,请您的团队做同样的工作,并将所有的输入汇总到一个列表中。

这里有些例子:

1. 我上次展示广告活动是否能带来积极的投资回报?
2. 我们应该在哪些领域雇佣更多的销售专业人员?
3. 十月份的销售活动应该展示哪些产品?

2. 根据他们的重要性排名做出决定

不是所有的决策都同样重要。确定清单上每个决定的金额。这将帮助你发现它们对组织的价值,并相应地对它们进行优先级排序。此外,请记住在分析这些决策时考虑所有涉及的成本(劳动力,技术,机会成本)。举个例子,我们看看上面的第一个决策,“我上次展示广告活动是否能带来积极的投资回报?”,我们会从以下几个方面考虑:
1. 媒体费用(例如:40,000美元)
2. 创意开发成本(例如:$ 2,500)
3. 员工时间成本(例如:1,500元)
4. 已完成交易的机会成本(例如:80,000元)
在上述情况下,您的决策成本约为123,700美元。

不需要太确切的数字。使用粗略的估计来合理地理解你的决定的重要性。

3. 列出每个决策所需的所有数据源

为你的组织找出三到五个最有价值的决策,并列出出所有解决这些问题所需的所有数据源。确定这些数据源是否在您的组织内可用。

与团队进行头脑风暴会议至关重要,这样每个人都会围绕如何解决问题和如何回答问题提出自己的想法。

有时,可用的数据可能不容易分析的,你需要构建新的流程来转换它们。有些数据源可能需要与其他团队,甚至是其他公司协调。如果无法找到所需的数据源,还可以从相关的代理数据源中查找。

这一步将帮助你发现决策所需但不可访问的数据点。

4. 确定需要填充的数据缺口

下一步是确定需要填充的数据缺口,以决定是否可以继续。评估你是否可以联系第三方数据供应商寻求解决方案,或进行有根据的猜测以继续分析。

例如,在分析我们的展示广告活动时,可能很容易在活动之前、期间和之后获得交易数据。但是,如果您的控制组缺少数据点,则会对分析结果的可信度产生不利影响。如果你事先知道这一点,最好先暂停你的分析,直到你找到一种方法来获取这些数据,或者用一个更好的数据收集计划开始你的下一次媒体宣传活动。

5. 创建2018年数据计划

一旦确定了需要数据驱动的关键决策以及需要填补的数据缺口,就必须创建一个高效执行的计划框架。

确保以下信息能正确获得:

1. 获取数据的数据源和关键联系人;
2. 所需数据的日期范围;
3. 需要确切的数据字段。最好是要求更多的信息以避免延迟和迭代;
4. 填补所需的数据缺口和信息(供应商、成本等);
5. 负责从采购数据到分析结果的每一步所需的团队成员数量;
6. 数据收集、分析和报告的详细时间表。

结束语

数据最强大的方面是能够最大限度地减少决策过程中的猜测。随着最近数据分析和报告平台的爆炸式增长,你不需要成为数据科学家就可以使用数据了。能够利用数据来规划和排列战略的营销人员能够直接影响工作绩效,有效地管理资源并对公司利润产生积极的影响。

  • Mar 23 / 2018
  • 0
Data, Ideas

翻译:好的主数据是好的业务

每座建筑都需要坚实的基础。 企业也是如此,他们的基础就是数据。根据Dun&Bradstreet的主数据市场开发与创新主管Scott Taylor的说法,“数据负责业务”。 “如果数据不对,它会导致你的大部分问题。”

也许这些问题中最大的问题正在成为市场扰乱者的牺牲品你自己的行业的Ubers和Airbnbs。泰勒在其2017年企业数据世界大会上向观众介绍说,“为什么主数据是您最重要的数据”,这些公司“掌握了他们的市场数据,这让他们掌握了市场。”他们扰乱了他们的行业, 并且放心,他说,也有潜伏在你的领域的扰乱者。 他们正在“寻找潜在的数据的软肋切入”并将你推到一边。

标准化,协调整合的主参考数据是在当今的API,物联网(IoT)和大数据融合的经济体中建立连接、实现业务发生的关键,这些经济体的市场变化很快,而且为其服务的企业也必须快速变化。 主数据带来了必要的结构,使得从客户到供应链,业务流程以及业务规模的360度全方位视图成为可能,从而实现了进入市场和为客户提供服务的新途径。

泰勒解释说,有这种需要,“对于清晰编码,标准化,专业管理的主参考数据来说,流经每个过程的每一个属性。 整个生态系统可以与这个基础连接并整合。“主数据信息根据泰勒的说法,高管们必须明白,主数据 – 非主数据管理(MDM) – 对于将业务放到他们想要的地方至关重要。MDM不是用例,而是用于创建输出的软件类别,即主数据。 “你真的需要[MDM]的最终结果,这是内容本身,”他说。 这就是为其他系统提供服务,跨人物角色驱动流程,并提供价值。

“首席流程官了解供应链,但他们是否知道主数据为此提供燃料?”他问。 他们应该。 “这就是你可以绘制连接的地方 – 你的业务涉及的所有内容都转向数据,你必须管理这些数据。”

Taylor建议说,使用与业务人员共鸣的话来销售主数据用例。 解释主数据驱动的公共语言可以让企业系统相互交流。 主数据定义您的商业知识,您的商业名词 – 客户,产品,合作伙伴,服务和收入。 “收入是一个重要的关键绩效指标,但它是产品主数据和客户主数据之间交集的结果,”他指出。 如果对这些实体没有达成一致意见,“你没有得到正确的数字。”

Taylor进一步鼓励EDW的与会者清楚地表明,Master Data与您的业务有着同样的关系 – 关系以及围绕它们的所有层级。

“你们都有关系,你想建立他们,找到更多的人,遵守某些类型关系的规定,减轻其他类型关系的风险,”他说。

你想知道每个实体“盒子”是如何相互关联的,你想要在企业中联合这些连接和它们的知识。

编码为系统和过程的主数据记录,实体获取自己的代码或唯一ID来定义其存在,解释其类型的类别,验证所有权的公司以及国家(或地理)。 “这四个Cs驱动每日报道,”泰勒说,如果执行不当,他们还会驱使你在报告中遇到的很多麻烦。

Dun&Bradstreet看到至少有一家公司实施了这样一段代码:代码是“DK”,它代表“不知道”。

主数据提供了数据中的真实情况,可让您从数据中获取含义。 而含义对商业成功至关重要。 “这是关于做出正确的决定。 你对坏数据做出的良好决定只是你不知道的坏决定,“泰勒说。 “我们需要有标准,以便我们可以信任数字,因为我们知道它们基于真理。”

在Dun&Bradstreet,主数据的价值主张围绕着这样的想法:企业对结构,整个生态系统的可连接性,商业文库的覆盖范围以及治理质量,及时性和信任都有共同的需求。 根据泰勒的说法,这里最好的方法是从强调有形的角度开始:如果您开始向C级高管谈论质量问题,听起来像您抱怨数据不够干净。

“但是如果你进来说你没有数据结构,没有唯一性或标准化的分类或层次结构,那是有形的,”他说。 “当然,你需要质量,但从结构开始,看看对话如何进行。”

Dunn & Bradstreet的方式

Taylor以这种方式总结了Dun & Bradstreet的主数据价值框架:为了达到金字塔顶级的关系,您首先从数据消歧,整合,汇总和互操作性的基础入手。 “企业的未来需要互操作性,”他说。 “让机器以系统化和可重复的方式相互交流。”
通过建立真相来提供意义,可以为业务评估找到正确的答案。 有了说同一种数据语言的能力,就可以进行交流。 没有沟通,就没有关系。 “僵化的数据没有价值,” Taylor说。 “它必须跨越整个组织。”

永远不要忘记,主数据旅程从未结束。 “这是一种新的生活方式 – 相信和实践,并让别人这样做,” Taylor说。

Dun&Bradstreet进一步在Master Data-as-a-Service(MDaaS)方面发挥了作用,它提供了预先掌握的商业内容。 它是一套可配置的解决方案,为公司提供将主数据无缝集成到其原生工作流程的能力。 正如Gartner所说的MDaaS服务一样,“您可以获得可靠的主数据,因为它是由可信来源构建的。”

对于任何基于账户的策略(销售,市场营销,收入等),您需要整合和完整的账户数据,Dun&Bradstreet构建了大量账户实体配置文件,以便与现有数据源进行合并和匹配,并连接到所有内部系统。

这些帐户配置文件可以包括从名称到收入到关系的所有内容,例如您的企业希望与其做更多业务的公司中的影响者,您的产品在哪里使用,哪些业务部门没有使用它,甚至是哪些具有竞争力的产品 改为使用。 利用这些可信的属性丰富现有的帐户信息可以为销售人员提供重要的知识,例如,谁希望能够在恰当的时机将贵公司的产品与竞争对手区分开来。

“Taylor总结说:”您可以在主数据旅程中帮助您改变业务的性质。

  • Mar 23 / 2018
  • 0
Data, Ideas

翻译:数据科学 VS 商业智能

数据科学在当今现代数据驱动的世界中的发展不得不在其发生的时候发生。如果真的仔细看看多年来数据分析的发展,没有数据科学,传统(描述性)商业智能(BI)在当前业务运营中将主要依然是一个静态报表展现。随着数据量和复杂性的不断增加以及数据输入技术的发展,数据科学正处于一个关键时刻,可以为克服许多现代企业的庞大数据量提供一些方法。数据科学与商业智能之间的这种演变以及异同的问题是许多使用这些技术的重要课题。

定义术语: 数据科学 vs. 商业智能(BI)

从两个术语的一些基本定义开始,深入研究数据分析中的两个截然不同的(尽管密切相关的)领域非常重要。数据科学用于商业,本质上是数据驱动的,其中许多跨学科科学一起应用,以从可用的业务数据中提取意义和见解,这些业务数据通常是庞大而复杂的。 另一方面,商业智能或BI帮助监控业务数据的当前状态,以了解业务的历史业绩。

因此,简而言之,虽然BI有助于解释过去的数据,但Data Science可以分析过去的数据(趋势或模式)以进行未来的预测。 BI主要用于报告或描述性分析; 而数据科学更多地用于预测分析或规定性分析。

数据科学与商业智能的主要相似之处

数据科学和商务智能专注于“数据”,目的是提供有利的结果,在商业上可能是利润率,客户保留率,新的市场占用率等等。这两个领域都具备“解释数据”的能力,并且通常聘请将数据丰富的结果翻译或转化为友好洞察力或竞争情报的技术专家。

在典型的商业环境中,高级管理人员和普通管理者通常都没有时间或倾向去了解数据分析或BI背后隐藏的技术问题,但他们需要快速,准确的决策支持系统,以便在需要的时间内做出关键决策。

商务智能和数据科学为忙碌的管理人员,经理甚至是一线工作人员提供可靠的决策支持系统,他们是各自工作领域的专家,并期望数据专家可以提供可靠的帮助和支持,从而做出数据驱动的决策。 数据科学与商业智能的主要区别在于,虽然商业智能的设计目的是处理静态和高度结构化的数据,但数据科学可以处理来自各种各样的高速,大批量,复杂,多结构化的数据 数据源。 尽管BI只能理解某些格式的“预格式化”数据,但高级数据科学技术(如大数据,物联网和云)可以共同收集,清理,准备,分析和报告从广泛分布的操作接触收集的多种自由格式数据点。

题为“商业智能与数据科学有何不同”的文章声称,多年前,与数据合作的业务人员被称为数据分析师。 然后,为了保持竞争力,企业开始从仅仅报告过去的表现转向“预测”未来趋势并为成功提供“处方”。 这就是数据科学进入的地方。

数据科学拥有一大批技术和工具,开始研究过去的数据以发现趋势,发现模式并预测未来的商业行为。 突然之间,企业都配备了非常强大的见解和智慧,有可能改变他们的未来!

数据科学与商业智能的主要区别

福布斯发布的数据科学:Getting Real表明,自从大数据冲入主流商业环境之后,企业就别无选择,只能依靠数据科学家的智慧和专业知识来从无尽的数据输入源中汲取意义。

随着企业越来越依赖数据,数据科学作为最终决策技术的重要性只会飙升。 数据科学有望在未来实现大部分分析或BI任务的自动化,从而使日常业务用户可以访问集中式数据存储库和自动化工具,随时随地提取洞察力和智能。

在过去,商务智能虽然对商业决策很重要,但仍然是IT行业的一员; 数据科学突破了这一障碍,并承诺将核心分析和商务智能活动带入主流商业走廊。

未来的数据科学家将成为那些“少数”的专家,他们将引入数据操作,一旦完成,然后仅在需要时提供支持。 还要回顾一下这篇文章,商业智能与数据科学有何不同,以便更好地理解数据科学家和商务智能专家如何共同合作为企业提供最佳数据解决方案。 随着企业获得更多竞争力,商务智能专家将需要与数据科学家合作,帮助构建这些梦幻般的“模型”以实现即时洞察力。

在数据科学和商务智能之间的10个差异中,作者指出,虽然数据变得越来越大,而且越来越复杂,传统BI平台已经不足以处理这些数据。 拥有“追溯”智慧的BI装备企业,数据科学首次提供了更先进的反应式甚至是主动式的见解。

数据科学在当前十年被视为“游戏改变者”,因为它通过提供处理复杂数据,数据治理和清理,钻取数据分析和自定义报告的技术,实现了跨越式发展。 正如“大数据对企业信息管理的影响”一文所讨论的那样,今天的企业不能仅仅依靠静态报告来生存; 他们必须拥有更多,特别是在快速决策方面。

数据科学与商业智能的对比

高级BI和高级数据科学之间的主要区别在于内置机器学习(ML)库的范围和规模,这些库使普通业务用户可以实现自动或半自动数据分析。 因此,从某种意义上说,数据科学正朝着更加民主化的“业务分析”世界迈进,即有一天,任何数据用户只需点击几下鼠标,就能在其桌面上执行高级分析和BI。

数据科学或人工智能数据科学承诺减轻重型技术的普通业务用户的负担,以便他们能够更专注于其分析任务的目标和结果,而不是关注分析流程本身。

在传统商务智能中,普通商业用户不得不依靠驻地分析团队的专业知识从数据中提取有意义的见解,但ML供应的数据科学现在推出了自助式商务智能平台,普通用户可以轻松查看,分析 ,并在没有技术团队帮助的情况下从企业数据中提取见解。

在DATAVERSITY®文章中,自助商业智能很重要,但它适用于所有人,读者被要求评估Research and Markets发表的报告的有效性,该报告声称自助商业智能市场是预计到2021年市场规模将增长到73亿美元。现场专家现在正在思考公民环境中的公民数据科学家是否真的能够在没有技术专家支持的情况下利用自助服务功能。

数据科学通常由专家的BI进化定义。虽然商业智能团队通过支持核心决策制定了当前的解决方案,但数据科学家的目标是通过不断改进算法来提供未来的解决方案。原则上,商务智能和数据科学都在努力实现流畅,准确和快速的决策,但方法不同。阅读题为“数据科学?商业智能?有什么不同?”的文章很好地理解这个概念。

虽然BI严重依赖于一套核心的分析工具,但Data Science通过提供数据治理,数据分析,BI和高级数据可视化的整体框架,采用更全面的数据管理方法。 具有有限数量的分析需求的中小型企业可以从市场上可用的平均商业智能解决方案中受益,而对高度自动化流程有需求的大型企业将受益于基于ML的商业智能系统,该系统同样需要 有资格的数据科学家的存在和参与。

文章“数据科学家与BI分析师:有什么区别?” 认为这两个领域都旨在帮助从可用数据中获得业务洞察。

数据科学如何增强商业智能

数据科学家和商务智能专家都喜欢数据分析。 两者都使用不同程度的算法,现在都使用先进的可视化工具来捕捉智慧的金块,这可以很好地创建或打破业务。

数据科学在三个主要方面肯定与传统BI有所不同:数据的多样性和数量,预测能力和可视化平台。 文章“商业智能与数据科学:相同,但不同”提供了两种分析方法学之间的有趣对比。 在高级商业智能系统中,用户已经遇到了“数据发现工具”,但这些工具往往受到他们处理的数据的质量和数量的限制。 数据科学打破了“数据”的玻璃天花板,并允许收集,清理和准备用于分析的任何类型的结构化,非结构化或半结构化数据。

虽然商业智能团队一直向高管或经理提供决策支持,但数据科学使这些经理和管理人员能够成为自我赋权的分析专家。 在理想的商业环境中,商业智能团队应该管理运营分析,而数据科学家(如果有的话)应该花费更多时间来细化现有的分析和商业智能足迹并尽可能自动化系统,以便日常业务用户可以便捷而准确地完成他们的工作。

事实上,如果BI专家和数据科学家一起工作,那么商业智能分析师可以为数据科学家准备数据以供其算法模型使用。 商务智能专家可以提供他们当前对业务分析需求的理解和知识,并帮助数据科学家构建强大的模型来预测未来的趋势和模式。

BI专家和数据科学家在企业分析团队中都有自己的位置,BI专家是分析活动的汇报者,数据科学家是未来解决方案的创建者。 商业智能专家和数据科学家可以逐渐建立一个功能强大的内部分析平台,普通商业用户无需任何技术帮助即可学习和使用。

数据科学与商业智能结合在一起:未来的商店里有什么?

考虑全球零售业务,了解传统商业智能如何向数据科学发展,将即时洞察转化为可盈利的业务成果。 在题为“零售意识:从商业智能到数据科学”的文章中,作者指出,尽管大多数企业正在获得这种转变的回报,但一些知识或人才有限的企业仍然在与数据科学斗争。 对于那些落后的人,本文提供了一些关于实现成功的数据科学框架以获得有利结果的建议。

在麦肯锡的2016年分析研究如何定义机器学习的未来博客文章中,作者表示,麦肯锡在至少12个行业领域得出了有关机器学习影响的结论。 据作者称,麦肯锡有说服力的数据证明数据科学凭借其丰富的数据(大数据)和高级分析功能(机器学习)当然优于传统商务智能,静态或历史数据无法为用户提供充分理由 用于“预测”或“处方”未来的商业活动。 数据科学和机器学习为企业IT团队带来了巨大的收益,并提供了从现有数据模式进行快速准确预测的工具。

根据麦肯锡的说法,要使企业分析平台能够运行,需要一个有效的企业分析活动支持结构,良好的体系结构和高级管理参与 – 这三者都是必需的。 麦肯锡还指出,在分析和商业智能基础设施方面进行有效投资的企业在五年内的利润率上升了19%。

数据科学vs商业智能:最后的想法

面向技术能力强的企业面临的最大绊脚石之一是联合技术的快速发展,联合使用的技术可以在市场中赢得商业转型。今天,企业常常对如何跟上技术变革的速度以及如何将更新和更好的能力与现有技术整合在一起感到不知所措。例如,大数据,物联网,机器学习和无服务计算等先进技术可以共同改变业务环境,但有多少企业真正知道如何整合这些解决方案来构建强大的分析平台?

技术,工具,流程和人才 – 这些需要协同工作才能获得数据和分析的最大优势。在这篇麦肯锡报告中,有人提出强有力的观点来支持更新的数据类型和集成的数据管理系统。该报告的作者认为,完全集成的分析与商务智能平台将有助于打破孤立孤岛之间的障碍,实现业务数据和洞察力的统一视图,从而更快地做出未来的决策。

  • Mar 23 / 2018
  • 0
Data, Ideas

翻译:如何启动数据治理计划?

作者:Amber Lee Dennis

原文:http://www.dataversity.net/starting-data-governance-program-take/

译者:TalkingData架构师 曾晓

本译文禁止商用,转载请注明来源!

根据Seiner的定义,数据治理是:“在数据与数据相关的资产管理的执行和执法权。”

他更喜欢像“执行”和“执行权”这样的激烈的单词,以便明确指出数据治理不只是一个可选的组件,而是企业的基本组成部分。

Seiner是一位作家,一位行业教育家,一位DAMA奖获得者,KIK Consulting and Educational Service的总裁兼负责人,他是Non-Invasive Data Governance™的创始人,同时他还出版了“数据管理通讯”(TDAN.com),这是一份覆盖数据管理行业整个范围的在线出版物。

在最近的DATAVERSITY®采访中,Seiner分享了开始数据治理计划的最佳实践。

争取高层领导对治理的支持​

Seiner讨论的第一个最佳实践是让高层领导支持、赞助和理解数据治理:“如果他们不支持、赞助和理解数据治理,程序就有风险,因为他们不会给你时间去做。我在所有的客户中使用了这个最佳实践。”Seiner表示,高层领导需要了解数据治理。如果他们不真正理解治理团队正在做什么以及该计划如何运作,他们将不会提供必要和长期的支持。

另一个最佳实践指出,为数据治理提供专门的人力资源至关重要。有必要找到一个能够执行该计划的人,这个人必须是有能力和关系的,并且基本上可以管理这个计划,同时也能够获得高层领导的支持。“它不会自动运行。”Seiner说,“最重要的是,你需要有人对这件事负责,并有时间做这件事,否则,你将立即面临风险。”

非侵入性治理

Seiner的非侵入式数据治理方法促进了高级管理层的支持,在尽可能少毁坏的前提下引入了数据治理。Seiner的方法不是重头建立一个数据治理计划,而是强制员工遵从或增加治理任务的工作量,并希望员工为他们腾出时间,他们的方法基于现有的角色和责任建立数据治理计划。

“如果您希望对组织进行全面的覆盖,那么非侵入性是实现数据治理的唯一途径。否则,你将给每一个人他们不曾有过的感觉,这是不容易被接受的,”他说。

在非侵入式方法中,数据管理被定义为“对数据和数据相关资产管理问责制的正规化”。数据管理员因其与数据的关系而被认可,而不是被赋予新的责任并对这些责任追究责任关系。

“定义数据的人将负责如何定义数据,包括数据定义所必需的元数据。产生数据的人需要知道如何使用这些数据。使用数据的人必须遵循与数据的使用有关的规则,无论是数据保护还是合规性。“

准备评估:制定路线图

Seiner建议进行准备评估,将现有的数据治理实践与行业最佳实践进行比较。他建议提出这些问题:

  • 你目前为每个最佳实践做了什么支持工作?
  • 哪里有机会改进与最佳实践相关的?
  • 我们正在做什么和最佳做法之间有什么差距?
  • 这种差距有哪些风险?

这个过程将有助于创建一个问题领域的清单,并有助于发现可以通过应用良好治理来缓解的风险。评估通常显示需要更好地定义与数据治理相关的角色和责任的领域,并且可以充当行动计划或“计划路线图”,他说。准备就绪评估还将发现可用于制定数据治理沟通计划的沟通差距。

非侵入性治理:不伤害所有权

Seiner说,基于对可用实施方案缺乏了解的假设,通常导致了对数据治理的抵制。

“管理层认为数据治理将会很艰难,会变得很复杂,它会干扰目前正在进行的事情,事实上情况并不一定如此。如果你采取非侵入式方法,你会看到人们已经拥有什么样的责任,而且你不一定会把他们感觉新鲜的事情交给他们。“

高级领导层也可能对数据治理有产生抵触情绪,重要的是他们知道在某种方式下,治理已经在发生:

“这只是非常非正式的。这是非常低效的。这是非常无效的。采取非侵入式数据治理方法是正式确定并提高效率,使组织中已有的权限级别更加有效。“

不要创建数据管家,识别它们

他表示,与其指定某人担任管理员并为将治理添加到他们的工作量中,不如正式承认人们与数据的关系以及他们已经做了或应该做的事情。“当100个人使用相同的数据时,你不会进入一个有100人的房间,并指出其中的10个人,并且说’这10个人需要保护数据,并承担相同的责任。’“,任何使用数据的人都需要了解数据如何使用和不能使用。

除了支持所有用户对数据治理实践的遵从性之外,该计划还为数据管理员提供了支持和信心,因为他们知道他们有更强的问责制,他们得到领导层的支持,可强制执行的政策

各种各样的数据管家

Seiner非侵入式方法的另一个原则是可以有多种类型的数据管家。运营数据管理人员是每天定义、生成和使用数据的人员。他说,还可能有战术数据管理员,负责特定的域或主题,并且他们对整个组织的数据负有更高的责任。标题’管家’承认数据的正式关系和责任。

“这不是一个新的头衔或一个新角色。对于一个组织来说,最困难的步骤是使一个角色正式化,或者确定一个人或一组人的责任增加了。”

战术数据管家将促进围绕特定数据领域的对话,并与数据中的其他利益相关者合作,同时他们的职责是针对特定的数据域,而不是他们自己对数据的特定使用。他说,找到一个能够负责整个企业领域的个人对于一些组织来说可能非常困难。

“我现在有一个客户,他正在为客户、产品和供应商数据识别此人。想想有多难,找一个有这方面知识的人,或者愿意成为那个数据主题的管事员。“

如果一个领域对一个数据管家来说太多了:
“可能有一个数据主题的子域需要子域管理员。在“客户”下,可能有人口信息、财务信息、事务信息,因此可能为每个子域都有子域管家。“

数据治理在组织中的作用

数据治理和数据管理理想地属于首席数据官(CDO)或类似职位的人,但并非所有公司都有CDO。规模和企业结构会产生一定的影响,Seiner说。“在一个较小的公司,你不一定要域管理员负责子域名。这取决于组织。”

很多人都支持“如果人们负责教育自己”,而教育部分是把整个计划结合起来的关键。各级利益相关者需要了解数据治理计划的目的、意图和必要性,以便其运作并继续良好地应对未来。

  • Mar 20 / 2018
  • 0
Data, Ideas, News

你的“数据资产”真的算“资产”吗?

作者:TalkingData数据产品经理 于兰

本文由TalkingData原创,转载请获取授权。

何谓资产?

我们来看一下“资产”的概念:“资产是指由企业过去经营交易或各项事项形成的,由企业拥有或控制的,预期会给企业带来经济利益的资源。”

一般情况下,“资产”最核心的内涵是“拥有或控制”,而“预期会给企业带来经济利益”一条,由于“预期”的不确定性,很难作为评判的标准。

但实际上,能否为企业带来经济利益一条至关重要,现在的很多理财观点中,如果不能持续给企业带来现金流,反而需要花成本去收集、整理、维护,那这对企业来说,不是“资产”,而是“负债”,它需要企业持续投入,如果长期看不到收益的“预期”,反而会摊薄企业的利润。

从以上角度来看,“数据资产”只是一个表面的概念,要成为真正的“资产”,需要将其“预期”的收益具象化,变成实实在在的收益。

“数据资产”的表现

可明确作为“资产”的数据,表现为以下两种形式:用数据帮助现有产品带来收益;将数据本身变为可带来收益的产品。

“内消”:数据助力现金牛

数据助力现金牛,即数据本身不产生价值,但通过数据作用于其他现金牛产品,使其可以在创造收益、降低成本上有更好的表现,这是一种数据“内消”的方式,即一般在企业内部发生,将生产经营中产生的数据进行收集、整理、分析,用于服务自身经营决策、业务流程,从而提升产品业绩。

(图:现金通过产品进入企业,数据辅助产品获取收益)

如在各通信运营商都有成熟的高价值客户关怀维护体系,会定期分析高价值用户的套餐状态、消费情况、使用异常等,适时的采取关情维系策略,如在用户套餐即将到期时,通过一定的续约优惠(续约送手机、充值返话费等)吸引用户续约,延长稳定收益的时间。

“出口”:也可以是现金牛

通过数据帮助其他产品提升业绩的方式,对数据本身来说是一种间接的获益方式,一般情况下数据能带来多少价值是比较难以评估的。

在合法合规的前提下,让数据以各种形式进行交易,数据赋予价值,是让数据本身成为“现金牛”的直接方式。

(图:数据从企业输出,同时现金直接进入企业)

例如各P2P平台的黑名单客户,对于其他贷款平台来说是重要信息,可以有效减少骗贷可能性,降低坏账率,对银行和金融机构来说意味着直接的收益,很容易通过共享方式将数据直接变现。

如何让数据成为“资产”?

目前市场上的数据纷繁多样,但真正发挥其价值,通过”内消“或”出口“方式带来收益的并不多。从根本上来看,是因为”数据“只是”数据“,而能为企业带来价值的,不是“数据”本身,而是可以消除信息不对称的”信息“。

因此,如何将“数据”转化为“信息”,就成为这个过程中的核心。由于“信息”在不同场景中有不同的表现,我们无法给出普适性的“灵丹妙药”,只能从数据应用的角度提供一些通用的原则。 

融入业务场景

数据在不同的业务背景下有不同的处理方式:同样是电商交易数据,有人会关注其购买内容以研究不同商品间的关联关系,以用于进行商品推荐;有人会关注下单流程,以研究人的决策过程及其影响因素。

因此,数据的收集、处理、输出过程,必须基于特定的业务问题出发,将数据融入业务问题的解决过程,才能真正将数据发挥价值。

当然,由于数据处理的链条一般较长,越往底层离业务应用越远,可能不一定涵盖全部的业务方向,这种情况可以理解。但在上层考虑问题解决时,也必须再重新回顾数据的收集、处理过程,以保证不会遗漏重要信息,用最适合的方式解决问题。

清除“连接”的障碍 

数据一般是“1+1+1>3″的,数据越多,能带来的复利效果越大,但前提是,来自不同企业、不同组织的数据可以有效的进行关联。如果数据无法关联在一起,就是一个一个的孤岛,价值大打折扣。很多企业辛苦收集的数据无法找到出路,根本就在这里。

因此,在数据的处理、输出过程中,要尽可能全面的考虑”连接“的需要,让自身数据可以更好的和其他数据关联。如一般企业在数据存储中会使用自编主键,在输出时,由于自编主键的无法通用,必须有另一个替代的主键用于和外界关联。

SDMK助力“数据资产”增值

TalkingData的智能数据服务商城(SDMK),以平台方式承载各行各业的数据需求方,以及来自各行各业的数据。

在业务场景方面,TalkingData与各行业合作伙伴共同探索数据应用,沉淀为通用型数据服务在SDMK落地;

在“连接”方面,SDMK提供统一标准的服务接口,统一数据的流通方式,让数据需求方可以简单方便的获取各种数据,降低数据引入成本。

同时,数据应用,尤其是第三方数据应用方面,要走的路还很长,TalkingData SDMK希望和行业各方面的合作伙伴一起,探索再探索,一起展望由数据串起的行业新篇章。

  • Mar 20 / 2018
  • 0
Data, Ideas

锐眼洞察 | 理解非结构化数据的关键——数据可视化

作者:James Ovenden

原文:https://channels.theinnovationenterprise.com/articles/why-we-need-data-visualization-to-understand-unstructured-data

译者:TalkingData解决方案架构师 张雪倩

本译文禁止商用,转载请注明来源!

我们越来越擅长理解非结构化数据,但仍未达到理想状态。

数据可视化发展近几年突飞猛进。企业使用愈发令人惊叹的软件来展现他们收集的海量信息,使用反应敏捷、互动性强、往往又非常漂亮的表现形式,让观看者参与进来——无论是会议室里的决策者还是科技馆里的孩子们。

数据可视化领域从业者面临的最重要挑战之一,就是能用非结构化数据来做什么。非结构化数据是指所有不能纳入关系数据库的数据,包括视频、幻灯片、公司记录、社交媒体、RSS、文件和文本——基本上就是绝大部分的交流。

据估计,世界上80%的数据都是非结构化的而且这一数字正迅速增长,IDC预测非结构化数据将从2015年的9.3ZB到2020年增长至44.1ZB。它对企业的重要性也同样迅速增长着。墨尔本大学客座讲师与(商业分析)研究员Ranko Cosic曾指出:“在我看来,运用数据的方式在接下来几年中的变化将是,虽然企业会继续收集和分析数据仓库、传统数据库和关系数据库中的结构化数据,也将更多关注收集和分析传统网站与社交媒体网站上的以录音、图像、音乐、文本、视频和交互式内容形式出现的非结构化数据。”

非结构化数据如此重要,其原因是它所提供的语境。分析结构化数据能够告诉我们什么正在发生,但是通过分析复杂的非结构化数据流才能知道为什么会发生。结构化数据包含收入表现和运营指标,但是非结构化数据的文本能够展示对公司产品的看法、员工信息和竞争优势。

然而,对非结构化数据的分析则是一门相对来说比较新的科学,其规模和复杂性以往使得人们难以理解。高效处理非结构化数据是许多创业公司的目标,他们中的大部分现在关注于使用机器学习算法对其进行解锁,而不是像以前会将非结构化数据转化为结构化数据。他们将分析和可视化都自动化,所以公司能够立即从非结构化数据库得到结果。

BrainSpace和DeepDive是其中取得重大进展的两个创业公司,而且它们都获得了大型融资。Brainspace的CEO Dave Copps告诉我们:“之前,我们能够对非结构化数据做的只有搜索,搜集起来一堆文件,然后用关键词去尝试(搜索)。Tableau和Quickview之类的技术通常适合检索结构化数据,但是一旦你从文件中抽出词来看,语境就不在了。所以,比如说你在分析简历,如果你从一名软件开发者的简历中找到了‘Java’,但你不知道这个词的存在是否只是因为那个人写了‘我的Java很差劲’。我们做的,不仅仅只是分析词句,而是着眼于词与词之间的空白——语境。”

然而,我们在非结构化数据的分析上取得了一些显著进步的同时,实际上仍未发挥信息的全部潜力在动态数据专家Logtrust最近受委托的451研究中,有反馈的IT经理中有89%表示他们将结构化数据方案在企业中提升到很高的优先级,然而只有43%的人认为非结构化数据方案有一样的优先级。

改变这些态度的关键就是数据可视化。像BrainSpace这样的公司提供具有参与性、互动性的自动可视化,但仍有许多未被发现的潜力。洛克希德马丁的首席数据科学家Walter Storm指出:“技术确实使得非结构化数据更易被分析——一大问题却是:‘这种分析有什么用?’ 主题建模、图表分析、甚至降维和可视化都有许多艺术可言。有多少特征?都是些什么?深网中有多少层?有多少节点?多大的粒宽能展现良好的差异性?第二、第三顺序衍生出的特征空间中相邻两者之间的关系是什么?这种算法到底刚学习到了什么?我的假设是什么来着?”

探索新鲜事物是件很棒的事情,但是如果你不能说服决策者,让他们相信你想探索的东西确实是存在的,使他们采取合适的行动,那么这对企业来说就完全没有意义数据可视化是实现这一点最好的方法,它揭示了数据中无法以其它方式来理解的复杂结构。人类大脑处理信息的方式意味着,通过视觉的方式将它传达给人们并使得他们参与其中,让你可以描述出你所发现的模式,甚至可以发现这种模式的洞察。这也能让更多的人更易理解数据,可能有助于提升整个企业的数据平民化,并带来更多的洞察。

相较于传统数字化的数据,非结构化数据可视化带来了独特的挑战,且仍处于初期阶段。在最近旧金山数据可视化峰会上,通用汽车的数据可视化专家Ken Cherven使用以往所有国情咨文做了示范。他的示范结果显示了为什么可视化对于理解非结构化数据是非常有必要的,它也为我们提供了激动人心的机会,来创造性地以之前被认为是不可能的方式来展示信息,并为我们提供从中学习的机会。

延伸阅读:

① 两个工具帮你实现酷炫的数据可视化

② 手把手教你简单快速实现5种数据可视化

③ TalkingData 可视化能力及 iView 开发实践分享
  • Mar 20 / 2018
  • 0
Data, Ideas, Tech

技术专栏 | 微服务架构初探

作者:TalkingData 徐蓓

本译文禁止商用,转载请注明来源!

什么是微服务 

首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统Web应用,来理解什么是微服务。

传统的Web应用核心分为业务逻辑、适配器以及API或通过UI访问的Web界面。业务逻辑定义业务流程、业务规则以及领域实体。适配器包括数据库访问组件、消息组件以及访问接口等。

一个打车软件的架构图如下:

尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用。例如Java应用程序会被打包成WAR,部署在Tomcat或者Jetty上。

这种单体应用比较适合于小项目,优点是:

  • 开发简单直接,集中式管理
  • 基本不会重复开发
  • 功能都在本地,没有分布式的管理开销和调用开销

当然它的缺点也十分明显,特别对于互联网公司来说:

  • 开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断
  • 代码维护难:代码功能耦合在一起,新人不知道何从下手
  • 部署不灵活:构建时间长,任何小修改必须重新构建整个项目,这个过程往往很长
  • 稳定性不高:一个微不足道的小问题,可以导致整个应用挂掉
  • 扩展性不够:无法满足高并发情况下的业务需求

所以,现在主流的设计一般会采用微服务架构。其思路不是开发一个巨大的单体式应用,而是将应用分解为小的、互相连接的微服务。一个微服务完成某个特定功能,比如乘客管理和下单管理等。每个微服务都有自己的业务逻辑和适配器。一些微服务还会提供API接口给其他微服务和应用客户端使用。

比如,前面描述的系统可被分解为:

每个业务逻辑都被分解为一个微服务,微服务之间通过REST API通信。一些微服务也会向终端用户或客户端开发API接口。但通常情况下,这些客户端并不能直接访问后台微服务,而是通过API Gateway来传递请求。API Gateway一般负责服务路由、负载均衡、缓存、访问控制和鉴权等任务。

微服务架构的优点 

微服务架构有很多重要的优点。

首先,它解决了复杂性问题。它将单体应用分解为一组服务。虽然功能总量不变,但应用程序已被分解为可管理的模块或服务。这些服务定义了明确的RPC或消息驱动的API边界。微服务架构强化了应用模块化的水平,而这通过单体代码库很难实现。因此,微服务开发的速度要快很多,更容易理解和维护。

其次,这种体系结构使得每个服务都可以由专注于此服务的团队独立开发。只要符合服务API契约,开发人员可以自由选择开发技术。这就意味着开发人员可以采用新技术编写或重构服务,由于服务相对较小,所以这并不会对整体应用造成太大影响。

第三,微服务架构可以使每个微服务独立部署。开发人员无需协调对服务升级或更改的部署。这些更改可以在测试通过后立即部署。所以微服务架构也使得CI/CD成为可能。

最后,微服务架构使得每个服务都可独立扩展。我们只需定义满足服务部署要求的配置、容量、实例数量等约束条件即可。比如我们可以在EC2计算优化实例上部署CPU密集型服务,在EC2内存优化实例上部署内存数据库服务。

微服务架构的缺点和挑战 

实际上并不存在silver bullets,微服务架构也会给我们带来新的问题和挑战。其中一个就和它的名字类似,微服务强调了服务大小,但实际上这并没有一个统一的标准。业务逻辑应该按照什么规则划分为微服务,这本身就是一个经验工程。有些开发者主张10-100行代码就应该建立一个微服务。虽然建立小型服务是微服务架构崇尚的,但要记住,微服务是达到目的的手段,而不是目标。微服务的目标是充分分解应用程序,以促进敏捷开发和持续集成部署。

微服务的另一个主要缺点是微服务的分布式特点带来的复杂性。开发人员需要基于RPC或者消息实现微服务之间的调用和通信,而这就使得服务之间的发现、服务调用链的跟踪和质量问题变得的相当棘手。

微服务的另一个挑战是分区的数据库体系和分布式事务。更新多个业务实体的业务交易相当普遍。这些类型的事务在单体应用中实现非常简单,因为单体应用往往只存在一个数据库。但在微服务架构下,不同服务可能拥有不同的数据库。CAP原理的约束,使得我们不得不放弃传统的强一致性,而转而追求最终一致性,这个对开发人员来说是一个挑战。

微服务架构对测试也带来了很大的挑战。传统的单体WEB应用只需测试单一的REST API即可,而对微服务进行测试,需要启动它依赖的所有其他服务。这种复杂性不可低估。

微服务的另一大挑战是跨多个服务的更改。比如在传统单体应用中,若有A、B、C三个服务需要更改,A依赖B,B依赖C。我们只需更改相应的模块,然后一次性部署即可。但是在微服务架构中,我们需要仔细规划和协调每个服务的变更部署。我们需要先更新C,然后更新B,最后更新A。

部署基于微服务的应用也要复杂得多。单体应用可以简单的部署在一组相同的服务器上,然后前端使用负载均衡即可。每个应用都有相同的基础服务地址,例如数据库和消息队列。而微服务由不同的大量服务构成。每种服务可能拥有自己的配置、应用实例数量以及基础服务地址。这里就需要不同的配置、部署、扩展和监控组件。此外,我们还需要服务发现机制,以便服务可以发现与其通信的其他服务的地址。因此,成功部署微服务应用需要开发人员有更好地部署策略和高度自动化的水平。

以上问题和挑战可大体概括为:

  • API Gateway
  • 服务间调用
  • 服务发现
  • 服务容错
  • 服务部署
  • 数据调用

幸运的是,出现了很多微服务框架,可以解决以上问题。

第一代微服务框架 

Spring Cloud

Spring Cloud为开发者提供了快速构建分布式系统的通用模型的工具(包括配置管理、服务发现、熔断器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等)。

主要项目包括:

  • spring cloud config:由git存储库支持的集中式外部配置管理。配置资源直接映射到Spring Environment,但是如果需要可以被非Spring应用程序使用。
  • spring cloud netflix:与各种Netflix OSS组件(Eureka,Hystrix,Zuul,Archaius等)集成。
  • spring cloud bus:用于将服务和服务实例与分布式消息传递联系起来的事件总线。用于在集群中传播状态更改(例如配置更改事件)
  • spring cloud for cloud foundry:将您的应用程序与Pivotal Cloudfoundry集成。提供服务发现实现,还可以轻松实现通过SSO和OAuth2保护资源,还可以创建Cloudfoundry服务代理。
  • spring cloud cloud foundry service broker:提供构建管理一个Cloud Foundry中服务的服务代理的起点。
  • spring cloud cluster:领导选举和通用状态模型(基于zookeeper,redis,hazelcast,Consul的抽象和实现)
  • spring cloud consul:结合Hashicorp Consul的服务发现和配置管理
  • spring cloud security:在Zuul代理中为负载平衡的OAuth2休眠客户端和认证头中继提供支持。
  • spring cloud sleuth:适用于Spring Cloud应用程序的分布式跟踪,与Zipkin,HTrace和基于日志(例如ELK)跟踪兼容。
  • spring cloud data flow:针对现代运行时的可组合微服务应用程序的云本地编排服务。易于使用的DSL,拖放式GUI和REST-API一起简化了基于微服务的数据管道的整体编排。
  • spring cloud     stream:轻量级事件驱动的微服务框架,可快速构建可连接到外部系统的应用程序。使用Apache Kafka或RabbitMQ在Spring Boot应用程序之间发送和接收消息的简单声明式模型。
  • spring cloud stream app starters:Spring Cloud任务应用程序启动器是Spring Boot应用程序,可能是任何进程,包括不会永远运行的Spring Batch作业,并且它们在有限时间的数据处理之后结束/停止。
  • spring cloud zookeeper:Zookeeper的服务发现和配置管理
  • spring cloud for amazon web services:轻松集成托管的Amazon的Web Services服务。它通过使用spring的idioms和APIs便捷集成AWS服务,例如缓存或消息API。开发人员可以围绕托管服务,不必关心基础架构来构建应用。
  • spring cloud connectors:使PaaS应用程序在各种平台上轻松连接到后端服务,如数据库和消息代理(以前称为”Spring Cloud”的项目)
  • spring cloud starters:作为基于spring boot的启动项目,降低依赖管理(在Angel.SR2后,不在作为独立项目)
  • spring cloud cli:插件支持基于Groovy预言快速创建spring cloud的组件应用

Dubbo

Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

其核心部分包含:

  • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及”请求-响应”模式的信息交换方式。
  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

但是显而易见,无论是Dubbo还是Spring Cloud都只适用于特定的应用场景和开发环境,它们的设计目的并不是为了支持通用性和多语言性。并且它们只是Dev层的框架,缺少DevOps的整体解决方案(这正是微服务架构需要关注的)。而随之而来的便是Service Mesh的兴起。

下一代微服务:Service Mesh? 

Service Mesh

Service Mesh又译作”服务网格”,作为服务间通信的基础设施层。如果用一句话来解释什么是Service Mesh,可以将它比作是应用程序或者说微服务间的TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心TCP/IP这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用Service Mesh也就无须关系服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如Spring Cloud、OSS,现在只要交给Service Mesh就可以了。

Service Mesh有如下几个特点:

  • 应用程序间通讯的中间层
  • 轻量级网络代理
  • 应用程序无感知
  • 解耦应用程序的重试/超时、监控、追踪和服务发现

Service Mesh的架构如下图所示:

Service Mesh作为Sidebar运行,对应用程序来说是透明,所有应用程序间的流量都会通过它,所以对应用程序流量的控制都可以在Service Mesh中实现。

目前流行的Service Mesh开源软件有Linkerd、Envoy和Istio,而最近Buoyant(开源Linkerd的公司)又发布了基于Kubernetes的Service Mesh开源项目Conduit。

Linkerd

Linkerd是开源网络代理,设计为以服务网格部署:用于管理,控制和监控应用程序内的服务与服务间通讯的专用层。

Linkerd旨在解决Twitter,Yahoo,Google和Microsoft等公司运营大型生产系统时发现的问题。根据经验,最复杂,令人惊奇和紧急行为的来源通常不是服务本身,而是服务之间的通讯。Linkerd解决了这些问题,不仅仅是控制通讯机制,而是在其上提供一个抽象层。

它的主要特性有:

  • 负载平衡:linkerd提供了多种负载均衡算法,它们使用实时性能指标来分配负载并减少整个应用程序的尾部延迟。
  • 熔断:linkerd包含自动熔断,将停止将流量发送到被认为不健康的实例,从而使他们有机会恢复并避免连锁反应故障。
  • 服务发现:linkerd 与各种服务发现后端集成,通过删除特定的(ad-hoc)服务发现实现来帮助您降低代码的复杂性。
  • 动态请求路由:linkerd 启用动态请求路由和重新路由,允许您使用最少量的配置来设置分段服务(staging service),金丝雀(canaries),蓝绿部署(blue-green deploy),跨DC故障切换和黑暗流量(dark traffic)。
  • 重试次数和截止日期:linkerd可以在某些故障时自动重试请求,并且可以在指定的时间段之后让请求超时。
  • TLS:linkerd 可以配置为使用 TLS 发送和接收请求,您可以使用它来加密跨主机边界的通信,而不用修改现有的应用程序代码。
  • HTTP代理集成:linkerd 可以作为 HTTP 代理,几乎所有现代 HTTP 客户端都广泛支持,使其易于集成到现有应用程序中。
  • 透明代理:您可以在主机上使用 iptables 规则,设置通过 linkerd 的透明代理
  • gRPC:linkerd 支持 HTTP/2 和 TLS,允许它路由 gRPC 请求,支持高级 RPC 机制,如双向流,流程控制和结构化数据负载。
  • 分布式跟踪:linkerd 支持分布式跟踪和度量仪器,可以提供跨越所有服务的统一的可观察性。
  • 仪器仪表: linkerd 支持分布式跟踪和度量仪器,可以提供跨越所有服务的统一的可观察性。

Envoy

Envoy 是一个面向服务架构的L7代理和通信总线而设计的,这个项目诞生是出于以下目标:

对于应用程序而言,网络应该是透明的,当发生网络和应用程序故障时,能够很容易定位出问题的根源。

Envoy可提供以下特性:

  • 外置进程架构:可与任何语言开发的应用一起工作;可快速升级
  • 基于新C++11编码:能够提供高效的性能
  • L3/L4过滤器:核心是一个L3/L4网络代理,能够作为一个可编程过滤器实现不同TCP代理任务,插入到主服务当中。通过编写过滤器来支持各种任务,如原始TCP代理、HTTP代理、TLS客户端证书身份验证等。
  • HTTP L7过滤器:支持一个额外的HTTP L7过滤层。HTTP过滤器作为一个插件,插入到HTTP链接管理子系统中,从而执行不同的任务,如缓冲,速率限制,路由/转发,嗅探Amazon的DynamoDB等等。
  • 支持HTTP/2:在HTTP模式下,支持HTTP/1.1、HTTP/2,并且支持HTTP/1.1、HTTP/2双向代理。这意味着HTTP/1.1和HTTP/2,在客户机和目标服务器的任何组合都可以桥接
  • HTTP L7路由:在HTTP模式下运行时,支持根据content type、runtime values等,基于path的路由和重定向。可用于服务的前端/边缘代理
  • 支持gRPC:gRPC是一个来自谷歌的RPC框架,使用HTTP/2作为底层的多路传输。HTTP/2承载的gRPC请求和应答,都可以使用Envoy的路由和LB能力
  • 支持MongoDB L7:支持获取统计和连接记录等信息
  • 支持DynamoDB L7:支持获取统计和连接等信息
  • 服务发现:支持多种服务发现方法,包括异步DNS解析和通过REST请求服务发现服务
  • 健康检查:含有一个健康检查子系统,可以对上游服务集群进行主动的健康检查。也支持被动健康检查。
  • 高级LB:包括自动重试、断路器,全局限速,阻隔请求,异常检测。未来还计划支持请求速率控制
  • 前端代理:可作为前端代理,包括TLS、HTTP/1.1、HTTP/2,以及HTTP L7路由
  • 极好的可观察性:对所有子系统,提供了可靠的统计能力。目前支持statsd以及兼容的统计库。还可以通过管理端口查看统计信息,还支持第三方的分布式跟踪机制
  • 动态配置:提供分层的动态配置API,用户可以使用这些API构建复杂的集中管理部署

Istio

Istio是一个用来连接、管理和保护微服务的开放平台。Istio提供一种简单的方式来建立已部署服务网络,具备负载均衡、服务间认证、监控等功能,而不需要改动任何服务代码。想要为服务增加对Istio的支持,您只需要在环境中部署一个特殊的边车(sidecar),使用Istio控制面板功能配置和管理代理,拦截微服务之间的所有网络通信。

Istio目前仅支持在Kubernetes上的服务部署,但未来版本中将支持其他环境。

Istio提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求。它在服务网络中统一提供了许多关键功能:

  • 流量管理:控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮
  • 可观察性:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力
  • 策略执行:将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。策略的更改是通过配置网格而不是修改应用程序代码
  • 服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转

Istio服务网格逻辑上分为数据面板和控制面板:

  • 数据面板由一组智能代理(Envoy)组成,代理部署为边车,调解和控制微服务之间所有的网络通信
  • 控制面板负责管理和配置代理来路由流量,以及在运行时执行策略

下图显示了构成每个面板的不同组件:

Conduit

Conduit是为Kubernetes设计的一个超轻型服务网格服务,它可透明地管理在Kubernetes上运行的服务的运行时通信,使得它们更安全可靠。Conduit提供了可见性、可靠性和安全性的功能,而无需更改代码。

Conduit service mesh也是由数据面板和控制面板组成。数据面板承载应用实际的网络流量。控制面板驱动数据面板,并对外提供北向接口。

对比

Linkerd和Envoy比较相似,都是一种面向服务通信的网络代理,均可实现诸如服务发现、请求路由、负载均衡等功能。它们的设计目标就是为了解决服务之间的通信问题,使得应用对服务通信无感知,这也是Service Mesh的核心理念。Linkerd和Envoy像是分布式的Sidebar,多个类似Linkerd和Envoy的proxy互相连接,就组成了service mesh。

而Istio则是站在了一个更高的角度,它将Service Mesh分为了Data Plane和Control Plane。Data Plane负责微服务间的所有网络通信,而Control Plane负责管理Data Plane Proxy:

并且Istio天生的支持Kubernetes,这也弥合了应用调度框架与Service Mesh之间的空隙。

关于Conduit的资料较少,从官方介绍看它的定位和功能与Istio类似。

Kubernetes + Service Mesh 

= 完整的微服务框架 

Kubernets已经成为了容器调度编排的事实标准,而容器正好可以作为微服务的最小工作单元,从而发挥微服务架构的最大优势。所以我认为未来微服务架构会围绕Kubernetes展开。

而Istio和Conduit这类Service Mesh天生就是为了Kubernetes设计,它们的出现补足了Kubernetes在微服务间服务通讯上的短板。虽然Dubbo、Spring Cloud等都是成熟的微服务框架,但是它们或多或少都会和具体语言或应用场景绑定,并只解决了微服务Dev层面的问题。若想解决Ops问题,它们还需和诸如Cloud Foundry、Mesos、Docker Swarm或Kubernetes这类资源调度框架做结合:

但是这种结合又由于初始设计和生态,有很多适用性问题需要解决。

Kubernetes则不同,它本身就是一个和开发语言无关的、通用的容器管理平台,它可以支持运行云原生和传统的容器化应用。并且它覆盖了微服务的Dev和Ops阶段,结合Service Mesh,它可以为用户提供完整端到端的微服务体验。

所以我认为,未来的微服务架构和技术栈可能是如下形式

多云平台为微服务提供了资源能力(计算、存储和网络等),容器作为最小工作单元被Kubernetes调度和编排,Service Mesh管理微服务的服务通信,最后通过API Gateway向外暴露微服务的业务接口。

我相信未来随着以Kubernetes和Service Mesh为标准的微服务框架的盛行,将大大降低微服务实施的成本,最终为微服务落地以及大规模使用提供坚实的基础和保障。

参考资料:

  • Introduction to Microservices:https://www.nginx.com/blog/introduction-to-microservices
  • Pattern: Microservice Architecture:http://microservices.io/patterns/microservices.html
  • Spring Cloud for Microservices Compared to Kubernetes:https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes
  • Istio:https://istio.io
  • Envoy:https://www.envoyproxy.io
  • Linkerd:https://linkerd.io
  • 微服务(Microservice)那点事:https://yq.aliyun.com/articles/2764?spm=a2c4e.11153959.blogcont8611.3.7ea85f19HP1APU
  • Istio中文文档:http://istio.doczh.cn
  • Linkerd中文文档:http://linkerd.doczh.cn
页面:1234567...18
随时欢迎您 联系我们