最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

环球头条:1-基础入门

来源:博客园

Dubbo

分布式项目重要概念

所有通过互联网连接的、对所有网民公开的项目都是互联网项目。传统项目例如企业内部使用的办公OA系统、人事管理HR系统、客户关系CRM系统等不对公网用户开放的项目。也就是说,传统项目和互联网项目所面相的用户群体不同,传统项目面向企业员工,互联网项目面向所有网民。

通常传统项目使用的用户和并发情况都是可预测的,可以根据目标人群和人数进行技术选型和开发,但面向网民的项目是不可预测的。并且在用户体验和稳定性方面,传统项目的要求比较宽松,但是互联网项目对于网民的可选择性比较多,针对用户体验也更严格。


(资料图片仅供参考)

对于用户体验,也就是从:美观、功能、速度、稳定性四个方面进行优化。美观和功能由产品经理和UI开发人员负责,速度和稳定与后端开发息息相关。稳定性由全面的和深度的测试来解决,只要功能能够经受多次测试考验,稳定性自然也就上升了。但是速度是没有衡量标准的,业务的复杂与否、技术方案是否成熟、以及代码质量都会影响一套业务的运行速度。

衡量一个网站速度与否的标准很难说,但最好的效率是:打开一个新页面在0.36秒内,页面内跳转在0.018秒内。

根据佛经《僧祗律》记载:一刹那为一念,二十念为一瞬,二十瞬为一弹指,二十弹指为一罗预,二十罗预为一须臾,一日一夜有三十须臾。一瞬间为0.36秒,一刹那为0.018秒。

互联网项目的特点为:用户多、流量大、并发高、海量数据、易受攻击、功能繁琐、变更快。

互联网项目重要概念

  1. 响应时间:一个请求从开始到接收响应所花费的总体时间。
  2. 并发数:系统同时能够处理的请求数量。
    1. 并发连接数:客户端向服务端发起请求,建立TCP连接,美妙装服务器连接的总TCP数量。
    2. 请求数:也称为QPS(Query Per Second)每秒多少请求。
    3. 并发用户数:单位时间内的用户数量
  3. 吞吐量:单位时间内系统能处理的请求数量。
    1. QPS:Query Per Second 每秒查询数;
    2. TPS:Transations Per Second 每秒事务数;

事务数:从页面开始加载到加载结束为一次事务,也就是一个客户机向服务器阿松请求然后服务器作出反应的过程,服务器在发送请求时开始计时,收到服务器响应后结束计时,由此来计算使用的时间和事务个数。请求与连接:所有的css、js资源的获取都是一次独立的请求,所有Connection为keep-alive的请求都表示为保持连接的请求,通过这个请求可以扩展其他请求。也就是说,请求数一定大于等于连接数。数量比:QPS >= 并法连接数 >= TPS

大型项目架构目标

  1. 高性能:提供快速的访问体验。
  2. 高可用:网站服务可以一直正常访问。
  3. 可伸缩:通过硬件的增加和减少,提高和降低处理能力。
  4. 高可扩展:降低系统耦合度,方便的进行模块的新增和减少。
  5. 安全性:提高网站安全进行数据加密和安全存储等策略。
  6. 敏捷性:随机应变,快速响应,能够快速通过市场需求进行功能迭代。

集群和分布式

集群就是一个业务模块部署多份,分布式就是将一个大的业务系统拆分成小的服务,部署在多个服务器上:集群就是很多人做一样的事,分布式就是很多人做不一样的是,但是这不一样的是最终构成了一件大事。

集群项目时为了避免单个服务的负载压力过大导致速度下降,分布式是为了解耦多个功能模块,以保证每个模块能够方便的管理,从而动态的对模块级进行性能调优。

分布式和集群并不冲突,通常分布式会对单个服务进行集群部署,在性能和便捷性上都能够达到很好的效果。

架构演进

单体架构

最早的架构为单体架构,也就是所有的模块写在一个项目中,然后打包成一个包放到web服务器中。单体架构也可以实现集群部署,叫做单体多机部署。

优点:开发部署简单,小型项目首选。

缺点:

  • 项目启动慢:单体项目变大之后,因为代码的变多导致项目的启动会变得缓慢;
  • 可靠性差:因为项目的代码都写在一个项目中,任何一个模块的异常都可能导致其他模块的级联异常导致整个项目的宕机;
  • 可伸缩、扩展性、可维护性差:当所有代码都在一个项目中的时候,一旦想对一个模块进行迭代更新,就需要对项目进行整体的打包和部署或者集群部署;

垂直架构

垂直架构是将单体架构的多个模块拆分到多个独立的项目中,组成多个独立的单体架构。

垂直架构可以解决单体项目中不易扩展和伸缩性差的问题,因为将模块细分了,所以进行部署的时候可以更加精细的对服务进行管理,单个服务的变小也可以让服务的启动速度变快。

单体架构存在的问题:

  • 重复功能太多:因为垂直架构的多个子项目之间相互没有调用,所以公共模块要在每个项目中都存在,这就导致每个服务中都存在相同的功能;

分布式架构

解决了垂直架构中重复代码过多的问题,将重复的功能和模块抽离成独立的服务,其他需要模块直接调用公共模块服务进行数据交互。

