当前位置: 首页 > article >正文

一文了解Oracle数据库如何连接(2)

上一篇文章介绍了oracle常用的四种链接方式:专用模式,会话池,DRCP和共享模式,原文链接

一文了解Oracle数据库如何连接(1) - 墨天轮

 除了以上四种常规链接模式,还有三种高级模式本文在这里再做一下介绍

一. 同时使用客户端会话池和 DRCP

将用户界面和数据库分离的应用程序编程风格的最重要效果是:许多用户可以共享较少数量的数据库会话。可以将这一现象形象地比作一个漏斗。我们可以定义一个“漏斗系数”,即用户数量与数据库中的会话/进程数量的比值。

然而,漏斗系数的大小存在实际限制。在现代多线程应用程序的场景下,每个应用程序进程在其会话池中需要一定数量的最小会话。如果应用程序进程数量增长到数万甚至更多,这一最小会话数量可能会变得非常高,从而有过载数据库的风险。即使是设计良好的多线程应用程序,也可能需要额外的措施来保护数据库。

一种高效的方法是结合使用客户端池化和 DRCP,从而形成两个漏斗,如图 6 所示:

在这种模式下,应用程序代码与之前展示的多线程代码相同,但客户端会话池(如 Java 中的 UCP)通过 DRCP 连接到数据库。当工作线程调用以获取会话时,会发生以下两件事:

  1. 使用进程自身池中可用的一个会话。
  2. 通过 DRCP 代理(broker),将该会话与数据库中的实际会话关联。

队列和效率

  • 两个步骤都有一个队列,因此可能需要等待,直到会话启动或可用。
  • 但是,一旦会话分配给工作线程,就没有额外的开销。
  • 由于存在两个漏斗,总漏斗系数可以更高,总漏斗系数是客户端漏斗系数和 DRCP 漏斗系数的乘积。

会话释放的要求

无论是仅使用客户端会话池还是单线程应用程序结合 DRCP,工作线程都必须在数据库操作完成后立即释放会话。会话释放后不能保留任何会话状态

这种模式结合了客户端池化和 DRCP 的优势,进一步提升了数据库资源的利用效率,并减少过载的风险。

二. 代理驻留连接池 (Proxy Resident Connection Pooling, PRCP)

Oracle 提供了另一种技术,称为 代理驻留连接池(PRCP),该池驻留在代理服务器而非数据库服务器上。PRCP 的一个主要优势是,将池本身所需的资源从数据库服务器中分离出来,从而为实际的数据库工作节省宝贵的数据库服务器资源。

从应用程序端来看,PRCP 的实际行为与 DRCP 完全相同。PRCP 的部署不需要修改应用程序,只需连接到运行 PRCP 的服务器,而不是直接连接数据库服务器。PRCP 是 Oracle 连接管理器(Connection Manager, CMAN)的一部分,CMAN 是 Oracle 客户端完整安装的一部分。

图 7 显示了 PRCP 的工作原理。与图 4 中的 DRCP 模型相比,PRCP 的池化工作发生在数据库服务器之外:


在 PRCP 中,DRCP 中的代理进程(Broker)被连接管理器的多个线程和进程所取代。在外向端,连接管理器中的线程通过 TCP/IP 连接持有数据库会话。

与 DRCP 一样,客户端可以是单线程的。当客户端需要会话时,它们从 PRCP 内部的可用池中分配一个会话。由于池化操作不再由数据库执行,PRCP 节省了数据库资源。但这也引入了一个额外的网络跳跃(network hop),即应用程序与数据库之间需要通过代理服务器进行中转。


使用 PRCP 的要求

  • 和 DRCP 一样,客户端应用程序必须将用户界面与数据库操作分离
  • 必须显式地按需获取和释放数据库会话。

PRCP 提供了一种有效的方法来减少数据库服务器的负载,同时保留了与 DRCP 相似的操作方式。然而,由于额外的网络跳跃,其性能可能受到影响,因此需要根据实际应用场景权衡利弊。

三. 同时使用客户端会话池和 PRCP

正如多线程客户端可以将其会话池连接到 DRCP,多线程客户端也可以将其会话池连接到 PRCP。这种模式下,会有两个位置供工作线程排队以获取会话,因此形成两个漏斗。这在图 8 中有所展示:


需要注意的是,PRCP 的两个示意图显示的是 PRCP 的专用模式(dedicated mode),在此模式下,每个传入连接由一个专用线程处理。PRCP 还可以运行在**共享模式(shared mode)**下,在该模式下,传入的连接共享较少数量的线程来处理传入流量。

共享模式为 PRCP 的传入和传出两端分别引入了漏斗(因此也引入了队列)。 

总结 三种高级连接模式对比 

特性PRCP客户端池和 DRCP客户端池和 PRCP
应用风格需要应用代码显式调用 session get/release需要多线程编程需要多线程编程
编程模型任意需要多线程编程需要多线程客户端
优点在数据库之外进行池化允许多个应用程序使用会话池共享较少数量的数据库会话允许多个应用程序使用会话池共享较少数量的数据库会话,并在数据库之外进行池化
缺点额外的网络跳转需要多线程编程;数据库资源用于池化需要多线程客户端;额外的网络跳转
部署注意事项单线程应用的 DRCP 替代方案应用程序端会话池和 DRCP 或 PRCP 的结合,特别适用于具有大量应用服务器的微服务或类似配置应用程序端会话池和 DRCP 或 PRCP 的结合,特别适用于具有大量应用服务器的微服务或类似配置

整理翻译至oracle官方文件,原文的如下链接

https://download.oracle.com/ocomdocs/global/Application_Programming_Using_Pooling.pdf


http://www.kler.cn/a/452855.html

相关文章:

  • MyBatis的插件运行原理,与如何编写一个插件
  • 19_HTML5 Web Workers --[HTML5 API 学习之旅]
  • 前端(八)js介绍(1)
  • cad学习 day7-9
  • 基于Spring Boot的中国戏曲文化传播系统
  • (六)循环神经网络_基本的RNN
  • 【Rust自学】7.1. Package、Crate和定义Module
  • Maven怎么会出现一个dependency-reduced-pom.xml的文件
  • MongoDB数据库安全
  • centos系统如何安装kubectl和部署kube-apiserver
  • 基于微信小程序的校园访客登记系统
  • 解读 Edge SCDN构建安全高效的网络护盾
  • 【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块
  • Java基础(Json和Java对象)
  • VSCode 插件开发实战(四):使用 React 实现自定义页面
  • [x86 ubuntu22.04]双触摸屏的触摸事件都响应在同一个触摸屏上
  • 问题:Flask应用中的用户会话(Session)管理失效
  • 飞牛 fnos 使用docker部署 Watchtower 自动更新 Docker 容器
  • 深度学习在计算机视觉中的应用:对象检测
  • 【论文阅读】DynamicControl :一种新的controlnet多条件控制方法
  • 面试真题:Integer(128)引发的思考
  • 用Unity做没有热更需求的单机游戏是否有必要使用AssetBundle?
  • windows C#-对象和集合初始值设定项(上)
  • 永磁同步电机负载估计算法--自适应扩张状态观测器
  • Windows内置的服务器IIS(Internet Information Services)托管网站
  • Java全栈项目 - 智能考勤管理系统