微服务架构技术规范第一版_第1页
微服务架构技术规范第一版_第2页
微服务架构技术规范第一版_第3页
微服务架构技术规范第一版_第4页
微服务架构技术规范第一版_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微服务架构技术规范(试行稿)1 总则目前研发中心的后台开发中,基于Java/Spring MVC/Spring Boot框架开发,每个部门引入的支撑组件却各异,缺乏统一性,甚至每个部门都维护着一堆非业务组件,影响开发人员对快速变化业务支持的专注性。这套方案的具有较好的可扩展性、可维护性、及良好的代码风格,可以为公司各类型的应用开发提供统一、通用、而强大的基础架构,完全能支持公司所有后台服务沉淀和演化出一个稳健企业中台。2 适用范围本规范适用于创维数字本部及各分子公司,在使用微服务技术架构进行系统开发时,需遵循此技术规范 3 微服务概述3.1 微服务定义什么是微服务?1 微服务 - 也称为微服务

2、架构 - 是一种架构风格,它将应用程序构建为一组服务2 高度可维护和可测试3 松散耦合4 可独立部署5 围绕业务能力进行组织。6 微服务架构支持大型复杂应用程序的持续交付/部署。 它还使组织能够发展其技术堆栈。 ChrisRichardson 世界著名软件大师3.2 使用微服务传统的单体服务,或者模块化不彻底的项目可能存在以下弊端:1 团队职责不清晰2 构建和部署耗时长3 全量部署耗时长、影响范围广4 单体只能按整体横向扩展,无法分模块垂直扩展5 受技术栈限制,团队成员使用同一框架和语言6 升级和变革技术框架变得困难随着软件行业的发展和演变,服务器软件进入了微服务化阶段。对服务的可维护性、可扩

3、展性、可用性这些维度更加让从业人员关注。 而微服务化正是解决这些观注的良好的解决方案。 所以微服务化正是软件发展演化的结果。在新的目项目应该微服务化解决方案。微服务化的程度可以具体项目具体场景决定。4 开发规范4.1 基本理念 4.1.1 无状态服务(Stateless)无状态就是一次操作,不能保存数据。在编程层面,无状态对象(Stateless Bean),就是没有实例变量的对象.不能保存数据,是不变类,是线程安全的。 比如Java开发中的EJB, Servlet, Spring MVC, Spring Service都是无状态的。HTTP 也是一种不保存状态,无状态(stateless)协

4、议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。JWT 也无状态的Token 机制, 不需要在服务端存储session信息,因为 Token 自身包含了所有用户的相关信息。Kubernetes中stateless服务也是一种无状态服务,功能强大,易于扩展和发布。所以无状态是一种非常有价值的架构设计理念。4.1.2 幂等性是指任意多次执行所产生的影响,与一次执行的影响相同。一个拥有幂等性设计的接口,保证无论一次或多次来调用接口,都能够得到相同的结果。在微服务场景中,幂等有助于系统的可靠性,易于实现重试机制、易

5、于实现缓存系统的设计。4.2 数据请求规范4.2.1 URL规范针对目前url 使用不规范,提出以下建议。一般域名后面建议就三层: https:/域名/业务模块名/功能点/功能操作(?或/)可选内容https:/api.skyworthdigitailiotcom/业务模块名/功能点/功能操作https:/admin.skyworthdigitailiotcom/业务模块名/功能点/功能操作注意事项: 采用子域名区分请求是amdin或app的, 不同子域名采用不同ip, 入口隔离。 url 字符串中不区分amdin或app, 但目前的header可以区分不同业务端, 同时可用于控制访问权限。c

6、ontroller代码中,admin/app放到不同的controller文件中。但RequestMapping不用区分是admin,还是app的功能。4.2.2 REST要遵循Restful 方式(增删改查对应Post, Delete, Put, Get)的接口定义,所有的get请求必须幂等。幂等就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。分布式环境下各个服务相互调用, 所以尽可能提供幂等性性接口。对外接口一般都是http接口, 最好根据Http方法的语义来发放请求。对于资源的具体操作类型,由HTTP动词表示。常用的HTTP动词有下面五个:G

7、ET(SELECT):从服务器取出资源(一项或多项)。POST(CREATE):在服务器新建一个资源。PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。DELETE(DELETE):从服务器删除资源。Get/ Delete 采用查询字符串请求。Post /Put请求和响推荐都采用Json格式。 一个Json返回的格式举例如下: 返回成功状态 200 OK . code: 200,success: true,data: ,msg: 操作成功 4.3 安全4.3.1 HTTPsHTTPs 可以保障数据的保密

8、性、完整性、身份校验安全性,所以应该实施全站HTTPs化。 随着HTTP-2、HTTP-3技术的出现HTTPs的传输效率也有了极大的提高。4.3.2 OAuth2是开放授权的一个标准,旨在让用户允许第三方应用去访问改用户在某服务器中的特定私有资源,而可以不提供其在某服务器的账号密码给到第三方应用4.3.3 JWTJWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。4.3.4 OpenID Connect它在OAuth2上构建了一个身份层,是一个基于OAuth2

9、协议的身份认证标准协议。OpenID Connect是OAuth 2.0协议之上的简单身份层,用 API 进行身份交互的框架,允许客户端根据授权服务器的认证结果最终确认用户的身份,以及获取基本的用户信息;它支持包括Web、移动、JavaScript在内的所有客户端类型;它是可扩展的协议,允许你使用某些可选功能,如身份数据加密、OpenID提供商发现、会话管理。4.4 配置中心一般来说,测试环境的程序和正式环境的一个重要的差别,是配置不同。所以运维相关的配置、程序参数外置,也符合无状态服务的理念, 做到测试环境、正式环境一个部署包。所以程序配置,应该存放在配置中心集中管理。4.5 服务注册中心注

10、册中心最本质的功能可以看成是一个Query函数 Si = F(service-name),以 Service-Name 为查询参数,Service-Name 对应的服务的可用的 Endpoints (ip:port) 列表为返回值。注册中心机制解耦了服务的提供者和服务的使用者,是微服务的关键设计模式。4.6 API GateWayAPI 网关对外采用门面设计模式,实现上采用责任链设计模式,是微服务的关键设计模式。4.7 服务通讯推荐采用Http Rest & JSON方式做服务间通讯,简单也易于调试。随着HTTP3.0基于UDP协议的使用,传输效率也会更好。4.8 流量控制微服务中由于模块较多

11、,网络中因某些原因,有时会出现流量热点,甚于出现拖垮整个集群的可能。我们不能束手无策,所以微服务集群内流量控制上非常必要。目前流量控制推荐使用Alibaba Sentinel, 它支持丰富的应用场景、完备的实时监控、广泛的开源生态,可以很方便大家接入。4.9 链路跟踪当业务模块间调用关系比较复杂时,应引入链路跟踪功能。5 Base Project项目在微服务的实践中,我们不需要从头构建去构建一个微服务的体系, 所以选择一个合适的BaseProject项目, 会使大家对微服务使用有一个良好的开端,有利代码风格的统一、有一个较高的起点、以利于微服务的实施。推荐大家使用Bladex项目,基于该项目完成微服务化实施。6 部署和运

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论