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