网站收录代做,上海建设网站是多少,定制科技软件,淄博安监局网站两体系建设文章目录 一、理论-微服务、测试与GPU1#xff09;微服务架构2#xff09;代码测试3#xff09;GPU使用 二、实践-封装微服务#xff0c;编写测试用例和脚本#xff0c;并观察GPU1#xff09;微服务封装(RestFul和RPC)2#xff09;测试编写(unit_test\api_test\load_tes… 文章目录 一、理论-微服务、测试与GPU1微服务架构2代码测试3GPU使用 二、实践-封装微服务编写测试用例和脚本并观察GPU1微服务封装(RestFul和RPC)2测试编写(unit_test\api_test\load_test)3GPU使用和监控 三、理论-docker、CICD与K8S四、实践-构建镜像与CICD脚本 一、理论-微服务、测试与GPU
学习目标与成果
1微服务架构
①单服务架构 ②微服务架构 ③微服务特点 ④主要技术栈 1HTTP协议做RESTFul接口 基于flask web框架实现restful接口 2远程RPC调用 基于grpc
restful还是rpc
2代码测试 具体实践举例 代码测试 压力测试
压力测试工具
3GPU使用 可以使用命令每一秒刷新一次
watch -n 1 nvidia-smi二、实践-封装微服务编写测试用例和脚本并观察GPU
1微服务封装(RestFul和RPC)
①RestFul接口 1配置日志logger
import logging.handlers# 获取logger
logger logging.getLogger()
logger.setLevel(logging.DEBUG)# 生成文件handler打印到文件
# 按天滚动的log一天滚动一次只保留最近7个日志文件即保留最近7天
file_handler logging.handlers.TimedRotatingFileHandler(./logs/root.log, D, 1, 7, encodingutf-8)
file_handler.setLevel(logging.DEBUG)# 设置formatter
# 打印日志时间、级别、文件名、行号、函数名字、内容
formatter logging.Formatter(%(asctime)s - %(levelname)s - %(filename)s:%(lineno)s - %(funcName)s() - %(message)s
)# 将formatter设置到两个handler
file_handler.setFormatter(formatter)# 将handler设置到logger
logger.addHandler(file_handler)
2编写RESTFUL API 1编写hello_resource配置健康检查路由
#hello_resource.py
from flask_restful import Resourceclass HelloResource(Resource):hello路由快速检查服务是否健康def get(self):return hello
2编写seg_resource,配置分词路由
import json
import timefrom flask import request
from flask_restful import Resourcefrom online import loggerclass SegResource(Resource):分词路由主要调用segment.segdef __init__(self, segment):# 使用传过来的segment对象进行后面的分词self.segment segmentdef post(self):data request.get_json() # 解析输入json为一个dictinit_time time.time()result {status: OK, # 本次请求返回状态msg: # 额外说明}request_id data.get(request_id) # 支持传入request_id便于线上追踪请求try:assert data, 请确保输入不为空# 从data取用户输入的各种参数content, model, enable_offset, enable_stop_word, use_ner \data[content], data.get(model), data.get(enable_offset, False), \data.get(enable_stop_word, False), data.get(use_ner, False)logger.info(request_id: {}, model: {}, enable_offset: {}, enable_stop_word: {}, use_ner: {}, content: {} ....format(request_id, model, enable_offset, enable_stop_word, use_ner,content[:100]))# 调用segment对象的seg方法r self.segment.seg(content, modelmodel, enable_offsetenable_offset,enable_stop_wordenable_stop_word, use_neruse_ner)result[result] list(r) # 将分词结果存放在result里面except Exception as e:# 出现异常打印异常栈更改本次请求状态为ERRORlogger.exception(e)result[status] ERRORresult[msg] str(e)logger.info(request_id: {}, result: {} ..., cost time: {}s.format(request_id, json.dumps(result, ensure_asciiFalse)[:200], time.time() - init_time))return result
3编写其余resource 4编写http server
#server.py
import sysfrom flask import Flask
from flask_restful import Apifrom online import logger
from online.http.resources.dict_resource import DictResource
from online.http.resources.hello_resource import HelloResource
from online.http.resources.pos_resource import PosResource
from online.http.resources.seg_resource import SegResource
from segment.segment import Segmentdef start_server(port8000):# 如果输入第1个参数将第1个参数解析为端口号if len(sys.argv) 1:port int(sys.argv[1])# 实例化flask appapp Flask(__name__)app.config.update(RESTFUL_JSONdict(ensure_asciiFalse)) # 设置ensure_asciiFalse确保接口返回的中文正常api Api(app)# 实例化segment对象准备传入到各个resource里面segment Segment()resource_class_kwargs {segment: segment}# 为api添加hello路由、seg路由、pos路由、dict路由api.add_resource(HelloResource, /) # hello路由用于快速检查服务可用性api.add_resource(SegResource, /seg, resource_class_kwargsresource_class_kwargs) # seg路由用于分词api.add_resource(PosResource, /pos, resource_class_kwargsresource_class_kwargs) # pos路由用于词性标注api.add_resource(DictResource, /dict, resource_class_kwargsresource_class_kwargs) # dict路由用于管理词典# 启动服务设置host port# host0.0.0.0表示外部机器可以访问必须设置为0.0.0.0# threadedFalse表示我们的主程序是单线程模式需要一个一个处理请求# 我们的word_graph对象不是线程安全的logger.info(server starts port {}.format(port))app.run(debugFalse, host0.0.0.0, portport, threadedFalse)if __name__ __main__:start_server()
启动APP server 执行脚本start_http_server.sh
cd ..
python -m online.http.server 8000发送POSTman请求 ①发送hello相关链接请求
curl 0.0.0.0:8000服务器打印 客户端回复 ②测试seg分割模型 postman发送请求 发送seg模块相关
②RPC接口
2测试编写(unit_test\api_test\load_test)
3GPU使用和监控
三、理论-docker、CICD与K8S
四、实践-构建镜像与CICD脚本