技术选型-语言、框架和中间件

2022-05-02 09:36:42 浏览数 (3)

程序语言和框架

前端语言和框架没啥特别要交代的,前端团队自己拿的主意 --- vuejs。

golang框架

我们公司内部后端团队主要语言是golang,web框架选项比较纠结,一个是开源社区的web框架 gin,在上云前用的框架, 另外就是一个选择就是公司内部的远程调用开发框架trpc。gin 框架的功能和有点毋需赘述,可自行上github了解。我们最终选择了trpc-go为trpc框架的golang版本。

为何选择trpc框架?

为什么我们选择内部自研的RPC框架, 而不是开源成熟框? 答案非常简单因为该框架是公司老板主推的,公司为了形成统一的微服务框架而自研了该框架,该框架有如下优点:

  1. 多语言:框架覆盖主流编程语言,方便不同技术团队协作
  2. 架构开放:支持与存量系统对接,包括协议与服务治理
  3. 性能与成熟度高

java框架

该系统由多个研发团队合作开发,除了golang语言之外,另外2个团队的后端语言是java,使用的框架是springcloud。

腾讯微服务平台

语言框架选型之后,我们要考虑运行方式以减少开发和运维成本,因此需要期望支持:

  1. 服务无状态运行
  2. 配置管理(不同环境配置、不同版本配置)
  3. 能提供日志服务
  4. 服务监控报警
  5. 支持配置回滚、支持应用回滚
  6. 弹性伸缩

使用容器的方式可以分离应用程序和运行环境,以减少开发/测试/生产环境切换成本。那选择哪个容器管理平台呢?

腾讯云容器服务(Tencent Kubernetes Engine,TKE),基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,基本上解决了上述几个问题,但如果我们选型了腾讯服务平台(Tencent Service Framework,以下简称 TSF),TSF是底层支持运行的是TKE或者是虚拟机,做了更多的能力封装,集成springcloud、service mash,支持更多的服务管理能力, 如下图:

image.pngimage.png

准入/API网关

考虑到身份准入和不同团队之间的API服务发布/调用,由于tsf对trpc-go支持不够友好,springcloud 与trpc-go协议并不兼容,因此tsf无法解决不同语言之间的服务管理,所以我们选择部署内部网关服务,来解决身份准入和API服务管理。

存储选型

关系型数据库

业务重要数据存储,选择了基本兼容mysql的分布式数据库 TDSQL MySQL版, 是部署在腾讯云上的一种支持自动水平拆分、Shared Nothing 架构的分布式数据库,架构图如下:

image.pngimage.png

nosql

redis 缓存

高可用版本,一主一备份,架构图如下:

image.pngimage.png

mongodb

网关业务数据存储

image.pngimage.png

elasticsearch

网关日志存储,接口监控数据源

image.pngimage.png

对象存储COS

一些文件,图片存储,大对象的存储,前端资源的存储可开启cos的DNS加速。

消息队列-TDMQ

用于服务间解偶

DevOps工具-coding

coding即是代码托管平台,也是持续集成工具,使用该工具能极大减少运维维护成本,支持快速敏捷迭代。

web应用防火墙-WAF

最后为了系统安全,可以考虑入口加防火墙,使用 WAF 均可有效防御以及预防,保障企业网站的系统以及业务安全。

0 人点赞