当前位置:网站首页>【开源框架】国内首个通用云计算框架,任意程序都可做成云计算。
【开源框架】国内首个通用云计算框架,任意程序都可做成云计算。
2022-08-03 22:21:00 【停止重构】
大家好,欢迎来到停止重构的频道。
本期介绍一下我们的自研云计算框架,只需要放入脚本程序,即可让网站系统拥有云计算能力,且脚本程序无需与框架强关联,适合于想要快速扩展云计算能力,或者想对外提供SaaS服务的网站系统。
简单地说,云计算程序是运行时间较长或消耗物理资源较多的程序,如爬虫脚本、音视频转码引擎等,这类程序是不能让后端程序同步执行的(阻塞后端性能), 而是需要由云计算程序部分执行。
网站系统加入云计算程序部分的原因和意义,可以参考我们的往期视频《后端程序整合其他应用》。
框架优点
这个框架做到了:
云计算任务异步执行,不阻塞后端程序;
任务池抢占任务,保证任务有序执行;
完整的异常机制,任务执行意外中断,任务会被其他程序重新执行;
云计算脚本可单独调试,无需与框架强绑定;
新服务器启动即可完成集群扩展,无特殊配置;
这个框架名字叫hive,蜂巢。因为云计算程序本身就好像是一个蜂巢,多个蜜蜂领任务去采蜜,采完蜜回蜂巢再领任务,直到无任务为止。
hive是完全商用免费的,我们也提供了docker镜像,使用手册已经在我们的官网上了 ,代码也已上传到github。
下面将按照以下方面介绍 :
整体工作原理
单个hive服务器的工作原理
整体工作原理
这里把云计算服务器看作hive服务器,后端与hive服务器集群之间,需要搭建RabbitMQ、Redis两个中间服务。
RabbitMQ作为任务池接收后端下发的任务,hive服务器会抢占任务并执行。一台hive服务器可以同时执行多个任务,当开始或完成任务时 hive服务器会通过调用API通知后端服务器。
由于采用了RabbitMQ的ACK机制,如果任务执行期间意外退出,如服务器断电等 ,那么任务会重新被其他hive服务器执行。
Redis作为任务进度的数据池,hive服务器会向Redis更新任务脚本的进度。
实际上就是把任务脚本的命令行log放到Redis中,后端程序可以按照需要从Redis中获取到任务进度 ,所以云计算脚本的开发上相当自由。
另外,Redis也作为hive服务器集群状态的数据池,Redis中会记录多个hive服务器的多个任务进程的状态。如果后端程序需要,也可以从Redis中获得任务状态。
hive服务器集群的扩展是简单的, 新的hive服务器只需要连接相同的RabbitMQ和Redis服务即可,无需其他特别的配置。hive服务器也可以直接回收 ,执行中的任务会被其他hive服务器重新执行。
后端程序对接hive框架实际上是通过RabbitMQ和Redis实现的,如果后端程序使用的我们的Once框架的话,可以使用现成的模块。当然,其他框架也可以作为参考 。
单个hive服务器的工作原理
单个hive服务器由三部分组成:监控程序、引导程序、任务脚本。 我们也做好了docker镜像, 按官方说明即可快速搭建。
监控程序是Python3编写的,主要负责启动和监控引导程序,监控程序会根据配置和引导程序的繁忙程度启动多个引导程序的进程。
当引导程序意外或正常退出后,监控程序会启动新的引导程序进程 。另外,监控程序受supervisor监控,自身意外退出,也会被重新启动。
引导程序是c++编写的, 主要负责监听任务和任务变更指令(监听RabbitMQ), 通过命令行启动任务脚本,引导程序运行期间,会定期向Redis更新自身的状态以便监控程序监控。另外,为了防止长时间运行而造成内存异常等问题,引导程序每执行一次任务都会自动消亡,而非持续接收任务。
任务脚本是可以用任意语言编写的(我们推荐使用python3), 这是因为实际上引导程序是通过命令行启动任务的。所以任务脚本编写时,也可以单独调试, 无需依赖hive框架 。
多个hive服务器间可以挂在同一个共享盘 ,任务脚本放入共享盘即可。
总结
hive框架的详细说明可以登入我们的官网查看, 我们提供单机版的和集群版的docker镜像。
当然,应一些朋友的建议 ,后续我们将会推出一个完整的通用云计算的系统产品, 包括前端、后端部分, 敬请期待。
在我们的三套框架之中 Hive是唯一一个完全从零开始写的,没有依赖任何的基础框架。
因为在2016年构建之初, 确实没有比较好的云计算框架。
当然,这种任务脚本的方式是为了简化云计算脚本开发, 简单放入即可运行, 如果希望更加复杂的云计算程序 ,如某些在线编辑引擎等 ,则可以对hive的引导程序进行二次开发。
Hive的具体编码设计、实现过程和相关基础知识 ,包括线程模型、线程同步、RabbitMQ、Redis、supervisor等 。内容实在有点多, 我们写在了我们已经出版的书《大型网站架构实战》之中, 有兴趣的小伙伴可以翻阅一下。
我们的三套框架没有必然的关联关系 ,任何一套框架都可以单独使用。
边栏推荐
- Research status of target detection at home and abroad
- VLAN实验
- CAS:908007-17-0_Biotin-azide_Biotin azide
- IO线程进程->线程同步互斥机制->day6
- 2022-08-02 mysql/stonedb慢SQL-Q18-内存使用暴涨分析
- How to write a database document management tool based on WPF (2)
- 嵌入式系统:概述
- E-commerce data warehouse ODS layer-----log data loading
- Shell编程的条件语句
- node连接mysql数据库报错:Client does not support authentication protocol requested by server
猜你喜欢
Embedded systems: overview
E-commerce data warehouse ODS layer-----log data loading
一些思考:腾讯股价为何持续都低
CAS:1260586-88-6_Biotin-C5-Azide_Biotin-C5-Azide
斩获双奖|易知微荣获“2021中国数字孪生解决方案优秀供应商”“中国智能制造优秀推荐产品”双奖项!
嵌入式系统:时钟
目标检测技术研究现状及发展趋势
CAS:122567-66-2_DSPE-Biotin_DSPE-Biotin
Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D 论文笔记
【进阶自动化测试】一文1000教你如何用Postman做接口自动化测试
随机推荐
Makefile
for loop exercises
[b01lers2020]Life on Mars
noip初赛
东西向和南北向通信的统一
超级实用网站+公众号合集
488. Zuma Game
Cisco ike2 IPSec configuration
Adobe是什么?
2022-08-03 Oracle executes slow SQL-Q17 comparison
HCIP第十六天
Embedded Systems: Clocks
October 2019 Twice SQL Injection
UVa 1025 - A Spy in the Metro (White Book)
4年工作经验,多线程间的5种通信方式都说不出来,你敢信?
LabVIEW代码生成错误 61056
如何创建一个Web项目
[N1CTF 2018]eating_cms
Kubernetes入门到精通-Operator 模式
Conditional Statements for Shell Programming