C_Meng PSNA

Never wait for the storm to pass, just dance in the rain.

0%

前言

互联网发展到今天,各种各样的互联网公司、互联网服务层出不穷,盈利方式更是”千奇百怪“,免费服务更是数不胜数,已然成为一种常态。

然而众所周知,无利不起早,是人就要吃饭。虽然我们享受着众多”免费“服务、点着各种满减外卖,但是这些提供服务的公司和平台却都活的好好的。他们的服务盈利模式都有哪些呢?

服务盈利模式

服务盈利模式总的来说分为两大类:内向盈利模式和外向盈利模式。

  • 内向盈利模式:利润来自于服务提供者或消费者,依赖于在服务过程中产生或剩余的价值的盈利模式。
  • 外向盈利模式:利润来自于无关自三方,依赖于服务存在的盈利模式。

根据变现对象的不同,内向盈利模式和外向盈利模式又可以分为以下几种子模式:

  • 内向盈利模式
    • 资产盈利模式:通过资产换取价值的盈利模式,如资产销售
    • 服务盈利模式:依赖资产,通过提供服务换取价值的盈利模式,如收费服务、增值服务
    • 平台盈利模式(内向型):通过平台换取价值的盈利模式,如押金池、管理费
    • 过程盈利模式(内向型):依赖平台,通过服务过程产生额外价值的盈利模式,如佣金抽成
  • 外向盈利模式
    • 平台盈利模式(外向型):依赖平台,从无关第三方获取价值的盈利方式,如金融运作
    • 过程盈利模式(外向型):依赖过程,从无关第三方获取价值的盈利方式,如广告
    • 其他盈利模式:通过吸引投资、上市募集资金等手段获取价值的盈利方式,如外部投资

案例讲解

我们现在虚构一个案例来讲解一下这几种盈利模式:

假设现在是2000年,有一家公司叫阿里后妈,他们是一个传统的服饰售卖公司。

由于互联网兴起,他们为了能够在线上销售自己的衣服,搭建了一个线上购物网站,通过销售一些货品获得盈利,此时他们的盈利模式是资产盈利模式

为了增加客户黏度,他们提出了会员制度,通过办理线上会员,客户可以享受优先发货、免费退换等增值服务。此举一出,客户疯狂办理会员,后妈发现,衣服可以不赚钱,就交个朋友,会员费就够自己发工资了,此时他们的盈利模式是服务盈利模式

阿里后妈的平台上人越来越多,这使得一些友商蠢蠢欲动。他们纷纷找阿里后妈商谈业务,希望能把自己的商品也上架到阿里后妈的网站上,他们愿意按期交一些管理费。后妈发现,自己连衣服都不用卖了,收管理费就足够恰饭了。此时盈利模式是平台盈利模式(内向型)

但是一段时间过后,因为交易量大涨,导致平台运营成本增加,后妈发现每个月收的那点管理费有点不够用了。而且不管卖的多卖的少,商家交的管理费都一样,这是不公平的。于是后妈开始在管理费之外,每一单交易都收取30%的抽成。于是又增加了一种盈利模式过程盈利模式(内向型)

员工越来越多、工资越来越高,交易量增速却开始下降,后妈发现这样下去可能要恰不起饭了。但是目前30%的抽成已经够高了,管理费用签过合同短期内不能变,怎么增加收入呢?后妈想到平台上有很多的押金,以及大量交易时的中转滞留滞留的资金,从中拿一部分出来,在不影响平台正常运作的情况下,做一些收益稳定的投资。盈利模式增加了平台盈利模式(外向型)

过了一段时间,某离职员工把公司私用用户资金的问题爆料了出来,金融运作的路子走不通了。后妈又想到,可以在用户交易的过程中增加广告,比如交易页面上增加一个广告条,按照广告的播放次数收费,不需要增加买家或者卖家的成本,可以直接从第三方获取收益,岂不美哉。盈利模式增加了一种过程盈利模式(外向型)

公司越办越大,最终上市,大量资金涌入,各个机构的投资纷至沓来,这些钱和服务并没有关系,这部分盈利属于其他盈利模式

总结

一家互联网公司同一时期并非只能存在一种盈利模式,通常情况下,是多种盈利模式共存的。

本问提出的划分方法,第一层是通过盈利来源来分(内部、外部),第二层是通过利润的产生对象来分(资产、服务、平台、过程),对于服务盈利模式进行了较好的抽象,对目前常见的盈利模式由较好的覆盖。

Taken from:
http://xueshu.baidu.com/usercenter/paper/show?paperid=baa0175c22e30823d9b1e14e01cf4141&site=xueshu_se&hitarticle=1

背景及简介

构造类型论为计算机科学家提供了一个框架, 以一种优雅和灵活的方式把逻辑和程序设计语言结合起来: 在同一形式系统中, 可以同时表达规约和(函数式语言)程序, 从证明规则可以导出正确的程序, 并验证程序具有某种性质, 从而在同一系统内完成程序的开发和验证。

构造类型轮的理论基础及相互关系

构造类型论三大理论基石

  • 直觉类型论和构造数学:构造类型论的直接基础是Martin-Lof的直觉类型论,它为构造数学提供直觉解释。它是一个逻辑框架,可以表达和解释其他逻辑或理论,从他的规范化证明立即得出其所表达理论的规范化。与此作用相同的还有T.Coquand和Giared的构造演算。
  • lambda演算和函数式语言程序设计与实现。lambda演算是函数式语言理论的基础,是函数式程序设计语言的纯理论部分的范式(canonical form),是由函数抽象和函数应用组成的系统,而这两个特点也是程序设计语言所具有的的共同之处。
  • 证明论和Curry-Howard同态。证明轮中直觉注意逻辑的Gentzen自然演绎、一些自动演绎技术及定理证明技术是构造类型轮实现系统主要使用的技术。

相互关系

Curry-Howard同态是Martin-Lof直觉类型轮的基础:把命题解释称类型(propositions-a-types),或命题作为集合(propositions=as=sets)。利用命题与集合之间的等价,推导的规范化与计算机表示该推导的证明项的值对应。

直觉主义(构造)逻辑和有类型lambda演算在Curry-Howard同态下可以相互转化:直觉逻辑自然演绎的证明可用某种有类型lambda项表示,并且自然演绎的证明规范化与lambda演算的beta变换对应。

构造类型轮与程序设计的对应关系

构造数学和计算机科学有一些基本概念是共同的。Bishop认为构造数学可以作为计算机科学的灵感的重要来源。

构造性证明与计算机程序概念的关系

构造性的证明与计算机程序概念有密切关系:为构造地证明命题 $(\forall x \in A)(\exists y \in B)P(x,y)$ ,必须要给出函数f,使f应用于A中元素a时,产生B中元素b,使P(a,b)满足。如果P(a,b)描述了一个规约,则证明该命题的函数f就是满足该规约的一个程序。所以,可以吧构造证明本身看成是一个计算机程序,程序的计算过程与证明的规范化对应。正因为构造性证明的这一计算内容,可把类型轮用作一种程序设计语言,而且,由于程序是从他的说明的证明中得到的,类型轮还可以用作程序设计逻辑。

Martin-Lof直觉类型论和计算机程序概念的关系

类型轮不是基于谓词逻辑,它不再使用Tarski的真值语义,而是利用命题和集合之间的Curry-Howard同态——“命题作为集合”的直觉主义语义来解释逻辑常数。这里,命题被解释称一个集合,若他的元素则被解释称命题的一个证明。根据Kolmogorov对直觉命题的解释,还可以吧集合看成是问题的描述,尤其是把集合看成是程序要解决问题的规约时,集合的元素就是满足该规约的程序。

