1. 历代文学简介
历代文学(https://literature.sinhy.com/#/literature?__c=1000,微信小程序可直接搜索“历代文学”)是一个由两个人(一个后端和一个前端)开发的文学网站,是一个收录从古到今、以及古今中外所有历史名人作品的网站。网站从上线至今差不多1年时间,从未有过大肆宣传推广,累计访问人次却高达近百万次!
收录古今中外几乎所有名人的名言高达130万条!
2. 历代文学技术生态
历代文学网站整个技术生态由我本人总体架构设计。简单来讲,这是一个平台级的微服务架构,以云原生的概念来讲,可能算得上60%左右的云原生。
2.1 云原生概念
前面,我们讲述了什么是云原生。在这里我们就不再深入探讨什么是云原生了,简单回顾下云原生的概念就好,好让大家对历代文学后续的整个技术生态介绍能有个整体概况。
云原生指构建和运行应用以充分利用通过云技术交付模式交付的分布式计算。云原生应用旨在充分利用云技术平台特有的可扩展性、弹性和灵活性优势。
2.2 服务器&运行环境
历代文学应用,它只是整个云平台应用生态的一个子应用而已,整个云平台技术生态是一个相对庞大的体系。它牵涉到云原生很多必不可少的组件如微服务、基础设施、容器、网关等内容。
2.2.1 服务器硬件环境
整个云平台最终是部署到2台服务器中
-
服务器1:80核,128G内存,18T存储空间,6个万兆级网口,该服务器是华为2U机架式服务器(V5 2288H)硬件环境相对较好,充当整个云平台的核心压力。
-
服务器2:48核,128G内存,3T存储空间,该服务器主要运行一些云平台相关但不必要一些小应用,如大后台管理,访问统计,邮件服务等一些公司运营方面的小应用。
2.2.2 服务器1划出的虚拟机
这两台服务器,通过ESXI(vmvare)虚拟化技术,将其划分为了若干个业务和基础环境需要的虚拟机。其中服务器1主要被虚拟化为以下节点,如下图:
- IM集群:主要充当整个平台的即时消息架构,可横向伸缩,所有需要跟客户端即时通讯的,都通过IM集群这两个节点进行交互。
- 分布式存储集群:充当整个平台的大数据存取服务,可横向伸缩,整个平台,所有子应用,需要用到上传的,都靠这个大数据平台统一支撑。
- 数据库集群:充当整个平台业务的结构化数据存取服务。
- 基础环境集群:该集群主要用于搭建整个分布式微服务体系的基础环境,如注册中心集群、缓存集群、分布式任务调度集群、消息队列集群等。
- 业务应用:整个平台的所有业务子应用全部部署到业务应用节点,业务应用节点是可以根据业务流量无限动态伸缩的,采用K8S容器化管理和编排部署。
- 网关:充当整个云平台的网关,统一转发和处理所有客户端请求到各业务实例,还负责客户端的安全加密通信,以及监听客户端的暴力请求,发现存在暴力的客户端,将对其采取ip封锁等惩罚机制。
2.3 技术生态介绍
历代文学和整个云平台体系所使用的技术生态,将主要从操作系统、微服务和容器化三个方向进行阐述。
2.3.1 操作系统
经过多方面的对比,最终果断从centos、ubuntu等系统中跳了出来,选择了一款国产化的操作系统openEuler,别问我太多为什么,我在这里也不是为了宣传它,只是简单略过介绍以下。看下它的诞生和发展就知道了:
2010-2012,EulerOS诞生:华为内部高性能计算项目EulerOS首次发布。
2013-2016,EulerOS1.x系列:华为内部ICT产品首次规模商用,包括存储产品、无线控制器、CloudEdge等。
2016-,EulerOS 2.x系列:华为内部云产品商用以及ICT产品规模商用,包括消费者云、华为公有云、存储产品、无线产品、云核心网等。
2019年12月31日,华为作为创始企业发起了openEuler开源社区,并将EulerOS相关的能力贡献到openEuler社区,后续EulerOS将基于openEuler进行演进。
2021年9月25日,华为正式发布操作系统 openEuler 欧拉。 2021年11月5日消息,openEuler Summit 将于11 月 9 日-10 日在北京召开。此次峰会由欧拉开源社区举办,华为作为战略合作单位。 2022年10月2日消息,openEuler22.09 正式版发布:实现欧拉与鸿蒙的互联互通。 2022年12月16日消息,openEuler 宣布全球下载量突破 100万,开源欧拉将在12月28日-29日举行操作系统产业峰会2022&openEuler Summit 2022。
截至2022年12月底,开源欧拉社区企业成员数超过600家,商业累计装机部署数量达300万套,在中国服务器操作系统的新增市场中,欧拉的市场份额达25%。
2023年4月,经过openEuler委员会全体会议的批准,openEuler工业领域操作系统筹备委员会正式成立。
欧拉开源社区已吸引近万名开发者,近百个特别兴趣小组,300家企业加入社区,汇聚处理器、整机、基础软件、应用软件、行业用户等全产业链伙伴。国内主流的操作系统厂商均推出基于欧拉的商业发行版,应用于政府、运营商、金融、能源、电力、交通等行业核心系统。欧拉商用已经突破60万套,有望实现中国服务器领域新增市场份额第一。
看到这里,你们还不心动吗?我为什么要选择它,因为它高性能,占用资源低,每次重启只需要不到10秒时间,社区活跃,发展迅猛!能不用它吗?
2.3.2 微服务技术生态
中间件名称 | 版本 | 简介 |
---|---|---|
Nacos | 2.4.0 | 服务器注册与发现 |
Rocketmq | 5.3.0 | 异步消息队列 |
Redis | 7.2 | 高频访问数据缓存 |
redisson | 3.33.0 | 基于redis的分布式数据结构应用接口 |
spring-boot | 3.3.0 | spring应用生态的基础 |
spring-cloud | 2023.0.3 | spring最新版本微服务基础 |
spring-cloud-alibaba | 2023.0.1.2 | 阿里的基于nacos实现的微服务注册与发现 |
spring-cloud-starter-gateway | 4.1.5 | 微服务网关 |
postgresql | 16.3 | PG数据集群的数据库版本 |
minio | 8.5.11 | 基于S3标准的 分布式文件存取中间件 |
2.3.3 应用实例划分介绍
实例名 | 实例个数 | 实例介绍 |
---|---|---|
nacos应用 | 2 | 微服务服务注册发现中间件实例 |
rocketmq应用 | 4 | 2m-2s-sync即2主2从集群模式 |
即时通讯 | 2 | 无任何第三方接口依赖,纯自己打造的IM分布式即时通讯组件 |
分布式文件服务 | 2 | 平台级的分布式文件存取服务实例 |
头像应用 | 1 | 用于个人中心,用于自己设置头像,或者选择内置的头像 |
历代文学应用 | 1 | 历代文学自身业务功能的应用实例 |
辞典应用 | 1 | 历代文学的辞典模块功能,即为该应用实例提供的服务 |
统一认证中心 | 1 | 整个平台的SSO单点登录统一认证服务 |
个人中心 | 1 | 整个平台的用户个人中心应用,个人设置,修改密码,头像等基础功能 |
系统应用 | 1 | 提供平台级基础配置功能服务 |
国际化应用 | 1 | 每个实例都支持国际化切换,每个实例的国际化配置是通过该应用处理 |
访问统计服务 | 1 | 对用户的行为进行统一统计分析的实例 |
后台管理应用 | 1 | 整个云平台的统一大后台管理系统实例,负责权限分配,可查看访问流量等所有管理功能 |
平台守护应用 | 1 | 负责对所有登录用户的会话进行监听,监听其过期时间 |
电影应用 | 1 | 这是整个平台的另一个子应用(电影应用),可免费看电影,在官网可以看到入口 |
官网应用 | 1 | 官网入口应用实例 |
网关应用 | 1 | 整个云平台所有业务流量统一进出口 |
2.3.4 应用的容器化部署
整个云平台下,所有微服务实例,以及大部分基础设施环境都采用容器化部署,目前规模较小,暂时采用的docker部署,后续会慢慢切换到k8s容器自动化管理和编排!如下图,可以看到历代文学应用也在其中,通过docker容器化部署模式运行!
3. 总结
好拉,以上就是历代文学子应用背后所涉及的整个技术生态,及其整个技术架构体系简单介绍,这完完全全是由两个人联手打造的,我主要负责后端整体架构设计,另一个伙伴负责前端整体架构设计。
这个网站为了后续长远发展规划,背后很多技术都是自主研发,包括IM分布式即时通讯组件,可用于开发聊天(历代文学里面进去,右上角就可以看到有个聊天窗口),消息通知等各种即时通讯功能。以及自主研发的分布任务调度组件,数据库低代码组件(一个真正做到零sql语句的数据库快速开发的低代码工具),前后端加密通讯组件等。
如下这段代码,是查询历代文学的作者分页列表,展示的是一个类似原生SQL写法的写法,涉及3个表的关联查询,看着是否会觉得优雅?
NuwadQuery nq = new NuwadQuery();
nq.select(LiteratureAuthor2Table.ID
, LiteratureAuthor2Table.NAME
, LiteratureAuthor2Table.ALIAS
, LiteratureAuthor2Table.EN_NAME
, LiteratureAuthor2Table.DYNASTY_ID
, LiteratureAuthor2Table.DYNASTY_NAME
, LiteratureAuthor2Table.WRITING_COUNT
, LiteratureAuthor2Table.CI_COUNT
, LiteratureAuthor2Table.QU_COUNT
, LiteratureAuthor2Table.SANWEN_COUNT
, LiteratureAuthor2Table.WYW_COUNT
, LiteratureAuthor2Table.VERSE_COUNT
, LiteratureAuthor2Table.BOOK_COUNT
, LiteratureAuthor2Table.QUOTE_COUNT)
.select(SysUserInfoTable.AVATAR, SysUserInfoTable.WX_HEADIMGURL, SysUserInfoTable.AVATAR_TYPE, SysUserInfoTable.PROFILE)
.select(SysOccupationTable.NAME, SysOccupationTable.EN_NAME)
.from(LiteratureAuthor2Table.class)
.leftJoin(SysUserInfoTable.class).on(LiteratureAuthor2Table.ID).eq(SysUserInfoTable.ID)
.leftJoin(SysOccupationTable.class).on(LiteratureAuthor2Table.OCCUPATION).eq(SysOccupationTable.ID);
如下图,是历代文学前后端加密的通讯方式,连请求地址都是加密的,且通讯密钥是动态更新的。
响应内容加密:
好了,本期内容就到这里,有兴趣的小伙伴,可以关注我,后续我会陆续分享整个云平台下用到很多精湛的技术,包括自主研发的中间件等各类组件,也可以评论区留言想期待哪方面的技术实现分享,这对想系统化学习微服务架构及并应用于实战的朋友是个好的机会,因为这是一个活生生的云产品案例!感谢大家拜读本文~