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

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

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

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

microservice-2-1.png

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


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

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

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

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

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

  5. 5. Teach提供后台课程管理

  6. 6. Admin用户权限管理


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

microservics-2-2-2.png

图2-2 工程目录拆解图

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

microservics-2-3-2.png

图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://<host_ip>:8080,直接可以访问网站。为了测试验证,各api均向外expose了端口,实际使用不要暴露端口,以免遭受网络攻击。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。