用类型轮进行程序构造的好处是,可以在同一形式系统中表达规约和程序。同时,因为可以从证明规则到处正确的程序,并验证程序具有的性质,所以程序开发的验证也是在同一系统用中完成的。

构造类型轮的一些实现

类型论的一个主要应用是作为变成逻辑,在其中能够从规约推导出程序。近年来,有几种类型轮的实现:

  1. Conell大学的Nurpl
  2. Edinburgh大学的LCF
  3. INRIA的Coq
  4. Edinburgh大学的LEGO
  5. Goteborg的ALF

其中,Coq和LEGO是基于构造演算CoC,与Martin-Lof直觉类型论的作用类似,也是提供了一种逻辑框架,利用了把命题解释成集合的思想。两者的区别是:Martin-Lof是直谓的(predicative),而CoC是非直谓的(impredicative)。所谓非直谓的,就是指可以对所有命题的类型Prop进行全称量化来构造类型。因此Martin-Lof直觉类型论只能够结实谓词逻辑,不能解释二姐逻辑,而CoC则能够解释高阶逻辑。

直觉主义(构造)逻辑和经典逻辑

直觉注意逻辑更多的从证明论和模型论的角度展现逻辑:也就是说,它是一个构造的逻辑(constructive logic)。所谓构造性(constructivity)是指:与经典逻辑只关心公式的真值不同,构造逻辑关注的是实际的证明对象本身。“构造”可以指一个过程以及执行该过程的结果。

两者的主要不同在于语义基础不同。经典逻辑的基础是真值函数的语义:每个命题都为真或者假,这是Tarski语义的本质。而在直觉主义(构造)逻辑中,命题的定义就是把该命题的证明写下来,只有当存在一个与该命题对应的证明对象时,命题才为真,这是Brouwer-Heyting-Kolmogorov基于证明论语义的本质。因此从构造逻辑的角度来说,命题的真等价于命题的可证明性。其余区别见表:

Curry-Howard同态

Curry-Howard同态在有类型的lambda演算和直觉命题逻辑之间建立了密切的关系。

用 $t:\sigma$ 表示项t具有类型 $\sigma$ 。在有类型lambda演算中项的构造有三种:变量(用x,y,z等表示);抽象(用 $\lambda x.t$ 表示);应用(用tu表示)。构造项的规则用自然演绎的方式描述如下:

变量形成规则: $\frac{}{x:\sigma \to x:\sigma}$

抽象形成规则: $\frac{\Gamma,x:\sigma \to t:r}{\Gamma \mapsto (\lambda x.t):\sigma \to r}$

变量形成规则: $\frac{\Gamma \mapsto t:\sigma \to r \Delta \mapsto u:\sigma}{\Gamma,\Delta \mapsto (tu):\sigma}$

对上边的规则形式进行改造:

  1. 把其中的项都去掉
  2. 用蕴含符号 $\Rightarrow$ 取代函数符号 $\to$
  3. 用逻辑共识取代项

则可以得到直觉逻辑的自然演绎表示

公理: $\frac{}{A\mapsto A}$

引入规则: $\frac{\Gamma, A \mapsto B}{\Gamma \mapsto A\Rightarrow B}(\Rightarrow I)$

消除规则: $\frac{\Gamma \mapsto A\Rightarrow B\Delta \mapsto A}{\Gamma,\Delta \mapsto B}(\Rightarrow E)$

这三条规则分别是直觉逻辑的自然演绎系统的定理、蕴含引入和蕴含消除规则。这就是Curry=Howard同态。

总结:

  1. lambda演算的项(或函数式语言程序)的类型与直觉逻辑的公式之间的对应:公式作为类型(formula-as-types)
  2. lambda演算的项与逻辑的证明对应:变量与公理对应,抽象与 $\Rightarrow$ 引入规则对应,应用与 $\Rightarrow$ 消除规则对应。而lambda演算的项就是函数式语言的程序,这就是:证明作为程序(proofs-as-programs)
  3. lambda演算与beta规约的过程与逻辑中的规范化过程对应,这就是计算作为规范化(computation-as-normalization)

Martin-Lof直觉类型论概述

对命题的直觉解释:命题作为集合

类型论不是基于谓词演算,它的逻辑常熟市通过命题和集合之间的Curry-Howard同态解释的:命题被解释称集合,集合的元素代表了该命题的证明。

1)逻辑蕴含: $A \supset B$

  • $A \supset B$ 的证明是一个函数(方法,证明)。对A的每一证明,给出B的一个证明。
  • $A \supset B$ 等价于 $A \to B$ ,是从A到B的函数的集合。
  • 集合 $A \to B$ 中元素都是函数,形式为 $\lambda x.b$ ,其中 $b\in B$ ,并且b可能依赖于 $x \in A$ 。

2)逻辑合取: $A \wedge B$

  • $A \wedge B$ 的证明是一个有序组,其中第一分量是A的每一证明,第二分量是B的一个证明。
  • $A \wedge B$ 等价于 $A \times B$ ,是A与B的笛卡尔积。
  • 集合 $A \times B$ 中元素的形式为(a,b),其中 $a\in A, b \in B$ 。

3)逻辑析取: $A \vee B$

  • 一个析取是构造地真,当且仅当我们能够证明析取式之一。所以, $A \vee B$ 的证明包括:A或者B的一个证明,加上有关到底是A还是B的证明的信息。
  • $A\vee B$ 等价于 A + B,是A与B的不想交并。
  • 集合A+B中的元素的形式为inl(a)或inr(b),其中 $a\in A, b \in B$ .

4)逻辑非: $\not A$

  • 命题A的反可以定义为: $\not A \equiv A \supset \perp$ 。其中 $\perp$ 代表荒谬(absurdity)。即一个没有证明的命题。如果用 $\Phi$ 代表空集,则利用逻辑蕴含的解释,有
  • $\not A$ 等价于 $A \to \Phi$ 。

为了对用两次定义的命题进行解释,我们来定义在集合族上的操作,即集合B依赖于集合A中的元素x。用 $B[x\leftarrow a]$ 表示把B中所有自由出现的x都用a替换后得到的表达式。

5)存在量词: $(\exists x \in A)B$

  • $(\exists x \in A)B$ 的证明包括:集合A的一个元素的构造,以及 $B[x\leftarrow a]$ 的一个证明。因此, $(\exists x \in A)B$ 的证明是一有序对,其第一分量是集合A的一个元素,第二分量是 $B[x\leftarrow a]$ 的一个证明。
  • $(\exists x \in A)B$ 等价于 $(\Sigma x\in A)B$ , $(\Sigma x\in A)B$ 是一集合族的不相交并(disjoint union)。
  • 集合中 $(\Sigma x\in A)B$ 中元素的形式为序偶 <a,b> ,其中 $a\in A, b \in B[x \leftarrow a]$。

6)全称量词: $(\forall x\in A)B$

  • $(\forall x \in A)B$ 的证明是一个函数(方法,程序),对于集合A中的每一个元素a给出 $B[x\leftarrow a]$ 的一个证明。因此,
  • $(\forall x \in A)B$ 等价于 $(\prod x\in A)B$ , $(\prod x\in A)B$ 是一集合族的笛卡尔积。
  • 集合中 $(\prod x\in A)B$ 中元素都是函数,当应用与集合A中元素a时,给出集合 $B[x\leftarrow a]$ 中的一个元素。该集合中的元素形式为 $\lambda x.b$ ,其中 $b\in B$ ,并且b和B都可能依赖于 $x\in A$ 。

类型的概念

类型轮中最基本的概念是类型的概念。对类型的直觉解释需要两方面的内容:

  1. 说明类型的对象是什么
  2. 说明该类型的两个对象相等的意义

