TechEd服务是公司面向教育行业的平台级建设服务,基于微服务体系,构建了底层平台,且完成了针对上层产品的支持。该服务平台主要支持了阅读类产品、听书类产品、教学管理类、课堂直播类、即时通讯等相关产品。整个产品体系主要是面向K12的2B、2G业务,涵盖了北京、上海等多区多校服务支撑。
当前已告一段落,对整个服务体系用到的技术及架构做一个整理和回顾,与大家一起学习,相互帮助,共同提高。
在TechEd服务体系中,基于SpringCloud自研了TechEd Framework,构建了TechEd微服务开发引擎。该框架在公司内部多个产品中得到应用,其稳定性、效率等都得到了验证。同时基于该框架进行开发时,可以独立构建私有微服务体系,也可以将服务添加到现有的TechEd体系中。
系统架构图
TechEd基础架构平台采用了SpringCloud-Alibaba方案。微服务体系采用SpringCloud方案,服务的注册发现采用了Nacos,同时配置中心也采用了Nacos提供的注册中心机制。
- 基于奈飞的Zuul开发了Api Gateway。支持安全验证、访问认证以及不同级别的安全策略。支持一定的重放攻击等限流措施。
- 配置中心采用Nacos
- 服务注册发现Nacos
- 认证中心基于SpringSecurity进行了二次开发,支持JWT令牌认证,实现了基于RCAC交叉角色访问控制模型,在此基础上实现了权限码机制,可以细分按钮控制权限。
- 微服务矩阵中划分了三种层级:数据管理层、公共技术层以及业务层。目前针对教育行业的图书、听书、直播、录播等相关公共技术已基本搭建完成。
- 对外实现开放平台,产品及功能以接出网关进行了对外开放,以及与第三方实现系统集成。
- 微服务的部署、中间件等服务均以Docker镜像的方式实现。主要使用了Docker Swarm+ Docker Compose的方式实现部署配置自动化及集群化。同时对于DevOps的自动测试、自动构建、持续集成等均有相应的技术方案及应用。
- 集成Dubbo,服务调用采用Dubbo协议。
- Sentinel用于实现流量降级,熔断降级,系统负载保护等。
- 存储方面采用了关系型数据MySql、文档数据库MongoDb、以及分布式文件系统Minio。
- 用户行为及数据埋点,采用了HBase等方案。
- 缓存主要采用了分布式的Redis以及内存的GuavaCache等。
- 全文检索主要采用了Solr8。
网络部署方案
上图为TechEd服务的网络部署逻辑图。
- 服务集群内所有的网络访问均通过公有子网(Public Subnet)实现,同时对于SSH访问,需要通过堡垒机进行跳板访问,堡垒机的网络访问仍然依赖于公有子网。
- 对于Http/Https的请求,均通过ALB(负载均衡器)实现。
- 域名的DNS服务,使用了AWS的Route53实现了类似自建DNS服务的需求。
- 除以上之外的所有服务及应用,全部分散在各自的私有子网(Private Subnet)内部,私有子网是否可以相互访问,需要通过网络配置,但都不允许外网访问。而对于应用服务来说,主要是透过ALB上线外网访问。
- 使用的AWS的云服务如RDS、Redis等,也都建立了各自的私有子网,网络访问权限通过子网配置实现,安全性增强。
- 对于MongoDB、文件服务、Rabbit、索引服务等等,均通过EC2自建方式,网络安全同应用服务一致。
服务架构体系设计
TechEd服务体系主要采用了四层服务架构设计,展现层、通讯层、服务层和数据层。对于展现层,针对不同的产品的又会具有自己的业务设计,属于独立产品,会具有自己的个性化数据存储,业务服务等设计,TechEd主要是提供了大平台能力层,主要是提供了基础能力服务,如用户、阅读、数据存储、文件存储,资源服务等,并不会将所有产品的服务功能全部集成,如产品的个性化推荐服务等。
展现层
- Web前端
主要是采用了Vue/React等前端开发方案,实现前后端分离。同时在现有的业务框架下,所有的Web前端都作为WebApp运行在Windows客户端内,无论是后台管理,还是前端产品,都实现了Web应用管理,同时对后台管理模块实现了用户权限管理。所有类型的用户不再需要通过域名访问。
- 客户端
主要分为Windows、Android、iOS等三端,其中Android、iOS都是基于原生开发,Windows主要是基于Electron方案进行开发。
- H5/微信小程序
- 开放Restful接口
提供开放平台,对外提供标准服务接口,用于向外部提供数据服务。
服务层
服务层主要是基于SpringCloud架构实现的微服务化平台,同时开发了自己的微服务框架,旨在降低子服务的开发难度。
SpringCloud是当下成熟的微服务解决方案,为开发人员提供了一些工具来快速构建分布式系统中的一些常见开发框架,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等,为开发人员提供了一种简单的微服务架构开发方式。在之前的产品方案中,主要采用了奈飞的一些SpringCloud组件,来构建微服务体系,随着SpringCloudAlibaba组件的成熟,目前国内越来越多的产品应用该组件去构建自己的微服务,经过学习和研究,在TechEd平台中也采用Alibaba的组件方案。
上图中描述了SpringCloud的大概运行方式,最外层采用了负载均衡方案,比如自建的方案或者云服务厂商提供的技术如ALB,负载均衡会将请求转发给网关服务集群。网关服务和业务微服务一样,都是一个微服务模块,通过注册中心完成注册,同时各个服务按需求从配置中心获取应用配置,完成服务部署。当请求进入网关后,网关通过注册中心,发现业务服务,并将请求转发给业务服务;业务服务依据需求会进行各个服务之间的服务调用,并完成请求,将结果返回给客户端。
在该方案中,应用到的一些核心组件主要包括以下几方面
- Nacos服务注册及配置中心
- Netflix Zuul网关
- SpringCloud消息总线
- Sentinel
- Ribbon
- SpringCloudStream
- SpringCloudDubbo
- SpringCloudTask
数据层
- MySql,关系型数据库,主要存储业务数据,有事务性要求或者关联性较强的数据。
- MongoDb,存储非结构化数据,以及关联性较弱的数据。
- Minio,当前存储了业务文件信息,以及一些自己设计的业务性文档。
- Solr,索引查询数据。
在当前平台架构中,主要应用的技术点包括以上方面,接下来会发布一些文档来介绍在搭建过程中对一些核心点的学习和使用过程。
本文暂时没有评论,来添加一个吧(●'◡'●)