茉莉炒股微服务化改造

技术文档网 2021-06-24

0 序言

上篇文档提到了一个很严重的问题,就是并发压测的性能不忍直视。抛开硬件因素,这也是所有单机系统的通病。如何能有效扩展服务器的性能,支持高并发高可用,按现在业内通用的解决方案,要走搭建分布式架构,实施微服务化之路。

有两个可落地的技术方案,Dubbo 和 SpringCloud,研究对比后选择 SpringCloud。

1 分布式架构

这是茉莉炒股当前的应用模块交互图,

明显太糙了,各模块虽各司其职,但这种单机架构扩展性太差,存在严重的瓶颈。

使用 SpringCloud 技术改进后的茉莉炒股应用架构

这里初步完成了我理想中分布式的框架搭建:

  • Nginx 负责负载均衡,为了避免单点故障,可做成 Nginx 集群
  • Zuul 作为网关,反向代理各 Tomcat 服务器,路由到具体服务,Hystrix 做熔断降级
  • 使用 Eureka 做服务注册治理中心,同时也可做成集群配置。Zuul 将从 Eureka 获取发布的微服务访问地址
  • Tomcat 作为微服务的 WEB 容器,同时也可做成集群配置。将前后端的服务完全分开,各自独立部署前端微服务调用后端微服务,后端微服务之间也会有相互调用,调用技术采用 Feign
  • 每个微服务模块通过 SpringCloud Config 统一配置
  • 使用 zipkin 来追踪服务链路调用
  • 操作 Redis 缓存和 MySQL 之前通过 RabbitMQ 作消息总线,应对大并发的情况
  • 依然使用 Redis 作为 Python 爬虫和 Java Server 异构系统之间的消息服务器
  • MySQL 数据库其实也可以按服务模块进行拆分,同时也可做成集群配置

2 服务化实现

有了明确的应用架构,接着就是微服务的具体实施了。

之前的单一应用架构代码,基本是按照 HTTP 请求 API --> 由对应的 Controller 接受处理 --> 调用相关 Service --> 具体的 DAO 操作数据库,这样的链路来完成,服务化则需要根据产品特性来划分其服务模块。我将茉莉炒股的产品功能做了重新梳理,划分为5个模块,即对应的5个微服务

  • 用户服务 :负责用户的信息及资产管理
  • 股票服务 :负责港股、美股的列表展示,及个股的详细展示
  • 订单服务 :负责用户当前持有股票,当日股票交易记录,历史股票成交记录的管理
  • 交易服务 :负责股票新订单的提交,股票成交的处理。通过 RabbitMQ 异步向 Redis 写入订单数据。该服务也是应对大并发需横向扩展的核心服务
  • 其他服务 :一些不是核心服务的功能,比如应用的信息通知,即小程序页面请求的跑马灯消息等

相关代码开源,可见 git 仓库 OkiStockCloud 目录。

3 容器部署

实现了产品的微服务化后,最后就是应用的部署。

之前我是在我的 mac 开发机上搭建了 JAVA Server 和 Python 的运行环境,然后在阿里云服务器 CentOS 上又要整一套运行环境,费时费力。现在采用 Docker,将所有的微服务模块都部署在 Docker 容器里面,弹性伸缩,以后的扩展也将变得很方便。

(我将使用 k8s 来做服务编排,此处文档待更新)

相关文章

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod

随机推荐

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod