Java分布式初窥

2019-10-15 18:16:01  卢浮宫  版权声明:本文为站长原创文章,转载请写明出处


一、学习是不能停的,进阶分布式

    什么是分布式系统?

        传统系统的三层架构,项目项目跑在一个tomcat(还有其他形式)中,但是随着业务及客户的增加,单个服务器是无法满足需求的。

    这个时候按照功能点把系统拆分成多个功能模块同时为某些模块(节点)分配服务器,然后构建服务器之间的通信协同工作完成业务操作。

    这就可以称之为分布式。


二、分布式和集群

    1、集群

        简单来说集群就是多个人做同一个事情。比如随着用户量增大,你担心你的网站挂掉,然后你买了三个服务器同时跑你的项目,

    通过负载均衡在一个挂掉后指向另一个服务器以保证用户正常访问。

    2、分布式

        随着业务的增加,你的网站从单一的文字浏览增加到用户注册、用户订阅、留言、搜索...同时又是在单一的服务器。

    那么在某个用户注册峰值时就可能回影响到其他模块的体验,或则你的服务器不能同时满足多个模块的同时高效工作。这个时候你

    把聊天,浏览,搜索单独拆分出来并分配服务器。这就是分布式

    3、一个很有意思的图(侵删)

         


三、分布式优缺点

    1、优点

        ①增大了系统容量

            简而言之就是业务太多,一台机器已经无法满足需求了。使用分布式系统以缓解这一问题。

        ②增强系统的可用性

            一个大型的系统是不允许存在单点故障的(一点出错,整个系统崩了)。分布式可以在某些节点出错时继续使用。

            从某种角度说,这分散了软件系统的故障影响,但是增加了硬件出错的概率。

        ③提升模块重用度

            单独模块可以提取单独复用

        ④开发效率高

            可以并行开发以提升效率

    2、缺点

        ①项目架构复杂度增加

        ②部署量增加

        ③节点之间通信一定程度上增加响应时间

        ④项目维护复杂度增加


四、分布式面临的问题

    1、当服务越来越多时,相应的URL增加导致分配越来越困难

    2、随着业务的发展,服务间的依赖关系会越来越复杂

    3、随着服务的增加,容量问题暴露,需要多少机器支撑?什么时候增加机器?

    4、服务越来越多,沟通成本也会越来越大。如:参数约定等

    5、问题排查,出现问题后应该找谁?

    6、核心功能出现问题后故障影响过大。


五、分布式概念及实现

    1、负载均衡:控制网关进行请求分发

        Nginx:高性能、高并发的web服务器;功能包括负载均衡、反向代理、静态内容缓存、访问控制;工作在应用层

    LVS: Linux virtual server,基于集群技术和Linux操作系统实现一个高性能、高可用的服务器;工作在网络层

    2、负载均衡算法

        常用的分布式算法有:随机、轮询、最小资源数、hash

    3、分布式缓存

        当DB负载过高时既要为机器增加缓存以减轻DB压力

        常用的分布式缓存有:memcache、redis等

    4、分布式文件系统

        项目中资源文件共享。

        常用的分布式文件系统:MogileFS/TFS/HDFS/Amazon S3/OpenStack Swift等

        PS:可以使用CDN或第三方支持解决效率问题

    5、分布式RPC

        分布式一个很基础的问题就是通信。机器之间的底层通信是TCP/IP,Socket。

        其实现的最简单的就是http。同时也有一个RPC框架

        如Facebook的Thrift, 阿里的Dubbo,点评的Pigeon等

    6、分布式数据库

        一个良好的分布式数据库会设计到分库、分表。同时业界也有比较成熟的解决方案。

        这里引入几个概念:

            

    7、分布式消息中间件

        主要用于解决异步消息、应用耦合、流量削峰等问题。

        比较常用的有:老一辈的ActiveMQ/RabbitMQ, 新一点的,阿里的RocketMQ,LinkedIn的Kafka等

    8、分布式session

        分布式session把session存放在所有Tomcat(也可以是其他形式)都可以访问的地方。

        比较常用的有:分布式缓存session,保存到数据库,主从复制,session服务器等。




更多精彩请关注guangmuhua.com


最新评论: