Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >阿里P8架构师深度概述分布式架构

阿里P8架构师深度概述分布式架构

作者头像
Java高级架构
发布于 2018-11-06 03:16:39
发布于 2018-11-06 03:16:39
6950
举报
文章被收录于专栏:JAVA高级架构JAVA高级架构

简介

作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝,如若无人,让不懂技术的妹子看你时眼神迷离,就好想落霞与孤鹜齐飞!

分布式架构是一个非常复杂的体系,任何技术都不是孤立的存在,任何技术都无法适应所有场景。作为一名分布式系统架构或者资深研发人员,我们必须尽可能多的学习与之相关的各种知识,掌握各种技术的演进路线,正式从一名码农蜕变成为架构师

什么是分布式?

互联网应用的特点是:高并发,海量数据。互联网应用的用户数是没有上限的(取决于其开放特性),这也是和传统应用的本质区别。高并发指系统单位时间内收到的请求数量(取决于使用的用户数),没有上限。海量数据包括:海量数据的存储和海量数据的处理。这两个工程难题都可以使用分布式系统来解决。

简单理解,分布式系统就是把一些计算机通过网络连接起来,然后协同工作。协同工作需要解决两个问题:

1)任务分解

把一个问题拆解成若干个独立任务,每个任务在一台节点上运行,实现多任务的并发执行。

2)节点通信

节点之间互相通信,需要设计特定的通信协议来实现。协议可以采用RPC或Message Queue等方式。

分布式和集群的关系

分布式:一个业务分拆多个子业务,部署在不同的服务器

集群:同一个业务,部署在多个服务器上

计算机发展历史

  1. 1946年情人节(2.14) , 世界上第一台电子数字计算机诞生在美国宾夕法尼亚大学大学,它的名字是:ENIAC; 这台计算机占地170平米、重达30吨,每秒可进行5000次加法运算。

第一台电子计算机诞生以后,意味着一个日新月异的IT时代的到来。一方面单台计算机的性能每年都在提升:从最早的8位CPU到现在的64位CPU;从早期的MB级内存到现在的GB级别内存;从慢速的机械存储到现在的固态SSD硬盘存储。

|

tips: 电子计算机的问世,最重要的奠基人是英国科学家艾兰· 图灵(Alan Turing)和美籍匈牙利科学家冯· 诺依曼(John Von· Neumann)。图灵的贡献是建立了图灵机的理论模型,奠定了人工智能的基础。而冯· 诺依曼则是首先提出了计算机体系结构的设想。

经典理论-冯.诺依曼体系:计算机硬件由运算器、控制器、存储器、输入设备、输出设备五大部分组成。直到今天,计算机仍没有跳出该体系的范畴。

  1. ENIAC之后,电子计算机便进入了IBM主导的大型机时代,IBM大型机之父吉恩.阿姆达尔被认为是有史以来最伟大的计算机设计师之一。1964年4月7日,在阿姆达尔的带领下,历时三年,耗费50亿美元,第一台IBM大型机SYSTEM/360诞生。这使得IBM在20实际50~60年代统治整个大型计算机工业,奠定了IBM计算机帝国的江山。

2.1 IBM大型机曾支撑美国航天登月计划

2.2 IBM主机一直服务于金融等核心行业的关键领域

由于高可靠性和超强的计算能力,几遍在X86和云计算飞速发展的情况下,IBM的大型机依然牢牢占据着一定的高端市场份额

  1. 20世纪80年代,在大型机霸主的时代,计算机架构同时向两个方向发展

以X86 CPU为架构的价格便宜的面向个人的PC

以RISC CPU为架构的价格昂贵的面向企业的小型UNIX服务器

分布式架构发展的里程碑

大型主机的出现。凭借着大型机超强的计算和I/O处理能力、稳定性、安全性等,在很长一段时间内,大型机引领了计算机行业及商业计算领域的发展。

而集中式的计算机系统架构也成为了主流。

随着计算机的发展,这种架构越来越难以适应人们的需求,比如说

  1. 由于大型主机的复杂性,导致培养一个能够熟练运维大型主机的人的成本很高
  2. 大型主机很贵,一般只有土豪(政府、金融、电信)才能用得起
  3. 单点问题,一台大型主机出现故障,那么整个系统将处于不可用状态。而对于大型机的使用群体来说,这种不可用导致的损失是非常大的
  4. 科技在进步,技术在进步。PC机性能不断提升,很多企业放弃大型机改用小型机及普通PC来搭建系统架构

