企业IT架构转型之道

企业IT架构转型之道

2018-6-23 张子阳 推荐: 3 难度: 4

近期公司在做一些后台架构方面的改造,例如对数据中心,数据采集/传输/清洗/存储方面的优化,因此,我想有必要了解一些其他公司是如何做系统架构和转型的,于是购买了这本书。通读完以后,对阿里的中台架构有一个鸟瞰式的了解,也了解到了其中的庞大和复杂。这样的系统规模,对于大多数公司都是难以实现的,既难以开发也难以维护,毕竟很少有公司达到阿里这样的量级(不管是面对的客户访问量还是技术人员的数量)。但是,从这本书中,至少看到了架构的一些演化过程、可能遇到的问题、可选的解决方案。这样,在公司逐步发展时遇到类似问题时,至少有一个解决问题的方向,然后按这个方向再去寻找具体的解决办法。

下面是书中讲到的一些对我有所启发的知识点:

共享事业部

这本书主要讲“中台战略思想与架构”,那么什么是中台?在这本书中,中台的概念主要是指“共享服务”,负责的部门是一个独立的事业部:共享业务事业部。这个事业部主要包含的几大部分有:用户中心、商品中心、交易中心、评价中心、店铺中心、搜索中心、营销中心等。它的上游,是天猫、淘宝、1688、阿里去啊、菜鸟物流等前端业务部;下游,是阿里云平台,包括弹性计算服务、关系型数据库服务、消息队列服务、开放存储服务、开放缓存服务等IT基础设施。

企业项目架构的演化

  1. 传统的“烟囱式”的架构方式,项目林立,各自拥有孤立的数据,彼此之间数据打通和同步耗时费力。
  2. 采用SOA的架构方式,各个项目和系统通过ESB(企业服务总线)进行消息通信。
  3. 去中心化的微服务架构,各个服务彼此独立和自治,服务之间直接调用。

怎么叫懂业务?

当说到开发人员“不懂业务”时,开发人员往往会说:系统都是我们开发的,具体流程、操作、数据模型方面,甚至比业务部门更懂。而实际上所谓的懂业务,应当是指:能对业务的下一步发展有自己的理解和看法,对业务流程如何进一步优化能更好地提升业务有独到的见解,甚至对企业现有的业务提出创新的想法,为企业带来新的增长点。

集群雪崩

假设有一个5台服务器的集群,负载都达到了80%;此时如果1台故障,那么其余4台负载都将达到100%,这样其余4台也变得不稳定,此时如果1台挂掉,就会引发雪崩效应:其他三台负载(133%)全部挂掉。当集群因为不堪重负挂掉之后,此时又会面临一个重启的难题:除非5台同时启动,否则,当1台先启动时,就会立即因为过载而挂掉。因此,就需要先关闭前端的网关,待集群中的服务器全部启动后再打开。

异构索引表

当数据量很大时,通常都会进行分库分表,比如说企业中常见的订单表。常见的订单表包含下面的字段:

订单号,卖家Id,买家Id,订单金额,下单时间。

常见的一种分表方式,就是对单号哈希后取模,例如分8张表,则对单号除以8,根据余数存到对应的表中。这种方式在对单号查询时异常迅速,因为只要根据单号得到要查询的分区表,然后去分表中查询就可以了。

但是,对于其余几种常见的查询,却要进行全表扫描。例如,查询某位买家、某位卖家,或者某个时间段内的订单。此时,可以通过构建一个冗余的异构索引表来完成。例如,建这样下面一张表:

买家Id,订单号

然后再根据买家Id进行哈希后取模进行分表。这样当需要查询某个买家的订单时,则分为了三个步骤:1、先根据买家Id,到异构索引表的分表中取得订单号;2、根据订单号,到主表的分表中取数据;3、将查询的订单结果进行聚合返回给调用者。

分布式事务

CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

实现的机制是拥有一个中心的事务协调服务。假设有一次客户端的请求,需要依次调用两个服务A、B,这两个服务分别修改各自数据库中的表 X,Y。

  1. 在调用服务A,执行对表X的操作前,解析 Insert/Update/Delete语句,将要修改的记录保存一份,标记为Undo,用于将来回滚。
  2. 执行实际的SQL语句,执行完成后,将修改后的记录保存一份,记为Redo。作为回滚前的校验(可能存在其他线程在回滚前将数据修改了,此时记录值将会与保存的Redo记录不一致)。
  3. 调用服务B,如果服务B执行成功,则删除 Redo/Undo 记录;如果服务B执行失败,则对服务A进行回滚。

