公司内做的一个简单的分享,文章内容是我根据自己讲的还有录音又手撸了一遍,累,口语化的做简单修改。

今天给大家分享一下关于架构和中台的一些东西。

主要会介绍一下中台的来源,这个大家可能都比较清楚,网上的文章和视频啊一大堆。

还有就是关于架构的发展过程不得不在中间说明一下,由此引申出来中台的诞生。

最后会就关于交易中台和金融中台做一个介绍,因为我最近两年在其他公司做的一个是交易中台,还有一个就是金融中台相关的业务。

中台由来

首先,来看一下中台的由来。

中台的来源主要是阿里,他们在15年拜访在芬兰的一家游戏公司,也就是SuperCell。

这家公司非常牛逼,号称是世界上最成功的的移动游戏公司,做出的游戏也非常有名,肯定很多人也玩过。

比如部落战争、海岛奇兵等等。

我也玩过一下他们的那个游戏,不过觉得没啥意思。

这家公司的规模只有不到200人,公司的开发模式通常都会由2-7个人的小团队进行开发,这个在他们内部叫做cell,这也是他们公司名字的由来。

开发过程通常是团队内部决定,然后用最快的时间开发出测试版本,如果受欢迎就继续干,否则的话就迅速放弃。

产品失败之后,不光不会受到惩罚,他们还会搞个party来庆祝,庆祝自己学到了新的东西。

不过我觉得挺奇葩的,要是都按照他们这个模式来,早期腾讯、阿里这些大公司都该死绝了。

我们都知道,腾讯早期的时候想卖100万都没人要,马总实在没辙才只能硬着头皮继续做下去。

但是,就是这样一家小公司,2015年的净利润达到了15亿美元,而且在2016年的时候被腾讯86亿美元收购。

这些都不是重点哈,重点我们今天要讲的是他们的开发模式,为什么能快速开发一个新游戏出来?

本来在我们想象中,开发一个新的游戏是一个很耗费时间精力的东西,几周开发一个还不错的游戏应该是很有难度的事情。

重点就在于他们的”中台“,也是他们多年游戏沉淀下来的东西。

他们在前面的很多年时间里对通用的游戏素材、算法等等做了很多沉淀。

这也就是后面阿里之后大力搞的中台了。

聊聊架构

讲完中台的来历,在将中台之前,我们还是要先说说架构的发展过程。

单体架构的时代

在我刚刚上班的时候,大概是11年、12年基本上我接触到的项目都是这个样子。

一个团队的所有东西都在一块,什么用户注册登录、支付啊、订单都在一起,经常是改一个小东西一个大项目都要跟着发布。

一般单体的架构都是单进程的,这也是针对我们现在的微服务来说的,就是打个jar包或者war包上传就完事儿了,所有模块都在一个进程里,如果要升级或者重启,那整个应用服务都要重启。

当然了,简单的项目划分模块分层还是有的,比如我们那时候常用的MVC模式。

简单是很简单,但是同样缺点也是很明显的。

第一点就是团队协同合作的成本高,如果说小公司没几个人还好,一旦业务快速发展起来,代码量感人,刚开始上班那会儿我的电脑经常就只能跑的动一个项目,不过好像也没有别的项目了。

经常改一个简单的东西可能到处是冲突,更不要说一个大服务的发版问题。

第二点,项目太复杂了,什么东西都是大杂烩,全在里面。

第三点,数据库连接的问题,一个服务太大了,就一个数据库的集群,业务越来越多,服务器越来越多,到后面单机可能只搞个个位数的连接都要不够用了。

所以,一般伴随拆分服务,数据库也会做拆分,独立的服务拥有独立的数据库。

最后一点,拓展性的问题,所有的功能都在一个服务里,可能实际情况是某几个功能模块负载非常高,比如订单或者库存的服务,频繁的读写,这时候想要扩展很难搞。

更严重的问题就是,如果一个模块出了问题,整个应用都不能用了。

这时候没有办法了,只能拆分。

因此就到了我们第二个架构模式,SOA的时代。

SOA(Service-Oriented Architecture)

我在饿了么工作那会儿,里面就有一大堆的SOA的称呼,并且一直都是。

SOA是什么意思呢,全名是这个Service-Oriented Architecture,意思就是面向服务的架构,基本上和我们现在的微服务差不多一样。

