首页> 中国专利> 使用连接加标签来支持基于云的多租户环境

使用连接加标签来支持基于云的多租户环境

摘要

适用于连接池的连接加标签的系统和方法,包括使用连接加标签来支持基于云的多租户环境。根据实施例,所述系统包括:连接池,包括多个连接对象,所述多个连接对象提供软件应用可以用来请求访问数据库的连接,其中,可以根据特定应用的配置来给所述连接中的每一个加标签;以及连接池逻辑,识别被加标签为高成本连接的连接,并且对创建或重新利用高成本连接以服务来自多个租户或租户应用的请求进行控制。根据实施例,所述系统包括连接池逻辑,所述连接池逻辑识别被加标签为高成本连接的连接并且在连接的总数低于特定阈值时避免使用这些高成本连接来服务请求。

著录项

  • 公开/公告号CN104871134A

    专利类型发明专利

  • 公开/公告日2015-08-26

    原文格式PDF

  • 申请/专利权人 甲骨文国际公司;

    申请/专利号CN201480003575.7

  • 申请日2014-04-23

  • 分类号

  • 代理机构中国国际贸易促进委员会专利商标事务所;

  • 代理人欧阳帆

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-18 10:40:55

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-14

    授权

    授权

  • 2015-09-23

    实质审查的生效 IPC(主分类):G06F9/50 申请日:20140423

    实质审查的生效

  • 2015-08-26

    公开

    公开

说明书

(版权声明)

本专利文件的公开的一部分包含受版权保护的材料。版权所有者 不反对任何人对专利文档或专利公开内容按照在美国专利商标局可以 公开得到的文件或记录中出现得那样进行传真复制,但是除此之外在 任何情况下都保留所有版权。

优先权要求

本申请要求在2013年4月26日提交的发明名称为“SYSTEM  AND METHOD FOR CONNECTION LABELING FOR USE WITH  CONNECTION POOLS”的美国临时专利申请No.61/816610(受权 人卷号No.ORACL-05448US0)、在2013年6月6日提交的发明名称 为“SYSTEM AND METHOD FOR CONNECTION LABELING FOR  USE WITH CONNECTION POOLS”的美国专利申请No.13/912086 (受权人卷号No.ORACL-05448US1)、在2013年4月26日提交的 发明名称为“SUPPORT FOR CLOUD-BASED MULTI-TENANT  ENVIRONMENTS USING CONNECTION LABELING”美国临时专 利申请No.61/816623(受权人卷号No.ORACL-05449US0)和在2013 的6月6日提交的发明名称为“SUPPORT FOR CLOUD-BASED  MULTI-TENANT ENVIRONMENTS USING CONNECTION  LABELING”的美国专利申请No.13/912098(受权人卷号No. ORACL-05449US1)的优先权,上述申请中的每一个通过引用并入于 此。

技术领域

本发明的实施例总体上涉及连接池(connection pool),特别是 涉及包括使用连接加标签来支持基于云的多租户环境的、适用于连接 池的连接加标签(connection labeling)的系统和方法。

背景技术

一般而言,连接池是数据库连接对象的高速缓存。连接对象代表 可被软件应用用来与数据库连接的物理数据库连接。在运行时间,应 用可以从池请求连接。如果池包含可满足请求的连接,那么它向应用 返回连接。如果没有发现连接,那么新连接可以被创建并且被返回给 应用。应用使用连接来访问数据库以执行工作,然后将连接返回给池。 然后可以使连接可用于后来的连接请求。

创建连接可能在时间和资源上均成本高昂。例如,诸如网络通信、 认证、事务登记和内存分配之类的任务均对创建连接对象所花费的时 间和资源的量有贡献。连接池允许重新利用这种连接对象,并且减少 必须创建对象的次数。

连接池的一个示例是Oracle通用连接池(Oracle Universal  Connection Pool,UCP),所述UCP提供了用于高速缓存JDBC连 接的连接池。数据库密集的Java应用可以使用连接池来提高系统资 源的性能利用。UCP连接池可以使用任何JDBC驱动程序来创建物理 连接,所述物理连接然后由池维护。可以基于应用的性能和可用性要 求,通过用于优化池行为的特性来配置连接池。

发明内容

在诸如云环境或融合应用(Fusion Application)多租户环境之类 的多租户环境的情况中,由于容纳多个租户以及例如维持每个不同租 户对数据库访问之间的安全的需要,连接类型可能非常复杂。这些复 杂的连接被认为是高成本的连接。对于提高系统性能和/或在云环境内 操作的应用的性能,处理高成本连接的方法可能是有用的。

根据实施例,在此描述了用于连接池的连接加标签的系统和方法, 包括使用连接加标签来支持基于云的多租户环境。根据实施例,所述 系统包括:连接池,包括多个连接对象,所述多个连接对象提供软件 应用可以用来请求访问数据库的连接,其中,可以根据特定应用的配 置来为所述连接中的每一个加标签;以及连接池逻辑,识别被加标签 为高成本连接的连接,并且对创建或重新利用高成本连接以服务来自 多个租户或租户应用的请求进行控制。根据实施例,所述系统包括连 接池逻辑,所述连接池逻辑识别被加标签为高成本连接的连接并且在 连接的总数低于特定的阈值时避免使用这些高成本连接来服务请求。

附图说明

图1示出了根据实施例的适用于连接池的连接加标签的系统。

图2进一步示出了根据实施例的适用于连接池的连接加标签的系 统。

图3进一步示出了根据实施例的适用于连接池的连接加标签的系 统。

图4进一步示出了根据实施例的适用于连接池的连接加标签的系 统。

图5是示出了根据实施例的适用于连接池的连接加标签的处理的 流程图。

图6示出了根据实施例的包括使用连接加标签来支持基于云的多 租户环境的、适用于连接池的连接加标签的系统。

图7进一步示出了根据实施例的包括使用连接加标签来支持基于 云的多租户环境的、适用于连接池的连接加标签的系统。

图8是示出根据实施例的包括使用连接加标签来支持基于云的多 租户环境的、适用于连接池的连接加标签的处理的流程图。

具体实施方式

根据实施例,在此描述包含连接池的系统,其中,系统可以识别 高成本连接,并且,当连接的总数低于特定的阈值时,避免使用这些 高成本连接来服务请求。根据实施例,所述系统可以与允许经由连接 池访问数据库的基于云的或多租户的云环境一起使用或者提供对其的 支持。

根据实施例,这允许连接池使用新的物理连接来服务来自不同的 应用、诸如来自不同的租户应用的连接请求,而不会招致可能已入池 的其它连接(例如,其它的租户连接)的重新初始化花销。

连接加标签

图1示出了根据实施例的适用于连接池的连接加标签的系统。如 图1所示,诸如融合应用环境之类的应用服务器/数据库环境100可以 包含数据库102或者提供对数据库102的访问。进一步如图1所示, 该系统还包含连接池逻辑104,连接池逻辑104控制105连接池106 中的对象的创建和使用,连接池106包含当前正使用的连接108和空 闲的连接110。

软件应用109可以在使用连接之前初始化从连接池检索的连接 111。初始化的示例包括简单状态重新初始化或更复杂的初始化,其中 简单状态重新初始化需要应用代码内的方法调用,更复杂的初始化包 含需要网络上的往返行程的数据库操作。后一种类型的初始化的成本 可能相当大。

诸如Oracle通用连接池(UCP)之类的一些连接池允许使用连接 池特性来配置它们的连接池。所述特性已得到并设定了通过池启用的 数据源实例可获得的方法。这些方法是以编程方式对池进行配置的便 捷方式。如果未设定池特性,那么连接池使用默认特性值。

图2进一步示出了根据实施例的适用于连接池的连接加标签的系 统。

根据实施例,给连接加标签允许应用将任意的名称/值对 (name/value pair)附到连接上。应用然后可以从连接池请求具有期 望的标签的连接。通过使特定的标签与特定的连接状态相关联,应用 可以从池检索已初始化的连接并且可以避免重新初始化的时间和成 本。连接加标签不会对用户定义的密钥或值强加任何意义;任何用户 定义的密钥和值的意义仅由应用来定义。

