微服务架构技术规范(试行稿)
1总则
目前研发中心(de)后台开发中,基于Java/Spring MVC/Spring Boot框架开发,每个部门引入(de)支撑组件却各异,缺乏统一性,甚至每个部门都维护着一堆非业务组件,影响开发人员对快速变化业务支持(de)专注性.
这套方案(de)具有较好(de)可扩展性、可维护性、及良好(de)代码风格,可以为公司各类型(de)应用开发提供统一、通用、而强大(de)基础架构,完全能支持公司所有后台服务沉淀和演化出一个稳健企业中台.
2适用范围
本规范适用于创维数字本部及各分子公司,在使用微服务技术架构进行系统开发时,需遵循此技术规范
3微服务概述
3.1微服务定义
什么是微服务
1.微服务 - 也称为微服务架构 - 是一种架构风格,它将应用程序构建为一组服务
2.高度可维护和可测试
3.松散耦合
4.可独立部署
5.围绕业务能力进行组织.
6.微服务架构支持大型复杂应用程序(de)持续交付/部署. 它还使组
织能够发展其技术堆栈.
Chris Richardson 世界着名软件大师
3.2使用微服务
传统(de)单体服务,或者模块化不彻底(de)项目可能存在以下弊端:1.团队职责不清晰
2.构建和部署耗时长
3.全量部署耗时长、影响范围广
4.单体只能按整体横向扩展,无法分模块垂直扩展
5.受技术栈限制,团队成员使用同一框架和语言
6.升级和变革技术框架变得困难
随着软件行业(de)发展和演变,服务器软件进入了微服务化阶段.对服务(de)可维护性、可扩展性、可用性这些维度更加让从业人员关注. 而微服务化正是解决这些观注(de)良好(de)解决方案. 所以微服务化正是软件发展演化(de)结果.在新(de)目项目应该微服务化解决方案.微服务化(de)程度可以具体项目具体场景决定.
4开发规范
4.1基本理念
4.1.1无状态服务(Stateless)
无状态就是一次操作,不能保存数据.
在编程层面,无状态对象(Stateless Bean),就是没有实例变量(de)对象.不能保存数据,是不变类,是线程安全(de). 比如Java开发中(de)EJB,  Servlet, Spring MVC, Spring Service都是无状态(de).
HTTP 也是一种不保存状态,无状态(stateless)协议.HTTP 协议自身不对请求和响应之间(de)通信状态进行保存.也就是说在 HTTP 这个级别,协议对于发送过(de)请求或响应都不做持久化处理.
JWT 也无状态(de)Token 机制, 不需要在服务端存储session信息,因为Token 自身包含了所有用户(de)相关信息.
Kubernetes中stateless服务也是一种无状态服务,功能强大,易于扩展和发布.
所以无状态是一种非常有价值(de)架构设计理念.
4.1.2幂等性
是指任意多次执行所产生(de)影响,与一次执行(de)影响相同.一个拥有
幂等性设计(de)接口,保证无论一次或多次来调用接口,都能够得到相同(de)结果.在微服务场景中,幂等有助于系统(de)可靠性,易于实现重试机制、易于实现缓存系统(de)设计.
4.2数据请求规范
4.2.1URL规范
针对目前url 使用不规范,提出以下建议.
一般域名后面建议就三层:
采用子域名区分请求是amdin或app(de), 不同子域名采用不同ip, 入口隔离.
url 字符串中不区分amdin或app, 但目前(de)header可以区分不同业务端, 同时可用于控制访问权限.
controller代码中,admin/app放到不同(de)controller文件中.但RequestMapping不用区分是admin,还是app(de)功能.
4.2.2REST
要遵循Restful 方式(增删改查对应Post, Delete, Put, Get)(de)接口定义,所有(de)get请求必须幂等.
幂等就是用户对于同一操作发起(de)一次请求或者多次请求(de)结果是一致(de),不会因为多次点击而产生了副作用.分布式环境下各个服务相互调用, 所以尽可能提供幂等性性接口.
微服务项目技术架构对外接口一般都是http接口, 最好根据Http方法(de)语义来发放请求.对于资源(de)具体操作类型,由HTT
P动词表示.常用(de)HTTP动词有下面五个:
GET(SELECT):从服务器取出资源(一项或多项).
POST(CREATE):在服务器新建一个资源.
PUT(UPDATE):在服务器更新资源(客户端提供改变后(de)完整资源). PATCH(UPDATE):在服务器更新资源(客户端提供改变(de)属性). DELETE(DELETE):从服务器删除资源.
Get/ Delete 采用查询字符串请求.
Post /Put请求和响推荐都采用Json格式. 一个Json返回(de)格式举例如下:
返回成功状态 200 OK ...
{
"CODE":200,
"SUCCESS": TRUE,
"DATA":{},
"MSG":"操作成功"
}
4.3安全
4.3.1HTTPs
HTTPs 可以保障数据(de)保密性、完整性、身份校验安全性,所以应该实施全站HTTPs化.  随着HTTP-2、HTTP-3技术(de)出现HTTPs(de)传输效率也有了极大(de)提高.
4.3.2OAuth2
是开放授权(de)一个标准,旨在让用户允许第三方应用去访问改用户在某服务器中(de)特定私有资源,而可以不提供其在某服务器(de)账号密码给到第三方应用
4.3.3JWT
JWT提供了一种用于发布接入令牌(Access Token),并对发布(de)签名接

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。