【超详细】前端程序员只需六步,实现微服务架构转型初实践
导读
目前企业微服务架构中,以 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 可以以服务形式注册、发现及成功调用,概要架构图如下:
整个实践的大致步骤如下:
-
Node.js 镜像制作及上传
-
Nginx 镜像制作及上传
-
TSF 平台上部署 Node.js
-
TSF 平台上部署 Nginx
-
单独通过 IP:PORT/服务名访问 Node.js 和 Nginx
-
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 文件示例内容如下:
FROM node:14
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["./start.sh"] #注意这里要通过start.sh文件启动
3. 编写相关配置文件(以容器运行不需要添加 stop.sh 和 cmdline 文件,虚拟机需要)
start.sh文件内容如下:
#!/bin/bash
already_run=`ps-ef|grep "node"|grep -v grep|wc -l`
if [${already_run} -ne 0 ];then
echo "nodejs-john alreadyRunning!!!!"
exit -1
fi
mkdir -p/opt/tsf/app_config/apis
cp/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文件内容如下:
apiVersion:v1
kind:Application
spec:
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文件内容如下:
openapi:3.0.0
info:
version: "1.0.0"
title: nodejs-service
paths:
/users:
get:
responses:
'200':
description: OK
'401':
description: Unauthorized
'402':
description: Forbidden
'403':
description: Not Found
4. 项目目录可参考如下
5. 根据 Dockerfile 生成本地镜像并上传到腾讯云镜像仓库(注意修改用户 uid )
cd {Dockerfile所在目录}
docker pull node:14
docker build -t mesh-nodejs:v1.0
sudo docker login --username={uid} ccr.ccs.tencentyun.com
sudo docker tag {镜像id} ccr.ccs.tencentyun.com/tsf_{uid}/nodejs:v1.0
sudo docker push ccr.ccs.tencentyun.com/tsf_{uid}/nodejs:v1.0
push 后即可在镜像仓库中看到 push 的镜像
Nginx 镜像制作
1. 制作 Nginx 应用镜像
Dockerfile 文件示例内容如下:
FROMnginx:stable-alpine
RUN echo"ip_resolve=4" >> /etc/yum.conf
RUN/bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo"Asia/Shanghai" > /etc/timezone
WORKDIR/usr/share/nginx/html
COPY . . #根据需要拷贝静态资源文件到html目录下
RUNchmod +x start.sh stop.sh
CMD["./start.sh"] #一定要通过start.sh调起Nginx进程,并且要在sh脚本中生成/opt/tsf/app_config目录否则会被清空
2. 编写相关配置文件
start.sh文件内容如下:
#!/bin/sh
mkdir -p/opt/tsf/app_config
cpspec.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 10
Done
3. 完成部署后实例正常运行
部署 TSF Mesh 应用
1. 将主机资源导入容器集群
2. 创建 Nginx 及 Node.js 应用
3. 创建 Nginx 及 Node.js 的部署组
4. 通过部署组完成镜像的部署
Node.js 测试
1. 直接访问 Node.js 应用
2. 在服务治理中测试 API 接口
3. 进入到容器内确认接口是否可通过服务名调用
sudo docker ps #查找容器id
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 的初衷。
往期
推荐
扫描下方二维码关注本公众号,
了解更多微服务、消息队列的相关信息!
解锁超多鹅厂周边!
戳原文,了解更多腾讯微服务平台的信息
点亮 在看 ,你最好看