CN109587212A - 一种基于GraphQL的微服务架构设计方法、设备及存储设备 - Google Patents

一种基于GraphQL的微服务架构设计方法、设备及存储设备 Download PDF

Info

Publication number
CN109587212A
CN109587212A CN201811291057.6A CN201811291057A CN109587212A CN 109587212 A CN109587212 A CN 109587212A CN 201811291057 A CN201811291057 A CN 201811291057A CN 109587212 A CN109587212 A CN 109587212A
Authority
CN
China
Prior art keywords
graphql
request
micro services
server
architecture design
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN201811291057.6A
Other languages
English (en)
Inventor
刘佩
高明媛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Yiguo Interactive Technology Co Ltd
Original Assignee
Wuhan Yiguo Interactive Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Yiguo Interactive Technology Co Ltd filed Critical Wuhan Yiguo Interactive Technology Co Ltd
Priority to CN201811291057.6A priority Critical patent/CN109587212A/zh
Publication of CN109587212A publication Critical patent/CN109587212A/zh
Withdrawn legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种基于GraphQL的微服务架构设计方法、设备及存储设备,其方法包括:将GraphQL应用于微服务架构中,利用GraphQL对用户的请求进行集中处理,然后再发送至管理服务中心;在GraphQL服务器中,利用特定的缓存策略对用户请求进行缓存,缓解服务器压力;利用粘合的方法解决GraphQL服务器中资源重复和字段冲突的问题,利用RPC方式对GraphQL服务器中的资源进行整合。一种基于GraphQL的微服务架构设计设备及存储设备,用于实现基于GraphQL的微服务架构设计方法。本发明的有益效果是:本发明提供的技术方案可以将客户端的多次请求聚合成一次请求,减少多次请求带来的延迟;采用了缓存策略,能够降低服务器压力。

Description

