什么是分布式架构
分布式系统(distributed system)是建设在网络之上的软件系统。
内聚性:是指每一个数据库散布节点高度自治,有本地的数据库管理系统。
透明性:是指每一个数据库散布节点对用户的利用来说都是通明的,看不出是本地还是近程。
在分布式数据系统中,用户感觉不数据是散布的,即用户不须晓得关系是否宰割,有无正本,数据存在于那个站点以及事物在哪个站点上执行。
简略来说,在一个分布式系统中,一组独立的计算机展示给用户的是一个对立的整体,就如同是一个零碎似的。
面试官:给我说一下你了解的分布式架构?
分布式系统作为一个整体对用户提供服务,而整个零碎的外部的合作对用户来说是通明的,用户就像是指应用一个 Mysql 一样,如:分布式 Mysql 中间件 Mycat,来解决大并发大数据量的构架。
分布式架构的利用
1. 分布式文件系统
例如:闻名的有 Hadoop 的 HDFS, 还有 google 的 GFS , 淘宝的 TFS 等
2. 分布式缓存零碎
例如:memcache , hbase, mongdb 等
3. 分布式数据库
例如:mysql, mariadb, postgreSql 等
4. 分布式 webService
5. 分布式计算
举例
以分布式 MySQL 数据库中间件 mycat 为例。
MySQL 在当初电商以及互联网公司的利用十分多,一个是因为他的收费开源,另外一个起因是因为分布式系统的程度可扩展性,随着挪动互联网用户的暴增,互联网公司,像淘宝,天猫,唯品会等。
电商都采纳分布式系统应答用户的高并发量以及大数据量的存储。而在 Mycat 的商业案例中,有对中国移动的账单结算我的项目中,利用实时处理高峰期每天 2 亿的数据量,在对物联网的我的项目中,实现解决高达 26 亿的数据量,并提供实时查问的接口。
通过对 MyCat 的学习,加深分布式系统架构的了解,以及分布式相干的技术,分布式一致性 ZooKeeper 服务, 高可用 HAProxy/keepalived 等相干利用。
集群与分布式
负载平衡
分布式相干的高可用、容灾等名词解释
Mycat 中间件学习
分布式架构的演进
1. 初始阶段架构
面试官:给我说一下你了解的分布式架构?
特色:应用程序,数据库,文件等所有资源都放在一台服务器上。
2. 应用服务和数据服务以及文件服务拆散
面试官:给我说一下你了解的分布式架构?
阐明:好景不长,发现随着零碎访问量的再度减少,webserver 机器的压力在高峰期会回升到比拟高,这个时候开始思考减少一台 webserver。
特色:应用程序、数据库、文件别离部署在独立的资源上。
3. 应用缓存改善性能
面试官:给我说一下你了解的分布式架构?
阐明:零碎拜访特点遵循二八定律,即 80% 的业务拜访集中在 20% 的数据上。缓存分为本地缓存和近程分布式缓存,本地缓存访问速度更快但缓存数据量无限,同时存在与应用程序争用内存的状况。
特色:数据库中拜访较集中的一小部分数据存储在缓存服务器中,缩小数据库的拜访次数,升高数据库的拜访压力。
4. 应用应用服务器集群
面试官:给我说一下你了解的分布式架构?
阐明:在做完分库分表这些工作后,数据库上的压力曾经降到比拟低了,又开始过着每天看着访问量暴增的幸福生活了。忽然有一天,发现零碎的拜访又开始有变慢的趋势了,这个时候首先查看数据库,压力一切正常,之后查看 webserver,发现 apache 阻塞了很多的申请,而应用服务器对每个申请也是比拟快的,看来是申请数太高导致须要排队期待,响应速度变慢。
特色:多台服务器通过负载平衡同时向内部提供服务,解决单台服务器解决能力和存储空间下限的问题。
形容:应用集群是零碎解决高并发、海量数据问题的罕用伎俩。通过向集群中追加资源,晋升零碎的并发解决能力,使得服务器的负载压力不再成为整个零碎的瓶颈。
5. 数据库读写拆散
面试官:给我说一下你了解的分布式架构?
阐明:享受了一段时间的零碎访问量高速增长的幸福后,发现零碎又开始变慢了,这次又是什么情况呢,通过查找,发现数据库写入、更新的这些操作的局部数据库连贯的资源竞争十分强烈,导致了零碎变慢
特色:多台服务器通过负载平衡同时向内部提供服务,解决单台服务器解决能力和存储空间下限的问题。
形容:应用集群是零碎解决高并发、海量数据问题的罕用伎俩。通过向集群中追加资源,使得服务器的负载压力不在成为整个零碎的瓶颈。
6. 反向代理和 CDN 减速
面试官:给我说一下你了解的分布式架构?
特色:采纳 CDN 和反向代理放慢零碎的访问速度。
形容:为了应酬简单的网络环境和不同地区用户的拜访,通过 CDN 和反向代理放慢用户拜访的速度,同时加重后端服务器的负载压力。CDN 与反向代理的基本原理都是缓存。
7.“分布式文件”零碎 和“分布式数据库”
面试官:给我说一下你了解的分布式架构?
阐明:随着零碎的一直运行,数据量开始大幅度增长,这个时候发现分库后查问依然会有些慢,于是依照分库的思维开始做分表的工作。
特色:数据库采纳分布式数据库,文件系统采纳分布式文件系统。
形容:任何弱小的繁多服务器都满足不了大型零碎持续增长的业务需要,数据库读写拆散随着业务的倒退最终也将无奈满足需要,须要应用分布式数据库及分布式文件系统来撑持。分布式数据库是零碎数据库拆分的最初办法,只有在单表数据规模十分宏大的时候才应用,更罕用的数据库拆分伎俩是业务分库,将不同的业务数据库部署在不同的物理服务器上。
8. 应用 NoSQL 和搜索引擎
面试官:给我说一下你了解的分布式架构?
特色:零碎引入 NoSQL 数据库及搜索引擎。
形容:随着业务越来越简单,对数据存储和检索的需要也越来越简单,零碎须要采纳一些非关系型数据库如 NoSQL 和分数据库查问技术如搜索引擎。应用服务器通过对立数据拜访模块拜访各种数据,加重应用程序治理诸多数据源的麻烦。
9. 业务拆分
面试官:给我说一下你了解的分布式架构?
特色:零碎上依照业务进行拆分革新,应用服务器依照业务辨别进行别离部署。
形容:为了应答日益简单的业务场景,通常应用分而治之的伎俩将整个零碎业务分成不同的产品线,利用之间通过超链接建设关系,也能够通过音讯队列进行数据散发,当然更多的还是通过拜访同一个数据存储系统来形成一个关联的残缺零碎。
纵向拆分:将一个大利用拆分为多个小利用,如果新业务较为独立,那么就间接将其设计部署为一个独立的 Web 利用零碎 纵向拆分绝对较为简单,通过梳理业务,将较少相干的业务剥离即可。
横向拆分:将复用的业务拆分进去,独立部署为分布式服务,新增业务只须要调用这些分布式服务 横向拆分须要辨认可复用的业务,设计服务接口,标准服务依赖关系。
10. 分布式服务
面试官:给我说一下你了解的分布式架构?
特色:公共的利用模块被提取进去,部署在分布式服务器上供应用服务器调用。
形容:随着业务越拆越小,利用零碎整体复杂程度呈指数级回升,因为所有利用要和所有数据库系统连贯,最终导致数据库连贯资源有余,拒绝服务。
分布式服务利用会面临哪些问题?
当服务越来越多时,服务 URL 配置管理变得十分艰难,F5 硬件负载均衡器的单点压力也越来越大。
当进一步倒退,服务间依赖关系变得错踪简单,甚至分不清哪个利用要在哪个利用之前启动,架构师都不能残缺的形容利用的架构关系。
接着,服务的调用量越来越大,服务的容量问题就裸露进去,这个服务须要多少机器撑持?什么时候该加机器?
服务多了,沟通老本也开始回升,调某个服务失败该找谁?服务的参数都有什么约定?
一个服务有多个业务消费者,如何确保服务质量?
随着服务的不停降级,总有些意想不到的事产生,比方 cache 写错了导致内存溢出,故障不可避免,每次外围服务一挂,影响一大片,人心慌慌,如何管制故障的影响面?服务是否能够性能降级?或者资源劣化?
最初
如果本文对你有帮忙,别忘记给我个 3 连,点赞,转发,评论,
咱们下期见!答案获取形式:已赞 已评 已关~
学习更多 JAVA 常识与技巧,关注与私信博主(666)