低成本,高颜值建站 - 万家云网      热门搜索: 响应式 简洁 大气 商城 科技 自适应 时尚 精品 炫酷

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

架构一直以来都被认为是高阶技术人员的代名词,但什么是架构,什么样的架构人员才称得上一个好的架构师,这是很难评判的。但是,要提高架构能力, 只寄希望于代码层级是远远不够的, 代码只能帮助我们解决执行力的问题,但架构的高度更多的是依赖战略(业务洞察力)以及战术问题(技术视野)来解决问题。
头条 2019-10-18 10:53:00 框架 阿里巴巴 腾讯
0

今天依旧是架构,首先我们来看看什么是架构。

什么是架构?

架构一直以来都被认为是高阶技术人员的代名词,但什么是架构,什么样的架构人员才称得上一个好的架构师,这是很难评判的。但是,要提高架构能力, 只寄希望于代码层级是远远不够的, 代码只能帮助我们解决执行力的问题,但架构的高度更多的是依赖战略(业务洞察力)以及战术问题(技术视野)来解决问题。

但架构的高度到底是在一个什么层面上呢?架构的高度(既架构战略和架构技术,也就是架构格局)。

在设计一个架构的时候,通常都需要完整的解决方案去解决实际问题,这些问题包括根据具体业务场景选择合适的系统架构形态;针对所选择的架构形态应该如何去设计实现;在这之中如果有困难如何去折中处理;系统的架构如果在线上运行中出现问题该如何解决...等等一系列问题都是在架构设计之初都需要考虑到的问题。这就很需要架构师的架构格局来做支撑。其实在架构的背后,更多的是思考,思考为什么这么设计,为什么其它方案不优雅不合适等等一系列的为什么。

所以如果要做好一个架构,需要有绝对的理论支撑,实际的项目架构落地实践。拒绝忽悠,拒绝空理论、空概念。

互联网发展三阶段

在互联网的发展之路上,正在经历这3个阶段,过去的PC互联网,现在的移动互联网,未来的物联网。

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

在PC互联网时代,我们暂且称之为互动1.0时代。在这个阶段,以内容在线为主要核心,但资源之间的互动方式没有发生太多的变化,还是一个中心对多点的广播模式,比如过去的三大门户网站(百度,搜狐,网易)。

在PC互联网后期,移动互联网时代早期,也就是互动2.0时代。这个阶段以互动为核心,比较有代表性的产品有微博,Twitter。这些产品有了“关注”,因为“关注”产生了互动,产生了网络效应,说的人越多,看的人也越多,反之亦然。这让网络因为“关注”这个机制有了自成长的一个可能性,一个契机。

在移动互联网后期,暂称互动3.0时代,因为“关注”把一对一的关系变成了更广泛的多对多关系,形成了真正的交互网络形态,人和信息都在线了。网越织越密,才有了用更高效的方式实现原来很难实现的功能,网络文明再一次进步。

未来物联网将带来更广阔的天空,更不可思议的生活方式。

互联网架构演进之路

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

1.单体架构设计与实践

单一架构一般都是一个普通的java war文件,其内部的java代码目录层次结构单一。一个单体架构系统的架构图大致如图所示:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

单体架构的优点

  • 开发简单
  • 测试简单
  • 部署简单
  • 规模结构简单

如果单体架构承载不了更高的压力怎么办?单体架构的扩张就是使用nginx做反向代理,基于不同负载均衡策略把请求压力发送到其它单体应用上。单体架构的应用是一个war包部署在Tomcat上,扩展只需要再搞一台机器使用Tomcat部署war包就可以了,如图所示:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

2.水平分层架构设计与实践

水平分层架构是把系统向水平方向物理分成多个进程来运行,每层都有自己的逻辑,实现逻辑解耦。比如:网关层、业务逻辑层、数据访问层、数据存储层。下图是一个水平分层的系统架构图:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下
  • 水平分层架构拆分的设计原则单独的页面展示服务
  • 单独的网关服务
  • 单独的业务逻辑服务
  • 单独的数据服务
  • 根据系统职能单独划分服务(类似公司职能部门划分一个道理)

在根据水平分层架构设计的时候,也会遇到一些技术选项的问题,下图展示一个网关层技术选项对比维度图,其它的技术选项对比维度图也类似如此:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

业务逻辑层应该具备的基本功能:

  • 业务逻辑判断
  • 根据不同逻辑判断实现不同功能

数据访问层应该具备的基本功能:

  • CRUD 业务增删改查接口
  • ORM 框架
  • Sharding 支持分库分表
  • 屏蔽底层存储库的差异性(redis/mysql/mongodb)
  • 针对以上功能的聚合可以使用NewSql替代

水平分层架构虽然解决了一些问题,但其终究还是同步架构的一种,为了让水平架构的处理能力更上一个台阶,可以将其改造成一个异步架构的水平分层架构,如下图所示:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

水平分层架构的设计事项:

(1)设计过多

  • 请求路径变长
  • 平均响应延迟变高
  • 定位问题变的复杂化
  • 运维成本增加