类型论中有四种断言形式,对他们的直觉解释如下:

  1. A type,A是一个类型。
  2. A=B,A和B是相等的类型。
  3. $a\in A$ ,a是类型A中的一个对象。
  4. $a=b\in A$ ,a和b是类型A中的相等对象

假言断言

前边的四种断言不依赖于任何假设,假言断言(hypothetical judgement)通常都有一个上下文(context).

下面我们只对当上下文的长度为1分别对前面4中断言的假言形式进行解释,其他可以通过归纳解释得到:上下文长度为0时,就是上一节的情况。以下使C是任意不依赖于任何假设的类型。

  1. A type $[x\in C]$ ,当 $[x\in C]$ 时,A是一类型
  2. A = B $[x\in C]$ ,A和B是类型C上相等的类型族
  3. $a\in A[x\in C]$ ,a是依赖于 $[x\in C]$ 的类型A中的一个对象
  4. $a=b\in A[x\in C]$ ,a和b是依赖于 $[x\in C]$ 的类型A中的相等对象

类型组成

  • 产生基本类型的方式
    • 类型Set
    • 如果 $A\in Set$ ,A中元素的类型: $\frac{A\in Set}{El(A)type}$
  • 引入其他类型的方式
    • 函数类型: $\frac{AtypeBtype[x\in A]}{(x\in A)Btype}$ ,相等函数类型 $\frac{A=A’B=B’[x\in A]}{(x\in A)B=(x\in A’)B’}$
      • 把函数应用于对象: $\frac{c\in (x\in A)Ba\in A}{c(a)\in B[x\leftarrow a]}$ , $\frac{c\in (x\in A)Ba=b\in A}{c(a)=c(b)\in B[x\leftarrow a]}$
      • 引入函数的基本方法是对表达式共的一个变量进行抽象。: $\frac{b\in B[x\in A]}{[x]b\in (x\in A)B}$
    • 归纳定义的集合

常数的引入

新的常数:

  • 定义常数(defined constant):用其他对象来定义的
    • 显示定义常数:给出明确定义,实际上是某个类型中对象的简写
    • 隐式定义常数:用于说明当把它应用于它的参数后,得到什么定义者
  • 原始常数(primitive constant),值就是常数本身,只有一个类型,没有定义,也成为构造子(constructor),如自然数集合的定义就是通过声明以下常数:
    • $N\in Set$
    • $succ\in (N)N$
    • $0\in N$

剔除害群之马

如果一个人没有良好的品质,任何领导者没有魔力能够把品质注入到他身上。

作为团队的领导,可以对每一个成员进行培养、测试他的品质,给年轻人机会让他展示自己的品质,但如果这种品质在他身上根本就不存在,就不能注入。这一点,每一个团队领导都要十分清楚。所以说,选择可靠的人的能力非常重要,有匹害群之马,大多数的组织都会功亏一篑。

团队的发展过程中,要坚持四个尊重

  • 尊重别人
  • 尊重诚实的品质
  • 尊重忠诚的品质
  • 尊重时间

高绩效团队拥有哪些元素

  1. 清晰的目的和愿景:人们想知道他们在做什么,想要达到什么样的目标,想要一些他们可以承诺的事情。这是很多团队领导者忽略的东西,或者他们知道自己的愿景是什么,但是,他们忘记了与团队成员分享,他们忽略了经常重复的好处。
  2. 清晰的目标:这包括两部分,为整个团队和每个团队成员制定明确的目标,这样,他们就知道团队对他们的期望,以及他们将如何为整体绩效做贡献。
  3. 高的工作标准:高效的团队为自己的绩效、工作方式和他们工作的水平感到自豪。拥有清晰的绩效标准或关键绩效指标(KPI)会得到强有力的承诺—-如果团队成员参与了这些标准的设定,承诺就会更多。
  4. 系统和程序:建立清晰的工作、报告和执行过程的清晰方法可以提高工作效率和效果。当团队成员变得更习惯于在一起工作时,这些系统和程序会变得更高质量。
  5. 清晰、开放的沟通:包括正式的非正式的沟通。在一个团队里,信息分享、说出你想要的和问出你想要的是非常重要的,更为关键的是团队成员之间可以相互倾听对方的观点并尊重对方的贡献,这样做的部分原因是,你可以轻松地表达不同意见、处理分歧。
  6. 信任和承诺:这是一种无形的元素,虽然人际关系很好,但这在团队中并不重要,更重要的是能够尊重同事,与他们一起工作,感觉他们会履行自己的承诺,可靠和值得信任远比彼此喜欢更为重要。
  7. 领导力:随着团队的发展,领导风格和方法需要与时俱进。
  8. 定义的角色和职责:大多数人都想知道他们应该做什么,以及他们将如何被评估。
  9. 归属感:团队成员有归属感吗?把目标感与愿景结合起来。

重点是分享和互相依赖

高效的团队合作不是一个人们抛弃“自我”,仅是依附于团队获得支持和认同的依赖过程,在这个过程中,它也不是一个“我”是第一位的独立过程,高绩效团队是一个相互依赖的过程。

在高绩效协团队中,我们不会看到“指责”,或声称“这不是我的工作”。相互依赖的思维意味着从“这对我有什么好处?”到“这对我们有什么好处?”

reference:
https://mp.weixin.qq.com/s/eLI4vcBwi0Q96yRlzvN3BQ

阿里业务中台架构图

基础设施服务,即IAAS层,提供硬件底层支持。

基础服务层,即PAAS层,包括分布式服务框架、分布式数据库、分布式消息、分布式存储、分布式事务、实时监控服务等等。

互联网业务中台,包括各服务中心的抽象出来的各种业务能力,包括交易中心、支付中心、营销中心、结算中心、用户中心、账户中心等等。也包括非业务类服务,如日志分析中心、配置中心、序列中心、基础中心。

业务应用,经过调取业务中台,组装形成独立业务服务能力的业务应用,如网银、手机银行。

交易来源,就是前台用户使用的各个端,如淘宝App、PC站等。

通过阿里云平台将技术中台进行部署,对集团内共享业务单元提供支撑,并最终对前台各业务线提供服务化能力输出。

产品形态

从这张产品形态图上边我们可以看出来,阿里巴巴的开发者主要开发的是能力,然后构建内部的能力地图,这里的能力可以看作是一个原子服务。在接收新的需求后,将需求进行结构化,通过已有能力配置产生新的业务,组成业务列表和业务全景。最后给这个业务一个身份标识,进行业务度量。

全剧架构

业务开发生命周期、业务创新和智能化

能力地图下放到需求域,商业能力可沉淀。根据已有数据进行分析,持续进化。

数据中台架构

数据中台本质上是在原有的计算存储平台应用服务之间增加了一层统一数据服务中间件(OneService)

形成了统一全域数据体系,实现了计算存储累计过亿的成本降低、响应业务效率多倍提升、为业务快速创新提供坚实保障。

全域数据采集与引入:以需求为驱动,以数据多样性的全域思想为指导,采集与引入全业务、多终端、多形态的数据;

标准规范数据架构与研发:统一基础层、公共中间层、百花齐放应用层的数据分层架构模式,通过数据指标结构化规范化的方式实现指标口径统一;

连接与深度萃取数据价值:形成以业务核心对象为中心的连接和标签体系,深度萃取数据价值;

统一数据资产管理:构建元数据中心,通过资产分析、应用、优化、运营四方面对看清数据资产、降低数据管理成本、追踪数据价值。

统一主题式服务:通过构建服务元数据中心和数据服务查询引擎,面向业务统一数据出口与数据查询逻辑,屏蔽多数据源与多物理表;

