java集中式架构到分布式架构的演变

java集中式架构到分布式架构的演变

前言

随着计算机系统规模变得越来越大,将所有业务单元集中部署在一个或者若干个大型机上的体系结构物,已经越来越不能满足当今计算机系统,尤其是大型互联网系统的快速发展,各种灵活多变的系统架构模型层出不穷。同时,随着微型计算机的出现,越来越多廉价的PC机成为了各大IT企业架构的首选,分布式的处理方式越来越受到业界的青睐。

而java作为WEB开发中的主流语言,尤其作为适合开发大型项目的语言:

java集中式架构到分布式架构的演变_第1张图片

所以本篇博文来了解一下java技术选型中从集中式到分布式的演变。

java集中式项目架构

所谓集中式系统就是指由一台或多台主计算机组成中心节点,数据集中存储于这个中心节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统所有的功能均由其集中处理。也就是说,集中式系统中,每个终端或客户端及其仅仅负责数据的录入和输出,而数据的存储与控制处理完全交由主机来完成。

集中式系统最大的特点就是部署结构简单,由于集中式系统往往基于底层性能卓越的大型主机,因此无需考虑如何对服务进行多个节点的部署,也就不用考虑多个节点之间的分布式协作问题。

现在比较流行的java集中式架构就是采用SSM(springMVC、spring、mybatis)的三层MVC架构。

java集中式架构到分布式架构的演变_第2张图片

采用系统功能模块图表示就是这样的:

java集中式架构到分布式架构的演变_第3张图片

存在的潜在问题:
1.模块之间耦合度太高,其中一个升级其他都得升级,资源浪费
2.开发困难,各个团队开发最后都要整合一起,重新打包部署
3.系统的扩展性差
4.不能灵活的进行分布式部署(针对某一个功能模块进行升级)
5.不能有效的支持高并发

java集中式项目架构向分布式的过渡

随着PC机性能的不断提升和网络技术的快速普及,大型主机的市场份额变得越来越小,很多企业开始放弃原来的大型主机,而改用小型机和普通PC服务器来搭建分布式计算机

对业内新闻比较关注的,一定知道阿里巴巴在2009年发起了一项"去IOE"运动。因为阿里巴巴从2008年开始各项业务都进入了井喷式的发展阶段,这对于后台IT系统的计算与存储能力提出了非常高的要求,一味地针对小型机和高端存储进行不断扩容,无疑会产生巨大的成本。同时,集中式的系统架构体系也存在着诸多单点问题,完全无法满足互联网应用爆炸式的发展需求。因此,为了解决业务快速发展给IT系统带来的巨大挑战,从2009年开始,阿里集团启动了"去IOE"计划,其电商系统开始正式迈入了分布式系统时代。

分布式都有什么好处呢?

1、组件分布在网络计算机上

2、组件之间仅仅通过消息传递来通信并协调行动

严格讲,同一个分布式系统中的计算机在空间部署上是可以随意分布的,这些计算机可能被放在不同的机柜上,也可能在不同的机房中,甚至分布在不同的城市。无论如何,一个标准的分布式系统在没有任何特定业务逻辑约束的情况下,都会有以下几个特征:

1、分布性

分布式系统中的多台计算机都会在空间上随意分布,同时,及其的分布情况也会随时变动

2、对等性

分布式系统中的计算机没有主/从之分,既没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有节点都是对等的。副本(Replica)是分布式系统最常见的概念之一,指的是分布式系统对数据和服务提供的一种冗余方式。在常见的分布式系统中,为了对外提高可用的服务,我们往往会对数据和服务进行副本处理。数据副本是指在不同的节点上持久化同一份数据,当某一个节点上存储的数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题最为有效的手段。另一类副本是服务副本,指多个节点提供同样的服务,每个节点都有能力接收来自外部的请求并进行相应的处理

3、并发性

在一个计算机网络中,程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储等,如何准确并高效地协调分布式并发操作也成为了分布式系统架构与设计中最大的挑战之一

4、缺乏全局时钟

一个典型的分布式系统是由一系列空间上随意分布的多个进程组成的,具有明显的分布性,这些进程之间通过交换消息来进行相互通信。因此,在分布式系统中,很难定义两个事件究竟谁先谁后,原因就是因为分布式系统缺乏一个全局的始终控制序列

5、故障总是会发生

