前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【超详细】前端程序员只需六步,实现微服务架构转型初实践

【超详细】前端程序员只需六步,实现微服务架构转型初实践

作者头像
腾讯云中间件团队
发布2021-03-24 15:41:43
9100
发布2021-03-24 15:41:43
举报

导读

目前企业微服务架构中,以 Java 为开发语言、Spring Cloud 为开发框架的体系仍占大部分市场,间接导致了以类似 Node.js 为主要开发环境的前端开发人员缺少对应的微服务落地实践。本文以 Node.js(服务)+ Nginx(静态资源托管)的架构,使得前端研发人员可以快速构建应用,“零侵入”的获得注册发现、服务治理、监控运维、配置变更等整套微服务相关能力,大大减少了应用的接入、改造、运维成本。

传统微服务如何平滑迁移至 Service Mesh 呢?

点击了解如何构建基于 Service Mesh 的云原生微服务框架

作者介绍

崔凯

腾讯云 CSIG 微服务产品中心产品架构师 多年分布式、高并发电子商务系统的研发、系统架构设计经验,擅长主流微服务架构技术平台的落地和实施 目前专注于微服务架构相关中间件的研究推广和最佳实践的沉淀,致力于帮助企业完成数字化转型

背景介绍

TSF Mesh 是腾讯云微服务平台 TSF 团队遵循 Service Mesh 设计理念,基于 CNCF 云原生开源软件 lstio/Envoy 进行构建的一款服务框架产品。

TSF Mesh 能够为用户提供如下价值:

  • TSF 为您提供一站式应用生命周期管理服务。提供从应用部署到应用运行的全流程管理,包括创建、删除、部署、回滚、扩容、下线、启动和停止应用并支持版本回溯能力。
  • TSF 为您提供高效的服务注册发现能力。支持秒级的服务注册发现并提供本地注册信息缓存、服务实例注册发现异常告警、注册中心跨 AZ 区容灾等完善的高可用保障机制。
  • TSF 为您提供细粒度服务治理能力。支持服务和 API 多级服务治理能力,通过配置标签形式进行细粒度的流量控制,实现灰度发布、就近路由、熔断限流、服务容错、访问鉴权等功能。
  • TSF 为您提供立体化应用数据运营。提供完善应用性能指标监控和分布式调用链分析、服务依赖拓扑、日志服务工具,帮助您高效分析应用性能瓶颈及故障问题排查。

本文将依托 TSF Mesh 技术以服务形式托管 Node.js 和 Nginx ,最终验证 Node.js 与 Nginx 可以以服务形式注册、发现及成功调用,概要架构图如下:

整个实践的大致步骤如下:

  1. Node.js 镜像制作及上传
  2. Nginx 镜像制作及上传
  3. TSF 平台上部署 Node.js
  4. TSF 平台上部署 Nginx
  5. 单独通过 IP:PORT/服务名访问 Node.js 和 Nginx
  6. Node.js 和 Nginx 通过服务名互相访问

Node.js 镜像制作

1. 准备 Node.js 应用代码

后台发送关键字【demo】获取完整demo文件。

Node.js 可参考 demo 中配置文件进行构建,其它语言的 TSF mesh 的 demo 示例可参考:

https://cloud.tencent.com/document/product/649/30436

2. 制作 Node.js+express 应用镜像( node:14 版本镜像请先自行制作, WORKDIR 可根据自身需求修改)

Dockerfile 文件示例内容如下:

代码语言:javascript
复制
FROM node:14RUN mkdir -p /usr/src/appWORKDIR /usr/src/appCOPY package*.json ./RUN npm installCOPY . .EXPOSE 3000CMD ["./start.sh"]    #注意这里要通过start.sh文件启动

3. 编写相关配置文件(以容器运行不需要添加 stop.sh 和 cmdline 文件,虚拟机需要)

start.sh文件内容如下:

代码语言:javascript
复制
#!/bin/bash
already_run=`ps-ef|grep "node"|grep -v grep|wc -l`if [${already_run} -ne 0 ];then    echo "nodejs-john alreadyRunning!!!!"    exit -1fi mkdir -p/opt/tsf/app_config/apiscp/usr/src/app/spec.yaml /opt/tsf/app_config/cp -r/usr/src/app/apis /opt/tsf/app_config/cd/usr/src/app/nohupnode ./bin/www 1>./logs/nodejs-service.log 2>&1

spec.yaml文件内容如下:

代码语言:javascript
复制
apiVersion:v1kind:Applicationspec:  services:    - name: nodejs-service # 服务名      ports:        - targetPort: 3000 # 服务监听端口          protocol: http # 目前支持 HTTP 和 HTTP2,您可使用 HTTP2 部署 gRPC 服务      healthCheck:        path: /users # 健康检查 URL 测试命令:curl http://nodejs-service/users

apis/nodejs-service.yaml文件内容如下:

代码语言:javascript
复制
openapi:3.0.0info:  version: "1.0.0"  title: nodejs-servicepaths:  /users:    get:      responses:        '200':          description: OK        '401':          description: Unauthorized        '402':          description: Forbidden        '403':          description: Not Found

4. 项目目录可参考如下

5. 根据 Dockerfile 生成本地镜像并上传到腾讯云镜像仓库(注意修改用户 uid )

代码语言:javascript
复制
cd {Dockerfile所在目录}docker pull node:14docker build -t mesh-nodejs:v1.0
代码语言:javascript
复制
sudo docker login --username={uid} ccr.ccs.tencentyun.comsudo docker tag {镜像id} ccr.ccs.tencentyun.com/tsf_{uid}/nodejs:v1.0sudo docker push ccr.ccs.tencentyun.com/tsf_{uid}/nodejs:v1.0

push 后即可在镜像仓库中看到 push 的镜像

Nginx 镜像制作

1. 制作 Nginx 应用镜像

Dockerfile 文件示例内容如下:

代码语言:javascript
复制
FROMnginx:stable-alpineRUN echo"ip_resolve=4" >> /etc/yum.confRUN/bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeRUN echo"Asia/Shanghai" > /etc/timezoneWORKDIR/usr/share/nginx/htmlCOPY . .   #根据需要拷贝静态资源文件到html目录下RUNchmod +x start.sh stop.shCMD["./start.sh"]  #一定要通过start.sh调起Nginx进程,并且要在sh脚本中生成/opt/tsf/app_config目录否则会被清空

2. 编写相关配置文件

start.sh文件内容如下:

代码语言:javascript
复制
#!/bin/sh
mkdir -p/opt/tsf/app_configcpspec.yaml /opt/tsf/app_config/ #这里由于使用的Nginx镜像已自启动,所以此处轮询持续监测即可while [true ]; do         already_run=`ps -ef|grep"nginx"|grep -v grep|wc -l`         if [ ${already_run} -eq 0 ]; then                   nohup nginx -c/etc/nginx/nginx.conf 1>/var/log/nginx/nginx-service.log 2>&1 &         fi         sleep 10Done

3. 完成部署后实例正常运行

部署 TSF Mesh 应用

1. 将主机资源导入容器集群

2. 创建 Nginx 及 Node.js 应用

3. 创建 Nginx 及 Node.js 的部署组

4. 通过部署组完成镜像的部署

Node.js 测试

1. 直接访问 Node.js 应用

2. 在服务治理中测试 API 接口

3. 进入到容器内确认接口是否可通过服务名调用

代码语言:javascript
复制
sudo docker ps   #查找容器id
代码语言:javascript
复制
sudo docker exec -it cfa4343f4a22 /bin/bash  #进入容器内部

Docker 容器内部测试通过服务名进行调用

Nginx 测试

1. 容器中目录结构及测试( WORKDIR 可根据自身需求修改)

2. 通过外网访问静态资源

停止服务后

3. 服务治理中显示服务已上线

4. 在 Node.js 服务容器内 curl 访问 Nginx 服务成功

总结

TSF Mesh 通过数据面及控制面的组合,以 sidecar 的形式作为本地的 L7 层代理,和服务运行在同一个 pod 中,与 pod 共享网络。也正是通过这一组合,完成整体微服务架构的内部治理及运维。

虽然上述测试仅做了基本的连通性测试,但 TSF 平台上服务治理、监控运维、构建部署、配置变更等相关能力都是具备的。同时可以看到 TSF Mesh 在接入非 java 的应用时,如 Node.js、PHP、Python 等,接入成本非常低,对代码可以达到“零侵入”,非常适合异构语言、遗留老旧系统的微服务改造,这也是微服务团队研发 TSF Mesh 的初衷。

往期

推荐

扫描下方二维码关注本公众号,

了解更多微服务、消息队列的相关信息!

解锁超多鹅厂周边!

戳原文,了解更多腾讯微服务平台的信息

点亮在看,你最好看

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云中间件 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档