十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本章介绍分布式架构的底层技术。主要说明面试过程中可能被问到的技术点。
创新互联公司一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!为您提供做网站、成都网站制作、成都网页设计、微信平台小程序开发、成都网站开发、成都网站制作、成都软件开发、成都app软件开发公司是成都本地专业的网站建设和网站设计公司,等你一起来见证!Duboo
服务治理
Zookeeper
Dubbo是一个分布式、高性能、透明化的RPC(远程服务调用)服务框架, 提供服务自动注册、自动发现等高效服务治理方案,可以和Spring无缝集成。
当网站流量很小时,可以把所有功能都部署在一个项目中,叫单体应用框架。
随着流量的增大,应用拆分必不可少,此时会出现多个垂直应用,在美格尔应用中处理各自的业务逻辑。
当垂直应用越来越多,应用之间的交互不可避免,将核心业务抽离出来,作为独立的服务,逐渐形成稳定的服务中心。此时,用于提高业务复用和整合的 分布式服务框架 RPC 是关键。
当服务越来越多,容量的评估、小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高集群利用率的 资源调度和治理中心 SOA 是关键。
Provider
,暴露服务的服务提供方Consumer
,调用远程服务的服务消费者Registry
,服务注册与发现的服务中心Monitor
,统计服务的调用次数和调用时间的监控中心Container
,服务运行容器下面来解释上述的两张图:
配置 | 配置说明 |
---|---|
dubbo:service | 服务配置,用于暴露服务,定义服务的元信息,一个服务可用多个协议暴露,也可以注册到多个注册中心,对应ServiceBean |
dubbo:reference | 引用配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。对应ReferenceBean |
dubbo:protocol | 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。对应ProtocolConfig |
dubbo:application | 应用配置,用于配置当前应用信息,不管应用是服务提供方还是消费方 。对应ApplicationConfig |
dubbo:module | 模块配置,用于配置当前模块信息,可选。对应ModuleConfig |
dubbo:registry | 注册中心配置。对应RegistryConfig |
dubbo:monitor | 监控中心配置。对应MonitorConfig |
dubbo:provider | 提供者配置,当没有配置ProtocolConfig 或ServiceBean 时,采用该配置项,可选。对应ProviderConfig |
dubbo:consumer | 消费方配置,当没有配置ReferenceBean 时,采用该配置项,可选。对应ConsumerConfig |
dubbo:method | 方法配置 |
dubbo:argument | 参数配置 |
协议名称 | 实现描述 | 连接 | 使用场景 |
---|---|---|---|
dubbo协议(默认) | 传输:mina、netty、grizzly 序列化:hessian2、java、json | 缺省采用单一长连接和NIO异步通信,TCP | 1.传入传出参数数据包较小 2.消费者数量远大于生产者 3.常规远程服务调用 4.不适合传输大数据量的服务,比如文件、视频等 |
rmi | 传输:rmi java 序列化:java标准序列化 | 连接个数:多连接 连接方式:短连接 传输协议:TCP/IP 传输方式:BIO | 1.常规RPC调用 2.传入传出参数大小包混合 3.可传文件 4.不支持防火墙穿透 5.生产者和消费者数量差不多 |
hessian | 传输:servlet容器 序列化:hessian2 | 连接个数:多连接 连接方式:短连接 传输协议:HTTP 传输方式:同步传输 | 1.生产者的数量比消费者多 2.可传文件 3.传入传输参数数据包较大 4.跨语言传输 |
http | 传输:servlet容器 序列化:表单序列化JSON 采用Spring的httpInvoker实现,基于表单的远程服务调用 | 连接个数:多连接 连接方式:短连接 传输协议:HTTP 传输方式:同步传输 | 1.生产者多余消费者 2.数据包大小混合 3.需同时给应用程序和浏览器使用的服务 |
webservice | 传输:HTTP 序列化:SOAP文本序列化 | 连接个数:多连接 连接方式:短连接 传输协议:HTTP 传输方式:同步传输 | 1.系统集成 2.跨语言传输 |
thrift | 与thrift rpc实现集成,并在基础上修改了报文头 | 长连接、NIO异步传输 | |
memcached | |||
redis |
hessian(默认)、dubbo(不建议)、fastjson、Java自带序列化
默认是Netty的NIO通信,还支持mina、Grizzly、Http等
集群容错方案 | 说明 |
---|---|
Failover Cluster(默认) | 失败自动切换,自动重试其他服务器 |
Failfast Cluster | 快速失败,立即报错,只发起一次调用 |
Failsafe Cluster | 失败安全,出现异常时,直接忽略 |
Failback Cluster | 失败自动恢复,记录失败请求,定时重发 |
Forking Cluster | 并行调用多个服务器,只要一个成功立即返回 |
Broadcast Cluster | 广播逐个调用所有生产者,任意一个报错则报错 |
读操作建议使用Failover
失败自动切换,默认重试两次
写操作建议使用Failfast
快速失败,调用一次失败就报错
负载均衡测量 | 说明 |
---|---|
Random LoadBalance(默认) | 随机,按权重分配随机概率 |
RoundRobin LoadBalance | 轮询,按公约后的权重设置轮询比率 |
LeastActive LoadBalance | 最少活跃调用数,相同活跃数的随机 |
ConsistendHash LoadBalance | 一致性Hash,相同参数的请求总是发到同一生产者 |
服务暴露:在容器启动时,按照Spring的加载流程初始化BeanDefinition,把服务提供者解析成ServiceBean
。然后调用export()
方法进行暴露。(暴露过程相当长,以后慢慢看吧)
ServiceBean
拿到对外提供服务的实际类ref(如HelloWorldImpl)ProxyFactory
的getInvoker()
方法使用ref生成一个AbstractProxyInvoker
实例。到这一步就完成了到Invoker的转换Invoker
转换为Exporter
,这个根据不同的协议会有不同的实现
DubboProtocol
的export()
,主要是打开socket侦听服务,并接收客户端发来的各种请求RmiProtocol
的export()
服务消费,分为消费端的初始化和服务引用过程。
初始化:
NettyClient
对象DubboInvoker
消费端的调用链,创建消费端Invoker实例的服务代理并返回服务引用:
ExchangeClient.send()
ExchangeClient.request()
,返回一个ResponseFuture
,一直阻塞到拿到返回值ReferenceBean
的init()
方法调用Protocal
的ref()
方法生成Invoker
实例Invoker
实例转换成客户端需要的接口类另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。