分布式系统的演进

java技术文章

2018-09-16

43

0

一、什么是分布式系统架构

分布式系统(distributed system):是建立在网络之上的软件系统。

具有内聚性和透明性:

内聚性:是指每一个数据库分布节点高度自治,都有自己的后台数据库管理系统。

透明性:是指每一个数据库对用户的应用都是透明的,分辨不出是本地的还是远程的。

简单来说:分布式系统是由各个子系统组成的,且内部的系统是互相透明的,但最终呈现给人是作为一个整体来呈现的。

二、分布式应用的系统架构

2.1、分布式文件系统

       例如:HDoop的HDFS,Google的GFS,淘宝的TFS等。

2.2、分布式缓存系统

      例如:Memocache、Redis、Mongodb等。

2.3、分布式数据库系统

      例如:Mysql,mariadb,postgrepSql等

2.4、分布式webService

2.5、分布式计算

 

三、分布式系统的演进

3.1、初始阶段架构

说明:这个阶段的架构是,所有的服务如:web应用、数据库和文件系统都存在一台服务器上。

3.2、应用服务、数据服务和文件服务分离

说明:这个阶段是将web应用、数据服务和文件服务单独放到一台服务器之上。

3.3、应用服务、数据服务、文件服务和添加缓存服务

说明:因为数据访问达到上线,所以增加缓存服务【本地服务或者远程服务】减轻数据访问压力。系统遵循二八定律,80%的业务访问集中在20%的数据上,也就是将系统访问大,更新频率小的的数据缓存到缓存服务器中。

3.4、使用web应用服务集群

说明:采用负载均衡技术,部署多个web应用,解决访问并发,web请求上限问题。

3.5、数据库读写分离

说明:数据库提供读写分离,主从同步。将主数据库提供写服务,从数据库提供读服务。降低数据库访问量大而导致的数据库锁表问题。

3.6、反向代理高可用和CDN加速

说明:系统在日常运行中,难免会出现服务宕机的情况,这个时候就需要架构提供多个服务,在一个宕机的情况下,另一个服务自动替代宕机服务,避免服务出现不能访问的情况。CDN加速为了应付不同的网络环境和不同地区的用户,提供CDN服务器,减轻后端服务器的压力

3.7、分布式文件系统和分布式数据库系统

说明:随着业务量的增加和访问量的增加,数据库系统或文件系统在原有的基础上已经不能满足现在的业务需求,现在就需要将数据库进行垂直拆分或者是水平拆分,文件系统进行水平拆分。

3.8、引入NoSql服务和搜索引擎

说明:随着业务量的增加,需要引入Nosql服务或者是搜索引擎提供数据检索服务,然后通过数据统一访问网关进行数据读取。

3.9、业务拆分

说明:按业务拆分小的web应用,部署到独立的服务器上,业务拆分分为纵向拆分和横向拆分,纵向拆分是将各个独立业务拆分成单独的web应用,横向拆分是将复用的业务独立出来,新增业务和复用业务一起提供对外服务。

3.10、业务服务分布式

说明:如果独立的业务服务已经不能满足业务需求,就需要对独立业务提供分布式服务,这个和3.4的web服务集群类似,只不过当前分布式是针对原来系统中的一个业务服务。

四、分布式架构面临那些问题

(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。

(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。

(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?

(4) 服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定? 

(5) 一个服务有多个业务消费者,如何确保服务质量?

(6) 随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化?

欢迎访问:www.hongfu951.com博客,查看更多文章

发表评论

全部评论:0条

鸿福951

努力打造一个好用的webui

热评文章

推荐文章