例如,如图2所示,连接池可包含当前在使用的多个连接,该多 个连接在此被指示为连接A 112和B 114。连接中的每一个可以被加 标签。在图2所示的示例中,连接A 112被加标签(蓝),而连接B 114 被加标签(绿)。这些标签/颜色是出于例示的目的而提供的。根据各 种实施例,可以使用不同类型的标签来区分不同的连接类型。

进一步如图2所示,连接池还可以包含多个空闲的连接,该多个 空闲的连接在此被指示为连接C 116、D 118、E 120、F 122、G 124 和N 126。空闲连接中的每一个可类似地被加标签,在本例示中被加 标签为(蓝)或(绿),同样地,这些标签/颜色是出于例示的目的而 提供的。

进一步如图2所示,根据实施例,如果软件应用130希望通过使 用特定类型的连接,例如(红)连接,对数据库提出请求,那么它可 提出getConnection(红)请求132。作为响应,连接池逻辑将创建在 此被指示为X 134(红)的新的(红)连接;或者把现有的空闲连接 从(蓝或绿)重新利用为(红),该空闲连接在此被指示为E 135(红)。

图3进一步示出了根据实施例的适用于连接池的连接加标签的系 统。

根据实施例,各软件应用可利用成本函数回调来提供针对该应用 定义与重新利用连接相关联的成本的配置信息136以及诸如高成本连 接和阈值之类的附加配置信息。

例如,特定的应用可以考虑:将(蓝)连接重新利用为(红)连 接的成本具有50的值,将(绿)连接重新利用为(红)连接的成本具 有80的值,高成本连接具有70的值,而合理的阈值为10。这些值的 意义类似地由应用来定义,并且以上是出于例示的目的而提供的。根 据各种实施例,可以使用不同的数值或非数值的值来区分不同的连接 成本。

根据实施例,连接池逻辑在池中可用的每个连接上迭代。对于每 个连接,它调用成本方法。成本方法的结果是代表将连接重新配置为 需要的状态所需的成本的估值的整数。该值越大,则重新配置连接的 成本越高。

根据实施例,由应用138提供的配置信息140可以由连接池逻辑 在确定141是否创建或重新利用连接(特别是高成本连接)时使用。 例如,根据实施例,系统可以执行与由下面的伪代码所示的处理类似 的处理。

高成本:70

阈值:10

getConnection(红)

如果完美的匹配(红)

那么 将其返回

否则 找到最便宜连接

如果 最便宜连接的成本<高成本

那么 重新利用该连接

否则 如果 连接之和<阈值

那么 创建新连接并施加标签

否则 连接之和≥阈值 那么 重新利用最便宜连接

使用以上例示,根据实施例,特定的应用可以将高成本定义为70, 并且将阈值定义为10。

当系统接收到对特定连接类型(例如,红)的请求时,连接池逻 辑首先确定是否存在完美的/现有的匹配(即,空闲的红连接),并且, 如果是,则返回供该应用使用的连接。否则,连接池逻辑找到可以重 新利用(为红连接)的最便宜连接。如果最便宜连接的成本小于高成 本(70),那么该连接被重新利用。否则,如果连接的总数小于阈值 (10),那么新的(红)连接被创建,被相应地加上标签,并且被提 供给应用。否则,如果连接的总数大于或等于阈值,那么最便宜连接 被重新利用为(红)连接142。

图4进一步示出了根据实施例的适用于连接池的连接加标签的系 统。

根据实施例,当活动连接和空闲连接的总数少时,使用特定类型 的高成本连接的请求可能导致创建新的高成本连接Y 144(红)而非 重新利用现有的(可能也是高成本的)连接。然后,新类型的连接可 以用于后来的该类型的请求。虽然所提出的方法可能导致创建高成本 连接而非重新利用现有的(可能也是高成本的)连接,但该方法可以 提供可观的性能改善,特别是在一般利用高成本连接的例如多租户云 环境之类的复杂环境中。

图5是示出了根据实施例的适用于连接池的连接加标签的处理的 流程图。如图5所示,根据实施例,在步骤152中,系统接收与数据 库连接的请求(例如,getConnection(红))。

在步骤154中,系统确定是否存在完美的/现有的连接匹配(红)。 如果存在现有匹配连接,那么在步骤156中,返回现有的(红)连接。 否则,在步骤158中,找到最便宜的现有非匹配连接(例如,蓝、绿)。