一种基于GraphQL的微服务架构设计方法、设备及存储设备
技术领域
本发明涉及微服务领域,尤其涉及一种基于GraphQL的微服务架构设计方法、设备及存储设备。
背景技术
传统单体架构将系统分成具有不同职责的层次,对应的项目管理也倾向于将大的团队分成不同的职能团队,主要包括:用户交互UI团队、后台业务逻辑处理团队与数据存取ORM团队、DBA团队等。每个团队只对自己分层的职责负责,并对使用方提供组件服务质量保证。如果其中一个模块化组件需要升级、更新,那么这个变更会涉及不同的分层团队,即使升级和变更的改变很小,也需要进行跨团队沟通:需求阶段需要跨团队沟通产品功能,设计阶段需要跨团队沟通设计方案,开发阶段需要跨团队沟通具体的接口定义,测试阶段需要沟通业务回归等事宜,甚至上线都需要跨团队沟通应用的上线顺序。可见在传统的整体架构下,后期的维护成本很高,出现事故的风险很大。在这种情况下,微服务就应运而生。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
而在微服务结构中,简单对象访问协议(SOAP)和REST API接口已非常成熟,GraphQL能够对API中的数据提供一套易于理解的完整描述,使得客户端能够更加准确的获得它需要的数据,GraphQL能够将原有RESTful风格时的多次请求聚合成一次请求,不仅能够减少多次请求带来的延迟,还能够降低服务器压力,加快前端的渲染速度。同时,可以解决单一的后端服务在面对多前端(Android,iOS,mobile web,PC web)的场景下,能够针对同一场景提供不同数据以满足客户端应用展示的需要。这些特性使得GraphQL在微服务架构中更加适用。
发明内容
为了解决上述问题,本发明提供了一种基于GraphQL的微服务架构设计方法、设备及存储设备,一种基于GraphQL的微服务架构设计方法,主要包括以下步骤:
S101:客户端发送资源访问请求至GraphQL服务器;
S102:GraphQL服务器根据接收到的请求,生成对应的类型集合Schema;所述类型集合Schema中包括请求对应的资源数据格式、请求权限的判断方式和请求的路由方式;同时,GraphQL服务器根据缓存策略对请求进行缓存;
S103:GraphQL服务器根据请求权限的判断方式,对客户端请求权限进行判断;筛选出符合权限的请求;
S104:GraphQL服务器对符合权限的请求对应的多个Schema进行组合处理,得到处理后的多个Schema;
S105:GraphQL服务器将处理后的多个Schema发送至管理服务中心;
S106:管理服务中心根据所述多个Schema中请求的路由方式和资源数据格式向远程服务器的API端口发送请求,以获取对应格式的资源数据,并将获取的资源数据返回至GraphQL服务器,GraphQL服务器根据缓存策略对获取的资源数据进行缓存,同时将资源数据返回至客户端;
S107:结束微服务程序。
进一步地,步骤S102中,路由方式为:按照请求数据中的字段进行路由。
进一步地,步骤S102中,缓存策略的具体步骤是:
S201:在GraphQL服务器的API层外的基础设施层缓存请求数据;
S202:在GraphQL服务器中缓存从远程服务器中获取到的资源数据。
进一步地,步骤S201中,在GraphQL服务器的API层外的基础设施层缓存请求数据的方法为:在GraphQL的API层外创建一个新的分层,所述新的分层以连接GraphQL服务器的方式对请求数据进行缓存。
进一步地,步骤S102中,利用粘合的方法处理生成Schema时遇到的重复请求和请求中的字段冲突问题,所述粘合的方法具体为:将不同请求对应的Schema粘合起来并对外暴露统一的接口。
进一步地,步骤S103中,请求权限的判断方式为:首先利用单一服务对请求的有效性进行认证;认证通过以后,由GraphQL服务中的业务服务来判断请求是否符合权限;所述单一服务为GraphQL服务或者一个独立的用户认证服务。
进一步地,步骤S104中,组合处理的方法为:远程过程调用RPC方法。
一种存储设备,所述存储设备存储指令及数据用于实现一种基于GraphQL的微服务架构设计方法。
一种基于GraphQL的微服务架构设计设备,包括:处理器及所述存储设备;所述处理器加载并执行所述存储设备中的指令及数据用于实现一种基于GraphQL的微服务架构设计方法。
本发明提供的技术方案带来的有益效果是:本发明提供的技术方案可以将客户端的多次请求聚合成一次请求,减少多次请求带来的延迟;采用了缓存策略,能够降低服务器压力。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例中一种基于GraphQL的微服务架构设计方法的流程图;
图2是本发明实施例中微服务架构的示意图;
图3是本发明实施例中硬件设备工作的示意图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
本发明的实施例提供了一种基于GraphQL的微服务架构设计方法、设备及存储设备。
请参考图1,图1是本发明实施例中一种基于GraphQL的微服务架构设计方法的流程图,用于图2所示的微服务架构中,具体包括如下步骤:
S101:客户端发送资源访问请求至GraphQL服务器;
S102:GraphQL服务器根据接收到的请求,生成对应的类型集合Schema;所述类型集合Schema中包括请求对应的资源数据格式、请求权限的判断方式和请求的路由方式;同时,GraphQL服务器根据缓存策略对请求进行缓存;
S103:GraphQL服务器根据请求权限的判断方式,对客户端请求权限进行判断;筛选出符合权限的请求;
S104:GraphQL服务器对符合权限的请求对应的多个Schema进行组合处理,得到处理后的多个Schema;
S105:GraphQL服务器将处理后的多个Schema发送至管理服务中心;
S106:管理服务中心根据所述多个Schema中请求的路由方式和资源数据格式向远程服务器的API端口发送请求,以获取对应格式的资源数据,并将获取的资源数据返回至GraphQL服务器,GraphQL服务器根据缓存策略对获取的资源数据进行缓存,同时将资源数据返回至客户端;
S107:结束微服务程序。
步骤S102中,路由方式为:按照请求数据中的字段进行路由。
步骤S102中,缓存策略的具体步骤是:
S201:在GraphQL服务器的API层外的基础设施层缓存请求数据;
S202:在GraphQL服务器中缓存从远程服务器中获取到的资源数据。
步骤S201中,在GraphQL服务器的API层外的基础设施层缓存请求数据的方法为:在GraphQL的API层外创建一个新的分层,所述新的分层以连接GraphQL服务器的方式对请求数据进行缓存。
步骤S102中,利用粘合的方法处理生成Schema时遇到的重复请求和请求中的字段冲突问题,所述粘合的方法具体为:将不同请求对应的Schema粘合起来并对外暴露统一的接口。
步骤S103中,请求权限的判断方式为:首先利用单一服务对请求的有效性进行认证;认证通过以后,由GraphQL服务中的业务服务来判断请求是否符合权限;所述单一服务为GraphQL服务或者一个独立的用户认证服务。
步骤S104中,组合处理的方法为:远程过程调用RPC方法。
请参考图2,图2是本发明实施例中微服务架构的示意图,根据图2,对本发明实施例中的关键步骤做如下详细说明:
一:缓存策略
在将常规的HTTP缓存应用到GraphQL上时,会有一些问题:
1、HTTP缓存通常不支持POST请求或较长的cache key;
2、请求的多样性通常会意味着更低的缓存命中率;
GraphQL是独立于传输层的,所以HTTP并不一定总是有效。但是,GraphQL同时带来了众多新的机会:
1、在访问后端的模式和解析器(resolver)上声明缓存控制信息;
2、模式方案所带来的自动化细粒度缓存控制,而不需要考虑每个请求的命中率。
本发明采用的缓存策略是:
1、在GraphQL的API外的基础设施层缓存请求数据;
2、在GraphQL服务器中缓存从远程服务器中获取到的资源数据。
对于第2项,已有的缓存基础设施依然可用。对于第1项,需要在API之外创建一个新的分层,它能够以感知GraphQL的方式实现诸如缓存这样的功能。从本质上来讲,这种架构能够将复杂性放到GraphQL服务器之外。
二:Schema设计
每一个GraphQL服务都会定义一套类型集合Schema,用以描述可能从哪个服务查询到的数据,每当查询到来,服务器就会根据schema验证并执行查询。
GraphQL独特的Schema设计其实为整个服务的架构带来了非常多的变数,如何设计以及暴露对外的接口决定了本发明内部应该如何实现请求的认证与鉴权以及路由的设计。
从总体来看,本发明的微服务架构暴露的GraphQL接口采用集中式的接口,所有的微服务对外共同暴露一个端点,在这时流量的路由就不是根据请求的URL了,而是根据请求中不同的字段进行路由。
这种路由的方式并不能够通过传统的nginx来做,因为在nginx看来整个请求其实只有一个URL以及一些参数,只有解析请求参数中的查询才能知道客户端到底访问了哪些资源。
本发明的Schema设计下的请求是按照请求中的字段field进行路由的,GraphQL完成了解析查询树的过程,本发明只需要对相应字段实现特定的Resolver处理返回的逻辑就可以了。
然而在多个微服务提供Schema时,需要通过一种机制将多个服务的Schema整合起来,这种整合Schema的思路最重要的就是需要解决服务之间的重复资源和冲突字段问题,如果多个服务需要同时提供同一个类型的基础资源,例如:User可以从多种资源间接访问到。
作为微服务的开发者或者提供方来讲,不同的微服务之间的关系是平等的,需要一个更高级别或者更面向业务的服务对提供整合Schema的功能,确保服务之间的字段与资源类型不会发生冲突。本发明采用粘合的方式解决此问题,具体如下:
GraphQL官方提供了一种名为Schema Stitching的方案,能够将不同服务的GraphQL Schema粘合起来并对外暴露统一的接口,这种方式能够将多个服务中的不同资源粘合起来,能够充分利用GraphQL的优势。
为了打通不同服务之间资源的壁垒、建立合理并且完善的GraphQL API,本发明在上层完成对公共资源的处理;当对整个Schema进行合并时,如果遇到公共资源,就会选用特定的Resolver进行解析,这些解析器的逻辑是在Schema Stitching时指定的。具体代码如下:
本发明在服务层上的业务层对服务之间的公共资源进行定义,并为这些公共资源建立新的Resolver,当GraphQL解析当公共资源时,就会调用在合并Schema时传入的Resolver进行解析和处理。
三:认证与授权
Schema设计的方式决定了认证与授权应该如何组织;在不同Schema设计下,用户的认证与授权方式应该如何去做。
使用GraphQL的所有结构最终都会由一个中心化的服务对外接受来自客户端的GraphQL请求,哪怕它仅仅是一个代理。接下来对本发明的请求认证与授权进行分别说明:
1.认证
首先,用户的认证在多个服务中分别实现是大不合理的,如果需要在多个服务中处理用户认证相关的逻辑,相当于将一个服务的职责同时分给了多个服务,这些服务需要共享用户认证相关的表,users、sessions等等,所以本发明在整个Web服务中,由一个服务来处理用户认证相关的逻辑。这个服务既可以是作为网关代理的GraphQL服务本身,也可以是一个独立的用户认证服务,在每次用户请求时都会通过RPC或者其他方式调用该服务提供的接口对用户进行认证。
2.授权
本发明在GraphQL服务中增加授权的功能,把整个鉴权的过程解耦了,内部的微服务无条件的信任来自GraphQL服务的请求并提供所有的服务。
将鉴权的工作交给GraphQL服务是一种比较好的方式,内部的微服务不需要关心调用者是否有权限访问该资源,鉴权都由最外层的业务服务来处理,实现了比较好的解耦。
请参见图3,图3是本发明实施例的硬件设备工作示意图,所述硬件设备具体包括:一种A设备301、处理器302及存储设备303。
一种基于GraphQL的微服务架构设计设备301:所述一种基于GraphQL的微服务架构设计设备301实现所述一种基于GraphQL的微服务架构设计方法。
处理器302:所述处理器302加载并执行所述存储设备303中的指令及数据用于实现所述一种基于GraphQL的微服务架构设计方法。
存储设备303:所述存储设备303存储指令及数据;所述存储设备303用于实现所述一种基于GraphQL的微服务架构设计方法。
本发明的有益效果是:本发明提供的技术方案可以将客户端的多次请求聚合成一次请求,减少多次请求带来的延迟;采用了缓存策略,能够降低服务器压力。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种基于GraphQL的微服务架构设计方法,其特征在于:包括以下步骤:
S101:客户端发送资源访问请求至GraphQL服务器;
S102:GraphQL服务器根据接收到的请求,生成对应的类型集合Schema;所述类型集合Schema中包括请求对应的资源数据格式、请求权限的判断方式和请求的路由方式;同时,GraphQL服务器根据缓存策略对请求进行缓存;
S103:GraphQL服务器根据请求权限的判断方式,对客户端请求权限进行判断;筛选出符合权限的请求;
S104:GraphQL服务器对符合权限的请求对应的多个Schema进行组合处理,得到处理后的多个Schema;
S105:GraphQL服务器将处理后的多个Schema发送至管理服务中心;
S106:管理服务中心根据所述多个Schema中请求的路由方式和资源数据格式向远程服务器的API端口发送请求,以获取对应格式的资源数据,并将获取的资源数据返回至GraphQL服务器,GraphQL服务器根据缓存策略对获取的资源数据进行缓存,同时将资源数据返回至客户端;
S107:结束微服务程序。
2.如权利要求1所述的一种基于GraphQL的微服务架构设计方法,其特征在于:步骤S102中,路由方式为:按照请求数据中的字段进行路由。
3.如权利要求1所述的一种基于GraphQL的微服务架构设计方法,其特征在于:步骤S102中,缓存策略的具体步骤是:
S201:在GraphQL服务器的API层外的基础设施层缓存请求数据;
S202:在GraphQL服务器中缓存从远程服务器中获取到的资源数据。
4.如权利要求3所述的一种基于GraphQL的微服务架构设计方法,其特征在于:步骤S201中,在GraphQL服务器的API层外的基础设施层缓存请求数据的方法为:在GraphQL的API层外创建一个新的分层,所述新的分层以连接GraphQL服务器的方式对请求数据进行缓存。
5.如权利要求1所述的一种基于GraphQL的微服务架构设计方法,其特征在于:步骤S102中,利用粘合的方法处理生成Schema时遇到的重复请求和请求中的字段冲突问题,所述粘合的方法具体为:将不同请求对应的Schema粘合起来并对外暴露统一的接口。
6.如权利要求1所述的一种基于GraphQL的微服务架构设计方法,其特征在于:步骤S103中,请求权限的判断方式为:首先利用单一服务对请求的有效性进行认证;认证通过以后,由GraphQL服务中的业务服务来判断请求是否符合权限;所述单一服务为GraphQL服务或者一个独立的用户认证服务。
7.如权利要求1所述的一种基于GraphQL的微服务架构设计方法,其特征在于:步骤S104中,组合处理的方法为:远程过程调用RPC方法。
8.一种存储设备,其特征在于:所述存储设备存储指令及数据用于实现权利要求1~7所述的任意一种基于GraphQL的微服务架构设计方法。
9.一种基于GraphQL的微服务架构设计设备,其特征在于:包括:处理器及存储设备;所述处理器加载并执行存储设备中的指令及数据用于实现权利要求1~7所述的任意一种基于GraphQL的微服务架构设计方法。
CN201811291057.6A 2018-10-31 2018-10-31 一种基于GraphQL的微服务架构设计方法、设备及存储设备 Withdrawn CN109587212A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811291057.6A CN109587212A (zh) 2018-10-31 2018-10-31 一种基于GraphQL的微服务架构设计方法、设备及存储设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811291057.6A CN109587212A (zh) 2018-10-31 2018-10-31 一种基于GraphQL的微服务架构设计方法、设备及存储设备