极大的丰富和完善了阿里巴巴大数据中心,OneData、OneID、OneService渐趋成熟并成为上至CEO、下至一线员工共识的方法论体系。

阿里技术全栈全景图

阿里技术全栈包含:移动中台、业务中台、数据中台、基本中间件、基础设施、前台业务、后台业务。

移动中台,包括移动网关、开发套件&框架、消息推送、移动IM等等,提供了限流、负载、鉴权、消息推送、开发框架等等,使得移动端应用开发效率更高。

业务中台和数据中台,将业务、数据抽象和沉淀形成服务能力,对前台提供调用。

阿里技术平台底座

几百个业务应用,共享一个技术平台底座。

大中台、小前台

阿里巴巴集团在近期的组织结构调整中,组成由“小前台,大中台”互为协同的创新管理模式。
原阿里巴巴中国零售事业群总裁张建锋将担负起“中台”的重要工作,负责共享、数据、搜索,以及闲鱼、淘宝头条等创新孵化业务。

1、知识图谱系统的关键特性有哪些?

1.当然是可视化展示,知识图谱的魅力之一就是让人直观的看到多实体之间的关系,能用图标示的就不要哔哔

2.多种服务提供方式,有些服务使用方,不需要图,那么可能通过api或者批量文件的方式比较合适。所以从系统建设角度来看,最好能提供多样的服务对接方式,满足前端服务使用方的不同需要,发挥系统价值,是值得考虑的地方。

3.查询速度,在用户进行图操作,例如实体查询、关系推演扩展时,系统响应时间应该较低,避免大并发情况下用户体验的降低。

数据建模、批量时间相对来说,外界感知不到,因此不那么重要。

2、知识图谱适用场景有哪些?

主要涉及关系分析的场景,利用账户、自然人或者资金交易形成的关系来判定结果是否可用时,比如担保圈、分析实际控制人、实际受益人、识别冒名贷款。而且通常,数据分析的深度在3度到5度,才能体现出优势。

分析深度小于3度,与传统关系型数据库没有太大差别,大于5度有可能引入较多的噪音数据。当然不排除某些场景下分析5度以上数据的可能性。

3、有没有业务场景是只能用知识图谱实现的?而其他技术方法无法实现?

从技术角度考虑,应该没有,有的是效率孰高孰低、开发成本孰高孰低。

4、知识图谱应用时会面临哪些主要的困难,如何解决?

主要是确认需求,一方面是适不适合用知识图谱这个工具,另一方面做好与其他系统的对接工作,如何能将知识图谱这个服务以简便快捷的方式输出给其他系统。前者可以和多方面行内外专家交流,后者主要还是要与业务部门进行沟通,确认业务部门的期望,技术实现大多时候不是难点,难的是如何满足欲壑难填的需求。

5、知识图谱系统的建设核心是什么?该如何选型?

建设核心是图数据的存储和分析方法。不同的核心,外围使用的方法也不同。

以titan为例,它是集成在hadoop上的。数据的分析加工主要在使用sparksql和graphx,结果会存放在titan中,数量较多的明细流水会放在hbase中,常用的查询关键字,姓名、手机号码等会放在elasticsearch中,三者通过key相互关联。

如果换一种图数据库,比如neo4j,整个外围都会跟着调整。所以图数据库的选型不能进场图数据本身考虑,而应该结合整体规划,建设成本,多系统间的关联关系层面进行统筹考虑,甚至可能会为了大局牺牲一些效率。

6、图形数据库应该怎么选型?选的时候需要考虑哪些问题?

从系统自身考虑的话,包括高可靠性,读写效率、扩展性,与其他系统相同。

除此之外,还应该从整体规划和这个系统所处的位置进行考虑,为了满足整体规划,牺牲一些性能或者成本也是必要的。比如为了避免海量数据的多系统存储分析,就选用了以hadoop为基础的图数据库,这样所有的数据只需一份,可以供平台上的多个子系统进行使用。

7、为满足关键特性系统的架构或组件选择是怎样的?(主要针对hadoop架构)

1.可视化需要开发一个专门的知识图谱展示界面,将知识图谱中的实体、关系属性等以美观已操作的方式展示出来,因为颜值即正义。可以借用当前比较流行的bootstrap等前端开发语言。

2.为满足快速查询,可以将部分索引关键字放在索引es中,索引命中后在使用key去titian中查询。

3.多种服务方式,需要从设计时就进行考虑,至少满足三种api、可视化界面、批量文件。批量文件主要从hive中进行导出,而api接口则需要开发一个服务层,将所有图数据库的命令行操作转换为对应的api接口,轻量级的开发一个java服务放在tomcat中,有条件的可以使用微服务框架。

8、知识图谱的建设都有哪些重要的环节,需要注意什么?

从自身项目实施来看,有三个地方:

1.建模时多系统数据的融合,比如客户的信息存在多个系统中,核心、信贷、理财等,因为系统建设时间不一、多次升级等问题,导致数据不一致,数据质量较差,这样就需要花费很大精力去处理数据质量问题,还可能导致程序返工。

2.模型开发过中,选择哪些业务场景也很重要,知识图谱不是万金油,有些场景比较费力。应该选择那些跟关联关系分析相关的,有明确结果,业务人员能够明确正确与否的应用场景,便于展示这个工具的优越性。

3.交付前的测试也很重要。因为知识图谱基本上都是需要融合各个业务系统的数据,涉及面较广。因此要给测试过程留够时间,便于测试人员发现一些数据处理上的遗漏。

9、知识图谱与智能客服如何对接?

主要是通过API接口,在接入的同时系统自动调出客户当前的资产负债状况,最近的交易明细,购买产品的状况。在提问的时候,通过nlp系统解析问题中的关键字,识别询问的实体、关系等,找到关联的问题,引导客户按照提问已有的问题。使用知识图谱的好处在于,可以快速的查询出客户周边的所有数据。如果使用传统关系型数据库,则需要按照业务种类,逐个表进行查询,分模块展示。在图谱中则可以一起展示出来,因为是从客户出发按照关联关系进行查询的,并且可以用一张图进行直观的展示。

10、部署时需要满足怎样的性能要求,qps或tps?如果建设面向外部客户的大规模知识图谱,有哪些可以优化的方向?

性能的需求应该是与业务场景强相关的,如果是面向外部客户那就要考虑扩容节点提升整体性能,明细数据可以从hbase迁移到es中,加快查询速度,限制部分查询内容或者只能查看经过分析的子图。

对于行内系统,从数据安全角度来看,只有少部分人能看到所有数据,绝大多数人只能看到部分数据,而且应该是具有特定业务含义的数据,比如某个预警模型的结果。在这种情况下,权限范围内的数据量就很小了,那么在查询的过程中,效率也会相应提升,不会全表扫描。

11、有没有合适的企业级的分布式知识图谱技术架构?

横向涉猎不多,答错勿怪。

titian就是分布式的,因为它是基于hbase的。

Neo4j 好像就不支持,不像hbase这么简单就可以进行扩展。

12、知识图谱存储会不会引起数据膨胀?

图数据库本身不会,但是知识图谱这个系统会,一份数据至少存在于hive加工区和hbase查询区,还有少量的elasticsearch索引区。

13、关于实体、属性、关系的识别和存储?

大多数情况下实体关系属性都是比较明确的,因为知识图谱的建模是与现实世界相符的。

比如银行来说客户就是实体,姓名,身 份 证 号码,手机号都是属性。

关系相对稍微复杂一点,不过常见的关系也都比较明确,比如客户经理和贷款户,机构和对公客户,合同和借款人等等。

银行这边的实体基本上都是自然人、账号,机构,合同、押品等,关系就是实体之间的关系,比如账号和自然人的归属关系。