在步骤160中,系统确定最便宜的非匹配连接成本是否小于高成 本。如果是,那么在步骤162中,最便宜的非匹配连接被重新利用为 (红)连接。

在步骤164中,系统确定所有连接的和是否小于阈值,如果是, 那么在步骤166中,创建新连接,并且对新连接施加适当的连接标签 (红)。否则,在步骤168中,如果所有连接的和大于或等于阈值, 那么最便宜的连接被重新利用为(红)连接。

以上描述了确定是否创建或重新利用连接(特别是高成本连接) 的一种方法。根据其它的实施例和实现,可以使用其它的方法。此外, 如上所述,标签/颜色是出于例示的目的而提供的;根据其它的实施例, 可以使用不同类型的标签来区分不同的连接类型。

具有多租户环境的连接加标签

根据实施例,适用于连接池的连接加标签的系统和方法可以包括 使用连接加标签来支持基于云的多租户环境。根据实施例,这种类型 的环境可被认为是“应用即服务”(Application as a Service,AaaS) 环境。

图6示出了根据实施例的包括使用连接加标签来支持基于云的多 租户环境的、适用于连接池的连接加标签的系统。如图6所示,多租 户云环境可以包括诸如融合应用环境之类的应用服务器/数据库环境 100,应用服务器/数据库环境100包括或提供对数据库102的访问, 以供基于云的环境170中的多个租户或租户应用172、174、176使用。 进一步如图6所示,系统还包括连接池逻辑104,连接池逻辑104控 制连接池106中的对象的创建。

经由云171被租户访问的软件应用可以在使用从连接池检索到的 连接178之前初始化该连接。如上所述,初始化的示例包括简单状态 重新初始化或更复杂的初始化,其中简单状态重新初始化需要应用代 码内的方法调用,更复杂的初始化包含需要网络上的往返行程的数据 库操作,并且后一种类型的初始化的成本可能相当大。并且,如上所 述,给连接加标签允许应用将任意的名称/值对附到连接,并且,应用 然后可以从连接池请求具有期望的标签的连接。通过使特定的标签与 特定的连接状态相关联,应用可以从池检索已初始化的连接并且可以 避免重新初始化的时间和成本。同样,连接加标签不对用户定义的密 钥或值强加任何意义;任何用户定义的密钥和值的意义仅由应用来定 义。

例如,如图6所示,连接池可以包含多个当前在使用的连接108, 这些连接在此被指示为A 112和B 114;并且还可以包含多个空闲的 连接110,这些连接在此被指示为连接C 116、D 118、E 120、F 122、 G 124和N 126。连接中的每一个可类似地被加标签,在本例示中被加 标签为(蓝)或(绿),同样,这些标签/颜色是出于例示的目的而提 供的;根据各种实施例,可以使用不同类型的标签来区分不同的连接 类型。

图7进一步示出了根据实施例的包括使用连接加标签来支持基于 云的多租户环境的、适用于连接池的连接加标签的系统。

根据实施例,如果软件应用130希望通过使用例如(红)连接之 类的特定类型的连接来对数据库提出请求,那么它可以提出 getConnection(红)请求180。作为响应,连接池逻辑将创建新的(红) 连接,或者把现有的空闲连接从(蓝或绿)重新利用为(红)。

根据实施例,连接池包括支持应用使用configure()回调以指定 “SET CONTAINER”或设定容器,以把特定连接从一个租户重新利 用为另一个,这具有在特定的数据库连接上切换租户的效果。

根据实施例,每个软件应用可以利用成本函数回调来提供针对该 应用定义与重新利用连接相关联的成本的配置信息136和诸如高成本 连接和阈值之类的附加配置信息。

例如,特定的应用可以考虑:将(蓝)连接重新利用为(红)连 接的成本具有50的值,将(绿)连接重新利用为(红)连接的成本具 有80的值,高成本连接具有70的值,而合理的阈值为10。这些值的 意义类似地由应用来定义,并且以上是出于例示的目的而提供的。根 据各种实施例,可以使用不同的数值或非数值的值来区分不同的连接 成本。

根据实施例,连接池逻辑在池中可用的每个连接上迭代。对于每 个连接,它调用成本方法。成本方法的结果是代表将连接重新配置为 需要的状态所需的成本的估值的整数。该值越大,则重新配置连接的 成本越高。