Publications (1)

Publication Number Publication Date
CN109587212A true CN109587212A (zh) 2019-04-05

Family

ID=65921194

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811291057.6A Withdrawn CN109587212A (zh) 2018-10-31 2018-10-31 一种基于GraphQL的微服务架构设计方法、设备及存储设备

Country Status (1)

Country Link
CN (1) CN109587212A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111414378A (zh) * 2020-03-17 2020-07-14 用友网络科技股份有限公司 一种基于GraphQL的类元数据框架
CN112363854A (zh) * 2020-11-11 2021-02-12 南京莱斯信息技术股份有限公司 一种基于新型接口标准前端服务框架优化设计方法
US10922318B2 (en) * 2017-08-25 2021-02-16 Apollo Graph, Inc. Systems and methods for caching queries and query results
CN113032419A (zh) * 2021-04-21 2021-06-25 上海微盟企业发展有限公司 一种多源数据聚合搜索方法、装置、设备及存储介质
US11321159B2 (en) 2019-07-03 2022-05-03 Red Hat, Inc. Interchangeable plugins for detecting conflicts between server-side data and client-side data
CN116821245A (zh) * 2023-07-05 2023-09-29 贝壳找房(北京)科技有限公司 分布式场景下数据聚合同步方法及存储介质

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10922318B2 (en) * 2017-08-25 2021-02-16 Apollo Graph, Inc. Systems and methods for caching queries and query results
US11321159B2 (en) 2019-07-03 2022-05-03 Red Hat, Inc. Interchangeable plugins for detecting conflicts between server-side data and client-side data
CN111414378A (zh) * 2020-03-17 2020-07-14 用友网络科技股份有限公司 一种基于GraphQL的类元数据框架
CN111414378B (zh) * 2020-03-17 2023-08-29 用友网络科技股份有限公司 一种基于GraphQL的类元数据框架
CN112363854A (zh) * 2020-11-11 2021-02-12 南京莱斯信息技术股份有限公司 一种基于新型接口标准前端服务框架优化设计方法
CN112363854B (zh) * 2020-11-11 2023-11-21 南京莱斯信息技术股份有限公司 一种基于新型接口标准前端服务框架优化设计方法
CN113032419A (zh) * 2021-04-21 2021-06-25 上海微盟企业发展有限公司 一种多源数据聚合搜索方法、装置、设备及存储介质
CN113032419B (zh) * 2021-04-21 2022-08-30 上海微盟企业发展有限公司 一种多源数据聚合搜索方法、装置、设备及存储介质
CN116821245A (zh) * 2023-07-05 2023-09-29 贝壳找房(北京)科技有限公司 分布式场景下数据聚合同步方法及存储介质

