1.什么是分布式架构?分布式系统是建立在网络之上的软件系统。内聚性:指每个数据库分布节点高度自治,有本地的数据库管理系统。透明性:指的是每个数据库分发节点对用户的应用都是透明的,无论是本地还是远程都看不到。在分布式数据系统中,用户感觉不到数据是分布式的,即用户不需要知道关系是否划分,是否有副本,数据存在于哪个站点,东西在哪个站点执行于。简单地说:在分布式系统中,一组独立的计算机将用户呈现为一个统一的整体,就好像它是一个系统一样。分布式系统整体为用户提供服务,整个系统内部协作对用户是透明的,就好像用户在使用一个mysql。如:分布式mysql中间件mycat,处理大并发大数据量的框架。二、分布式架构的应用1、分布式文件系统,如Hadoop的HDFS、Google的GFS、淘宝的TFS等2、分布式缓存系统,如memcache、hbase、mongdb等3、分布式数据库,如:mysql,mariadb,postgreSql等4.分布式webService5.分布式计算实例以分布式mysql数据库中间件mycat为例 MySQL广泛应用于电子商务和互联网公司,一是因为它免费开源,另一个原因是因为分布式系统的水平可扩展性。随着移动互联网用户的快速增长,淘宝、天猫、唯品会等电商企业纷纷采用分布式系统来应对用户的高并发。大量数据的容量和存储。在Mycat的业务案例中,在中国移动的账单结算项目中,该应用在高峰期每天实时处理2亿条数据量。在物联网项目中,实现处理高达26亿的数据量,并提供实时查询接口。通过MyCat的学习,加深对分布式系统架构的理解,以及分布式相关技术、分布式一致性ZooKeeper服务、高可用HAProxy/keepalived等相关应用。1>集群与分布式2>负载均衡3>分布式高可用、容灾等相关术语解释4>Mycat中间件学习3.分布式架构演进(1)初期架构特点:应用、数据库、文件等所有资源都放在一台服务器上。(2)应用服务、数据服务、文件服务分离说明:好景不长。发现随着系统访问量的再次增加,高峰期webserver机器的压力会上升到一个比较高的水平。这时候,我们开始考虑添加一个webserver。特点:应用程序、数据库和文件部署在不同的资源上。(3)使用缓存提高性能说明:系统访问的特点遵循80%法则,即80%的业务访问集中在20%的数据上。缓存分为本地缓存和远程分布式缓存。本地缓存访问速度更快,但缓存数据量有限。同时,与应用程序存在内存争用。特点:将数据库中访问较为密集的一小部分数据存储在缓存服务器中,减少数据库访问次数,减轻数据库访问压力。(4)“应用服务器”集群使用说明:分库分表工作完成后,数据库的压力已经降低到一个比较低的水平,开始幸福的生活了watching访问量每天都在飙升。 突然有一天,我发现系统访问速度又开始变慢了。这时候先查了一下数据库,压力正常。然后查看了webserver,发现apache屏蔽了很多请求,应用服务器也对每个请求进行了响应。比较快,好像是请求数多了没法排队,响应速度变慢了。特点:多台服务器通过负载均衡同时对外提供服务,解决了单台服务器处理能力和存储空间受限的问题。说明:利用集群是系统解决高并发、海量数据问题的常用方法。通过向集群中添加资源,提高系统的并发处理能力,使服务器的负载压力不再成为整个系统的瓶颈。(5)数据库读写分离的解释:在享受了一段时间系统访问量快速增长的快乐后,发现系统又开始变慢了。这次是什么情况?查找后,发现数据库是写入更新的。操作的数据库连接部分的资源竞争非常高,导致系统变慢。特点:多台服务器通过负载均衡同时对外提供服务,解决了单台服务器处理能力和存储空间受限的问题。说明:利用集群是系统解决高并发、海量数据问题的常用方法。通过向集群中添加资源,服务器的负载压力不再是整个系统的瓶颈。(6)反向代理和CDN加速 特点:利用CDN和反向代理加速系统访问。说明:为应对复杂的网络环境和不同地域用户的访问,通过CDN和反向代理加快用户访问速度,同时减轻后端服务器的负载压力。CDN和反向代理的基本原理是缓存。(7)“分布式文件”系统和“分布式数据库”说明:随着系统的不断运行,数据量开始大幅增加。这时发现分库后查询还是有点慢,于是按照分库的思路开始分表工作特点:数据库采用分布式数据库,文件系统采用分布式文件系统。说明:任何强大的单一服务器都无法满足大型系统不断增长的业务需求。随着业务的发展,数据库读写分离终将无法满足需求。需要使用分布式数据库和分布式文件系统来支持。分布式数据库是拆分系统数据库的最佳方式。只有在单表数据规模非常大的时候才会用到。数据库拆分比较常见的方式是业务分库,将不同的业务数据库部署在不同的物理服务器上。优越的。(8)使用NoSQL和搜索引擎的特点:系统引入了NoSQL数据库和搜索引擎。说明:随着业务越来越复杂,对数据存储和检索的要求也越来越复杂。系统需要使用一些非关系型数据库如NoSQL和分库查询技术如搜索引擎。应用服务器通过统一的数据访问模块访问各种数据,免去了应用程序管理众多数据源的麻烦。(9)业务拆分特点:系统按业务拆分改造,应用服务器按业务分工分别部署。说明:为了应对日益复杂的业务场景,通常采用分而治之的方式将整个系统业务划分为不同的产品线。应用程序之间的关系通过超链接建立,数据分发也可以通过消息队列进行。当然,更多的是通过访问同一个数据存储系统,形成一个关联的完整系统。垂直拆分:将一个大应用拆分成多个小应用。如果新业务比较独立,那就直接设计部署成一个独立的web应用系统。垂直拆分相对简单。通过业务梳理,可以剥离较少的相关业务。水平拆分:将复用的业务拆分,独立部署为分布式服务。新业务只需要调用这些分布式服务即可。水平拆分需要识别可复用业务,设计服务接口,规范服务依赖。(10)分布式服务特性:将公共应用模块抽取出来,部署在分布式服务器上,供应用服务器调用。说明:随着业务越来越小,应用系统的整体复杂度呈指数增长。由于所有的应用程序都需要连接所有的数据库系统,最终会导致数据库连接资源不足而导致服务被拒绝。4、分布式服务应用会面临哪些问题?(1)当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。(2)随着开发的深入,服务间的依赖关系变得复杂复杂,甚至分不清哪个应用先启动哪个应用,架构师也无法完整描述应用的架构关系。(3)然后,服务调用量越来越大,服务的容量暴露出来。该服务需要支持多少台机器?什么时候加机器?(4)服务越来越多,通讯成本也开始上升。某项服务调整失败应该联系谁?服务参数的约定是什么?(5)一个服务有多个业务消费者,如何保证服务质量?(6)随着服务的不断升级,总会发生一些意想不到的事情,比如缓存写入错误导致内存溢出,故障在所难免,每次核心服务挂掉,影响大面积,人心惶惶,故障影响如何控制边?服务能否在功能上降级?还是资源退化?