根据实施例,由应用提供的配置信息140可以由连接池逻辑在确 定是否创建或重新利用连接(特别是高成本连接)时使用。例如,根 据实施例,系统可以执行与上面所例示的处理类似的处理。

使用上面的例示,根据实施例,特定的应用可以将高成本定义为 70,将阈值定义为10。当系统接收到对于特定连接类型(例如,红) 的请求时,连接池逻辑首先确定是否存在完美的/现有的匹配(即,空 闲的红连接),并且,如果是,那么返回供该应用使用的连接。否则, 连接池逻辑找到可被重新利用(为红连接)的最便宜连接。如果最便 宜连接的成本小于高成本(70),那么该连接被重新利用。否则,如 果连接的总数小于阈值(10),那么在此被指示为Z 184(红)的新 的(红)连接被创建,被相应地加标签,并且被提供给应用。否则, 如果连接的总数大于或等于阈值,那么最便宜连接被重新利用为在此 被指示为E 182(红)的(红)连接。

根据实施例,当活动连接和空闲连接的总数少时,使用特定类型 的高成本连接的请求可能导致创建新的高成本连接,而不是重新利用 现有的(可能也是高成本的)连接。新类型的连接然后可以用于后来 的该类型的请求。

虽然所提出的方法可能导致创建高成本连接而不是重新利用现有 的(可能也是高成本的)连接,但该方法可以提供可观的性能改善, 特别是在一般利用高成本连接的例如多租户云环境之类的复杂环境 中。

例如,如图7所示,系统可以由基于云的环境中的多个租户或租 户应用使用。在这种多租户环境中,由于需要容纳多个租户以及例如 维持各不同租户对数据库的访问之间的安全,连接类型可能非常复杂。 使用在此描述的方法,可以提高在云环境内操作的应用的性能。

图8是示出了根据实施例的包括使用连接加标签来支持基于云的 多租户环境的、适用于连接池的连接加标签的处理的流程图。如图8 所示,根据实施例,在步骤192中,提供多租户云环境,该多租户云 环境包括或提供对数据库的访问以供多个租户或租户应用使用。

在步骤194中,提供连接池,该连接池提供了软件应用可用来请 求访问数据库的连接,其中连接可以根据特定应用的配置来被加标签。

在步骤196中,软件应用被配置为与连接加标签和连接成本信息 一起支持来自多个租户或租户应用的连接请求。

在步骤198中,识别被加标签为高成本连接的连接,并且,系统 随后对创建或重新利用高成本连接以服务来自多个租户或租户应用的 请求进行控制。

示例性实现

以下提供根据各种实施例的在Oracle UCP环境中连接加标签可 以如何用于连接池的例示性的示例。根据其它的实施例,可以提供例 如适用于WebLogic服务器连接池或其它类型的连接池的功能。

在Oracle UCP中,连接加标签(CL)提供识别高成本连接的机 构。根据实施例,CL必须至少支持离散值;并且可以支持一系列的 值。CL可以提供重新使用高成本连接阈值(Reuse High-Cost  Connection Threshold)配置参数(类似于最小池尺寸(MinPoolSize)、 最大池尺寸(MaxPoolSize))。当最低成本的可用连接是高成本连接 时,系统可以针对重新使用高成本连接阈值以及针对最小池尺寸测试 当前池尺寸。如果当前<最小或当前<阈值,那么系统返回新连接。否 则,如果(当前>=阈值),那么系统返回最低成本的高成本连接。当 不存在可用的连接时,当前行为保持(即,受制于最大池尺寸地返回 新连接,并且,如果>=最大池尺寸,那么受制于超时地等待可用连接, 等等)。

根据实施例,UCP连接加标签行为UCP的连接加标签特征在连 接加标签回调实现中支持cost()方法,以便任何应用确定初始化和重 新初始化池中的连接的成本。池支持可以按应用要求完全定制的灵活 成本值范围。池使用从回调返回的cost()值,以确定服务各连接请求 的最佳候选连接。它总是选择具有最低成本值的连接。最低成本值为 0指示无重新初始化,而Integer.MAX_VALUE强迫池使用全新的物 理连接来服务请求。池区分具有施加的标签的连接和没有标签的连接。 当连接加标签被激活时,池总是首先检查池中具有施加的标签的连接, 并且只有当它不能找到任何可用的已加标签的连接来服务请求时,它 才尝试从没有标签的连接找到可用的连接。当这失败时,如果池仍具 有增大空间,那么它尝试创建新的物理连接。