阿里巴巴在2009年发起了一项"去IOE"运动

当初指的是IBM小型机、Oracle数据库、EMC的高端存储

2009年“去IOE”战略透露,到2013年5月17日最后一台IBM小型机在支付宝下线。

为什么要去IOE?

阿里巴巴过去一直采用的是Oracle数据库,并利用小型机和高端存储设备提供高性能的数据处理和存储服务。随着业务的不断发展,数据量和业务量呈爆发性增长,传统的集中式Oracle数据库架构在扩展性方面遭遇瓶颈。

传统的商业数据库软件(Oracle,DB2),多以集中式架构为主,这些传统数据库软件的最大特点就是将所有的数据都集中在一个数据库中,依靠大型高端设备来提供高处理能力和扩展性。集中式数据库的扩展性主要采用向上扩展(Scale up)的方式,通过增加CPU,内存,磁盘等方式提高处理能力。这种集中式数据库的架构,使得数据库成为了整个系统的瓶颈,已经越来越不适应海量数据对计算能力的巨大需求

架构的发展演变过程

一个成熟的大型网站系统架构并不是一开始就设计的非常完美,也不是一开始就具备高性能、高可用、安全性等特性,而是随着用户量的增加、业务功能的扩展逐步完善演变过来的。在这个过程中,开发模式、技术架构等都会发生非常大的变化。而针对不同业务特征的系统,会有各自的侧重点,比如像淘宝这类的网站,要解决的是海量商品搜索、下单、支付等问题;像腾讯,要解决的是数亿级别用户的实时消息传输;百度所要解决的是海量数据的搜索。每一个种类的业务都有自己不同的系统架构。我们简单模拟一个架构演变过程。

什么是大型网站

如何定义一个网站是不是大型网站,一般我们会从两个纬度去考衡,访问量以及数据量,二者缺一不可。

我们以javaweb为例,来搭建一个简单的电商系统,从这个系统中来看系统的演变历史;要注意的是,接下来的演示模型,关注的是数据量、访问量提升,网站结构发生的变化, 而不是具体关注业务功能点。其次,这个过程是为了让大家更好的了解网站演进过程中的一些问题和应对策略。

假如我们系统具备以下功能:

用户模块:用户注册和管理

商品模块:商品展示和管理

交易模块:创建交易及支付结算

阶段一 , 单应用架构

网站的初期也可以认为是互联网发展的早起,我们经常会在单机上跑我们所有的程序和软件。

把所有软件和应用都部署在一台机器上,这样就完成一个简单系统的搭建,这个时候的讲究的是效率

阶段二,应用服务器和数据库服务器分离

随着网站的上线,访问量逐步上升,服务器的负载慢慢提高,在服务器还没有超载的时候,我们应该做好规划,提升网站的负载能力。假如代码层面的优化已经没办法继续提高,在不提高单台机器的性能,增加机器是一个比较好的方式,投入产出比非常高。这个阶段增加机器的主要目的是讲web服务器和数据库服务器拆分,这样不仅提高了单机的负载能力,也提高了容灾能力

阶段三,应用服务器集群-应用服务器负载告警,如何让应用服务器走向集群

随着访问量的继续增加,单台应用服务器已经无法满足需求。在假设数据库服务器还没有遇到性能问题的时候,我们可以增加应用服务器,通过应用服务器集群将用户请求分流到各个服务器中,从而继续提升负载能力。此时多台应用服务器之间没有直接的交互,他们都是依赖数据库各自对外提供服务

架构发展到这个阶段,各种问题也会慢慢呈现

  1. 用户请求由谁来转发到具体的应用服务器
  2. 用户如果每次访问到的服务器不一样,那么如何维护session

阶段四,数据库压力变大,数据库读写分离

架构演变到这里,并不是终点。上面我们把应用层的性能拉上来了,但是数据库的负载也在慢慢增大,那么怎么去提高数据库层面的负载呢?有了前面的思路以后,自然会想到增加服务器。但是假如我们单纯的把数据库一分为二,然后对于后续数据库的请求,分别负载到两台数据库服务器上,那么一定会造成数据库不统一的问题。所以我们一般先考虑读写分离的方式

这个架构的变化会带来几个问题

  1. 主从数据库之间的数据同步 ; 可以使用mysql自带的master-slave方式实现主从复制
  2. 对应数据源的选择 ; 采用第三方数据库中间件,例如mycat

