《2022年微服务架构技术规范-第一版V. .pdf》由会员分享,可在线阅读,更多相关《2022年微服务架构技术规范-第一版V. .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微服务架构技术规范(试行稿)1总则目前研发中心的后台开发中,基于Java/Spring MVC/Spring Boot框架开发,每个部门引入的支撑组件却各异,缺乏统一性,甚至每个部门都维护着一堆非业务组件,影响开发人员对快速变化业务支持的专注性。这套方案的具有较好的可扩展性、可维护性、 及良好的代码风格, 可以为公司各类型的应用开发提供统一、 通用、而强大的基础架构, 完全能支持公司所有后台服务沉淀和演化出一个稳健企业中台。2适用范围本规范适用于创维数字本部及各分子公司,在使用微服务技术架构进行系统开发时,需遵循此技术规范3微服务概述3.1 微服务定义什么是微服务?1微服务- 也称为微服务架构
2、- 是一种架构风格,它将应用程序构建为一组服务2高度可维护和可测试3松散耦合4可独立部署5围绕业务能力进行组织。6微服务架构支持大型复杂应用程序的持续交付/ 部署。 它还使组织能够名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 发展其技术堆栈。Chris Richardson 世界著名软件大师3.2 使用微服务传统的单体服务,或者模块化不彻底的项目可能存在以下弊端:1团队职责不清晰2构建和部署耗时长3全量部署耗时长、影响范围广4
3、单体只能按整体横向扩展,无法分模块垂直扩展5受技术栈限制,团队成员使用同一框架和语言6升级和变革技术框架变得困难随着软件行业的发展和演变, 服务器软件进入了微服务化阶段。对服务的可维护性、可扩展性、可用性这些维度更加让从业人员关注。而微服务化正是解决这些观注的良好的解决方案。所以微服务化正是软件发展演化的结果。在新的目项目应该微服务化解决方案。微服务化的程度可以具体项目具体场景决定。4开发规范4.1 基本理念4.1.1无状态服务 (Stateless) 无状态就是一次操作,不能保存数据。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
4、 - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 在编程层面,无状态对象 (Stateless Bean) ,就是没有实例变量的对象.不能保存数据,是不变类,是线程安全的。 比如 Java 开发中的 EJB, Servlet, Spring MVC , Spring Service都是无状态的。HTTP 也是一种不保存状态,无状态(stateless )协议。 HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。JWT 也无状态的 Token 机制, 不需要在
5、服务端存储session 信息, 因为 Token 自身包含了所有用户的相关信息。Kubernetes中 stateless 服务也是一种无状态服务,功能强大,易于扩展和发布。所以无状态是一种非常有价值的架构设计理念。4.1.2幂等性是指任意多次执行所产生的影响,与一次执行的影响相同。 一个拥有幂等性设计的接口,保证无论一次或多次来调用接口,都能够得到相同的结果。 在微服务场景中,幂等有助于系统的可靠性, 易于实现重试机制、 易于实现缓存系统的设计。4.2 数据请求规范4.2.1URL 规范针对目前 url 使用不规范,提出以下建议。一般域名后面建议就三层:https:/域名/业务模块名 /功
6、能点 / 功能操作(?或/ )名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 可选内容https:/api.skyworthdigitailiotcom/业务模块名 /功能点 / 功能操作https:/admin.skyworthdigitailiotcom/业务模块名 /功能点 / 功能操作注意事项:采用子域名区分请求是amdin 或 app 的, 不同子域名采用不同ip, 入口隔离。url 字符串中不区分 amdin 或 a
7、pp , 但目前的 header 可以区分不同业务端,同时可用于控制访问权限。controller代 码 中 , admin/app放 到 不 同 的controller文 件 中 。 但RequestMapping不用区分是 admin ,还是 app 的功能。4.2.2REST 要遵循 Restful 方式(增删改查对应Post, Delete, Put, Get)的接口定义,所有的 get 请求必须幂等。幂等就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。分布式环境下各个服务相互调用, 所以尽可能提供幂等性性接口。对外接口一般都是http 接
8、口, 最好根据 Http 方法的语义来发放请求。对于资源的具体操作类型,由HTTP 动词表示。常用的HTTP 动词有下面五个:GET(SELECT):从服务器取出资源(一项或多项)。POST(CREATE):在服务器新建一个资源。PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。DELETE(DELETE):从服务器删除资源。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页
9、- - - - - - - - - Get/ Delete 采用查询字符串请求。Post /Put请求和响推荐都采用Json 格式。 一个 Json 返回的格式举例如下:返回成功状态200 OK . CODE: 200, SUCCESS: TRUE, DATA: , MSG: 操作成功 4.3 安全4.3.1HTTPs HTTPs 可以保障数据的保密性、完整性、身份校验安全性,所以应该实施全站HTTPs 化。随着 HTTP-2 、HTTP-3 技术的出现 HTTPs 的传输效率也有了极大的提高。4.3.2OAuth2 是开放授权的一个标准 , 旨在让 用户允许第三方应用 去访问改用户在 某服务
10、器 中的特定 私有资源 ,而可以不提供其在某服务器的账号密码给到第三方应用4.3.3JWT 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - JWT 提供了一种用于发布接入令牌(Access Token), 并对发布的签名接入令牌进行验证的方法。令牌( Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。4.3.4OpenID Connect 它在 OAuth2上构建了一个身份层,是一个基于OAuth2
11、协议的身份认证标准协议。 OpenID Connect 是 OAuth 2.0 协议之上的简单身份层,用API 进行身份交互的框架,允许客户端根据授权服务器的认证结果最终确认用户的身份,以及获取基本的用户信息;它支持包括Web 、移动、 JavaScript在内的所有客户端类型;它是可扩展的协议,允许你使用某些可选功能,如身份数据加密、OpenID 提供商发现、会话管理。4.4 配置中心一般来说, 测试环境的程序和正式环境的一个重要的差别,是配置不同。 所以运维相关的配置、程序参数外置,也符合无状态服务的理念,做到测试环境、正式环境一个部署包。所以程序配置,应该存放在配置中心集中管理。4.5
12、服务注册中心注册中心最本质的功能可以看成是一个Query 函数 Si = F(service-name),以Service-Name 为查询参数, Service-Name 对应的服务的可用的Endpoints (ip:port) 列表为返回值。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - 注册中心机制解耦了服务的提供者和服务的使用者,是微服务的关键设计模式。4.6 API GateWay API 网关对外采用门面设计模式,实
13、现上采用责任链设计模式,是微服务的关键设计模式。4.7 服务通讯推荐采用Http Rest & JSON 方式做服务间通讯,简单也易于调试。随着HTTP3.0 基于 UDP 协议的使用,传输效率也会更好。4.8 流量控制微服务中由于模块较多,网络中因某些原因,有时会出现流量热点,甚于出现拖垮整个集群的可能。我们不能束手无策,所以微服务集群内流量控制上非常必要。目前流量控制推荐使用Alibaba Sentinel , 它支持丰富的应用场景、完备的实时监控、广泛的开源生态,可以很方便大家接入。4.9 链路跟踪当业务模块间调用关系比较复杂时,应引入链路跟踪功能。5Base Project项目在微服务
14、的实践中,我们不需要从头构建去构建一个微服务的体系,所以选择一个合适的 BaseProject项目, 会使大家对微服务使用有一个良好的开端,有利代码风格的统一、有一个较高的起点、以利于微服务的实施。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 推荐大家使用 Bladex 项目,基于该项目完成微服务化实施。6部署和运维6.1 程序 Kubernetes化Kubernetes和 Docker ,它是现代微服务设施的主力。推荐生产环境采用kubernetes部署微服务。6.2 数据库 Kubernetes化如果是公有云,数据库一般建议采用公有云RDS、如果是私有云一般数据库部署外置于 Kubernetes 。 目前 MySQL 等数据库上 Kubernetes, 还不是主流方案。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -