程序语言和框架
前端语言和框架没啥特别要交代的,前端团队自己拿的主意 --- vuejs。
golang框架
我们公司内部后端团队主要语言是golang,web框架选项比较纠结,一个是开源社区的web框架 gin,在上云前用的框架, 另外就是一个选择就是公司内部的远程调用开发框架trpc。gin 框架的功能和有点毋需赘述,可自行上github了解。我们最终选择了trpc-go为trpc框架的golang版本。
为何选择trpc框架?
为什么我们选择内部自研的RPC框架, 而不是开源成熟框? 答案非常简单因为该框架是公司老板主推的,公司为了形成统一的微服务框架而自研了该框架,该框架有如下优点:
- 多语言:框架覆盖主流编程语言,方便不同技术团队协作
- 架构开放:支持与存量系统对接,包括协议与服务治理
- 性能与成熟度高
java框架
该系统由多个研发团队合作开发,除了golang语言之外,另外2个团队的后端语言是java,使用的框架是springcloud。
腾讯微服务平台
语言框架选型之后,我们要考虑运行方式以减少开发和运维成本,因此需要期望支持:
- 服务无状态运行
- 配置管理(不同环境配置、不同版本配置)
- 能提供日志服务
- 服务监控报警
- 支持配置回滚、支持应用回滚
- 弹性伸缩
使用容器的方式可以分离应用程序和运行环境,以减少开发/测试/生产环境切换成本。那选择哪个容器管理平台呢?
腾讯云容器服务(Tencent Kubernetes Engine,TKE),基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,基本上解决了上述几个问题,但如果我们选型了腾讯服务平台(Tencent Service Framework,以下简称 TSF),TSF是底层支持运行的是TKE或者是虚拟机,做了更多的能力封装,集成springcloud、service mash,支持更多的服务管理能力, 如下图:
准入/API网关
考虑到身份准入和不同团队之间的API服务发布/调用,由于tsf对trpc-go支持不够友好,springcloud 与trpc-go协议并不兼容,因此tsf无法解决不同语言之间的服务管理,所以我们选择部署内部网关服务,来解决身份准入和API服务管理。
存储选型
关系型数据库
业务重要数据存储,选择了基本兼容mysql的分布式数据库 TDSQL MySQL版, 是部署在腾讯云上的一种支持自动水平拆分、Shared Nothing 架构的分布式数据库,架构图如下:
nosql
redis 缓存
高可用版本,一主一备份,架构图如下:
mongodb
网关业务数据存储
elasticsearch
网关日志存储,接口监控数据源
对象存储COS
一些文件,图片存储,大对象的存储,前端资源的存储可开启cos的DNS加速。
消息队列-TDMQ
用于服务间解偶
DevOps工具-coding
coding即是代码托管平台,也是持续集成工具,使用该工具能极大减少运维维护成本,支持快速敏捷迭代。
web应用防火墙-WAF
最后为了系统安全,可以考虑入口加防火墙,使用 WAF 均可有效防御以及预防,保障企业网站的系统以及业务安全。