根据各种实施例,以上的变型可以包括:

添加新的UCP池特性ConnectionLabelingHighCost(在UCP数 据源PoolxxxDataSource上也可用)。当设定值大于0时,具有等于 或大于特性值的成本值的连接被认为是“高成本”连接。默认值是 Integer.MAX_VALUE。例如,如果特性值被设定为5,那么根据加标 签回调计算的成本值等于或大于5的任何连接被认为是高成本连接。

添加新的UCP池特性——高成本连接重新使用阈值 HighCostConnectionReuseThreshold(在UCP数据源 PoolxxxDataSource也可用)。当设定值大于0时,这指定了总连接 数的阈值,超出该阈值,允许连接加标签重新使用池中的高成本连接 来服务请求。低于该阈值,连接加标签使用可用的低成本连接或者创 建全新的物理连接来服务请求。例如,如果特性值被设定为20,那么 当不存在可用的低成本连接且总连接达到20时,连接加标签重新使用 高成本连接。HighCostConnectionReuseThreshold的默认值为0。要 使该特性生效,连接加标签回调必须被同时登记。有效的连接加标签 回调登记继续激活连接加标签。当最低成本结果等于或大于 ConnectionLabelingHighCost时,入池逻辑在成本选择迭代之后检查 新阈值。该新阈值被检查时的总连接数应考虑活动连接创建请求的数 量(池已具有提取该信息的代码)。所述检查必须考虑最小池尺寸和 最大池尺寸。注意,即使在达到新阈值之后,具有成本值 Integer.MAX_VALUE的任何已加标签的连接也将不被重新使用。这 与在未设定新阈值和ConnectionLabelingHighCost时的现有连接加标 签行为一致。

根据实施例,不存在不重新使用池中的无标签(无状态)的连接 来服务具有标签的连接请求(即,加标签请求)的要求。一旦 HighCostConnectionReuseThreshold已达到且连接加标签被激活,则 相比于创建新的物理连接,池仍偏好无标签(无状态)的连接。

根据实施例,为了支持特殊的连接加标签回调实现,对于应用认 为是高成本的任何连接,这种回调中的cost()方法(1)在池尺寸达到 HighCostConnectionReuseThreshold之前,仅返回针对这种连接的 Integer.MAX_VALUE,并且(2)在阈值已达到之后返回实际的高成 本值。这有效地禁止了在低于阈值的情况下现有的UCP代码重新使用 高成本连接来服务请求。回调实现可针对阈值动态地检查池尺寸。

可以使用包含一个或更多个处理器、根据本公开的教导编程的存 储器和/或计算机可读存储介质的一个或更多个传统的通用或专用数 字计算机、计算设备、机器或微处理器来方便地实现本发明的实施例。 如软件领域的技术人员将明白的,基于本公开的教导,熟练的编程人 员可以很容易地准备适当的软件代码。

在一些实施例中,本发明包括计算机程序产品,该计算机程序产 品是其上/其中存储有可用于对计算机进行编程以执行本发明的处理 中的任一个的指令的非暂时性存储介质或计算机可读介质(介质)。 存储介质的示例可包括但不限于包括软盘、光盘、DVD、CD-ROM、 微驱动器和磁光盘在内的任何类型的盘、ROM、RAM、EPROM、 EEPROM、DRAM、VRAM、闪存设备、磁卡或光卡、纳米系统(包 含分子存储器IC)或适于存储指令和/或数据的任何类型的介质或设 备。

出于例示和描述的目的,已经提供了对本发明的实施例的以上描 述。其非意在穷举或者将本发明限于所公开的确切形式。对于本领域 技术人员来说许多修改和变型是明显的。为了最佳地解释本发明的原 理及其实际应用,选择和描述了实施例,由此使得本领域其他人员能 够理解本发明的各种实施例以及适合于所设想的特定用途的各种修 改。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号