SOA的核心在于:松耦合和服务重用,当单体架构出现瓶颈的时候,首先想到的都是拆,SOA时代的话,其实也已经就有了服务注册发现、服务治理这些概念了,和微服务可以说从认知上没有任何区别。

SOA其实有两种模式,一种是中心化,一种是去中心化,下图中表示的就是中心化的服务调用方式。

服务调用之间都通过ESB服务总线,调用方之间屏蔽了接口的修改,ESB要做服务请求路由、数据格式转换,各种HTTP SOCKET适配和接入,所有脏活累活都归他干了。

这样很明显的看出来问题了。

第一个就是请求,同样的请求次数是通常去中心化的2倍,本来A调用B,现在要通过ESB。

第二个是肉眼可见的问题,这个ESB的压力会非常大,可以通过集群解决,但是ESB的性能瓶颈会导致所有服务的瓶颈。

但是,这个模式在当初非常受欢迎,主要原因是什么呢?

就是烟囱式架构引发出来的问题。

烟囱式架构是什么?

就像这张图描述的,你有好几个业务,因为时间或者说团队、公司各种原因,搞成了好几套独立的服务,开发和运维都没啥关系,大多数公司之前的发展过程中都会存在这样的问题。

比如我之前的公司先做酒店业务、然后又有外卖、还有餐饮店、还要卖咖啡。

如果说来一个业务就重头搞一套用户体系、订单体系、库存体系,最终的结果就是像矗立起来的一个个烟囱,也就是烟囱式架构。

烟囱的现象很普遍,大家各玩各的,先把业务跑起来再说,但是缺陷有很多。

首先,重复建设开发,不用说都能看出来,每次重头搞一套,不说开发成本,就说服务器和运维成本都够头疼的。

第二点,就是系统之间交互协作成本直线上升,业务发展了,可能要做一些精确营销活动,设计用户画像,对数据分析之类的啦,这都很正常。

哦豁,这时候你发现用户在好几个系统里,这个交互打通的成本就太高了。

要做个数据统计,还要调好几个系统接口,可能数据结构还不一样,搞都搞死你。

还有就是业务沉淀和发展,这也是后面要说的中台了。

难道这些系统之间就没有通用的能抽象的能力可以共用吗?

这也就是中台的发展的方向,抽象、沉淀和共用。

微服务架构

最后就是说到我们的微服务时代了,这个大家都很熟悉,不需要说太多东西。

至于现在还有Serverless、云原生什么低代码这里就不展开了,等后面的话有机会再说。

回到微服务的话题,微服务和SOA有什么区别。

个人认为其实很接近,微服务就是更加自由和更细粒度的SOA。

微服务没有那么多框架约束,我们想用啥用啥,虽然在SOA也可以实现,比如通信我们可以用Dubbo,可以用Feign,Thrift,GRPC,想用啥用啥。

举个例子用 spring cloud 来说,eureka可以帮我们做服务注册和发现,打个@enableEurekaClient就可以成为客户端连接到Eureka了。

路由直接用zuul,限流熔断用hystrix,负载均衡用ribbon,远程调用用feign。

非常方便,当然还可以选择用Spring Cloud Alibaba,这个我认为可能会是将来一段时间的趋势,更新维护的非常勤快。

Dubbo Nacos Sentinel这一套整起来明显更符合国内的使用习惯。

服务共享

说完架构的发展,可以回到我们之前的中台话题。

那其实中台的作用已经不言而喻了,就是共享。

以现在比较主流的一些电商来说,几个共享服务中心的划分。

首先用户中心必不可少,用户是基础服务,用户中心集成用户通用的能力,包括注册登录,SSO单点登录,还要和大数据配合用户打标签,用户画像等。

营销中心这个也很重要,包含各种优惠活动、优惠券、红包、卡券、积分、会员等级、返佣之类的和营销相关的东西。

交易中心处理用户下订单,如果下单有返佣,积分之类的话,这个叫做履约,后面再说,关于交易中台是我后面要说的。

支付中心负责支付,退款,三方支付、银行对接、预算管控等等。

数据中心,这个其实和业务中台是两块方向,今天我要说的都是业务中台,针对业务系统的沉淀和共享,数据中台则是更偏向大数据方向的,不在这里赘述。

最底层服务是我们的基础设施和中间件的能力,比如数据库、消息服务Kafka、Rabbitmq、数仓、文件系统。