回滚的步骤为:

  1. 对比Redo与当前记录是否一致,如果一致,则使用Undo日志进行回滚。
  2. 如果不一致,说明数据被其他线程更改了,此时无法自动回滚,应该抛出异常(或者发出提醒),需要人工干预。

服务调用路径和记录

设想一下,当一次请求调用了数十个微服务时,排错和调试将会是非常困难的一件事情。因此,需要一个统一的方法,来记录服务的调用链路(通过唯一的TraceId)。

类似于高速公路,几点几分到达了哪个收费站,交了多少费用(行驶了多少里程)。对于微服务而言,则是几点几分调用了哪个服务,上一个服务执行了多长时间。与高速公路不同的时,服务还有有个“并行度”的概念,即几个服务同时执行。

这个很类似于当我们使用Chrome浏览器时,按下F12键时,看到的资源加载的顺序、并行度和调用时长。

Chrome浏览器查看资源加载的顺序、并行度和时长

阿里有一个鹰眼系统专门进行这件事,但是我们公司暂时还没有实现,以后如果全面微服务话,这样的基础组件也是必不可少的。

服务能力输出

书中的最后介绍了两个案例,即阿里的技术能力输出,帮助大型企业进行互联网技术的转型。实际上,阿里云已经是阿里进行技术输出的一个典型了。之前这些技术都是阿里内部使用,最终成熟稳定后,开始向外部输出。对于企业来说,减少了运维的工作,对阿里来说,创造了新的业务点,可以说是双赢的。

对于普通规模的公司而言,虽然不一定像阿里那样输出IT基础设施服务(云服务、数据库、缓存等),但是却可以将一些业务服务打包起来,向下游或者同业的小型公司输出,提升其开发效率和稳定性,做得好的话也是双赢的。

感谢阅读,希望这篇文章能给你带来帮助!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据科学与人工智能

【数据】常用API接口汇总

下面列举了100多个国内常用API接口,并按照 笔记、出行、词典、电商、地图、电影、即时通讯、开发者网站、快递查询、旅游、社交、视频、天气、团队协作、图片与图像...

7.8K110
来自专栏架构师小秘圈

分库分表架构实践

作者介绍: 丁浪,现就职于某垂直电商平台,担任技术架构师。关注高并发、高可用的架构设计,对系统服务化、分库分表、性能调优等方面有深入研究和丰富实践经验。热衷于技...

77640
来自专栏芋道源码1024

端游、手游服务端常用的架构是什么样的?

因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:

44320
来自专栏Golang语言社区

手游页游和端游的服务端的架构与区别

类型1:卡牌、跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使...

645110
来自专栏IT派

【大数据分析必备】超全国内常用API接口汇总

下面列举了100多个国内常用API接口,并按照 笔记、出行、词典、电商、地图、电影、即时通讯、开发者网站、快递查询、旅游、社交、视频、天气、团队协作、图片与图像...

3.3K10
来自专栏PPV课数据科学社区

案例 | 看斗鱼TV如何玩转大数据

自我介绍 我是吴瑞诚,现在负责斗鱼数据平台部,今天给大家分享一下斗鱼大数据这块的玩法。我先做个自我介绍,我是11年初华科通信硕士毕业就进入淘宝,主要做HBase...

59760
来自专栏FreeBuf

价值3133.7美金的谷歌(Google)存储型XSS漏洞

在漏洞挖掘领域,不谈赏金和其它功利的东西,如果能发现谷歌公司的漏洞或进入其名人堂致谢榜,就已经非常不错的了。今天我要分享的这个漏洞,是迄今为止我上报漏洞中最简单...

15440
来自专栏互联网数据官iCDO

【基础知识】现在很火的app上的deeplink技术,到底是什么?

主编前言: Deeplink,简单讲,就是你在手机上点击一个链接之后,可以直接链接到app内部的某个页面,而不是app正常打开时显示的首页。不似web,一个链接...

4.5K70
来自专栏章鱼的慢慢技术路

做游戏服务器端开发时的一些收获与总结

在此我的想法是在LeetCode上刷标签为哈希表(hashtable)、排序(sort)和搜索(search)的题型,同时还可以在HankerRank和Leet...

16010
来自专栏瓜大三哥

MIG例化技巧

Unbuffered DIMM,定位于桌面市场,指地址和控制信号没有经过缓冲器,没有做任何时序调整(缓冲器延迟是有的),直接到达DIMM上的RAM芯片。而Reg...

12650

扫码关注云+社区

领取腾讯云代金券