Sapphire项目日志(七)

服务端环境架构部署设计

1. Golang 后端微服务架构

1.1 技术栈概述
  • 后端框架: 使用 Gin 框架进行开发,提供高性能的 HTTP 服务。
  • 数据存储: 使用 PostgreSQL 数据库存储应用程序的数据,利用 GORM 进行对象关系映射 (ORM)。
  • 缓存服务: 使用 Redis 作为缓存服务,提高数据读取和响应速度。
  • 其他工具: 使用 JWT 进行用户身份验证和授权管理。
1.2 服务端架构设计
1.2.1 数据访问层 (DAO)
  • 位于 internal/dao 目录下,负责与数据库交互,执行数据操作。
  • 使用 GORM 进行数据库操作,确保数据的持久化和一致性。
1.2.2 领域层 (Domain)
  • 位于 internal/domain 目录下,定义业务领域对象和业务逻辑。
  • 包括各种实体对象如 Annotation、Dataset、Task 等,以及它们之间的关系和操作。
1.2.3 基础设施层 (Infra)
  • 位于 internal/infra 目录下,负责与外部系统集成,如数据库连接、缓存服务等。
  • 提供对数据库和缓存的访问接口,保证数据的安全性和可靠性。
1.2.4 路由层 (Router)
  • 位于 internal/router 目录下,定义应用程序的路由和请求处理逻辑。
  • 使用 Gin 框架创建 RESTful API,处理客户端请求并调用相应的服务。
1.3 设计原则
1.4.1 面向接口编程

Go 后端服务主要分为三个大层,用例、数据服务和领域模型,其中只有领域模型没有接口,因为不需要。当访问外部服务时,只需要通过接口来完成即可。

基于接口的编程的关键是将接口作为参数传入函数并返回接口而不是具体类型,这样可以使代码更加灵活,更容易测试和维护,因为调用函数不需要知道返回的具体结构,接口封装了它所需的所有信息。这样,开发者可以可以用另一个结构替换返回的结构,而不会影响调用函数。

SOLID Go 设计原则

我们在设计 Go 服务时,遵循 SOLID 设计原则,确保代码质量和可维护性,具体如下:

  • Single Responsibility Principle,单一功能原则
  • Open / Closed Principle,开闭原则
  • Liskov Substitution Principle,里氏替换原则
  • Interface Segregation Principle,接口隔离原则
  • Dependency Inversion Principle,依赖反转原则

我们通过面向接口编程、依赖注入等方式来实现这些原则,确保在 package 中构建 functions、types 以及方法。types 属于彼此,functions 为单一目的服务,并且用嵌入将简单的 type 组合成更为复杂的。

1.4 部署和运维
  • 配置管理: 使用 config.yml 文件管理应用程序的配置信息,如数据库连接信息、端口设置等。
  • 部署脚本: 提供 deploy/init.sql 文件用于初始化数据库结构,dev.sh 脚本用于启动开发环境。
  • 监控和日志: 集成监控工具和日志系统,确保应用程序稳定运行并及时发现问题。
1.5 未来优化方向
  • 性能优化: 对数据库查询和响应时间进行优化,提升系统性能。
  • 安全加固: 加强用户认证和授权机制,防止恶意攻击和数据泄露。
  • 扩展性设计: 考虑系统的扩展性,支持更多功能和更大规模的用户量。

2. Python 服务端推理容器

2.1 技术栈概述

在我们的 Python 服务端推理容器中,我们采用了一系列技术来构建一个高效、可靠的推理系统。

  • 推理框架: 我们选择了 PyTorch 作为推理框架,因为 PyTorch 是一个灵活、易用且功能强大的深度学习框架。它提供了动态计算图的特性,使得模型定义和调试更加直观和灵活。同时,PyTorch 社区庞大且活跃,提供了丰富的工具和资源,能够满足我们在推理过程中的各种需求。

  • Web 框架: 我们选择了 FastAPI 作为 Web 框架。FastAPI 是一个现代化且高性能的 Python Web 框架,基于 Starlette 构建,支持异步请求处理和自动生成 API 文档的功能。这使得我们能够快速搭建起一个高效的 API 服务,处理大量并发请求,并且提供清晰的接口文档,方便团队协作和开发。

  • 容器化技术: 我们使用 Docker 进行容器化,将整个 Python 推理服务及其依赖项打包成一个独立的容器。Docker 提供了轻量级、可移植和可扩展的容器化解决方案,使得我们能够实现环境隔离、快速部署和跨平台运行,从而简化了开发、测试和部署流程。

3. 持久化层设计

3.1 数据库设计

在持久化层设计中,我们选择了 PostgreSQL 作为数据库技术,主要基于以下考虑:

  • 功能丰富: PostgreSQL 是一款功能丰富的关系型数据库管理系统,支持复杂的 SQL 查询和事务处理,适合处理各种数据操作需求。
  • 可靠性和稳定性: PostgreSQL 提供了高度的数据完整性和可靠性,具有强大的 ACID 特性,能够保证数据的一致性和持久性。
  • 社区支持: PostgreSQL 拥有庞大的开源社区支持,提供了丰富的插件和扩展,能够满足我们在数据存储和查询方面的需求。
3.2 缓存设计

在缓存设计中,我们选择了 Redis 作为缓存技术,主要基于以下理由:

  • 高性能: Redis 是一款高性能的内存数据库,支持多种数据结构和高效的缓存操作,能够快速响应请求,提高数据访问速度和系统性能。
  • 持久化支持: Redis 支持持久化机制,可以将内存中的数据定期保存到磁盘,保证数据的持久性和可靠性。
  • 灵活性: Redis 提供了丰富的数据结构和功能,如字符串、列表、哈希等,支持丰富的缓存策略和数据操作,能够满足我们在缓存方面的各种需求。
  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值