阶段五,使用搜索引擎缓解读库的压力

数据库做读库的话,尝尝对模糊查找效率不是特别好,像电商类的网站,搜索是非常核心的功能,即便是做了读写分离,这个问题也不能有效解决。那么这个时候就需要引入搜索引擎了

使用搜索引擎能够大大提高我们的查询速度,但是同时也会带来一些附加的问题,比如维护索引的构建。

阶段六,引入缓存机制缓解数据库的压力

随着访问量的持续增加,逐渐出现许多用户访问统一部分内容的情况,对于这些热点数据,没必要每次都从数据库去读取,我们可以使用缓存技术,比如memcache、redis来作为我们应用层的缓存;另外在某些场景下,比如我们对用户的某些IP的访问频率做限制,那这个放内存中又不合适,放数据库又太麻烦,这个时候可以使用Nosql的方式比如mongDB来代替传统的关系型数据库

阶段七,数据库的水平/垂直拆分

我们的网站演进的变化过程,交易、商品、用户的数据都还在同一个数据库中,尽管采取了增加缓存,读写分离的方式,但是随着数据库的压力持续增加,数据库的瓶颈仍然是个最大的问题。因此我们可以考虑对数据的垂直拆分和水平拆分

垂直拆分:把数据库中不同业务数据拆分到不同的数据库

水平拆分:把同一个表中的数据拆分到两个甚至跟多的数据库中,水平拆分的原因是某些业务数据量已经达到了单个数据库的瓶颈,这时可以采取讲表拆分到多个数据库中

阶段八,应用的拆分

随着业务的发展,业务越来越多,应用的压力越来越大。工程规模也越来越庞大。这个时候就可以考虑讲应用拆分,按照领域模型讲我们的用户、商品、交易拆分成多个子系统

这样拆分以后,可能会有一些相同的代码,比如用户操作,在商品和交易都需要查询,所以会导致每个系统都会有用户查询访问相关操作。这些相同的操作一定是要抽象出来,否则就会是一个坑。所以通过走服务化路线的方式来解决

那么服务拆分以后,各个服务之间如何进行远程通信呢?

通过RPC技术,比较典型的有:webservice、hessian、http、RMI等等

前期通过这些技术能够很好的解决各个服务之间通信问题,but,互联网的发展是持续的,所以架构的演变和优化还在持续。

总结

我们通过这个例子来讲解了电商网站的架构演进。我要强调一下,这个架构的演进不是某个网站真实的例子,实际上是通过这样一个演进过程给大家带来一个全局的观念和感受。以及给大家在后续课程学习过程中的一些思路。

如何把单击扩展到分布式

前面我们讲到了冯.诺依曼模型,计算机一共由5个部分组成,从用户角度来看,分布式系统就像一台超级计算机。理论上也应该由输入、输出、运算、存储和控制这5部分组成。

输入设备的变化

在分布式系统架构中,输入设备可以分两类,第一类是互相连接的多个节点,在接收其他节点传来的信息作为该节点的输入;另一种就是传统意义上的人机交互的输入设备了

输出设备的变化

输出和输入类似,也有两种,一种是系统中的节点向其他节点传输信息时,该节点可以看作是输出设备;另一种就是传统意义上的人际交互的输出设备,比如用户的终端

控制器的变化

在单机中,控制器指的是CPU中的控制器,在分布式系统中,控制器主要的作用是协调或控制节点之间的动作和行为;比如硬件负载均衡器;LVS软负载;规则服务器等

运算器

在分布式系统中,运算器是由多个节点来组成的。运用多个节点的计算能力来协同完成整体的计算任务

存储器

