[CTMS]基于Fastapi的微服务架构量化交易管理系统数据请求流程解析

107 阅读4分钟

微服务架构是一种软件开发架构风格,它将应用程序构建为一组小型服务,这些服务围绕特定的业务功能进行组织和开发。每个服务都可以独立部署、扩展和更新,并且通常拥有自己的轻量级进程和数据库,服务之间通过定义良好的API进行通信。这种架构风格旨在提高应用程序的可维护性、可扩展性和灵活性。

1. 微服务架构的逻辑

  • 服务分解:将应用程序分解为一组小型、独立的服务,每个服务负责一部分特定的业务功能。
  • 独立部署:每个服务可以独立部署,不依赖于其他服务的部署周期。
  • 技术多样性:不同的服务可以使用不同的技术栈,根据服务的需求和团队的专长选择最合适的技术。
  • 服务发现:服务之间通过服务发现机制来相互识别和通信,通常使用API网关来管理服务间的通信。
  • 容错性:单个服务的故障不会导致整个系统的崩溃,系统具有更高的容错性。
  • 可扩展性:可以根据需求独立扩展单个服务,而不需要扩展整个应用程序。
  • 敏捷性:小团队可以独立开发和维护服务,加快开发速度和部署频率。

2. ctms-gateway(网关服务)

ctms-gateway作为系统的入口点,负责处理所有外部请求。它的主要功能包括:

  • 路由:将请求路由到适当的后端服务。
  • 负载均衡:在多个服务实例之间分配请求,以提高系统的可用性和响应速度。
  • 认证和授权:确保只有经过认证和授权的用户才能访问特定的服务。
  • 协议转换:在不同的服务之间转换不同的通信协议,例如将HTTP请求转换为gRPC调用。
  • 聚合:从多个服务聚合数据,然后将统一的响应返回给客户端。

3. ctms-db(数据库服务)

ctms-db负责管理应用程序的数据存储。在微服务架构中,每个服务通常都有自己的数据库,这样可以减少服务间的耦合,提高系统的可维护性和可扩展性。ctms-db的主要功能包括:

  • 数据持久化:存储和管理应用程序的数据。
  • 数据访问:提供API供其他服务查询和更新数据。
  • 数据安全:确保数据的安全性和隐私性。
  • 数据备份和恢复:定期备份数据,并在需要时恢复数据。

4. 微服务之间的通信

在微服务架构中,服务之间通常通过轻量级的通信协议(如HTTP/REST、gRPC)进行通信。ctms-gateway作为API网关,管理服务间的通信,提供统一的API接口给外部客户端。服务之间的通信可以是同步的(如请求-响应模式)或异步的(如消息队列)。

5. 实现

以获取特殊指标为例,ctms-gateway中的实现:

@app.get("/special/index", summary="获取特殊指标列表", tags=["Special Index"])
async def get_special_index_list(request: Request):
    url = CTSM_DB_URL + "crypto/info" + "/special/index"
    return await fetch(url, dict(request.query_params))

ctms-gateway中,我们定义了一个API端点来获取特殊指标列表。这个端点通过request.query_params获取查询参数,直接转发到ctms-db

@app.get("/special/index", summary="获取特色指标列表", tags=["特色指标"])
async def get_special_index_list(p: params.SpecialIndexParams = Depends(), auth: Auth = Depends(AllUserAuth())):
    datas, count = await crud.SpecialIndexDal(auth.db).get_datas(**p.dict(), v_return_count=True)
    return SuccessResponse(datas, count=count)
    

ctms-db中通过异步查询数据的方式从数据库读取数据,然后返回。

6. 总结

在上述实现中,ctms-gateway 和 ctms-db 之间的通信是同步的,但是是异步方式实现,通过HTTP请求-响应模式进行。 ctms-gateway 接收到客户端的请求后,将请求转发给ctms-db ,然后等待 ctms-db 的响应,并将响应返回给客户端。这种通信方式简单直观,适用于请求-响应模式的场景。然而,在某些场景下,例如需要异步处理或解耦服务之间的依赖时,可以考虑使用消息队列等异步通信方式,比如ctsm-task模块的通讯就是以redis作为消息队列实现。通过这种架构,CTMS系统可以实现高度的模块化和灵活性,每个服务可以独立开发、部署和扩展,从而提高整个系统的开发效率和运行稳定性。

7. 联系方式

  • 公众号:ScienceStudio

公众号二维码 1.png