这张图画出来好像除了中台和前台没别的东西了,并不是这样,我只是想表达说共享服务是作为支撑上层业务的核心,下层还有后台的服务并没有画出来而已,也就是顺应着大中台、小前台的架构来说。

服务拆分

讲到这个服务抽象和共享就顺便说说服务拆分的原则,这个说法太多了,见仁见智,更多的是遵循原有的一些经验去做处理。

总的来说,现在我们主流的拆分都是根据业务角度去拆分。

高内聚、低耦合,这个没啥说的,所有的服务都应该遵循这个原则,否则你要拆那就是瞎几把拆。

高内聚说的是比如交易中台,只围绕交易相关的、依赖性非常高的进行拆分。

低耦合则是说不同的服务,业务之间要隔离,不要耦合在一起,但是这个得有过程。

举个例子来说一开始的业务没什么人,用户地址这些信息就放在用户的服务里,好像也没什么问题。

随着业务的发展,这个地址信息和物流的服务好像关联越来越大,是不是就可以拆到物流服务里。

所以,这个要用发展的眼光去看待问题,不能一刀切。

回头去个小公司,别人就几万用户,几个程序员,就一个服务,你非要干微服务,拆几十个服务出来,这就不对是不是。

数据完整性

其实也类似,业务相关数据一定要完整,比如你做拆分,拆分完了之后用户名字拆到别的系统里去了,那就不太合理了。

持续迭代

也就是说要可持续性地做架构升级的调整和拆分,这个还是要跟着业务的发展走,不能一下拆的太细,也不能一下子太粗。。

你能明白我的意思吧,我没有在开车。。

交易中台

说了好久,总算说到交易中台了,我之前干交易中台干了差不多两年时间,自认为还算比较了解,除了一些东西没有实现之外,由于公司发展和时间的关系。

交易中台上面也提到过,主要就是从用户看到商品,然后到订单确认页,最后下订单,支付,配送,签收,这样一个整个过程都是交易中台在做的事情。

交易的定义就是买卖双方对有价物品和服务进行互通有无的行为,可以是以货币为交易媒介的过程,也可以是以物易物。

而交易过程,现在一般都是分为订约和履约两个,这基本是所有的交易中台的规则了。

某某在什么时间做了什么事情,这是订约。

举个例子来说,买方给卖方提供了有价物品,比如钱,卖方需要给买方提供服务。

而履约的则是某某在约定的时间完成约定的事情,比如交付货币、物品或者服务。

整个流程大致就是这个样子,当然一般我们都会分为正向和逆向两个方向去处理,正向完成交易的过程,逆向你可以理解为取消、退款这个环节。

既然是中台,那么就要能适应各类的交易场景。

比如酒店行业你去预订房间,这是正向交易,最后你去入住、离店,这是你履约的过程。

供应链要采购,然后商家会发货,最后你签收,这也是订约和履约的过程。

点外卖也是同样的道理。

这些所有的场景,那么我们都可以用通用的流程来归纳起来,就是上面提到的通用的交易流程。

抽象的概念说完了,需要再形象一点的来描述一下。

上面我们说到了一些现在比较常见的服务拆分和服务的划分,下面根据实际场景看看我们服务到底是怎么划分的。

这张图是美团的订单确认页,一般也叫做提单页。图太长,我拆分为3个小图来描述。

可以一起来分析一下这个页面应该由哪些服务来构成,由谁来聚合这么多服务的接口?

首先地址信息上面也提到过了, 这个由用户服务或者说是物流服务来提供比较合适。

那配送时间这方面就应该由物流的算法来提供,他们会根据运力、天气、骑手一堆信息来计算一个比较合理的送达时间。

中间这一部分商品的详细信息肯定由商品服务来提供。

至于配送费啊、各种补贴、红包优惠券是不是该由营销来提供,这里其实会很复杂, 因为要计算各种条件的价格,计算出最终应该支付的金额,这个一般我们会由价格服务来输出。

最下面这一部分叫做搭售,可以在下单的同时去购买会员,这个其实就相当于下了两个订单,一单是外卖单,另外一个订单就是搭售订单,购买会员的订单,最终两个订单合并支付,保持最终一致性就行了,下单成功,同时会员购买成功。