在分布式系统中,我们需要把承担存储功能的多个节点组织在一起,组成一个整体的存储器;比如数据库、redis(key-value存储)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高级架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
阿里P8架构师详说分布式架构的应用原理简介什么是分布式?分布式和集群的关系计算机发展历史分布式架构发展的里程碑架构的发展演变过程如何把单击扩展到分布式
作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝,如若无人,让不懂技术的妹子看你时眼神迷离,就好想落霞与孤鹜齐飞!
Java架构
2018/10/10
1.2K0
阿里P8架构师详说分布式架构的应用原理简介什么是分布式?分布式和集群的关系计算机发展历史分布式架构发展的里程碑架构的发展演变过程如何把单击扩展到分布式
新手入门:零基础理解大型分布式架构的演进历史、技术原理、最佳实践
随着社会的发展、互联网技术的进步,以前的大型机服务端架构很显然由于高成本、难维护等原因渐渐地变得不再那么主流了,替代它的就是当下最火的互联网分布式架构。
JackJiang
2018/10/18
6480
新手入门:零基础理解大型分布式架构的演进历史、技术原理、最佳实践
新手入门:零基础理解大型分布式架构的演进历史、技术原理、最佳实践
随着社会的发展、互联网技术的进步,以前的大型机服务端架构很显然由于高成本、难维护等原因渐渐地变得不再那么主流了,替代它的就是当下最火的互联网分布式架构。
JackJiang
2018/10/15
6890
Java工程师必须学习分布式架构技术吗?
在回答这个问题之前,首先我们要明白,为什么会出现分布式架构技术?要了解这个问题的话我们需要往前回溯,从主流互联网系统发展的历程来看,我们可以看到在不同阶段,流行的系统架构其实是不一样的。比如一开始的单体应用把所有东西都部署在一起就可以满足业务需求,然后随着业务规模的发展,用户量和访问量逐步增加,这时系统会不断面临性能压力和存储压力,具体体现就是:
用户7353950
2022/06/23
2930
Java工程师必须学习分布式架构技术吗?
程序员架构实战案例——分布式架构演变
随着计算机系统规模变得越来越大,将所有的业务单元集中部署在一个或若干个大型机上的体系架构,已经越来越不能满足当今计算机系统。同时,随着微型计算机的出现,越来越多廉价的PC机成为了各大企业IT架构的首选,分布式的处理方式越来越受到业界的青睐。本文将介绍分布式架构的发展历史和分布式架构的一些相关概念。
慕容千语
2019/06/11
5530
大厂Java面试-分布式架构演进史
1946 年情人节(2.14) , 世界上第一台电子数字计算机诞生在美 国宾夕法尼亚大学大学,它的名字是:ENIAC; 这台计算机占地 170 平米、重达 30 吨,每秒可进行 5000 次加法运算。 第一台电子计算机诞生以后,意味着一个日新月异的 IT 时代 的到来。一方面单台计算机的性能每年都在提升:从最早的 8 位 CPU 到现在的 64 位 CPU;从早期的 MB 级内存到现在的 GB 级别内存;从慢速的机械存储到现在的固态 SSD 硬盘存储。
JavaEdge
2022/11/30
5190
大厂Java面试-分布式架构演进史
分布式架构概述及设计
随着越来越多的人参与到互联网的浪潮来,曾经的单体应用架构越来越无法满足需求,所以,分布式集群架构出现,也因此,分布式搭建开发成为了Web开发者必掌握的技能之一。那什么是分布式呢?怎么实现分布式以及怎么处理分布式带来的问题呢?本系列文章就来源于对分布式各组件系统的学习总结,包含但不限于Zookeeper、Dubbo、消息队列(ActiveMQ、Kafka、RabbitMQ)、Nosql(Redis、MongoDB)、Niginx、分库分表MyCat、Netty等内容。作为跟大多数人一样的学习使用者,而非布道者,个人理解难免会有偏差或是其它错误,希望各位读者不吝指教。
夜勿语
2020/09/07
1.4K0
分布式架构的演进过程
作者:代码屠夫18 出处:my.oschina.net/u/3854434 一.分布式架构的发展历史 1946年,世界上第一台电子计算机在美国的宾夕法尼亚大学诞生,它的名字是:ENICAC ,这台计算机的体重比较大,计算速度也不快,但是而代表了计算机时代的到来,再以后的互联网的发展中也有基础性的意义。 计算机的组成是有五部分完成的,分别是:输入设备,输出设备,存储器,存储器里面由运算器和控制器,有一个冯诺依曼的模型非常形象的对象计算机的组成进行了描述,不过计算机也是有数据流,指令流,控制流来进
Tanyboye
2018/07/02
6870
初识分布式架构
集群 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。
lyb-geek
2018/07/26
1.1K0
初识分布式架构
分布式架构之美
一、前言 我们都知道,当今无论在BAT这样的大公司,还是各种各样的小公司,甚至是传统行业刚转互联网的企业都开始使用分布式架构,那么什么叫分布式架构呢?分布式架构有什么好处呢?分布式架构经过了怎样的发展呢?是哪家企业开启了分布式架构的时代呢?读完本文,你就会得到这些答案,下面让我们一起来开启分布式概述的奇妙之旅吧! 二、分布式架构的发展历史 1946年2.14日,那是一个浪漫的情人节 , 世界上第一台电子数字计算机在美国宾夕法尼亚大学诞生了,她的名字叫ENIAC。这台计算机占地170平米、重达 30 吨,每
纯洁的微笑
2018/07/20
7460
分布式架构的前世今生...
一、前言 随着社会的发展,技术的进步,以前的大型机架构很显然由于高成本、难维护等原因渐渐地变得不再那么主流了,替代它的就是当下最火的分布式架构,从大型机到分布式,经历了好几个阶段,我们弄明白各个阶段的架构,才能更好地理解和体会分布式架构的好处,那么本文我们就来聊聊分布式架构的演进过程,希望能给大家带来眼前一亮的感觉。 二、背景说明 我们都知道一个成熟的大型网站的系统架构并非一开始就设计的非常完美,也没有一开始就具备高性能、高并发、高可用、安全性等特性,而是随着用户量的增加、业务功能的扩展逐步演变过来的,慢
纯洁的微笑
2018/07/20
4270
从集中式到分布式
随着计算机系统规模变得越来越大,将所有业务单元集中部署在一个或者若干个大型机上的体系结构物,已经越来越不能满足当今计算机系统,尤其是大型互联网系统的快速发展,各种灵活多变的系统架构模型层出不穷。同时,随着微型计算机的出现,越来越多廉价的PC机成为了各大IT企业架构的首选,分布式的处理方式越来越受到业界的青睐----计算机系统正在经历一场前所未有的从集中式到分布式架构的变革。
技术从心
2019/08/06
1.2K0
从集中式到分布式
图解分布式架构的演进过程
透明性:是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。
芋道源码
2019/05/14
4080
分布式基础_All-In-One到SOA的分布式架构演进
在诞生之初始,应用与数据库是部署在同一台机器上,这时的用户量、数据量规模都比较小,这样的架构既简单实用、便于维护,成本又低,成为了这个时代的主流架构方式。随着用户量的增大,访问量急剧增加;于是到了下一步;
矿泉水
2018/05/11
1.1K1
分布式架构的演进
系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所有的资源都在一台服务器上。描述:通常服务器操作系
Java高级架构
2018/04/19
1.2K0
分布式架构的演进
大型分布式电商系统架构是如何从0开始演进的?
本文是学习大型分布式网站架构的技术总结。对架构一个高性能、高可用、可伸缩及可扩展的分布式网站进行了概要性描述,并给出一个架构参考。文中一部分为读书笔记,一部分是个人经验总结,对大型分布式网站架构有较好的参考价值。 1、大型网站的特点 用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大,渐进发展 以用户为中心 免费服务,付费体验 2、大型网站架构目标 高性能:提供快速的访问体验。 高可用:网站服务一直可以正常访问。 可伸缩:通过硬件增加/减少
Java高级架构
2018/07/20
1.5K0
图解分布式架构的演进!
一、什么是分布式架构 分布式系统(distributed system) 是建立在网络之上的软件系统。 内聚性:是指每一个数据库分布节点高度自治,有本地的数据库管理系统。 透明性:是指每一个数据库
Java技术栈
2018/06/04
4.3K0
java分布式特点_java分布式架构是什么?分布式架构的优缺点有哪些?
大家好,又见面了,我是你们的朋友全栈君。 作为目前互联网最流行的技术之一,分布式是当仁不让的,小伙伴们都了解什么是分布式架构吗?它的优缺点又有哪些呢?快听小编为你介绍介绍吧。 一、什么是分布式架构?
全栈程序员站长
2022/09/05
8290
搞懂分布式技术1:分布式系统的一些基本概念
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/12/03
1K0
【Redis前奏曲】初识分布式
在Redis官网中,是这样介绍Redis的: The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. 翻译为: 被数百万开发人员用作数据库、缓存、流媒体引擎和消息代理的开源内存数据存储
xxxflower
2023/12/28
1980
【Redis前奏曲】初识分布式
推荐阅读
相关推荐
阿里P8架构师详说分布式架构的应用原理简介什么是分布式?分布式和集群的关系计算机发展历史分布式架构发展的里程碑架构的发展演变过程如何把单击扩展到分布式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档