实体、关系和属性都是存在titan里的,交易明细存在hbase里。

14、脏数据的处理机制是什么?

知识图谱作为下游系统其实没有好的办法处理脏数据,基本上有两种策略:

第一:确定一个优先级,某个属性以哪个系统为准,当两个系统不一致时,不管对错永远以某个系统为准。

第二:前一种方法不适用的,就将这些数据打入“冷宫”,放到一张表里,定期拿出来,找原系统进行数据修正,这是一个比较漫长的过程。

不过好在,80%以上的数据是正常的,脏数据多数由于客户长期未发生业务,渠道无法强制客户更新数据。

15、如何解决外部数据源准确性?

我个人无法从根本上解决,因为我们只是数据的使用方,准确性是需要从产生的根源上解决的问题。

不过在使用的时候可以进行多数据源的交叉验证,来提高准确性,完全消除是难以实现的。

16、用知识图谱做传统的风控行业,局限性在哪里?利用大数据挖掘,除知识图谱外,还有哪些比较好的风控模型?

1.知识图谱是一种工具,是一种与关系型数据库相对的数据组织方式,有其擅长的领域,但不能手里拿着锤子,看哪里都是钉子。知识图谱也有不擅长的领域。

2.除大数据外,基于传统的关系型数据库开发一些机器学习或深度学习模型也可以做到风控。

原文链接:
https://mp.weixin.qq.com/s/kAxnYpW16fc-JvwhAA8onA

背景

假设你在开发一个服务端应用。该应用必须支持各种各样的客户端,包括桌面浏览器、手机浏览器和本地手机应用。应用可能也需要公开部分API供第三方使用,还可能与其他应用通过web service或消息代理(message broker)相集成。应用执行业务逻辑来处理请求(HTTP请求或者消息);访问数据库;与其他系统交换消息;并返回HTML/JSON/XML类型的响应。

应用或是多层架构或是六角架构,并且包含多种类型的组件:

  • 表示组件(Presentation components) - 响应处理HTTP请求,并返回HTML或JSON/XML(对于web service API)
  • 业务逻辑(Business logic) - 应用的业务逻辑
  • 数据库访问逻辑(Database access logic) - 数据访问对象用于访问数据库
  • 应用集成逻辑(Application integration logic) - 消息层,如基于Spring的集成

这些逻辑组件分别响应应用中不同的功能模块。

问题

应用的部署架构是什么?

动机

  • 该应用由一个开发者团队在维护
  • 团队新成员必须快速上手
  • 应用应该易于理解和修改
  • 你想对应用进行持续集成
  • 你必须在多台机器上部署多份应用的拷贝,以满足可伸缩性和可用性的要求
  • 你想使用新技术(框架、编程语言等)

解决方案

通过采用伸缩立方(Scale Cube)(特别是y轴方向上的伸缩)来架构应用,将应用按功能分解为一组相互协作的服务的集合。每个服务实现一组有限并相关的功能。比如,一个应用可能包含订单管理服务,客户管理服务等。

服务间通过HTTP/REST等同步协议或AMQP等异步协议进行通讯。

服务独立开发和部署。

每个服务为了与其他服务解耦,都有自己的数据库。必要时,数据库间的一致性通过数据库复制机制或应用级事件来维护。

举例

我们假设你在构建一个电子商务应用,应用从客户接收订单,验证库存和可用额度,并派送订单。应用包含多个组件,包括StoreFrontUI,用来实现用户接口,以及一些后台服务,用于检测信用额度、维护库存和派送订单。

应用作为一组服务部署。

结果

这个方案有一些好处:

  • 每个微服务都相对较小
    • 易于开发者理解
    • IDE反应更快,开发者更高效
    • web容器启动更快,开发者更高效,并提升了部署速度
  • 每个服务都可以独立部署 - 易于频繁部署新版本的服务
  • 易于伸缩开发组织结构。你可以对多个团队的开发工作进行组织。每个(双披萨[1])团队负责单个服务。每个团队可以独立于其他团队开发、部署和伸缩服务。
  • 提升故障隔离(fault isolation)。比如,如果一个服务存在内存泄露,那么只有该服务受影响,其他服务仍然可以处理请求。相比之下,一体架构的一个出错组件可以拖垮整个系统。
  • 每个服务可以单独开发和部署
  • 消除了任何对技术栈(technologh stack)的长期投入(long-term commitments)

这个方案也有一些缺点:

  • 开发者要处理分布式系统的额外复杂度。
    • 开发者工具/IDE是面向构建一体应用的,并没有显示提供对开发分布式应用的支持
    • 测试更加困难
    • 开发者需要实现服务间通信机制
    • 不使用分布式事务实现跨服务的用例更加困难
    • 实现跨服务的用例需要团队间的细致协作
  • 生产环境的部署复杂度。对于包含多种不同服务类型的系统,部署和管理的操作复杂度仍然存在。
  • 内存消耗增加。微服务架构使用NxM个服务实例来替代N个一体应用实例。如果每个服务运行在自己独立的JVM(或类似)上,通常有必要对实例进行隔离,对这么多运行的JVN,就有M倍的开销。另外,如果每个服务运行在独立的VM(如EC2实例),如Netflix,开销会更高。

挑战

什么时候使用微服务架构

使用该方法的一个挑战就是决定何时使用才合理。在开发应用的初期,你通常不会遇到这种方法试图解决的问题。而且,使用这个精细、分布式的架构将会拖慢开发进度。对初创公司,这是个严重问题,因为它们的最大挑战通常是如何快速发展业务模型及相关应用。使用Y轴切分使快速迭代更加困难。但是之后,当挑战变成如何伸缩,你需要使用功能分解将一体应用切分为一组服务时,混乱的依赖关系可能使之变得困难。

如何拆分应用到服务

另一个挑战是如何将系统分隔为微服务。这是个技术活,但有些策略可能有帮助。

  • 按业务能力分解,定义与业务能力对应的服务。
  • 按领域驱动设计的子域分解。
  • 按动词或用例分解并定义负责特定操作的服务。例如,负责装运完整订单的运输服务。
  • 通过定义负责对给定类型的实体/资源执行所有操作的服务,按名词或资源进行分解。例如,负责管理用户帐户的帐户服务。

理论上,每个服务应该只承担很小的职责。Bob Martin(大叔)讲过使用单一职责原则(SRP)来设计类。SRP定义类的职责作为变化的原因,而且类应该只有一个变化的原因。使用SRP来设计服务也是合理的。

另一个有助于服务设计的类比是Unix实用工具的设计方法。Unix提供大量的实用工具如grep、cat和find。每个工具只做一件事,通常做得非常好,并且可以跟其他工具使用shell脚本组合来执行复杂任务。

如何保持数据一致性

为了确保松耦合,每个服务都有自己的数据库。维护服务之间的数据一致性是一个挑战,因为对于许多应用程序来说,两阶段提交/分布式事务不是一个选项。应用程序必须使用SAGA模式。服务在其数据更改时发布事件。其他服务使用该事件并更新其数据。有几种可靠更新数据和发布事件的方法,包括事件源和事务日志跟踪。

如何实现查询

另一个挑战是实现需要检索多个服务拥有的数据的查询。

API组合和命令查询责任分离(CQR)模式。

相关模式

有许多与微服务模式相关的模式。单片架构是微服务架构的替代方案。其他模式解决了应用微服务体系结构时会遇到的问题。如API网关模式定义了客户端如何访问服务。

  • 分解模式
    • 按业务能力分解
    • 按子域分解
  • 每个服务模式的数据库描述了每个服务如何拥有自己的数据库,以确保松耦合。
  • API网关模式定义了客户机如何访问微服务体系结构中的服务。
  • 客户端发现和服务器端发现模式用于将客户端请求路由到微服务体系结构中的可用服务实例。
  • 消息传递和远程过程调用模式是两种不同的服务通信方式。
  • 每个主机的单个服务和每个主机的多个服务模式是两种不同的部署策略。
  • 交叉关注模式:微服务机箱模式和外部化配置
  • 测试模式:服务组件测试和服务集成契约测试
  • 断路器
  • 访问令牌
  • 可观测性模式:
    • 日志聚合
    • 应用程序度量
    • 审核日志记录
    • 分布式跟踪
    • 异常跟踪
    • 健康检查API
    • 记录部署和更改
  • 用户界面模式:
    • 服务器端页面片段组合
    • 客户端UI组成

著名案例

大多数大规模的web站点,如 Netflix, Amazon和eBay都从一体架构转变为微服务架构。

Netflix是个非常受欢迎的视频流服务提供商,占有多达30%的互联网流量,它有着大规模、基于服务的架构。他们每天处理800+不同类型设备超过10亿次视频流API的请求。每个API可以展开成平均6次对后端服务的调用。

Amazon.com原有个两层架构。为了伸缩,他们迁移到一个包含上百个后端服务的基于服务的架构。调用这些服务的应用中包括实现Amazon.com网站和web service API的应用。Amazon.com网站应用调用100-150个服务来获取数据用于构建网页。

拍卖网站ebay.com也从一体架构发展成基于服务的架构。应用层包含多个独立的应用。每个应用实现特定功能模块(如购买或销售)的业务逻辑。每个应用使用X轴的分隔,有些应用如搜索,使用Z轴分隔。Ebay.com也对数据库层采用X,Y,Z的组合伸缩方式。

译自:
https://microservices.io/patterns/microservices.html

背景

假设你在开发一个服务端应用。该应用必须支持各种各样的客户端,包括桌面浏览器、手机浏览器和本地手机应用。应用可能也需要公开部分API供第三方使用,还可能与其他应用通过web service或消息代理(message broker)相集成。应用执行业务逻辑来处理请求(HTTP请求或者消息);访问数据库;与其他系统交换消息;并返回HTML/JSON/XML类型的响应。

应用或是多层架构或是六角架构,并且包含多种类型的组件:

  • 表示组件(Presentation components) - 响应处理HTTP请求,并返回HTML或JSON/XML(对于web service API)
  • 业务逻辑(Business logic) - 应用的业务逻辑
  • 数据库访问逻辑(Database access logic) - 数据访问对象用于访问数据库
  • 应用集成逻辑(Application integration logic) - 消息层,如基于Spring的集成

这些逻辑组件分别响应应用中不同的功能模块。

问题

应用的部署架构是什么?

动机

  • 该应用由一个开发者团队在维护
  • 团队新成员必须快速上手
  • 应用应该易于理解和修改
  • 你想对应用进行持续集成
  • 你必须在多台机器上部署多份应用的拷贝,以满足可伸缩性和可用性的要求
  • 你想使用新技术(框架、编程语言等)

解决方案

使用一体化架构构建应用。如:

  • 单个Java WAR文件
  • 单个Rails或NodeJS目录结构

举例

我们假设你在构建一个电子商务应用,应用从客户接收订单,验证库存和可用额度,并派送订单。应用包含多个组件,包括StoreFrontUI,用来实现用户接口,以及一些后台服务,用于检测信用额度、维护库存和派送订单。

应用作为一体应用部署。例如,一个Java web应用运行在Tomcat之类web容器上,仅包含单个WAR文件;一个Rails应用使用Phusion Passenger部署在Apache/Nginx上,或者使用JRuby部署在Tomcat上,它们都仅包含单个目录结构。为了伸缩和提高可用性,你可以在一个负载均衡器下面运行该应用的多份实例。

结果

这个方案有一些好处:

  • 易于开发 - 当前开发工具和IDE的目标就是支持这种一体应用的开发
  • 易于部署 - 你只需要将WAR文件或目录结构放到合适的运行环境下
  • 易于伸缩 - 你只需要在负载均衡器下面运行应用的多份拷贝就可以伸缩

但是,一旦应用变大、团队增长,这种方法的缺点就愈加明显:

  • 巨大的一体代码库可能会吓到开发者,尤其是团队的新人。应用难于理解和修改。因此,开发速度通常会减缓。另外,由于没有模块硬边界,模块化也随时间而破坏。还有,因为难于理解如何实现变更,代码质量也随时间下降。这是个恶性循环!
  • 超载的IDE - 代码库越大,IDE越慢,开发者效率越低。
  • 超载的web容器 - 应用越大,容器启动时间越长。因此开发者大量的时间被浪费在等待容器启动上。这也会影响到部署。
  • 难于持续部署 - 对于频繁部署,巨大的一体应用也是个问题。为了更新一个组件,你必须重新部署整个应用。这还会中断后台任务(如Java应用的Quartz作业),不管变更是否影响到这些任务,此外还可能引发问题。未被更新的组件也可能因而不能正常启动。因此,鉴于重新部署的相关风险会增加,不鼓励频繁更新。这尤其对用户界面的开发者来说是个问题,因为他们通常需要快速迭代,频繁重新部署。
  • 难于伸缩应用 - 一体架构只能在一个维度伸缩。一方面,它可以通过运行多个拷贝来伸缩满足业务量的增加。某些云服务甚至可以动态地根据负载调整应用实例的数量。但是另一方面,该架构不能伸缩满足数据量的增加。每个应用实例都要访问全部数据,这使缓存低效,并且提升了内存占用和I/O流量。而且,不同的组件所需资源不同 - 有些可能是CPU密集型的,另一些可能是内存密集型的。一体架构下,我们不能独立伸缩各个组件。
  • 难于调整开发规模 - 一体应用对调整开发规模也是个障碍。一旦应用达到一定规模,将工程组织分成专注于特定功能模块的团队通常更有效。比如,我们可能需要UI团队,会计团队,库存团队等。一体应用的问题是它阻碍组织团队相互独立地工作。团队之间必须在开发进度和重新部署上进行协调。对团队来说也很难改变和更新产品。
  • 需要对一个技术栈长期投入 - 一体架构迫使你娶下开发初选择的技术栈(某些情况下,是那项技术的某个版本)。一体架构下,很难递增式地采用更新的技术。比如,想象下你选了JVM。除了Java你还可以选择其他使用JVM的语言,它们比如Groovy和Scala也可以与Java很好地进行互操作。但是一体架构下,非JVM语言写的组件就不行。而且,如果应用使用了后期过时的平台框架,将应用迁移到更新更好的框架上就很有挑战性。还有可能,为了采用新的平台框架,你要重写整个应用,这就太冒险了。

相关模式

微服务架构是解决一体化架构缺点的替代模式。

已知案例

著名的互联网服务,如Netflix, Amazon.com和eBay开始都使用一体架构。作者开发的大部分web应用也是一体架构的。

译自:
https://microservices.io/patterns/monolithic.html

前言:本来只想做一个“什么是微服务架构”,后来发现有许多基础的知识如果不做会很难看懂,因此把软件架构和常用的架构风格也一并讲了。大佬们的请直接移步第三部分。

软件架构

软件架构的定义

要理解微服务架构,首先要理解什么是软件架构。

计算机系统的软件架构是构建这个系统所需要的一组结构,包括软件元素、它们之间的关系以及两者的属性。————卡耐基梅隆大学 Len Bass

这句话,本质上就是在讲:应用程序的架构是将软件分解为元素(element),这些元素之间的关系(relation),以及这些元素自有的属性(property)。

软件架构的意义

应用程序有两个层面的需求。第一类是功能性需求,这些需求决定一个应用程序做什么。这些通常都包含在用例(use case)或者用户故事(user story)中。应用的架构其实跟这些功能性需求没什么关系。功能性需求可以通过任意的架构来实现,甚至是非常糟糕的大泥球架构。

架构的重要性在于,它帮助应用程序满足了第二类需求:非功能性需求。我们把这类需求也称之为质量属性需求,或者简称为“能力”。这些非功能性需求决定一个应用程序在运行时的质量,比如可扩展性和可靠性。它们也决定了开发阶段的质量,包括可维护性、可测试性、可扩展性和可部署性。为应用程序所选择的架构将决定这些质量属性。

也可以从以下几点来讲软件架构的意义:

  • 它促进了劳动和知识的分工。它使具有特定专业知识的人们(或多个团队)能够就应用程序高效地协同工作。
  • 它定义了软件元素的交互方式。
  • 将软件分解成元素以及定义这些元素之间的关系,决定了软件的能力。

软件架构的4+1视图模型

每个视图的目的如下:

逻辑视图:开发人员创建的软件元素。在面向对象的语言中,这些元素是类和包。它们之间的关系是类和包之间的关系,包括继承、关联和依赖。

实现视图:构建编译系统的输出。此视图由表示打包代码的模块和组件组成,组件是由一个或多个模块组成的可执行或可部署单元。在Java中,模块是JAR文件,组件通常是WAR文件或可执行JAR文件。它们之间的关系包括模块之间的依赖关系以及组件和模块之间的组合关系。

进程视图:运行时的组件。每个元素都是一个进程,进程之间的关系代表进程间通信。

部署视图:进程如何映射到机器。此视图中的元素由(物理或虚拟)计算机和进程组成。机器之间的关系代表网络。该视图还描述了进程和机器之间的关系。

除了这四个视图以外,4+1中的+1是指场景,它负责把视图串联在一起。每个场景负责描述在一个视图中的多个架构元素如何协作,以完成一个请求。例如,在逻辑视图中的场景,展现了类是如何协作的。同样,在进程视图中的场景,展现了进程是如何协作的。

常用的架构风格

架构风格的定义如下:

架构风格根据结构组织模式定义了一系列此类系统。更具体地说,架构风格确定可以在该风格的实例中使用的组件和连接器的词汇表,以及关于如何组合它们的一组约束。————David Garlan and Mary Shaw

特定的架构风格提供了有限的元素(组件)和关系(连接器),你可以从中定义应用程序架构的视图。应用程序通常使用多种架构风格的组合。例如,单体架构可以通过不同的风格通的实现视图构造为单个(可执行与可部署)组件的架构样式。微服务架构将应用程序构造为一组松散耦合的服务,也可以通过不同的风格进行表示。

分层式架构风格

架构的典型例子是分层架构。分层架构将软件元素按“层”的方式组织。每个层都有明确定义的职责。分层架构还限制了层之间的依赖关系。每一层只能依赖于紧邻其下方的层(如果严格分层)或其下面的任何层。

可以将分层架构应用于前面讨论的四个视图中的任何一个。流行的三层架构是应用于逻辑视图的分层架构。它将应用程序的类组织到以下层中:

  • 表现层:包含实现用户界面或外部API的代码。
  • 业务逻辑层:包含业务逻辑。
  • 数据持久化层:实现与数据库交互的逻辑。

分层架构是架构风格的一个很好的例子,但它确实有一些明显的弊端:

  • 单个表现层:它无法展现应用程序可能不仅仅由单个系统调用的事实。
  • 单一数据持久化层:它无法展现应用程序可能与多个数据库进行交互的事实。
  • 将业务逻辑层定义为依赖于数据持久化层:理论上,这样的依赖性会妨碍你在没有数据库的情况下测试业务逻辑。

此外,分层架构错误地表示了精心设计的应用程序中的依赖关系。业务逻辑通常定义数据访问方法的接口或接口库。数据持久化层则定义了实现存储库接口的DAO类。换句话说,依赖关系与分层架构所描述的相反。

六边形架构风格

六边形架构是分层架构风格的替代品。如图所示,六边形架构风格选择以业务逻辑为中心的方式组织逻辑视图。应用程序具有一个或多个入站适配器,而不是表示层,它通过调用业务逻辑来处理来自外部的请求。同样,应用程序具有一个或多个出站适配器,而不是数据持久化层,这些出站适配器由业务逻辑调用并调用外部应用程序。此架构的一个关键特性和优点是业务逻辑不依赖于适配器。相反,各种适配器都依赖业务逻辑。

业务逻辑具有一个或多个端口(port)。端口定义了一组操作,关于业务逻辑如何与外部交互。例如,在Java中,端口通常是Java接口。有两种端口:入站和出站端口。入站端口是业务逻辑公开的API,它使外部应用程序可以调用它。入站端口的一个实例是服务接口,它定义服务的公共方法。出站端口是业务逻辑调用外部系统的方式。出站端口的一个实例是存储库接口,它定义数据访问操作的集合。

业务逻辑的周围是适配器。与端口一样,有两种类型的适配器:入站和出站。入站适配器通过调用入站端口来处理来自外部世界的请求。入站适配器的一个实例是Spring MVC Controller,它实现一组REST接口(endpoint)或一组Web页面。另一个实例是订阅消息的消息代理客户端。多个入站适配器可以调用相同的入站端口。

出站适配器实现出站端口,并通过调用外部应用程序或服务处理来自业务逻辑的请求。出站适配器的一个实例是实现访问数据库的操作的数据访问对象(DAO)类。另一个实例是调用远程服务的代理类。出站适配器也可以发布事件。

六边形架构风格的一个重要好处是它将业务逻辑与适配器中包含的表示层和数据访问层的逻辑分离开来。业务逻辑不依赖于表示层逻辑或数据访问层逻辑。

由于这种分离,单独测试业务逻辑要容易得多。另一个好处是它更准确地反映了现代应用程序的架构。可以通过多个适配器调用业务逻辑,每个适配器实现特定的API或用户界面。业务逻辑还可以调用多个适配器,每个适配器调用不同的外部系统。六边形架构是描述微服务架构中每个服务的架构的好方法。

reference:
https://mp.weixin.qq.com/s/r9eKHhEKWo5TovFN87HtPw

自我认识

有人对自己工作进行抱怨时,经常会用到“不会做,不好做,不想做”这样的词语。然而“不会做”,“不好做”,“不想做”表达的是同样的含义么?这些表述背后又透露了什么信息呢?

为了帮助大家分析自己,美国著名心理学家麦克利兰提出了一个“冰山模型”,把一个人的素质要素分成了三类:

  1. 知识、技能
  2. 能力
  3. 价值观、性格特质、动机

知识、技能 能力 价值观、性格特质、动机
解释 通过学习和实践获得的可以使用在特定领域的认知、经验、技术,如学过的数学知识、写作修辞手法、office套件的使用方法等 可以在不同领域使用的通用能力,如学习能力、人际交往能力 判断事物的是非标准、行为偏好、成就动机、权利动机、亲和动机
和工作不匹配的表现 不会做,慌乱焦虑、无所适从 不好做,低效、无奈 不想做,矛盾纠结、没热情、心累

职业匹配

职业,本质上是关键业务的集合。看一个人和他的职业匹不匹配,就是看他是否需要、擅长、喜欢自己负责的业务。

可以通过下表来对自己和职业的匹配进行评估,只需要根据冰山模型填上自己的个人素质、自己目前需要什么(钱、社区、人脉等),再根据和每个业务的匹配关系给出1-5的评分即可。

个人素质 业务1的匹配分数 业务2的匹配分数 ...
喜欢 价值观
性格特质
动机
擅长 知识
技能
能力
需要 需要