服务之间的调用称作RPC(Remote Procedure Call 远程过程调用),远程调用只是一个大的概念,可以使用很多的协议和技术栈来实现,例如HTTP REST风格、Java RMI规范、WebService SOAP协议、Hession等的。

分布式架构存在的问题:当被调用方的地址出现更改,所有使用此服务的调用方都需要对应的更改地址。

SOA架构

SOA(Service-Oriented Architecure 面向服务架构)是一个组件模型,规定将不同功能模块进行拆分,然后通过服务之间定义好的接口和标准相互联系。

ESB(Enterparise Service Bus 企业服务总线)主要提供了服务之间调用和交互的介质、渠道。主要功能包括:负载均衡、流量控制、加密处理、服务监控、异常处理、监控告警等等。

通过此架构,就可以解决服务之间调用路径被硬编码的问题,主需要告诉服务总线要调用的服务,由总线进行服务的分发和处理。

微服务架构

微服务架构实际上和SOA架构相似,微服务架构强调将业务彻底的组件化和服务化,将一个系统拆分成独立的小应用,每个小应用都是独立的服务。服务之间通常采用轻量的RestAPI接口。

微服务架构中每个小服务可自由的选择开发技术,不限制任何技术和语言,只需要提供标准规范的业务接口即可。甚至每一个微服务都可以由独立的团队来进行开发运维。

因为每个微服务使用独立的存储系统,所以是一种去中心化的服务架构。

服务的独立拆分和每个服务的完整性,使得每个小服务都可以实现自动化的部署,方便了自动化部署、测试、运维。

Dubbo概述

Dubbo是SOA时代的产物,也是为分布式系统开发的组件。是阿里巴巴公司开发的开源的、高性能的、轻量级的Java RPC框架。致力于提供高性能的、透明化的RPC远程调用服务方案,以及SOA服务治理方案。

Dubbo架构

  • Consumer:服务消费者,调用其他服务的接口;
  • Provider:服务提供者,暴露接口给其他服务;
  • Registry:注册中心,进行服务注册和发现;
  • Moitor:服务管理者,统计服务的调用次数和调用时间的监控中心;
  • Container:服务运行时容器;
  1. 服务启动时通常会在一个容器中,这个容器通常为Tomcat。
  2. 启动服务后,服务会将自身信息,如IP、端口和其他URL信息注册到注册中心。
  3. 服务消费者在进行服务调用的时候,要去注册中心获取服务提供者的相关信息。
  4. 注册中心会根据服务消费者的要求提供服务提供者信息。
  5. 服务消费者根据注册中心获得的服务提供者信息进行远程调用。
  6. 服务管理者进行调用时间和调用次数的统计。

Linux安装Zookeeper

Zookeeper是Dubbo官方推荐的注册中心。

  1. Zookeeper需要Java环境,所以需要确保已经提前安装了Java7以上的版本。

  2. 官网下载安装包:apache-zookeeper-3.5.10-bin.tar.gz

  3. 解压到任意路径下:tar -zxvf apache-zookeeper-3.5.10-bin.tar.gz

  4. 复制配置文件./conf/zoo_sample.cfg名称为zoo.cfg,然后将配置文件中的 dataDir属性更改为软件所在路径内的文件夹即可。

  5. ./bin/zkServer.sh就是项目启动、关闭、状态查看的脚本:

# 启动项目./zkServer start# 停止项目./zkServer stop# 查看状态./zkServer status

zk默认的端口是2181,可以在配置文件中更改。

SSM搭建

以下将演示一个服务消费方的控制层远程调用一个服务提供方的服务层的流程。

服务提供者

  1. 引入以下相关的依赖:
org.apache.dubbodubbo2.7.4.1org.apache.curatorcurator-framework4.0.0org.apache.curatorcurator-recipes4.0.0
  1. application.xml文件中,在头部引入dubbo相关的语法规范配置:
  1. 添加dubbo的配置:
  1. 将Service注入注解替换为Dubbo提供的注解:org.apache.dubbo.config.annotation.Service

服务消费者

服务消费者主要要做的是对其他服务的调用,但是常规情况下是对接口进行注入,然后获取到实现类来完成方法的调用。

  1. 当然在服务消费者中同样需要引入dubbo和zookeeper的依赖。以及在配置文件中对dubbo进行配置:
  1. 在服务消费者中,创建一个接口与服务提供者的接口相同,然后在进行注入的时候通过:org.apache.dubbo.config.annotation.Reference注解进行注入。此注解的作用就是远程注入。

    1. 从zookeeper中获取到usereSrvice的url;
    2. 进行远程接口调用;
    3. 对调用结果和参数封装成代理对象,给变量赋值;
  2. 第一次启动接口进行访问时间会稍微长一点这是正常现象。在访问结束之后会提示接口绑定错误:22222,此接口是dubbo监控系统的端口,如果让两个服务在同一个机器上运行肯定会出现端口占用问题。可以在配置文件中进行端口设置:

由以上情况可知,服务提供方和服务消费方都存在相同的接口,这个接口主要用作service层。为保证一致可以将所有的服务层接口抽离为独立的模块,由各个服务作为依赖引入进行使用:

关键词: 服务提供者 配置文件 其他服务