组成分布式系统的所有计算机,都有可能发生任何形式的故障。一个被大量工程实践过的黄金定理是:任何在设计阶段考虑到的异常情况,一定会在系统实际运行中发生,并且,在系统实际运行中还会遇到很多在设计时未考虑到的异常故障。所以,除非需求指标允许,在系统设计时不能放过任何异常情况

6、处理单点故障

在整个分布式系统中,如果某个角色或者功能只有某台单机在支撑,那么这个节点称为单点,其发生的故障称为单点故障,也就是通常说的SPoF(Single Point of Failure),避免单点而对关键就是把这个功能从单机实现变为集群实现,当然,这种变化一般会比较困难,否则就不会有单点问题了。如果不能把单点变为集群实现,那么一般还有两种选择:

(1)给这个单点做好备份,能够在出现问题时进行恢复,并且尽量做到自动恢复

(2)降低单点故障的影响范围

负载均衡

下面再看我们前面的例子,此时当我们系统中并发数量加大,比如说平时我们系统中只有500并发量,即最多同时访问500个连接,而如果此时我们系统有1000个人同时访问,那之前的集中式框架肯定承载不住了,此时我们可以使用nginx技术:

java集中式架构到分布式架构的演变_第4张图片

Nginx(发音同engine x)是异步框架的 Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存。Nginx 的编写有一个明确目标就是超越 Apache Web 服务器的性能。Nginx 提供开箱即用的静态文件,使用的内存比 Apache 少得多,每秒可以处理大约四倍于 Apache 的请求。 低并发下性能与 Apache 相当,有时候还低于,但是在高并发下 Nginx 能保持低资源低消耗高性能。还有高度模块化的设计,模块编写简单。配置文件简洁。

当然如果这个系统使用一段时间还是会出现问题:

1、系统无法有效进行水平扩展即集群不能针对功能模块

2、用户存在重复登录的问题

针对第二点:需要session共享,是以session广播的形式,比较消耗资源,宽带。

如果要达到10000并发

拆分和单点登录

需要20台服务器做tomcat集群。当tomcat集群中节点数量增加,服务能力先增加后下降。

所以集群中节点数量不能太多,一般也就5个左右。

需要按照功能点把系统拆分,拆分成独立的功能工程,可以单独为某一个节点添加服务器,需要系统之间配合才能完成整个业务逻辑这就叫做分布式。

很早期的公司,一家公司可能只有一个Server,慢慢的Server开始变多了。每个Server都要进行注册登录,退出的时候又要一个个退出。用户体验很不好!你可以想象一下,上豆瓣 要登录豆瓣FM、豆瓣读书、豆瓣电影、豆瓣日记…真的会让人崩溃的。我们想要另一种登录体验:一家企业下的服务只要一次注册,登录的时候只要一次登录,退出的时候只要一次退出。怎么做?这就引出了我们的单点登录系统,即在分布式的服务中,所有子系统统一使用一个登陆系统,做到一次登录与一次退出。

java集中式架构到分布式架构的演变_第5张图片

集群:相当于同一个工程代码拷贝多份部署到多台服务器,每台服务器单独独立部署运行。

分布式架构:把系统按照模块拆分成多个子系统;多个子系统相互协作才能完成业务流程系统之间需要进行通信。

优点

1、把模块拆分,使用接口通信,降低模块之间的耦合度。

2、把项目拆分成若干个子项目,不同的团队负责不同的子项目。

3、增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。

4、可以灵活的进行分布式部署。

缺点

1、系统之间交互需要使用远程通信,需要开发接口,增加工作量。

2、各个模块有一些通用的业务逻辑无法公用。

SOA

SOA:Service Oriented Architecture面向服务的架构。也就是把工程都拆分成服务层工程、表现层工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。工程都可以独立部署。

java集中式架构到分布式架构的演变_第6张图片

成熟系统架构

下面是一个大型网站成熟的分布式系统架构,这个架构图使用了比较流行的java技术,很好的做到了分布式架构:

java集中式架构到分布式架构的演变_第7张图片

dubbo和zookeeper区别

看了上面的架构图,看到了Dubbo作为了各个子系统的服务注册中间件,那么我们同样听说过这样一个技术ZooKeeper,它是一个分布式的,开放源码的分布式应用程序协调服务,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

所以他和dubbo什么区别呢?

看下面这张图:

java集中式架构到分布式架构的演变_第8张图片

可以说zookeeper是是dubbo推荐的注册中心,可以这样形象的比喻:dubbo是动物…zookeeper是动物园的管理员!

你可能感兴趣的:(java)