职业调整

当我们对自己进行职业匹配之后,发现自己不喜欢、不擅长、不需要某一份工作的时候应该怎么办呢?

不喜欢

不喜欢是和一个人的根本挂钩的,很难靠改变自己来喜欢上某个工作或者业务,最好是对工作进行调整:

  1. 调整业务内容和目标(业务内调整)
  2. 更换负责的业务(岗位内调整)
  3. 请求更换岗位(公司内调整)
  4. 跳槽

不擅长

不擅长说白了是自己的知识储备不够、技术水平不过关、能力不足导致的。需要不是外界的调整,而是自我的提升。

不需要

不需要,本质上是这份工作不能满足你的某些需求。那么只需要分析其中的原因即可:

  1. 业务原因。这个业务不被重视,没有前景,可能会被砍掉
  2. 行业原因。行业普遍工资低/加班等
  3. 职业原因。某类岗位就是重复性机械劳动,难以接触新的事物
  4. 公司原因。这公司药丸

分析清楚了原因,就知道从哪里下手了。

内在提升

时间要投入到自我提升上,才会有工资的提升。自我提升有以下几种:

知识提升

提升自己的知识储备,不必每次都去搜索学习。

但是要注意,学了知识之后,如果可以灵活运营,则满腹经纶指点江山,否则就是读死书,浪费时间。

因此,要注意:

  1. 要学会提取知识的核心,掌握20%的核心知识。比如做ppt漂亮的核心就是饱和度、边框、行间距
  2. 知识和问题关联起来,学习知识的时候就要联系到它能解决什么问题
  3. 系统化训练,刻意使用刚刚学到的知识,不要快速遗忘

技能提升

技能的定价和天花板取决于其稀缺性。

某一技能可能在稀缺时期很值钱,但是随着供求关系发生变化,其市场价值依然会产生波动。

能力提升

技能熟练,只是一个好兵,能力强大,才能得到提升,成为将才。

能力提升可以跨行业跨职业,一旦积累到一定高度,换个公司、行业、职业一样可以吃的开,挣到钱。

提升自我、认识自我

提升自我:对事物有更加深刻的看法,有更加成熟的三观,锻炼自己的某种特质

认识自我:有自知之明,找到更加适合自己的环境和土壤

外在提升

外在提升主要就是提升自己周围的环境,物理环境和社会环境。

物理环境的提升可以通过搬家、打扫卫生等完成。

社会环境,主要由自己的人脉构成,扩展、优化自己的人脉,就是提升自己的社会环境的过程。

提升过程中需要注意以下几个误区:

  1. 皇冠综合症:只顾低头做事,等待伯乐发现自己,给自己戴上皇冠,这是不对的。要学会主动争取,树立个人品牌,展现自己的价值
  2. 名片囤积:人脉的构建不是基于名片的互换,而是基于价值的互换

人脉关系中存在以下几种角色,可以帮助你迅速定位自己:

  1. 节点:把大家连接在一起的人
  2. 专家:掌握信息、知识甚至是资源的人
  3. 明星:有强烈个人魅力的人
  4. 助理:在圈子里提供服务的人

持续成长

  1. 长远规划,给自己定好发展方向
  2. 提升能力,成为可迁移人才
  3. 提升认知高度,成为纵向深度人才,多思考:
    • 这个行业中的关键成功要素是什么
    • 行业的社会价值是什么
    • 部门、岗位、公司的核心价值是什么

在成长的几个阶段,需要注意:

  1. 起步期:靠自己
    • 思维方面,形成独立见解
    • 效率方面,学会多任务,能够高效处理工作,管理时间
    • 沟通方面,理解他人需求,条理清楚
    • 交际方面,懂得人际拓展方法
  2. 发展期:靠别人
    • 思维方面,掌握解决复杂问题、拆分工作的方法
    • 效率方面,懂得如何辅导和激励下属工作,不让自己累死
    • 沟通方面,掌握说服他人的技巧,懂得公开表达
    • 交际方面,能够处理团队内部或跨部门的冲突,进行高难度沟通
  3. 成熟期:靠影响力
    • 思维方面,要更加有高度,掌握战略思维、经济学思维等
    • 效率方面,掌握运营和财务的知识,更好的配置资源
    • 沟通方面,了解公司,知道如何向用户推销自己,营销思维
    • 交际方面,全面进阶的领导力

缘起

现在的年轻人大多更加讲究效率,对于为什么、怎么回事问的少了,只为了更加关注于事情本身,任何细节都不愿放过:即便要靠脑补来填充。而很多故事的有趣之处,其实也就是在缘起之处,这里是万事之始,这里种下了一切的因缘。

本人男,直博二年级在读,学校姑且叫Z大好了。博士毕业,无非三点:论文、论文、还有论文。第一个论文是SCI(主要是期刊论文),第二个论文是EI(主要是会议论文),第三个论文叫做“优秀的、有一定影响力的工作”。为了能够按时毕业,我投稿了专业领域的一个知名会议:E会。投稿的另一个原因是,E会2019年的会址在米兰,我还未曾去过。我的导师也未曾去过。

不幸的是,由于动机不纯导致文章灌水灌的有失水准,我的文章被reject。故事本应结束,导师却凌空一指:转投E会旗下的workshop。所谓workshop,可以看作一个会议旗下的子会,虽然没什么影响力,又对博士毕业、教授职称之类的没什么帮助,好在与E会共享会址和所有安排,于外可以交流学习、于内可以交差报销。于是,我的文章经过一轮大修,不出意外的中了一个workshop,H子会。

中了之后我的第一反应是:可惜了我的文章。第一次被拒我是认的,写的仓促,实在垃圾。大修之后我感觉这篇文章火候已经小成,只中一篇workshop,未免有些可惜了。

算了,为了米兰,算了。

准备

说来惭愧,从进入大学开始,便一直叫嚣要出国旅游一趟,却由于种种原因一直未能成行。

这句话我原本深信不疑,直到我真的要出国了,我才发觉其中的问题。种种原因其实只有一个:怂。没错,要出国了,要去意大利了,要去米兰了,我怂了。

有人说欧洲资本主义国家先进发达,吐槽国内保守落后,但是真的要出国了,才觉得国内真乃世外桃源。手机支付暂且不谈,主要是安全问题,意大利的治安在欧洲算是一般,但依然不安全。问起身边的人才知道,国内的两位老师日前去意大利访学,在街头被公然抢包;学生旅游,被偷包偷钱的更是不胜枚举。离别之时才想起家里的好,多年在外求学,如今终于要念起乡愁了。

再者就是意大利并不怎么说英语,主要还是讲意大利语。这就麻烦了,都说学好英国话,走遍天下都不怕,意大利与英国不远,语言却已然不同。好在我天赋异禀,出行一周前,只花了4天便入门了意大利语,又花了3天将其忘得一干二净。到了意大利,英语,真香。

为了这8天7夜的旅游交流学习,经过一通调查,我带了

  • 剃须刀
  • 两部手机及充电器:一部手机放国外的流量卡
  • 充电宝
  • 一个意标插口转换器
  • 国标插线板
  • 几套衣服
  • 拖鞋、牙刷牙膏护肤品:意大利很多酒店都不提供,最好还是自己带上
  • 护照、身份证+护照申请各项材料:入境的时候可能会看
  • 国外信用卡:大部分地方都是可以刷信用卡的
  • 400欧元:所有地方都收现金,不需要给小费

申请签证就不细讲了,意大利大使馆官网上有一个清单,照着准备就是。大学生可以不准备父母的关系证明,但是银行卡上要存个2、3万,让签证官相信你有钱回来。