Free Style基于华为CCE微服务改造的技术实践(二)

网友投稿 711 2022-05-30

在上一篇博文中,讲解了已有node web app的功能结构,技术栈,和简要部署内容。从中可以看到单一应用部署模式带来的风险:1. 任何单一功能模块出现异常,整个web app就会出现崩溃或者访问异常;2. 遇到大流量访问,模块之间的依赖会导致性能瓶颈。3. 开发效率极低。由于前后依赖,开发任务无法并行。从而降低了迭代效率,影响产品质量。

从本文开始,我们需要引入“Microservice”的概念来解决上述三个问题,这是一种新的架构设计方式。将原有的单例模式的应用,“拆解”为多个可部署,可维护的服务构成。每一个单一的服务,独立维护一部分功能,收到请求后返回请求所需要的值或者数据包。不同的服务直接可以共享公共资源,例如:key-value store 或者 db services。下面我将原有的单例模式,按照我们的用例图进行资源拆解。请看下图

图2-1 微服务改造示意图

改造后,我们将app"拆解“为6个service,每一个是一个单独的服务。

1. Public service提供基于的静态资源,例如:css,js,media file,config, font package。

2. User service提供登录,注册,认证服务,需要使用redis,mysql

3. Cousrse service提供课程查询,学习记录获取更新,课程评价。

4. Trial service提供云端DWS sql query engine的连接、查询、语句执行、以及结果处理功能。

5. Teach提供后台课程管理

6. Admin用户权限管理

【Free Style】基于华为CCE微服务改造的技术实践(二)

根据上述服务的简要介绍,我们可以对已有工程结构进行改造,由于每一个微服务都是独立的,所以他们应该使用部分相同的文件名和目录结构,而且每一个服务仅仅需要加载本服务需要的依赖,因此服务功能包变得更好维护。下面我将展示工程目录拆解图:

图2-2 工程目录拆解图

当拆解完后,我们会需要一个问题,所有的独立微服务,如果有机组织起来,应对外界的访问,或者说是什么机制来判断该请求由哪个服务来独立完成,是不是需要一个coordinator来协调。下面我们引入一个概念”API Gateway“,它用户判断请求由哪个服务来独立完成。我们重新更新微服务拆解示意图,具体如下

图3-1 网关引入后

引入网关后,开始配置网关。编辑gateway.config.yml,设置api,services,endingpoint等参数。请参考下面的样例:

http:                   port: 8080           hostname: 'localhost'         admin:           port: 9876           hostname: 'localhost'         apiEndpoints:           api:             host: '*'             paths:               - / #此处根据实际情况要做改动               - /showAllCourse #此处根据实际情况要做改动            iam:              host: '*'              paths:                - /login #此处根据实际情况要做改动                - /login/* #此处根据实际情况要做改动                - /register #此处根据实际情况要做改动                - /logout #此处根据实际情况要做改动          serviceEndpoints:           userService:             url: 'http://user:3000'  #此处根据实际情况要做改动         pipelines:           pipeline_iAM:             apiEndpoints:                - iam             policies:                - proxy:                   - action:                       serviceEndpoint: userService #此处根据实际情况要做改动                       changeOrigin: true

express gateway详细配置资料,请参考www.express-gateway.io/docs/,随后制作express gateway镜像,准备进行发布。其中6个service要映射到主机不同的端口上,例如userService是3001,adminService是3002,但是各自在container中expose的端口均是3000,具体做法可以参考docker run command样例如下:

docker run -d -p 3002:3000 --name ot-course-c1 --link redis:redis --link ot-app-mysql:mysql ot-course-api     docker run -d -p 3001:3000 --name ot-trial-c1 --link redis:redis --link ot-app-mysql:mysql ot-trial-api     docker run -d -p 3002:3000 --name ot-public-c1 --link redis:redis --link ot-app-mysql:mysql ot-public-api     docker run -d -p 3003:3000 --name ot-course-c1 --link redis:redis --link ot-app-mysql:mysql ot-course-api     docker run -d -p 3004:3000 --name ot-admin-c1 --link redis:redis --link ot-app-mysql:mysql ot-admin-api     docker run -d -p 3005:3000 --name ot-user-c1 --link redis:redis --link ot-app-mysql:mysql ot-user-api     docker run -d -p 3000:8080  \     --name=ot-gateway-c1 \     --link ot-user-c1:user \     --link ot-admin-c1:admin \     --link ot-course-c1:course \     --link ot-public-c1:public \     --link ot-trial-c1:trial \     ot-gateway

最后直接访问主机http://:8080,直接可以访问网站。为了测试验证,各api均向外expose了端口,实际使用不要暴露端口,以免遭受网络攻击。

镜像服务 Node.js Express

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一张优惠券引发的血案
下一篇:python高级编程读书笔记(一)
相关文章