Similar Documents

Publication Publication Date Title
CN109587212A (zh) 一种基于GraphQL的微服务架构设计方法、设备及存储设备
CN104255007B (zh) Oauth框架
US7831693B2 (en) Structured methodology and design patterns for web services
US8346929B1 (en) System and method for generating secure Web service architectures using a Web Services security assessment methodology
US7698398B1 (en) System and method for generating Web Service architectures using a Web Services structured methodology
JP5458888B2 (ja) 証明書生成配布システム、証明書生成配布方法およびプログラム
US8069435B1 (en) System and method for integration of web services
US8955037B2 (en) Access management architecture
US6871232B2 (en) Method and system for third party resource provisioning management
US20070245013A1 (en) Cross domain provisioning methodology and apparatus
Riedel et al. Interoperation of world‐wide production e‐Science infrastructures
CN107852417A (zh) 多租户身份和数据安全性管理云服务
US20020143943A1 (en) Support for multiple data stores
US9734466B2 (en) Multi-tenancy engine
CN103401945B (zh) 一种服务组合动态重构方法
US11630642B2 (en) Systems and methods for managing a database back end as a service
US20200028887A1 (en) Method and system for facilitating the integration of a plurality of dissimilar systems
CN112541828B (zh) 实现开放证券管理及开放证券api接入控制的系统、方法、装置、处理器及其存储介质
Shan et al. Solution architecture for n-tier applications
CN109670608A (zh) 一种基于任务记录的it运维综合管理平台
Sathiaseelan et al. MLSF: A Framework for Multi-Level Secure Composite Web Services.
Li et al. A multi-protocol authentication shibboleth framework and implementation for identity federation
Karantjias et al. An innovative platform architecture for complex secure e/m-governmental services
US20100169488A1 (en) System and method of consolidated central user administrative provisioning
US20050055224A1 (en) System, method, and computer program product for managing interoperable data processing system services

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication

Application publication date: 20190405

WW01 Invention patent application withdrawn after publication