(2)设计过少

  • 和单体架构基本类似

(3)设计合理适中

  • 同步架构(四层)
  • 网关层
  • 业务逻辑层
  • 数据访问层
  • 数据存储层
  • 异步架构(五层)
  • 网关层
  • 异步消息队列层
  • 业务逻辑层
  • 数据访问层
  • 数据存储层

即便使用了水平分层架构,也还是存在缺点的,这样的分层方式还是粒度过粗,我们看看最后水平分层架构的全貌图:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

App客户端先访问DNS域名解析服务器获得服务器IP;然后通过静态资源服务器获取CSS、JS等静态资源;最后调用服务器动态接口获取数据展示。

面向服务架构设计与实践

1.微服务架构设计与实践

微服务架构有利也有弊,不好的设计会出现一些问题。因为微服务中业务关注服务局“通信”,业务迭代需要多方业务支持,导致业务迭代速度慢;基础设施组件升级困难,影响交付能力和交付速度;多语言通信之间的问题,业务服务每种语言一套基础设施、成本大。

下图是关于上述问题的图示:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下
我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

2.服务网格架构设计与实践

应用程序A部署在一台机器上,同样的sidecarA也同样部署在这样机器上,sidecarA是基础设施组件,其实现了服务发现,配置管理,熔断限流,各种服务治理的功能,这使得应用程序不用再关注服务治理的相关编码实现,只需要注重业务编码的实现,关注点拆分(而在微服务架构中是需要同时兼顾考虑的)。

打个比方需要修重试策略,修改注册中心,修改服务调用路由规则,这些在微服务架构中需要修改应用编码重新部署才能生效,而在服务网格架构中只需要修改技术设施组件,在不影响业务功能代码的情况下进行修改发布升级。

下图是一个服务网格架构图:

  • 请求:应用程序A将req发送到SidecarA,SidecarA将req发送到SidecarB,SidecarB将req发送到应用程序B
  • 响应:应用程序B将resp发送到SidecarB,SidecarB将resp发送到SidecarA,SidecarA将resp发送到应用程序A
我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

官方服务网格架构图

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

3.总体架构

  • Istio服务网格逻辑上分为数据面板(执行者)和控制面板(指挥者)
  • 数据面板由一组智能代理(Envoy)组成,代理部署sidecar,调解和控制微服务之间所有的网络通信
  • 控制面板负责管理和配置代理来路由流量,以及在运行时执行策略
我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

千亿真实案例设计与实践

这个章节从真实案例入手讲解架构的演进之路,给予同学们更多的思考。

1.水平分层架构的案例一

“百度空间”维护的推送系统用于展现好友动态,且服务于百度众多的产品线(比如百度空间、知道、经验、旅游、ting、IM等等),80、90后应该对下面这张图比较熟悉,这就是那个时候的百度空间。

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

我们假设它的系统性能吞吐量为100000 QPS, 平均响应延迟:100ms如果要设计这样的系统,它的设计难点会是什么?

  • 消息内容是使用Push还是Pull方式
  • 架构模式选择同步还是异步方式呢

下面简单的看一张总体架构图:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

该架构选取了Pull方式减轻系统压力与异步方式提升系统处理能力。在这个场景下,消息内容并不需要所有关注者都及时看到最新消息,可以在用户上线后再去拉去被关注者新发布的内容,以此来减轻瞬时大数据量发送的问题,微博就类似如此。

如果很多人都在同时发布内容,服务器处理需要时间,但为了让用户避免过长等待,可以先把内容保存至消息队列中,之后将内容缓存在用户客户端上告知处理成功。在这中间下游业务服务器会从消息队列中取出内容继续处理,如果处理失败可以通知客户端失败,成功则不作通知用户的操作。以此来提升用户体验与系统处理能力。

2.水平分层架构的案例二

换个例子,比如58同城中的IM聊天功能,用于满足用户与商户沟通,获取信息,系统如图所示:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

我们假设该系统包含模块30+个,使用了多种开发语言,比如Java/Go。日请求在10亿(IM)和30亿(非IM),同时在线用户数突破100w+。如果要设计这样的系统,它的设计难点会是什么?

  • 如何解决百万千万同时在线问题
  • 架构模式上选用同步还是异步

下面简单的看一张总体架构图:

我曾是阿里腾讯的技术架构师,这份架构入门你一定要收下

因为IM设计为异步过于复杂,考虑IM聊天实时性,采用同步水平分层架构;那如何保持百万/千万连接数,后面的内容会继续介绍。

希望通过这篇,大家可以对架构更加了解,也欢迎大家关注,评论和私信我,也可以是职业辅导之类的,我会尽我所能帮助大家。

评论
暂时还没有任何用户评论

发表评论

用户名: 匿名用户
E-mail:
评价等级:
评论内容:
验证码: captcha
 

资讯分类

热文资讯

热门文章标签

点击这里给我发消息
嘿!有什么能帮到您的吗?