最终下单成功之后发送消息,物流团队根据消息去履约配送,营销根据下单消息该送积分、送红包就怎么送,另外如果有搭售会员的话,还需要进行会员升级,这也是属于履约的一部分。

这个地方还有两个挺有意思的点。

第一个是扣库存的问题,应该是下单成功扣库存,还是支付成功扣库存(不用太考虑保存订单和扣库存分布式事务的问题,这个会保证最终一致性)。

一般所有的业务都会下单就扣库存,但是这样会有一个问题。

之前我们做活动,会把很多房间拿出来做优惠活动,单价就会便宜,但是库存有限,这个叫做尾房甩卖。

很多黄牛就先去下单把库存占住,然后再卖给用户,马上取消订单,帮用户下单。

所以我们之前有两种模式,针对这种类型的特殊情况会支付成功后才扣库存,普通模式像电商外卖一般没这种问题,都是下单就扣。

还有一个就是这个券的问题,不知道大家发现了没有,买了会员送券,可以立刻使用,下面还标注了,本单可用。

你肯定能想到这个问题,一般我们是券发给用户了才能用,这里下单成功后发消息->履约->发券,这个券都还没有怎么提前用。

这又是一个交易系统里比较常见的,早两年应该是没有这个玩法的,也算是一个优化,一般会叫做虚拟券。

下单的时候去核销优惠券,一般会给营销传一个特殊的标记和参数,营销根据这个判断做特殊的处理,至于具体的逻辑,我也不是很清楚,搞的挺复杂的就是了。

再结合全景图看一下就清晰了和架构图看一下就清晰多了。

<<< 左右滑动见更多 >>>

金融中台

金融中台不够纯粹,与其说是中台,不如说是事业部更合适一点,一般现在国内很多公司的金融中台基本都逃脱不了这几块的内容,很多都非常类似,就是根据不同的业务有点出入而已。

支付是整个金融中台的核心,跳转的统一收银台又是支付的核心。

清结算也很核心,非常重要,这个我也干过一段时间,预算,活动、券这是营销的角度,预算则是财务金融的角度。

一般创建活动的时候一定要申请预算,活动创建设置库存数量,同时申请财务预算,一般情况都是1:1,创建成功不可以修改,库存可以临时改,但是预算改不了,除非重新申请。

金融中台自己领会好吧。

去中台化

这一段我不能放,涉及到一些公司隐私的东西,但是可以聊聊其他的。

比如开发流程,就我经历过的,中台这种部门一旦起来了,很容易一家独大,话语权太强,并且对于稳定性的要求太高,一定程度上阻碍了业务的开发。

其次对于业务的支撑和快速发展,其实可能没有想象中的那么好,经历过的大家应该也都会有体会的。

再者,中台这种产品必然涉及了太多的政治层面的博弈,我觉得SuperCell那种小公司玩得转确实可以,但是体量太大的公司玩的好挺难的,那体量不大的公司又没有太大必要搞什么鬼中台,你又不是啥游戏公司对不对,毕竟还是互联网公司为主,做业务开发为主。

好了,言尽于此吧,大家88,我是艾小仙,我们下期见,最近会不间歇性的保持周更的节奏,阅读掉的有点狠,大家加把劲帮忙点赞转发一些,感激不尽。

文章内容参考的书是凤凰架构,邹老师写的,没有买实体书的同学可以看看电子版的:http://icyfenix.cn/introduction/about-me.html

另外一些是之前公司内部的PPT我修改的,还有一些记录的是参考的好像阿里的一本啥书,之前看过记录的一点东西,现在有点记不起来了。

