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

简介

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

分布式架构是一个很是复杂的体系,任何技术都不是孤立的存在,任何技术都没法适应全部场景。做为一名分布式系统架构或者资深研发人员,咱们必须尽量多的学习与之相关的各类知识,掌握各类技术的演进路线,正式从一名码农蜕变成为架构师mysql

什么是分布式?

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

简单理解,分布式系统就是把一些计算机经过网络链接起来,而后协同工做。协同工做须要解决两个问题:redis

1)任务分解sql

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

2)节点通讯缓存

节点之间互相通讯,须要设计特定的通讯协议来实现。协议能够采用RPC或Message Queue等方式。安全

 

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

 

 

分布式和集群的关系

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

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

计算机发展历史

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

第一台电子计算机诞生之后,意味着一个突飞猛进的IT时代的到来。一方面单台计算机的性能每一年都在提高:从最先的8位CPU到如今的64位CPU;从早期的MB级内存到如今的GB级别内存;从慢速的机械存储到如今的固态SSD硬盘存储。

|

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

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

 

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

 

 

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

假如咱们系统具有如下功能:

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

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

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

阶段一 , 单应用架构

 

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

 

 

网站的初期也能够认为是互联网发展的早起,咱们常常会在单机上跑咱们全部的程序和软件。

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

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

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

 

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

 

 

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

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

 

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

 

 

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

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

 

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

 

 

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

架构演变到这里,并非终点。上面咱们把应用层的性能拉上来了,可是数据库的负载也在慢慢增大,那么怎么去提升数据库层面的负载呢?有了前面的思路之后,天然会想到增长服务器。可是假如咱们单纯的把数据库一分为二,而后对于后续数据库的请求,分别负载到两台数据库服务器上,那么必定会形成数据库不统一的问题。因此咱们通常先考虑读写分离的方式

 

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

 

 

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

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

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

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

使用搜索引擎可以大大提升咱们的查询速度,可是同时也会带来一些附加的问题,好比维护索引的构建。

 

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

 

 

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

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

 

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

 

 

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

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

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

 

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

 

 

水平拆分:把同一个表中的数据拆分到两个甚至跟多的数据库中,水平拆分的缘由是某些业务数据量已经达到了单个数据库的瓶颈,这时能够采起讲表拆分到多个数据库中

 

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

 

 

阶段八,应用的拆分

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

 

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

 

 

这样拆分之后,可能会有一些相同的代码,好比用户操做,在商品和交易都须要查询,因此会致使每一个系统都会有用户查询访问相关操做。这些相同的操做必定是要抽象出来,不然就会是一个坑。因此经过走服务化路线的方式来解决

 

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

 

 

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

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

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

 

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

 

 

总结

咱们经过这个例子来说解了电商网站的架构演进。我要强调一下,这个架构的演进不是某个网站真实的例子,其实是经过这样一个演进过程给你们带来一个全局的观念和感觉。以及给你们在后续课程学习过程当中的一些思路。

如何把单击扩展到分布式

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

输入设备的变化

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

输出设备的变化

输出和输入相似,也有两种,一种是系统中的节点向其余节点传输信息时,该节点能够看做是输出设备;另外一种就是传统意义上的人际交互的输出设备,好比用户的终端

控制器的变化

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

运算器

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

存储器

在分布式系统中,咱们须要把承担存储功能的多个节点组织在一块儿,组成一个总体的存储器;好比数据库、redis(key-value存储)

关注我转发并在后台回复:架构 便可获取Java架构技术学习资料。