博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分布式微服务系统概述
阅读量:4298 次
发布时间:2019-05-27

本文共 2550 字,大约阅读时间需要 8 分钟。

 

目录


 

概述

  近年来,随着访问量的增加和对速度的要求,后台网站的架构经历了一代又一代的迭代,在实践项目中,到底采用怎样的架构,要考虑到很多因素,最重要的是并发量和成本,微服务系统到底多"微"才合适呢,现阶段项目有哪些典型的架构,架构拆分的演变如下。

实践一:传统项目的架构

  • 特点:

  1) all in one(所有模块在一起,技术也不分层),

  注:像05年06年那会儿,就是这样,把代码写在jsp里面,那时候还没有分层的概念,把所有的东西都写在一起,这就叫做all in one
  2) servlet(jsp)

       3)并发量10

  • 缺点:

  1.   并发量差
  2.   容错性差(不具有高可用性)

注:不具有高可用性的意思是,比如当用户访问时,服务器后台因为一些原因导致服务器崩溃,用户就能直接看到错误页面,服务器也因为错误从而停止运行(宕机),这就叫做不具有高可用性。

实践二:MVC架构

  • 特点:

  1.   分层开发(可以提高并发量)
  2.   数据库和项目分离部署
  3. 并发量200
  • 缺点:

  1.   并发量差
  2.   容错性差(不具有高可用性)
  • 图示

这里写图片描述

实践三:统一服务层(nginx分流)

  • 特点:

  1.   高可用反向代理
  2.   项目采用多台服务器集群部署
  3.  并发量200
  • 缺点:

  1.   并发量提高(1000+)
  2.  容错性提高(具有高可用性)

       注:一般的it公司,基本都是采用集群架构,因为这种架构方式已经基本能满足需求了,但是一些大型项目,这种方式就显然是力不从心了,只能采用分布式的架构方式

  • 图示

这里写图片描述

  • 需解决的技术问题

1.session共享问题

我们都知道,session是会话,即一个用户访问服务器的时候,就会产生一个session,这个session会一致伴随着这个用户的访问全程,直到用户关闭浏览器结束这次会话,那么问题来了,问,挖掘技术哪家强?咳咳,错了,是如果用户访问服务器时,这台服务器挂掉了(宕机),那么原先保存在这台服务器上的session也肯定挂掉了,那么就会产生一个后果,就是这个用户原本访问好好的,现在突然session没有了,而session没有了就意味着需要用户重新登陆才能进行一些相应操作,这显然是不行的,这样的服务用户体验实在太差了,根本不能满足互联网行业的用户需求,那么这就涉及到一个session共享的问题,即怎么把原有的session从一台服务器转移到另一台服务器上,但是怎么解决呢?有多种方案,但咱们今天先说两种:

第一种解决方案:

    用Tomcat集群复制(广播模式)来共享session:这种解决方案是利用Tomcat来进行集群复制,把每个服务器上的session都共享式的都复制一遍,保证每个服务器上都有着一个用户的session数据

    应用场景:在传统项目中一般这么应用,因为传统项目的用户量少,可以承担压力,但当到互联网项目时,这种方式就绝对不可取了,打个比方,比如用户量有100万,那么就需要在每个服务器上都复制这100万个用户的session,这样做显然会极大的消耗系统资源,使系统变得极为臃肿和不稳的,所以在互联网项目里是绝对不会采用这种方式的

    缺点:当有大量用户时,服务器的压力会亚历山大,所以只适合用户访问量小的传统项目

第二种解决方案:

    用第三方redis服务器来存储session,用这种方式来存储session的话,只需当前正在使用的项目把所有session都放在redis里面,当有其他项目需要使用时,就可以直接从redis中直接获取session,从而解决了这个问题

  示例如图:

这里写图片描述

2.nginx集群配置(待完善)

    (1)反向代理

 

   1)实现功能一

         打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页面中;

         准备:安装tomcat,关闭防火墙,tomcat主页为8080

         步骤:

              第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置

             第二步 在 nginx 进行请求转发的配置(反向代理配置)

       测试:

           

    实现功能二:

       使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中,nginx 监听端口为 9001

      访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080

      访问 http:// 192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081

      准备:

      (1)准备两个 tomcat 服务器,一个 8080 端口,一个 8081 端口

      (2)创建文件夹和测试页面

      步骤:

         找到 nginx 配置文件,进行反向代理配置

       

        测试:

    (2)负载均衡

           1、实现效果

             (1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8080和 8081 端口中
           2、准备工作
            (1)准备两台 tomcat 服务器,一台 8080,一台 8081
            (2)在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建页面 a.html,用于测试
          3、在 nginx 的配置文件中进行负载均衡的配置

           

    (3)动静分离

  

    (4)高可用集群配置

 

  • 实践三:原始的面向服务的分布式架构(SOA)

 

  • 特点:

  1.   表现层和服务层解耦合
  • 缺点

  1.  网络抖动:当有大量用户访问时,可能会出现service层的延迟现象,而web层因为长期得不到响应,则会抛出时间超出异常
  2. 进程繁忙:这个的意思和前边的差不多,都是指service层业务太多,顾不上web层的请求,web层的请求就只能一直在那等着,时间长了也就抛出超时异常了
     
  •  图示:

这里写图片描述

实践四:采用服务治理中间件Dubbo的分布式架构(SOA)

  • 图示

这里写图片描述

  • 特点:

1.当服务器启动时service会把所有的对象通过dubbo注册给zookeeper,而以后每次需要请求获取对象时,就可以直接从dubbo中异步获取,不需要再去访问service层,这样就解决了服务层网络抖动和服务层进程繁忙的弊端。zeekeeper可以看成是一个数据库,用来存储数据的,具体的原理以后会专门开篇文章描述它。

  • 技术要点——Dubbo

转载地址:http://uxnws.baihongyu.com/

你可能感兴趣的文章
《C#程序设计经典300例》读书笔记
查看>>
《C++面向对象程序设计-基于Visual C++ 2010》读书笔记
查看>>
Condition实现原理
查看>>
gitflow+maven使用详解
查看>>
WordCount运行笔记
查看>>
有限域的某一章节的某一小部分的简单证明
查看>>
机器学习实战第六章支持向量机照葫芦画瓢算法实践
查看>>
2013.7.23 新人CF上水的6题
查看>>
这几天刷CF水题感觉还好的几道题~
查看>>
VKCUP 2012 B Taxi 个人认为一道比较好的题目(虽然已经被否决),还是来发下代码吧
查看>>
HDU上一道最小生成树模板题的练习
查看>>
CCNU第五周数学练习的一道水题
查看>>
CCNU第五周赛前练习:不可摸数
查看>>
安卓7.1源码——制作OTA包 (平台msm8909)
查看>>
安卓7.1源码——改屏幕旋转(横屏) (平台msm8909)
查看>>
安卓7.1系统源码 添加wifi预置信息 (平台msm8909)
查看>>
安卓7.1系统源码 屏蔽sim卡的提示 (平台msm8909)
查看>>
安卓7.1系统源码 屏蔽系统home键 (平台msm8909)
查看>>
安卓7.1系统源码 获取framework.jar包 (平台msm8909)
查看>>
安卓7.1系统源码 默认开root的权限 (平台msm8909)
查看>>