公司内部做的一个分享,有缘人可见相关推荐

  1. 自己做了一个分享网盘资源的网站

    最近自己做了一个分享网盘资源赚钱的论坛,论坛的使用方法很简单,把您手头有的资源上传至网盘后,在本论坛发布资源内容介绍,留下地址链接即可.资源可免费送,可收费卖.资源价格自己根据资源的质量定.赚得的金币 ...

  2. 软件开发公司怎么做网络推广

    如今科技发展的越来越好,我们的生活也离不开互联网,因此各大软件公司开始注重网络推广,那么我们今天来分享一下软件开发公司怎么做网络推广,希望能对你们有所帮助. 要想把自己的企业宣传推广出去可以从以下5个 ...

  3. 关于建立公司内部交流分享活动的一点尝试

    如今的世界变化太多,而一个人的精力和时间总是有限,可是如何快速地提升自己或者整个团队水平是一个亟待解决的问题.在公司内部开展定期地交流活动,一直是我十分想做的事情,最近在公司的大力支持下的终于得以实现 ...

  4. 我在公司内部的分享(秒针系统)

    我在公司内部,Team.小组.邮件 进行了一些分享. 做个列表,纪念下,鼓励下. 1.Excel2HtmlTable 如何将Excel表格转换成Html格式的表格 2.工作中遇到的问题 挑选了最近遇到 ...

  5. (简单课设)前端小白刚做的一个简单的移动端项目的分享和总结

    前端小白刚做的一个简单的移动端项目的分享和总结 所用技术为简单的div+css 直接上图片 代码部分 小滴服务 接下来是企业项目部分 接下来是我的小滴部分 (另外两个部分内容非常简单,没必要粘贴代码了 ...

  6. 永远做一个有计划的人

    http://www.cnblogs.com/hnrainll/archive/2010/12/28/1918848.html#3129909 大部分的人都高估了1年内所能完成的事,而低估了10年之中 ...

  7. 公司要做一个新网站,赶上编程语言在摆地摊

    点击上方蓝色小字,关注"涛哥聊Python"重磅干货,第一时间送达来源:编程技术宇宙 困难年年有,今年特别多. 公司要做一个新的网站,可预算有限,听说为了生计,各大编程语言们都摆起 ...

  8. 【东营seo诊断公司】SEO优化经验分享 如何成为一个合格的SEOer?

    [东营seo诊断公司]SEO优化经验分享 如何成为一个合格的SEOer? 在优化网站的关键词排名,也就是进行SEO工作时,很多时候都要求SEO优化人员对很多细节进行把控并且对很多数据进行分析.只有这样 ...

  9. 关于小报童的源起:人们更愿意追随一个活生生的人,而非一个公司。

    People follow people, not companies.  人们更愿意追随一个活生生的人,而非一个公司 1. 2020 年夏,上海,上生新所. 彼时茑屋书店还未开门,我和 Lighto ...

最新文章

  1. TensorFlow+TVM优化NMT神经机器翻译
  2. 科技奥运再进一步,北京冬奥组委携手阿里云启动“云上转播”
  3. OpenStack Nova 高性能虚拟机之 NUMA 架构亲和
  4. A Guide to Python's Magic Methods
  5. 从1到n整数中1出现的次数
  6. 计算机成绩表用函数怎么做,题用Excel函数以计算机成绩为依据计算出等次,怎么用函数IF 设定三个分类,如》90 为优秀 79~89为良好其余合格...
  7. Apache Kafka - Schema Registry
  8. UGUI组件之Canvas 组件简单笔记
  9. Jenkins插件之Deploy
  10. 【土地评价与土地管理】教案 第一章:土地评价要素的选择
  11. Oracle RAC Failover机制分析
  12. mmd动作:Bad End Night
  13. Your build settings specify a provisioning profile with the UUID, no provisioni(没多大用)
  14. 小荷才露尖尖角之struts的秘密
  15. BZOJ1776: [Usaco2010 Hol]cowpol 奶牛政坛
  16. 读书笔记《能力陷阱》第四章:试着朝更多不同的方向发展自己
  17. 【电力系统】经济调度、最优潮流、机组组合
  18. 在OpenCV里使用光流算法
  19. Python爬虫入门到实战
  20. LambdaMart

热门文章

  1. 大话Java堆的分区Eden、From Survivor、To Survivor、老年代
  2. win2016 php mysql_Windows Server 2016 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程 | 系统运维...
  3. Snips Voice Platform: an embedded Spoken Language Understanding system for private-by-design voice i
  4. http://www.cnblogs.com/skyme/archive/2011/10/26/2223984.html
  5. 每一个不曾起舞的日子,都是对生命的辜负
  6. Footprint周报:动荡的周末,BTC跌破5万美金,数字货币全线下跌
  7. 前端解决跨域问题(9个方法)
  8. 计算机电源多低无法使用吗,电脑电源供电不足会怎么样 电脑电源供电不足坏处介绍【详解】...
  9. HTML如何添加重置标签,HTML CSS标签类型转换、样式重置 、前段规范的详细介绍...
  10. html制作月亮,HTML5/CSS3美丽的超级月亮