微服务web开发-统一域名解决方案
程序员文章站
2022-04-09 12:40:17
...
一、问题背景
在之前的项目开发中,因为团队和技术限制,服务以小服务(微服务)的模式进行开发,各自服务的web端使用独立的访问域名;从用于测看,一个产品用户会点击出大量的不同域名,在统一认证和用户体验上都是一个比较糟糕的实现。基于此问题,团队考虑一个透明的将多个web站点集成在一个域名下的解决方案。
目前的域名示例:
- 课程:http://webfront-course.sdp.101.com/ndu/course/11600ebe-3314-4c73-93db-5c2f4583a345
- 培训:http://webfront-train.sdp.101.com/ndu/train/b89672d7-ab6d-4b58-9bdf-c8e69fd83017
- 线下课程:http://business-course-gateway.sdp.101.com/ndu/course/06e9301a-0438-479e-92a6-c79b8ccfb72c
- 测评:http://elearning-onlineexam-gateway.sdp.101.com/ndu/online_exam/prepare?online_exam_id=b6c627aa-ec06-48c6-bda9-514fae4580b
以上仅为举例,实际一个产品中涉及域名约有50+
二、解决方案
在技术选型上,前期考虑对portal项目做定制开发,即由已给产品测小团队进行portal项目定制开发。按照产品进行web端二次开发,有该团队按产品需求进行定制开发,对后端各功能服务的页面、api进行二次开发封装。考虑到成本和公司现状,工作量是一个巨大挑战。而且,通常同类产品的页面表现是趋同的。鉴于实际问题,本方案被否决。
目前团队,应用接入层,主要是7层接入(nginx、kong);由此在考虑是否可在应用上层有没有一个透明解决方案。能够达到产品测对用户表现始终是一个访问域名,对服务的开发团队不引入额外的开发工作。
考虑在L7接入层,制定后端服务的代理规范、产品域名规范 、服务的友好别名规范,在L7 透明使用http proxy,将产品的域名的一级目录,代理至后端各服务实例。
涉及到的具体约定和规范
- 新增一组用于产品册的通配域名(如 *.e.101.com);有需求的情况,也可以绑定产品自有域名(www.hbeducloud.com)
- 制定工程院内的统一域名服务别名规范,将产品域名下uri的第一级目录(path)定义为服务的友好别名(如,course 标识webfront-course服务),并将规范持久存储为一个字典,全局唯一。
大致流程:
用户请求到达L7接入层后,在接入层通过胶水胶水代码,读取服务的友好别名字典,将用户请求代理到实际后端服务。
三、方案优点
- 相对透明的解决产品需求,不增加服务开发团队工作量
- 重新规范web用户认证技术方案,可以使用cookie票据等简单方案解决web测用户认证工作
- url 更亲民易识别
四、落地效果
使用统一域名方案后,产品用户访问到的所有请求均可在一个域名下,如 xuexi.101.com; xuexi.101.com/course/ xuexi.101.com/exam/