# 程序接口
程序接口是应用程序与数据库的必要纽带,是数据库提供给数据库应用程序使用的,可以访问操作数据库的软件层。程序接口具备以下能力:
数据库驱动
数据库驱动是应用程序和数据库服务之间的一种接口,可以将特定开发语言的操作,翻译为数据库服务能识别的指令,同时将数据库服务的回应和数据翻译为该语言能使用的数据结构和数据内容。
YashanDB提供JDBC、C、Python、ADO.NET、ODBC等各类驱动,满足业界通用的各类应用程序开发。
YashanDB的网络服务提供客户端与数据库服务间,以及数据库服务与数据库服务间的连接通讯能力。在正式的数据库使用环境中,包括应用程序、数据库服务实例,通常都运行在不同的计算机上。通过YashanDB的网络服务,应用程序可以连接到数据库实例上进行操作,数据库实例间也可以完成数据同步和内部任务协同等。
客户端通常通过数据库提供的驱动接口连接数据库服务。数据库服务的实例先启动到可以正常提供服务阶段,客户端获取到数据库服务的通讯地址后,通过驱动接口连接到数据库服务的连接监听器上。
连接监听器是数据库实例内部的一个工作线程,专门处理客户端来的连接请求。
连接监听器的处理内容为:
连接监听器为客户端连接分配好会话后,由会话来负责后续与客户端会话交互通讯,连接监听器将继续监听下一个客户端连接请求。
在独占线程会话模式下,连接监听器将为每个客户端连接创建一个独立的工作线程(Worker),专门为该客户端连接会话服务。客户端发送的每个请求都会得到快速响应,只有会话断连时,对应的工作线程才会被销毁。
通过配置参数MAX_REACTOR_CHANNELS可以控制系统的会话模式,值为0时表示独占线程模式。
独占线程模式下,工作线程只能被一个会话连接使用,在没有请求需要处理时,线程进入等待。新连接被接入时,处于等待状态的工作线程也不能为新的连接服务,而是需要重新创建新的线程来处理。连接较少时独占线程会话模式性能优势明显,但在会话连接较多时,独占线程模式会占用大量的运行资源,从而导致需要处理的任务因为没有足够多的运行资源而需要更多的时间来执行,间接影响到数据库服务的性能。
共享线程会话模式下,系统以线程池的方式管理工作线程。当有新的客户端连接被接纳后,会从线程池里分出一个空闲线程来处理该会话连接。会话完成后,该线程将回到线程池中,等待新的客户端会话连接。
配置参数MAX_REACTOR_CHANNELS为非0值时,系统为共享线程会话模式。
客户端连接会话数达到会话线程池配置MAX_WORKERS后,可能会出现线程池中所有线程都被使用的情况。如果此时有新的客户连接请求被接入,则需要排队等待,直到有会话完成了事务操作并释放线程后,按顺序获得会话线程并完成请求处理。
共享线程会话模式有以下优点:
但共享线程会话模式也存在一些缺点,例如连接会话过多时请求响应可能会变慢;故障排查变得复杂等。建议仅在连接会话相对较多的情况下再考虑开启共享线程会话模式。
主备复制网络是YashanDB数据库内部主库与备库、备库与级联备库之间进行数据复制的通讯网络,通常用于传送redo日志、数据文件等,使得数据库实例间数据达到一致,方向是从主库发送至备库,或从备库发送至级联备库。
内部互联总线(IN,Interconnect Bus)是为了解决YashanDB数据库内部大量节点间进行频繁的海量数据通讯的使用场景而构造的高可靠、高性能、高吞吐、低时延的网络通讯服务。
内部互联总线主要用于以下场景:
内部互联总线采取多路复用技术,支持多个会话共同使用一个或多个网络链路进行通讯。内部互联总线将连接到某一个节点的具有相同通讯功能的一个或多个链路封装在一个连接池中,以池化方式进行管理。内部模块可以根据自身需要,从连接池里选择某个随机链路或特定链路进行消息发送。
内部互联总线中每一个链路都有特定的接收监听器线程进行消息接收处理。由于消息通过连接池发送,可能在同一个链路中会存在多个会话的消息,接收监听线程通过消息头中的消息类型及会话ID,将收到的消息逐一分发到对应会话的消息队列中,再由会话的工作线程进行处理。
由于连接池及内部线程资源的划分,通常将同一个节点的多个连接池规划为多个不同功能的通道,这些通道之间资源隔离、相互不影响。例如控制通道专门进行控制指令的收发,消息小而少,对时延要求高;而数据通道专门进行大量数据的发送,消息大且频繁,对吞吐要求高。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。